From f50555b1fb5e2242be372114d456af1382247ff3 Mon Sep 17 00:00:00 2001 From: Craigory Coppola Date: Fri, 31 Jan 2025 10:53:05 -0500 Subject: [PATCH] chore(repo): migrate ci from circle to gha (#29801) --- .circleci/config.yml | 154 +---------------- .github/workflows/ci.yml | 157 ++++++++++++++++++ CODEOWNERS | 1 - nx-dev/nx-dev/project.json | 5 +- nx.json | 4 +- package.json | 30 +--- project.json | 35 ++++ scripts/check-react-native-changes.js | 2 +- .../generate-devkit-documentation.ts | 2 - 9 files changed, 201 insertions(+), 189 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 80ec022825..00a0e28c2f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,5 @@ version: 2.1 -# ------------------------- -# ORBS -# ------------------------- -orbs: - nx: nrwl/nx@1.6.2 - rust: circleci/rust@1.6.0 - browser-tools: circleci/browser-tools@1.4.8 - # ------------------------- # EXECUTORS # ------------------------- @@ -20,55 +12,8 @@ executors: <<: *defaults docker: - image: cimg/rust:1.84.0-browsers - resource_class: medium+ + resource_class: small - macos: - <<: *defaults - resource_class: macos.m1.medium.gen1 - macos: - xcode: '14.2.0' - -# ------------------------- -# COMMANDS -# ------------------------- -commands: - run-pnpm-install: - parameters: - os: - type: string - steps: - - restore_cache: - name: Restore pnpm Package Cache - keys: - - node-deps-{{ arch }}-v3-{{ checksum "pnpm-lock.yaml" }} - - when: - condition: - equal: [<< parameters.os >>, linux] - steps: - - run: - name: Install pnpm package manager (linux) - command: | - npm install --prefix=$HOME/.local -g @pnpm/exe@9.8.0 - - when: - condition: - equal: [<< parameters.os >>, macos] - steps: - - run: - name: Install pnpm package manager (macos) - command: | - npm install -g @pnpm/exe@9.8.0 - - run: - name: Install Dependencies - command: | - pnpm install --frozen-lockfile - pnpm playwright install --with-deps - - save_cache: - name: Save pnpm Package Cache - key: node-deps-{{ arch }}-v3-{{ checksum "pnpm-lock.yaml" }} - paths: - - ~/.pnpm-store - - ~/.cache/Cypress - - node_modules # ------------------------- # JOBS # ------------------------- @@ -78,101 +23,8 @@ jobs: # ------------------------- main-linux: executor: linux - environment: - NX_E2E_CI_CACHE_KEY: e2e-circleci-linux - NX_DAEMON: 'true' - NX_PERF_LOGGING: 'false' - NX_VERBOSE_LOGGING: 'false' - NX_NATIVE_LOGGING: 'false' - NX_E2E_RUN_E2E: 'true' - NX_CI_EXECUTION_ENV: 'linux' - NX_CLOUD_DTE_V2: 'true' - NX_CLOUD_DTE_SUMMARY: 'true' - NX_CLOUD_NO_TIMEOUTS: 'true' steps: - - checkout - - nx/set-shas: - main-branch-name: 'master' - - run: npx nx-cloud@next start-ci-run --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e" - - run: - command: | - sudo apt-get update - sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev - - browser-tools/install-chrome - - run-pnpm-install: - os: linux - - run: - name: Check Documentation - command: pnpm nx documentation --no-dte - no_output_timeout: 20m - - run: - name: Run Checks/Lint/Test/Build - no_output_timeout: 60m - command: | - pids=() - - pnpm nx-cloud record -- nx format:check --base=$NX_BASE --head=$NX_HEAD & - pids+=($!) - - pnpm nx-cloud record -- nx sync:check - pids+=($!) - - pnpm nx-cloud record -- nx-cloud conformance:check - pids+=($!) - - pnpm nx run-many -t check-imports check-commit check-lock-files check-codeowners documentation --parallel=1 --no-dte & - pids+=($!) - - pnpm nx affected --targets=lint,test,build,e2e,e2e-ci --base=$NX_BASE --head=$NX_HEAD --parallel=3 & - pids+=($!) - - for pid in "${pids[@]}"; do - wait "$pid" - done - # ------------------------- - # JOBS: Main-MacOS - # ------------------------- - mainmacos: - executor: macos - environment: - NX_E2E_CI_CACHE_KEY: e2e-circleci-macos - NX_PERF_LOGGING: 'false' - NX_CI_EXECUTION_ENV: 'macos' - SELECTED_PM: 'npm' # explicitly define npm for macOS tests - steps: - - checkout - - restore_cache: - name: Restore Homebrew packages - keys: - - nrwl-nx-homebrew-packages - - run: - name: Configure Detox Environment, Install applesimutils - command: | - HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null - HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null - xcrun simctl shutdown all && xcrun simctl erase all - no_output_timeout: 20m - - save_cache: - name: Save Homebrew Cache - key: nrwl-nx-homebrew-packages - paths: - - /usr/local/Homebrew - - ~/Library/Caches/Homebrew - - run-pnpm-install: - os: macos - - rust/install - - nx/set-shas: - main-branch-name: 'master' - - run: - name: Run E2E Tests for macOS - command: | - HAS_CHANGED=$(node ./scripts/check-react-native-changes.js $NX_BASE $NX_HEAD); - if $HAS_CHANGED; then - pnpm nx affected -t e2e-macos-local --parallel=1 --base=$NX_BASE --head=$NX_HEAD - else - echo "Skip E2E tests for macOS as there are no changes in React Native projects." - fi - no_output_timeout: 45m + - run: echo "We are in the process of transitioning from Circle CI to GitHub Actions. For details about your build results, consult github actions build logs." # ------------------------- # WORKFLOWS(JOBS) @@ -183,5 +35,3 @@ workflows: build: jobs: - main-linux - - mainmacos: - name: main-macos-e2e diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..b163b21a8f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,157 @@ +name: CI + +on: + push: + branches: + - master + pull_request: + branches: + - "**" + +env: + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + +jobs: + main-linux: + runs-on: ubuntu-latest + env: + NX_E2E_CI_CACHE_KEY: e2e-github-linux + NX_DAEMON: 'true' + NX_PERF_LOGGING: 'false' + NX_VERBOSE_LOGGING: 'false' + NX_NATIVE_LOGGING: 'false' + NX_E2E_RUN_E2E: 'true' + NX_CI_EXECUTION_ENV: 'linux' + NX_CLOUD_DTE_V2: 'true' + NX_CLOUD_DTE_SUMMARY: 'true' + NX_CLOUD_NO_TIMEOUTS: 'true' + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Fetch Master + run: git fetch origin master:master + + - name: Set SHAs + uses: nrwl/nx-set-shas@v4 + + - name: Start CI Run + run: npx nx-cloud@next start-ci-run --distribute-on="./.nx/workflows/dynamic-changesets.yaml" --stop-agents-after="e2e" + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev + + - name: Install Chrome + uses: browser-actions/setup-chrome@v1 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 9.8.0 + run_install: false + + - name: Install project dependencies + run: | + pnpm install --frozen-lockfile + pnpm playwright install --with-deps + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Check Documentation + run: pnpm nx documentation + timeout-minutes: 20 + + - name: Run Checks/Lint/Test/Build + run: | + pids=() + + pnpm nx-cloud record -- nx format:check --base=$NX_BASE --head=$NX_HEAD & + pids+=($!) + + pnpm nx-cloud record -- nx sync:check + pids+=($!) + + pnpm nx-cloud record -- nx-cloud conformance:check + pids+=($!) + + pnpm nx run-many -t check-imports check-commit check-lock-files check-codeowners --parallel=1 --no-dte & + pids+=($!) + + pnpm nx affected --targets=lint,test,build,e2e,e2e-ci --base=$NX_BASE --head=$NX_HEAD --parallel=3 & + pids+=($!) + + for pid in "${pids[@]}"; do + wait "$pid" + done + timeout-minutes: 100 + + main-macos: + runs-on: macos-latest + env: + NX_E2E_CI_CACHE_KEY: e2e-github-macos + NX_PERF_LOGGING: 'false' + NX_CI_EXECUTION_ENV: 'macos' + SELECTED_PM: 'npm' + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Fetch Master + run: git fetch origin master:master + + - name: Restore Homebrew packages + uses: actions/cache@v3 + with: + path: | + /usr/local/Homebrew + ~/Library/Caches/Homebrew + key: nrwl-nx-homebrew-packages + + - name: Configure Detox Environment, Install applesimutils + run: | + HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null + HOMEBREW_NO_AUTO_UPDATE=1 brew install applesimutils >/dev/null + xcrun simctl shutdown all && xcrun simctl erase all + timeout-minutes: 20 + + - name: Save Homebrew Cache + uses: actions/cache@v3 + with: + path: | + /usr/local/Homebrew + ~/Library/Caches/Homebrew + key: nrwl-nx-homebrew-packages + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 9.8.0 + run_install: false + + - name: Install project dependencies + run: | + pnpm install --frozen-lockfile + pnpm playwright install --with-deps + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Set SHAs + uses: nrwl/nx-set-shas@v4 + + - name: Run E2E Tests for macOS + run: | + HAS_CHANGED=$(node ./scripts/check-react-native-changes.js $NX_BASE $NX_HEAD); + if $HAS_CHANGED; then + pnpm nx affected -t e2e-macos-local --parallel=1 --base=$NX_BASE --head=$NX_HEAD + else + echo "Skip E2E tests for macOS as there are no changes in React Native projects." + fi \ No newline at end of file diff --git a/CODEOWNERS b/CODEOWNERS index df8f58d56c..6cab8c8a0d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -186,7 +186,6 @@ rust-toolchain @nrwl/nx-native-reviewers /scripts/angular-support-upgrades @nrwl/nx-angular-reviewers # CI -/.circleci/** @nrwl/nx-pipelines-reviewers /.nx/workflows/** @nrwl/nx-pipelines-reviewers /.github/** @nrwl/nx-pipelines-reviewers /.husky/** @nrwl/nx-pipelines-reviewers diff --git a/nx-dev/nx-dev/project.json b/nx-dev/nx-dev/project.json index 7a82090294..9dc970352a 100644 --- a/nx-dev/nx-dev/project.json +++ b/nx-dev/nx-dev/project.json @@ -100,16 +100,13 @@ "deploy-build": { "executor": "nx:run-commands", "outputs": ["{projectRoot}/public/documentation"], + "dependsOn": ["@nx/nx-source:documentation"], "options": { "commands": [ { "command": "nx run nx-dev:generate-og-images", "description": "OG images generation" }, - { - "command": "ts-node -P scripts/tsconfig.scripts.json ./scripts/documentation/generators/main.ts", - "description": "Pre-generate official package metadata" - }, { "command": "nx copy-docs nx-dev", "description": "Copy generated docs to build output" diff --git a/nx.json b/nx.json index 06ad997e84..10dd33b1cd 100644 --- a/nx.json +++ b/nx.json @@ -16,7 +16,7 @@ "sharedGlobals": [ "{workspaceRoot}/babel.config.json", "{workspaceRoot}/.nx/workflows/agents.yaml", - "{workspaceRoot}/.circleci/config.yml" + "{workspaceRoot}/.github/workflows/ci.yml" ], "native": [ "{projectRoot}/**/*.rs", @@ -245,7 +245,7 @@ "nxCloudId": "62d013ea0852fe0a2df74438", "nxCloudUrl": "https://staging.nx.app", "parallel": 1, - "bust": 2, + "bust": 4, "defaultBase": "master", "conformance": { "rules": [ diff --git a/package.json b/package.json index 4b35371f9f..c935bf430f 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "nx-release": "nx nx-release @nx/nx-source --parallel 8", "prepublishOnly": "node ./scripts/update-package-group.js", "local-registry": "nx local-registry @nx/nx-source", - "documentation": "ts-node -P scripts/tsconfig.scripts.json ./scripts/documentation/generators/main.ts && pnpm check-documentation-map", + "documentation": "nx documentation", "submit-plugin": "node ./scripts/submit-plugin.js", "prepare": "is-ci || husky", "echo": "echo 123458", @@ -384,32 +384,8 @@ "check-format", "check-imports", "check-lock-files", - "check-codeowners", - "documentation" - ], - "targets": { - "documentation": { - "cache": true, - "inputs": [ - "{workspaceRoot}/packages/**", - "{workspaceRoot}/docs/**", - "{workspaceRoot}/scripts/documentation/**", - "!{workspaceRoot}/docs/external-generated", - "!{workspaceRoot}/docs/generated", - "!{workspaceRoot}/packages/**/*.spec.ts", - "!{workspaceRoot}/packages/**/project.json", - "!{workspaceRoot}/packages/**/tsconfig.json", - "!{workspaceRoot}/packages/**/tsconfig.lib.json", - "!{workspaceRoot}/packages/**/tsconfig.spec.json", - "!{workspaceRoot}/packages/**/jest.config.{ts,js}", - "!{workspaceRoot}/packages/**/.eslintrc.json" - ] - }, - "outputs": [ - "{workspaceRoot}/docs/external-generated", - "{workspaceRoot}/docs/generated" - ] - } + "check-codeowners" + ] }, "packageManager": "pnpm@9.8.0" } diff --git a/project.json b/project.json index b358d7a670..903e07497c 100644 --- a/project.json +++ b/project.json @@ -35,6 +35,41 @@ } ], "command": "ts-node -P ./scripts/tsconfig.release.json ./scripts/nx-release" + }, + "documentation": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "ts-node -P scripts/tsconfig.scripts.json ./scripts/documentation/generators/main.ts", + "pnpm check-documentation-map" + ], + "parallel": false + }, + "cache": true, + "inputs": [ + "{workspaceRoot}/packages/**", + "{workspaceRoot}/docs/**", + "{workspaceRoot}/scripts/documentation/**", + "!{workspaceRoot}/docs/external-generated", + "!{workspaceRoot}/docs/generated", + "!{workspaceRoot}/packages/**/*.spec.ts", + "!{workspaceRoot}/packages/**/project.json", + "!{workspaceRoot}/packages/**/tsconfig.json", + "!{workspaceRoot}/packages/**/tsconfig.lib.json", + "!{workspaceRoot}/packages/**/tsconfig.spec.json", + "!{workspaceRoot}/packages/**/jest.config.{ts,js}", + "!{workspaceRoot}/packages/**/.eslintrc.json" + ], + "dependsOn": [ + { + "target": "build", + "projects": ["devkit", "typedoc-theme"] + } + ], + "outputs": [ + "{workspaceRoot}/docs/external-generated", + "{workspaceRoot}/docs/generated" + ] } } } diff --git a/scripts/check-react-native-changes.js b/scripts/check-react-native-changes.js index 5723339bbd..ae3372df08 100644 --- a/scripts/check-react-native-changes.js +++ b/scripts/check-react-native-changes.js @@ -1,4 +1,4 @@ -const nxBase = process.argv[2]; +const nxBase = process.argv[2] !== 'undefined' ? process.argv[2] : 'master'; const nxHead = process.argv[3]; const gitDiffCount = require('child_process').execSync( `git diff --name-only ${nxBase} ${nxHead} | (grep -E 'packages/detox|packages/react-native|packages/expo|e2e/detox|e2e/react-native|e2e/expo' || true) | wc -l` diff --git a/scripts/documentation/generators/generate-devkit-documentation.ts b/scripts/documentation/generators/generate-devkit-documentation.ts index 9a9cdb86c7..6c8c730f82 100644 --- a/scripts/documentation/generators/generate-devkit-documentation.ts +++ b/scripts/documentation/generators/generate-devkit-documentation.ts @@ -13,8 +13,6 @@ export async function generateDevkitDocumentation() { windowsHide: false, }; - execSync('nx run-many -t build -p devkit,typedoc-theme', execSyncOptions); - rmSync('node_modules/@nx/typedoc-theme', { recursive: true, force: true }); cpSync('dist/typedoc-theme', 'node_modules/@nx/typedoc-theme', {