Trigger Release #2390
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
| on: | |
| schedule: | |
| # run every day at 23:15 | |
| - cron: '15 23 * * *' | |
| workflow_dispatch: | |
| inputs: | |
| releaseType: | |
| description: stable, canary, beta, or release candidate? | |
| required: true | |
| type: choice | |
| options: | |
| - canary | |
| - stable | |
| - release-candidate | |
| - beta | |
| semverType: | |
| description: semver type? | |
| type: choice | |
| options: | |
| - patch | |
| - minor | |
| - major | |
| force: | |
| description: create a new release even if there are no new commits | |
| default: false | |
| type: boolean | |
| name: Trigger Release | |
| env: | |
| NAPI_CLI_VERSION: 2.18.4 | |
| TURBO_VERSION: 2.9.4 | |
| NODE_LTS_VERSION: 20 | |
| jobs: | |
| start: | |
| if: github.repository_owner == 'vercel' | |
| runs-on: ubuntu-latest | |
| env: | |
| NEXT_TELEMETRY_DISABLED: 1 | |
| # we build a dev binary for use in CI so skip downloading | |
| # canary next-swc binaries in the monorepo | |
| NEXT_SKIP_NATIVE_POSTINSTALL: 1 | |
| steps: | |
| - name: Setup node | |
| uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 | |
| with: | |
| node-version: 20 | |
| check-latest: true | |
| package-manager-cache: false | |
| - name: Create GitHub App token | |
| id: release-app-token | |
| uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 | |
| with: | |
| client-id: ${{ vars.RELEASE_GITHUB_APP_CLIENT_ID }} | |
| private-key: ${{ secrets.RELEASE_GITHUB_APP_PRIVATE_KEY }} | |
| owner: ${{ github.repository_owner }} | |
| repositories: next.js | |
| permission-contents: write | |
| # Even though this permission may seem optional, it's required for | |
| # creating refs on branches that have diverged a lot from the default | |
| # branch. This is not documented but was confirmed by GitHub support. | |
| permission-workflows: write | |
| - name: Get GitHub App user ID | |
| id: release-app-user | |
| run: | | |
| user_id="$(gh api "/users/${{ steps.release-app-token.outputs.app-slug }}[bot]" --jq .id)" | |
| echo "user-id=$user_id" >> "$GITHUB_OUTPUT" | |
| env: | |
| GH_TOKEN: ${{ steps.release-app-token.outputs.token }} | |
| - name: Clone Next.js repository | |
| # We expect to find the latest tag on this branch in the last 1000 commits. | |
| run: git clone https://github.com/vercel/next.js.git --depth=1000 --single-branch --branch ${GITHUB_REF_NAME:-canary} . | |
| - name: Check token | |
| run: gh auth status | |
| # This sometimes fails for unknown reasons. | |
| # Ignoring failures for now to check if a failure truly implies a failed publish. | |
| continue-on-error: true | |
| env: | |
| GH_TOKEN: ${{ steps.release-app-token.outputs.token }} | |
| - name: Get commit of the latest tag | |
| run: | | |
| latest_tag="$(git describe --tags --abbrev=0)" | |
| echo "LATEST_TAG_COMMIT=$(git rev-list -n 1 "$latest_tag")" >> $GITHUB_ENV | |
| - name: Get latest commit | |
| run: echo "LATEST_COMMIT=$(git rev-parse HEAD)" >> $GITHUB_ENV | |
| - name: Check if new commits since last tag | |
| if: ${{ github.event.inputs.releaseType != 'stable' && github.event.inputs.force != true }} | |
| run: | | |
| if [ "$LATEST_TAG_COMMIT" = "$LATEST_COMMIT" ]; then | |
| echo "No new commits. Exiting..." | |
| exit 1 | |
| fi | |
| # https://github.com/actions/virtual-environments/issues/1187 | |
| - name: tune linux network | |
| run: sudo ethtool -K eth0 tx off rx off | |
| - name: Setup corepack | |
| run: | | |
| npm i -g corepack@0.31 | |
| corepack enable | |
| pnpm --version | |
| - id: get-store-path | |
| run: echo STORE_PATH=$(pnpm store path) >> $GITHUB_OUTPUT | |
| - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 | |
| timeout-minutes: 5 | |
| id: cache-pnpm-store | |
| with: | |
| path: ${{ steps.get-store-path.outputs.STORE_PATH }} | |
| key: pnpm-store-root-v1-${{ hashFiles('pnpm-lock.yaml') }} | |
| # Do not use restore-keys since it leads to indefinite growth of the cache. | |
| - run: pnpm install | |
| - run: node ./scripts/start-release.js --release-type "${INPUT_RELEASETYPE}" --semver-type "${INPUT_SEMVERTYPE}" | |
| env: | |
| RELEASE_GITHUB_TOKEN: ${{ steps.release-app-token.outputs.token }} | |
| RELEASE_GITHUB_APP_SLUG: ${{ steps.release-app-token.outputs.app-slug }} | |
| RELEASE_GITHUB_APP_USER_ID: ${{ steps.release-app-user.outputs.user-id }} | |
| INPUT_RELEASETYPE: ${{ github.event.inputs.releaseType || 'canary' }} | |
| INPUT_SEMVERTYPE: ${{ github.event.inputs.semverType }} |