diff --git a/JoshHeaps.Net/.gitea/workflows/deploy.yml b/JoshHeaps.Net/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..0fff19e --- /dev/null +++ b/JoshHeaps.Net/.gitea/workflows/deploy.yml @@ -0,0 +1,75 @@ +# .gitea/workflows/deploy.yml +name: Build and Deploy + +on: + push: + branches: [ "master" ] + workflow_dispatch: {} + +concurrency: + group: deploy-${{ gitea.ref }} + cancel-in-progress: true + +jobs: + build-deploy: + runs-on: ubuntu-latest + + steps: + - name: Install deploy tools + run: | + apt-get update + apt-get install -y --no-install-recommends rsync openssh-client + + - 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: Prepare SSH + env: + SSH_KEY: ${{ secrets.SSH_KEY }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + run: | + set -euo pipefail + PORT="${SSH_PORT:-22}" + install -m 700 -d ~/.ssh + printf '%s\n' "$SSH_KEY" > ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key + ssh-keyscan -p "$PORT" "$SSH_HOST" >> ~/.ssh/known_hosts 2>/dev/null + + - name: Rsync to server + env: + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + SSH_USER: ${{ secrets.SSH_USER }} + TARGET_DIR: ${{ secrets.TARGET_DIR }} + run: | + set -euo pipefail + PORT="${SSH_PORT:-22}" + rsync -az --delete \ + -e "ssh -p $PORT -i ~/.ssh/deploy_key -o StrictHostKeyChecking=yes" \ + publish/ "$SSH_USER@$SSH_HOST:$TARGET_DIR/" + + - name: Restart service + env: + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + SSH_USER: ${{ secrets.SSH_USER }} + SERVICE_NAME: ${{ secrets.SERVICE_NAME }} + run: | + set -euo pipefail + PORT="${SSH_PORT:-22}" + ssh -p "$PORT" -i ~/.ssh/deploy_key "$SSH_USER@$SSH_HOST" \ + "sudo systemctl daemon-reload \ + && sudo systemctl restart '$SERVICE_NAME' \ + && systemctl --no-pager status '$SERVICE_NAME' --lines=0" \ No newline at end of file