# Builds the website on every push to main and publishes it when the SITE_* secrets are set; see deploy/README.md. name: site on: push: branches: [main] workflow_dispatch: jobs: site: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: prefix-dev/setup-pixi@v0.9.4 with: pixi-version: v0.69.0 - name: Build the site run: pixi run python tools/site.py --out _site - name: Publish the site env: SITE_HOST: ${{ secrets.SITE_HOST }} SITE_USER: ${{ secrets.SITE_USER }} SITE_PATH: ${{ secrets.SITE_PATH }} SITE_SSH_KEY: ${{ secrets.SITE_SSH_KEY }} run: | if [ -z "$SITE_HOST" ]; then echo "SITE_HOST is not set, so the site was built but not published." exit 0 fi command -v rsync >/dev/null || (sudo apt-get update && sudo apt-get install -y rsync) mkdir -p ~/.ssh printf '%s\n' "$SITE_SSH_KEY" > ~/.ssh/site_key chmod 600 ~/.ssh/site_key ssh-keyscan -H "$SITE_HOST" >> ~/.ssh/known_hosts rsync -az --delete -e "ssh -i ~/.ssh/site_key" _site/ "$SITE_USER@$SITE_HOST:$SITE_PATH/"