Ai ORA: footer links (#1261) #2534
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy Hugo site to Pages | |
| on: | |
| # Runs on pushes targeting the default branch | |
| push: | |
| branches: | |
| - main | |
| # Allows manual triggering from GitHub Actions tab | |
| workflow_dispatch: | |
| # Permissions for deployment | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| # Prevents multiple deployments from interfering | |
| concurrency: | |
| group: "pages" | |
| cancel-in-progress: false | |
| # Default to bash | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| # Build job | |
| build: | |
| runs-on: ubuntu-latest | |
| env: | |
| HUGO_VERSION: 0.147.5 | |
| HUGO_ENVIRONMENT: production | |
| TZ: America/Los_Angeles | |
| steps: | |
| - name: Install Hugo CLI | |
| run: | | |
| wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ | |
| && sudo dpkg -i ${{ runner.temp }}/hugo.deb | |
| - name: Install Dart Sass | |
| run: | | |
| npm install -g sass | |
| sass --version | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Setup Pages | |
| id: pages | |
| uses: actions/configure-pages@v5 | |
| - name: Install Node.js dependencies | |
| run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" | |
| - name: Restore Hugo Cache | |
| id: cache-restore | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: | | |
| ${{ runner.temp }}/hugo_cache | |
| key: hugo-${{ github.run_id }} | |
| restore-keys: | |
| hugo- | |
| - name: Configure Git | |
| run: git config core.quotepath false | |
| - name: Build with Hugo | |
| run: | | |
| hugo \ | |
| --gc \ | |
| --minify \ | |
| --baseURL "${{ steps.pages.outputs.base_url }}/" \ | |
| --cacheDir "${{ runner.temp }}/hugo_cache" | |
| - name: Shrink artifact for GitHub Pages 1GB limit | |
| run: | | |
| set -euo pipefail | |
| # Drop unused full-size asset copies if any still got published (processed _hu_ siblings remain). | |
| python3 - <<'PY' | |
| from pathlib import Path | |
| removed = 0 | |
| bytes_freed = 0 | |
| for p in Path("public").rglob("*"): | |
| if not p.is_file(): | |
| continue | |
| if p.suffix.lower() not in {".png", ".jpg", ".jpeg", ".webp"}: | |
| continue | |
| if "_hu_" in p.name: | |
| continue | |
| if p.stat().st_size < 400_000: | |
| continue | |
| stem = p.stem | |
| siblings = list(p.parent.glob(f"{stem}_hu_*")) | |
| if siblings: | |
| bytes_freed += p.stat().st_size | |
| p.unlink() | |
| removed += 1 | |
| print(f"removed {removed} full-size originals ({bytes_freed/1e6:.1f} MB)") | |
| PY | |
| sudo apt-get update -qq | |
| sudo apt-get install -y -qq jpegoptim optipng pngquant | |
| find public -type f \( -iname '*.jpg' -o -iname '*.jpeg' \) -size +300k -print0 \ | |
| | xargs -0 -r jpegoptim --strip-all --max=75 --quiet || true | |
| find public -type f -iname '*.png' -size +500k -print0 \ | |
| | xargs -0 -r pngquant --quality=65-85 --skip-if-larger --ext .png --force || true | |
| find public -type f -iname '*.png' -size +500k -print0 \ | |
| | xargs -0 -r optipng -o2 -quiet || true | |
| echo "Artifact size after shrink:" | |
| du -sh public | |
| python3 - <<'PY' | |
| from pathlib import Path | |
| total = sum(p.stat().st_size for p in Path("public").rglob("*") if p.is_file()) | |
| limit = 1024 ** 3 | |
| print(f"exact bytes={total} ({total/limit:.2%} of 1GiB limit)") | |
| if total >= limit: | |
| raise SystemExit(f"public/ still exceeds 1GiB ({total} >= {limit})") | |
| PY | |
| - name: Save Hugo Cache | |
| id: cache-save | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: | | |
| ${{ runner.temp }}/hugo_cache | |
| key: ${{ steps.cache-restore.outputs.cache-primary-key }} | |
| - name: Upload build artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./public | |
| # Deployment job - Publishes the site to GitHub Pages | |
| deploy: | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 | |
| with: | |
| token: ${{ secrets.GH_PAGES_TOKEN }} |