Update runner config #1
Workflow file for this run
This file contains 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: Build Reusable | ||
on: | ||
workflow_call: | ||
inputs: | ||
afterBuild: | ||
required: false | ||
description: 'additional steps to run' | ||
type: string | ||
# Toggles the mold linker. The default linker is much slower and can run into OOMs. | ||
# However, custom linkers won't work for wasm. | ||
mold: | ||
required: false | ||
description: 'whether to use the mold linker' | ||
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.10.9 | ||
PNPM_VERSION: 7.24.3 | ||
NODE_MAINTENANCE_VERSION: 16 | ||
NODE_LTS_VERSION: 18.16.1 | ||
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: | ||
before-build: | ||
timeout-minutes: 25 | ||
steps: | ||
runs-on: | ||
- 'self-hosted' | ||
- 'size:lg' | ||
- 'platform:linux/amd64' | ||
build: | ||
timeout-minutes: 25 | ||
runs-on: | ||
- 'self-hosted' | ||
- 'size:lg' | ||
- 'platform:linux/amd64' | ||
defaults: | ||
run: | ||
shell: bash -leo pipefail /entrypoint.sh {0} | ||
container: | ||
image: public.ecr.aws/c7u5x0t0/nextjs-runner:latest | ||
steps: | ||
- run: fnm install ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }} | ||
- run: fnm use ${{ inputs.nodeVersion || env.NODE_LTS_VERSION }} | ||
- run: node -v | ||
- run: pwd | ||
- run: ls / | ||
- run: ls -a /__e | ||
- 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 mold linker' | ||
if: ${{ inputs.mold == 'yes' }} | ||
run: | | ||
sudo apt update | ||
sudo apt install -y mold | ||
echo RUSTFLAGS=${RUSTFLAGS}\ -C\ link-arg=-fuse-ld=mold >> $GITHUB_ENV | ||
- 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' && steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} | ||
- name: Upload next-swc artifact | ||
if: ${{ inputs.uploadSwcArtifact == 'yes' && steps.docs-change.outputs.DOCS_CHANGE == 'nope' }} | ||
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 [email protected] @datadog/[email protected] | ||
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 |