| name: Deploy Next.js site to Pages |
|
|
| on: |
| push: |
| branches: ["main"] |
|
|
| workflow_dispatch: |
|
|
| permissions: |
| contents: read |
| pages: write |
| id-token: write |
|
|
| concurrency: |
| group: "pages" |
| cancel-in-progress: true |
|
|
| jobs: |
| build: |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v3 |
| with: |
| fetch-depth: 0 |
|
|
| - name: Install Node.js |
| uses: actions/setup-node@v3 |
| with: |
| node-version: "20" |
|
|
| - uses: pnpm/action-setup@v2 |
| name: Install pnpm |
| with: |
| version: 8 |
| run_install: false |
|
|
| - name: Get pnpm store directory |
| shell: bash |
| run: | |
| echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV |
| |
| - uses: actions/cache@v3 |
| name: Setup pnpm cache |
| with: |
| path: ${{ env.STORE_PATH }} |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} |
| restore-keys: | |
| ${{ runner.os }}-pnpm-store- |
| |
| - name: Setup Pages |
| uses: actions/configure-pages@v3 |
| with: |
| static_site_generator: next |
|
|
| - name: Restore cache |
| uses: actions/cache@v3 |
| with: |
| path: | |
| .next/cache |
| key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} |
| restore-keys: | |
| ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/pnpm-lock.yaml') }}- |
| |
| - name: Install dependencies |
| run: pnpm install |
|
|
| - name: Build with Next.js |
| run: pnpm next build |
|
|
| - name: Upload Build Artifacts |
| uses: actions/upload-artifact@v2 |
| with: |
| name: build-files |
| path: ./out/_next/static/chunks |
|
|
| - name: Upload artifact |
| uses: actions/upload-pages-artifact@v1 |
| with: |
| path: './out' |
|
|
|
|
| |
| sentry: |
| needs: build |
| runs-on: ubuntu-latest |
| env: |
| SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} |
| SENTRY_ORG: ${{ secrets.SENTRY_ORG }} |
| SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} |
| SENTRY_RELEASE: ${{ github.sha }} |
| SENTRY_SOURCEMAP_PATH: "./" |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v3 |
| with: |
| fetch-depth: 0 |
| - uses: actions/download-artifact@v2 |
| with: |
| name: build-files |
| - name: Download sentry-cli |
| run: curl -sL https://sentry.io/get-cli/ | SENTRY_CLI_VERSION="2.20.0" sh |
| - name: Create Release |
| run: sentry-cli releases new $SENTRY_RELEASE |
| - name: Inject Debug IDs to source files |
| run: sentry-cli sourcemaps inject $SENTRY_SOURCEMAP_PATH |
| - name: Upload Source Files |
| run: sentry-cli sourcemaps upload --validate -r=$SENTRY_RELEASE $SENTRY_SOURCEMAP_PATH |
| - name: Set Release Commits |
| run: sentry-cli releases set-commits $SENTRY_RELEASE --auto |
| - name: Deploy to Sentry |
| run: sentry-cli releases deploys $SENTRY_RELEASE new -e production |
| - name: Finalize Sentry Release |
| run: sentry-cli releases finalize $SENTRY_RELEASE |
| |
|
|
| |
| 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@v1 |
|
|
|
|