056ab7918f
Reverts vercel/next.js#51406 This pnpm bump seems to be causing lockfile issues with the react versions which causes context issues since we need to share the same react version in the monorepo.
191 lines
6.6 KiB
YAML
191 lines
6.6 KiB
YAML
name: Build Reusable
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
afterBuild:
|
|
required: false
|
|
description: 'additional steps to run'
|
|
type: string
|
|
skipInstallBuild:
|
|
required: false
|
|
description: 'whether to skip pnpm install && pnpm build'
|
|
type: string
|
|
skipNativeBuild:
|
|
required: false
|
|
description: 'whether to skip building native modules'
|
|
type: string
|
|
skipForDocsOnly:
|
|
required: false
|
|
description: 'skip for docs only changes'
|
|
type: string
|
|
skipForRelease:
|
|
required: false
|
|
description: 'skip for release'
|
|
type: string
|
|
nodeVersion:
|
|
required: false
|
|
description: 'version of Node.js to use'
|
|
type: string
|
|
needsRust:
|
|
required: false
|
|
description: 'if rust is needed'
|
|
type: string
|
|
needsNextest:
|
|
required: false
|
|
description: 'if nextest rust dep is needed'
|
|
type: string
|
|
uploadSwcArtifact:
|
|
required: false
|
|
description: 'if swc artifact needs uploading'
|
|
type: string
|
|
uploadTestTrace:
|
|
required: false
|
|
description: 'if test trace needs uploading'
|
|
type: string
|
|
|
|
env:
|
|
NAPI_CLI_VERSION: 2.14.7
|
|
TURBO_VERSION: 1.9.6
|
|
PNPM_VERSION: 7.24.3
|
|
NODE_MAINTENANCE_VERSION: 16
|
|
NODE_LTS_VERSION: 18
|
|
TEST_CONCURRENCY: 6
|
|
# disable backtrace for test snapshots
|
|
RUST_BACKTRACE: 0
|
|
|
|
TURBO_TEAM: 'vercel'
|
|
TURBO_REMOTE_ONLY: 'true'
|
|
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
|
|
DATADOG_API_KEY: ${{ secrets.DATA_DOG_API_KEY }}
|
|
DATADOG_TRACE_NEXTJS_TEST: 'true'
|
|
DD_ENV: 'ci'
|
|
TEST_TIMINGS_TOKEN: ${{ secrets.TEST_TIMINGS_TOKEN }}
|
|
NEXT_TEST_JOB: 1
|
|
|
|
jobs:
|
|
build:
|
|
timeout-minutes: 25
|
|
runs-on: [self-hosted, linux, x64]
|
|
|
|
steps:
|
|
- run: fnm install ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }}
|
|
- run: fnm use ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }}
|
|
- run: node -v
|
|
- run: pwd
|
|
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
fetch-depth: 25
|
|
|
|
# local action -> needs to run after checkout
|
|
- name: Install Rust
|
|
uses: ./.github/actions/setup-rust
|
|
if: ${{ inputs.skipNativeBuild != 'yes' || inputs.needsNextest == 'yes' || inputs.needsRust == 'yes' }}
|
|
with:
|
|
components: rustfmt, clippy
|
|
|
|
- name: Install nextest
|
|
if: ${{ inputs.needsNextest == 'yes' }}
|
|
uses: taiki-e/install-action@nextest
|
|
|
|
- run: rustc --version
|
|
if: ${{ inputs.skipNativeBuild != 'yes' || inputs.needsNextest == 'yes' || inputs.needsRust == 'yes' }}
|
|
|
|
- run: npm i -g yarn "pnpm@${PNPM_VERSION}" "turbo@${TURBO_VERSION}" "@napi-rs/cli@${NAPI_CLI_VERSION}"
|
|
|
|
# clean up any previous artifacts to avoid hitting disk space limits
|
|
- run: git clean -xdf && rm -rf /tmp/next-repo-*; rm -rf /tmp/next-install-* /tmp/yarn-* /tmp/ncc-cache target
|
|
|
|
- run: cargo clean
|
|
if: ${{ inputs.skipNativeBuild != 'yes' || inputs.needsNextest == 'yes' || inputs.needsRust == 'yes' }}
|
|
|
|
- run: echo "DOCS_CHANGE<<EOF" >> $GITHUB_OUTPUT; echo "$(node scripts/run-for-change.js --not --type docs --exec echo 'nope')" >> $GITHUB_OUTPUT; echo 'EOF' >> $GITHUB_OUTPUT
|
|
name: check docs only change
|
|
id: docs-change
|
|
|
|
- id: is-release
|
|
run: |
|
|
if [[ $(node ./scripts/check-is-release.js 2> /dev/null || :) = v* ]];
|
|
then
|
|
echo "IS_RELEASE=yes" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "IS_RELEASE=nope" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
# normalize versions before build-native for better cache hits
|
|
- run: node scripts/normalize-version-bump.js
|
|
name: normalize versions
|
|
|
|
- run: turbo run build-native-release --remote-cache-timeout 90 --summarize -- --target x86_64-unknown-linux-gnu
|
|
if: ${{ inputs.skipNativeBuild != 'yes' }}
|
|
|
|
- name: Upload next-swc artifact
|
|
if: ${{ inputs.uploadSwcArtifact == 'yes' }}
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: next-swc-binary
|
|
path: packages/next-swc/native/next-swc.linux-x64-gnu.node
|
|
|
|
# undo normalize version changes for install/build
|
|
- run: git checkout .
|
|
if: ${{ inputs.skipInstallBuild != 'yes' }}
|
|
|
|
- run: pnpm store path
|
|
|
|
- run: pnpm install
|
|
if: ${{ inputs.skipInstallBuild != 'yes' }}
|
|
|
|
- run: pnpm build
|
|
if: ${{ inputs.skipInstallBuild != 'yes' }}
|
|
|
|
- run: pnpm playwright install-deps
|
|
if: ${{ inputs.skipInstallBuild != 'yes' }}
|
|
|
|
- run: pnpm playwright install chromium
|
|
if: ${{ inputs.skipInstallBuild != 'yes' }}
|
|
|
|
- run: turbo run get-test-timings -- --build ${{ github.sha }}
|
|
|
|
- run: /bin/bash -c "${{ inputs.afterBuild }}"
|
|
if: ${{(inputs.skipForDocsOnly != 'yes' || steps.docs-change.outputs.DOCS_CHANGE == 'nope') && (inputs.skipForRelease != 'yes' || steps.is-release.outputs.IS_RELEASE == 'nope')}}
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: turbo run summary
|
|
path: .turbo/runs
|
|
|
|
- name: Upload test reports artifact
|
|
uses: actions/upload-artifact@v3
|
|
if: ${{ inputs.afterBuild }}
|
|
with:
|
|
name: Test trace reports
|
|
path: |
|
|
test/test-junit-report
|
|
test/turbopack-test-junit-report
|
|
if-no-files-found: ignore
|
|
|
|
- name: Download test reports artifact
|
|
id: download-test-reports
|
|
uses: actions/download-artifact@v3
|
|
continue-on-error: true
|
|
if: ${{ inputs.uploadTestTrace == 'yes' && (inputs.skipForDocsOnly != 'yes' || steps.docs-change.outputs.DOCS_CHANGE == 'nope') }}
|
|
with:
|
|
name: Test trace reports
|
|
path: test
|
|
|
|
- name: Upload test trace to datadog
|
|
if: ${{ inputs.uploadTestTrace == 'yes' && (inputs.skipForDocsOnly != 'yes' || steps.docs-change.outputs.DOCS_CHANGE == 'nope') }}
|
|
continue-on-error: true
|
|
run: |
|
|
ls -al ./test
|
|
npm install -g junit-report-merger@6.0.2 @datadog/datadog-ci@2.14.0
|
|
jrm ./nextjs-test-result-junit.xml "test/test-junit-report/**/*.xml"
|
|
jrm ./turbopack-test-result-junit.xml "test/turbopack-test-junit-report/**/*.xml"
|
|
# Put a separate tag for the tests with turbopack to distinguish between same test names
|
|
DD_ENV=ci datadog-ci junit upload --tags test.type:nextjs --service nextjs ./nextjs-test-result-junit.xml
|
|
DD_ENV=ci datadog-ci junit upload --tags test.type:turbopack --service nextjs ./turbopack-test-result-junit.xml
|