Deploy Next.js site and DocumentDB packages to Pages #65
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
| # Workflow for building Next.js site and downloading DocumentDB packages, then deploying to GitHub Pages | |
| name: Deploy Next.js site and DocumentDB packages to Pages | |
| on: | |
| # Runs on pushes targeting the default branch | |
| push: | |
| branches: ["main"] | |
| # Allows you to run this workflow manually from the Actions tab | |
| workflow_dispatch: | |
| # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. | |
| # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. | |
| concurrency: | |
| group: "pages" | |
| cancel-in-progress: false | |
| jobs: | |
| # Build job | |
| build: | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install required packages | |
| run: | | |
| until sudo apt-get update; do sleep 1; done | |
| sudo apt-get install -y createrepo-c dpkg-dev dpkg-sig gnupg2 python3 | |
| - name: Setup GPG | |
| id: import_gpg | |
| uses: crazy-max/ghaction-import-gpg@v6 | |
| with: | |
| gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | |
| continue-on-error: true | |
| - name: Set GPG fingerprint and version config | |
| run: | | |
| # Configure GPG signing | |
| if [ -n "${{ steps.import_gpg.outputs.fingerprint }}" ]; then | |
| echo "GPG_FINGERPRINT=${{ steps.import_gpg.outputs.fingerprint }}" >> $GITHUB_ENV | |
| echo "✅ GPG key loaded successfully" | |
| echo " Fingerprint: ${{ steps.import_gpg.outputs.fingerprint }}" | |
| echo " Key ID: ${{ steps.import_gpg.outputs.keyid }}" | |
| echo " User ID: ${{ steps.import_gpg.outputs.name }} <${{ steps.import_gpg.outputs.email }}>" | |
| else | |
| echo "⚠️ No GPG key configured - packages will not be signed" | |
| echo " To enable signing, add GPG_PRIVATE_KEY to repository secrets" | |
| fi | |
| # Configure DocumentDB version (can be overridden by repository variables) | |
| echo "DOCUMENTDB_VERSION=${{ vars.DOCUMENTDB_VERSION || 'latest' }}" >> $GITHUB_ENV | |
| echo "MULTI_VERSION=${{ vars.MULTI_VERSION || 'true' }}" >> $GITHUB_ENV | |
| - name: Detect package manager | |
| id: detect-package-manager | |
| run: | | |
| if [ -f "${{ github.workspace }}/yarn.lock" ]; then | |
| echo "manager=yarn" >> $GITHUB_OUTPUT | |
| echo "command=install" >> $GITHUB_OUTPUT | |
| echo "runner=yarn" >> $GITHUB_OUTPUT | |
| exit 0 | |
| elif [ -f "${{ github.workspace }}/package.json" ]; then | |
| echo "manager=npm" >> $GITHUB_OUTPUT | |
| echo "command=ci" >> $GITHUB_OUTPUT | |
| echo "runner=npx --no-install" >> $GITHUB_OUTPUT | |
| exit 0 | |
| else | |
| echo "Unable to determine package manager" | |
| exit 1 | |
| fi | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: ${{ steps.detect-package-manager.outputs.manager }} | |
| - name: Setup Pages | |
| uses: actions/configure-pages@v5 | |
| with: | |
| # Automatically inject basePath in your Next.js configuration file and disable | |
| # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). | |
| # | |
| # You may remove this line if you want to manage the configuration yourself. | |
| static_site_generator: next | |
| - name: Restore cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| .next/cache | |
| # Generate a new cache whenever packages or source files change. | |
| key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
| # If source files changed but packages didn't, rebuild from a prior cache. | |
| restore-keys: | | |
| ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- | |
| - name: Install dependencies | |
| run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} | |
| - name: Build with Next.js | |
| run: ${{ steps.detect-package-manager.outputs.runner }} next build | |
| - name: Download DocumentDB packages from latest release | |
| run: .github/scripts/download_packages.sh | |
| - name: Debug output structure | |
| run: | | |
| echo "Contents of out directory:" | |
| find out -type f | head -30 | |
| echo "" | |
| echo "APT repository structure:" | |
| ls -la out/deb/ 2>/dev/null || echo "No deb directory found" | |
| echo "" | |
| echo "APT repository pools:" | |
| ls -la out/deb/pool/ 2>/dev/null || echo "No pool directory found" | |
| echo "" | |
| echo "YUM repository structure:" | |
| ls -la out/rpm/ 2>/dev/null || echo "No rpm directory found" | |
| echo "" | |
| echo "Direct download packages:" | |
| ls -la out/packages/*.{deb,rpm} 2>/dev/null || echo "No packages found" | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./out | |
| # Deployment job | |
| 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 |