name: Deploy Media Server on: push: branches: [ "master" ] workflow_dispatch: {} permissions: contents: read concurrency: group: deploy-media-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '8.0.x' - name: Restore run: dotnet restore - name: Publish run: dotnet publish -c Release -o ./publish - name: Upload artifact uses: actions/upload-artifact@v4 with: name: media-publish path: ./publish deploy: needs: build runs-on: ubuntu-latest environment: production steps: - name: Download artifact uses: actions/download-artifact@v4 with: name: media-publish path: publish - name: Prepare SSH run: | if [ -z "${{ secrets.MEDIA_SSH_KEY }}" ]; then echo "Error: MEDIA_SSH_KEY secret is not set" exit 1 fi if [ -z "${{ secrets.SSH_HOST }}" ]; then echo "Error: SSH_HOST secret is not set" exit 1 fi mkdir -p ~/.ssh chmod 700 ~/.ssh echo "${{ secrets.MEDIA_SSH_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -p "${{ secrets.SSH_PORT || 22 }}" "${{ secrets.SSH_HOST }}" >> ~/.ssh/known_hosts - name: Rsync to nginx server run: | rsync -az --delete -e "ssh -p ${{ secrets.SSH_PORT || 22 }} -i ~/.ssh/id_rsa" \ publish/ ${{ secrets.MEDIA_DEPLOY_USER }}@${{ secrets.SSH_HOST }}:/tmp/media-app-deploy/ - name: Copy to media server and restart run: | ssh -i ~/.ssh/id_rsa -p "${{ secrets.SSH_PORT || 22 }}" \ ${{ secrets.MEDIA_DEPLOY_USER }}@${{ secrets.SSH_HOST }} \ "ssh josh@10.0.0.180 'mkdir -p /tmp/media-app-temp' && \ scp -r /tmp/media-app-deploy/* josh@10.0.0.180:/tmp/media-app-temp/ && \ ssh josh@10.0.0.180 'sudo rsync -av --delete /tmp/media-app-temp/ /var/www/media-app/ && sudo systemctl restart media-app && rm -rf /tmp/media-app-temp' && \ rm -rf /tmp/media-app-deploy"