diff --git a/.github/workflows/build_native.yml b/.github/workflows/build_native.yml index ad179aacb34af..e542dd2a2645e 100644 --- a/.github/workflows/build_native.yml +++ b/.github/workflows/build_native.yml @@ -1,82 +1,154 @@ -on: workflow_dispatch +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize] + paths: + - 'packages/next/build/swc/**' name: Build next-swc native binaries jobs: - build-native: + build: strategy: matrix: os: [ubuntu-18.04, macos-latest, windows-latest] - description: [default] - include: - - os: ubuntu-18.04 - target: x86_64-unknown-linux-gnu - - os: windows-latest - target: x86_64-pc-windows-msvc - - os: macos-latest - target: x86_64-apple-darwin - - os: macos-latest - target: aarch64-apple-darwin - description: m1 - - name: next-swc - ${{ matrix.os }} - ${{ matrix.target }} - node@14 + + name: stable - ${{ matrix.os }} - node@14 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 + - name: Setup node uses: actions/setup-node@v2 with: node-version: 14 check-latest: true + - name: Install uses: actions-rs/toolchain@v1 with: + toolchain: stable profile: minimal - toolchain: nightly-2021-03-25 - target: ${{ matrix.target }} + - name: Cache cargo registry uses: actions/cache@v1 with: path: ~/.cargo/registry key: stable-${{ matrix.os }}-node@14-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index uses: actions/cache@v1 with: path: ~/.cargo/git key: stable-${{ matrix.os }}-node@14-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} - - name: Cache native binary - id: binary-cache - uses: actions/cache@v2 + + - name: Cache NPM dependencies + uses: actions/cache@v1 with: - path: packages/next/native/** - key: next-swc-nightly-2021-03-25-${{ matrix.target }}-${{ hashFiles('packages/next/build/swc/**') }} + path: node_modules + key: npm-cache-${{ matrix.os }}-node@14-${{ hashFiles('yarn.lock') }} + + - name: 'Install dependencies' + run: yarn install --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + - name: 'Build' - if: steps.binary-cache.outputs.cache-hit != true - run: yarn build-native --target ${{ matrix.target }} + run: yarn --cwd packages/next build-native env: MACOSX_DEPLOYMENT_TARGET: '10.13' - working-directory: packages/next + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: next-swc-binaries + path: packages/next/native + + - name: Clear the cargo caches + run: | + cargo install cargo-cache --no-default-features --features ci-autoclean + cargo-cache + + build-apple-silicon: + name: stable - aarch64-apple-darwin - node@14 + runs-on: macos-latest + + steps: + - uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v2 + with: + node-version: 14 + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + override: true + toolchain: nightly-2021-03-25 + target: aarch64-apple-darwin + + - name: Install dependencies + run: yarn install --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000 + + - name: Cross build aarch64 + run: yarn --cwd packages/next build-native --target aarch64-apple-darwin + - name: Upload artifact uses: actions/upload-artifact@v2 with: name: next-swc-binaries - path: packages/next/native/next-swc.*.node + path: packages/next/native + - name: Clear the cargo caches run: | cargo install cargo-cache --no-default-features --features ci-autoclean cargo-cache + commit: - needs: build-native + needs: [build, build-apple-silicon] runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 + if: ${{ github.event_name == 'workflow_dispatch' }} - uses: actions/download-artifact@v2 with: name: next-swc-binaries path: packages/next/native + if: ${{ github.event_name == 'workflow_dispatch' }} - uses: EndBug/add-and-commit@v7 with: add: 'packages/next/native --force' message: 'Build next-swc binaries' + if: ${{ github.event_name == 'workflow_dispatch' }} + + check: + needs: [build, build-apple-silicon] + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + if: ${{ github.event_name == 'pull_request' }} + - uses: actions/download-artifact@v2 + with: + name: next-swc-binaries + path: packages/next/native + if: ${{ github.event_name == 'pull_request' }} + - run: git diff --exit-code + if: ${{ github.event_name == 'pull_request' }} + + test: + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + if: ${{ github.event_name == 'pull_request' }} + - name: Install + if: ${{ github.event_name == 'pull_request' }} + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2021-03-25 + profile: minimal + - run: cd packages/next/build/swc && cargo test + if: ${{ github.event_name == 'pull_request' }} diff --git a/.github/workflows/build_test_deploy.yml b/.github/workflows/build_test_deploy.yml index e68400734eab8..0ee8034b1b484 100644 --- a/.github/workflows/build_test_deploy.yml +++ b/.github/workflows/build_test_deploy.yml @@ -1,7 +1,6 @@ on: push: branches: [canary] - tags: [v*] pull_request: types: [opened, synchronize] @@ -47,7 +46,7 @@ jobs: checkPrecompiled: name: Check Pre-compiled runs-on: ubuntu-latest - needs: [build, build-native] + needs: build env: NEXT_TELEMETRY_DISABLED: 1 steps: @@ -57,10 +56,6 @@ jobs: with: path: ./* key: ${{ github.sha }} - - uses: actions/download-artifact@v2 - with: - name: next-swc-binaries - path: packages/next/native - run: ./scripts/check-pre-compiled.sh if: ${{needs.build.outputs.docsChange != 'docs only change'}} @@ -245,10 +240,9 @@ jobs: if: ${{needs.build.outputs.docsChange != 'docs only change'}} publishRelease: - if: ${{ startsWith(github.ref, 'refs/tags/v') }} name: Potentially publish release runs-on: ubuntu-latest - needs: [build, build-native] + needs: build env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} steps: @@ -257,11 +251,7 @@ jobs: with: path: ./* key: ${{ github.sha }} - - uses: actions/download-artifact@v2 - with: - name: next-swc-binaries - path: packages/next/native - - run: ./scripts/prepublish-native.js + - run: ./scripts/publish-release.sh releaseStats: @@ -278,80 +268,3 @@ jobs: - uses: ./.github/actions/next-stats-action env: PR_STATS_COMMENT_TOKEN: ${{ secrets.PR_STATS_COMMENT_TOKEN }} - - build-native: - strategy: - matrix: - os: [ubuntu-18.04, macos-latest, windows-latest] - description: [default] - include: - - os: ubuntu-18.04 - target: x86_64-unknown-linux-gnu - - os: windows-latest - target: x86_64-pc-windows-msvc - - os: macos-latest - target: x86_64-apple-darwin - - os: macos-latest - target: aarch64-apple-darwin - description: m1 - - name: next-swc - ${{ matrix.os }} - ${{ matrix.target }} - node@14 - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v2 - with: - node-version: 14 - check-latest: true - - name: Install - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly-2021-03-25 - target: ${{ matrix.target }} - - name: Cache cargo registry - uses: actions/cache@v1 - with: - path: ~/.cargo/registry - key: stable-${{ matrix.os }}-node@14-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }} - - name: Cache cargo index - uses: actions/cache@v1 - with: - path: ~/.cargo/git - key: stable-${{ matrix.os }}-node@14-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }} - - name: Cache native binary - id: binary-cache - uses: actions/cache@v2 - with: - path: packages/next/native/** - key: next-swc-nightly-2021-03-25-${{ matrix.target }}-${{ hashFiles('packages/next/build/swc/**') }} - - name: 'Build' - if: steps.binary-cache.outputs.cache-hit != true - run: yarn build-native --target ${{ matrix.target }} - env: - MACOSX_DEPLOYMENT_TARGET: '10.13' - working-directory: packages/next - - name: Upload artifact - uses: actions/upload-artifact@v2 - with: - name: next-swc-binaries - path: packages/next/native/next-swc.*.node - - name: Clear the cargo caches - run: | - cargo install cargo-cache --no-default-features --features ci-autoclean - cargo-cache - - test-native: - name: Unit Test Native Code - runs-on: ubuntu-18.04 - - steps: - - uses: actions/checkout@v2 - - name: Install - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly-2021-03-25 - profile: minimal - - run: cd packages/next/build/swc && cargo test diff --git a/packages/next/build/swc/npm/next-swc-darwin-arm64/README.md b/packages/next/build/swc/npm/next-swc-darwin-arm64/README.md deleted file mode 100644 index 8a616700ad725..0000000000000 --- a/packages/next/build/swc/npm/next-swc-darwin-arm64/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `next-swc-darwin-arm64` - -This is the **aarch64-apple-darwin** binary for `next-swc` diff --git a/packages/next/build/swc/npm/next-swc-darwin-arm64/package.json b/packages/next/build/swc/npm/next-swc-darwin-arm64/package.json deleted file mode 100644 index d40a7a93885ec..0000000000000 --- a/packages/next/build/swc/npm/next-swc-darwin-arm64/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "next-swc-darwin-arm64", - "version": "0.0.0", - "os": [ - "darwin" - ], - "cpu": [ - "arm64" - ], - "main": "next-swc.darwin-arm64.node", - "files": [ - "next-swc.darwin-arm64.node" - ], - "license": "MIT", - "engines": { - "node": ">= 10" - } -} diff --git a/packages/next/build/swc/npm/next-swc-darwin-x64/README.md b/packages/next/build/swc/npm/next-swc-darwin-x64/README.md deleted file mode 100644 index e456065a5f41b..0000000000000 --- a/packages/next/build/swc/npm/next-swc-darwin-x64/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `next-swc-darwin-x64` - -This is the **x86_64-apple-darwin** binary for `next-swc` diff --git a/packages/next/build/swc/npm/next-swc-darwin-x64/package.json b/packages/next/build/swc/npm/next-swc-darwin-x64/package.json deleted file mode 100644 index 841f101bc3ed0..0000000000000 --- a/packages/next/build/swc/npm/next-swc-darwin-x64/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "next-swc-darwin-x64", - "version": "0.0.0", - "os": [ - "darwin" - ], - "cpu": [ - "x64" - ], - "main": "next-swc.darwin-x64.node", - "files": [ - "next-swc.darwin-x64.node" - ], - "license": "MIT", - "engines": { - "node": ">= 10" - } -} diff --git a/packages/next/build/swc/npm/next-swc-linux-x64-gnu/README.md b/packages/next/build/swc/npm/next-swc-linux-x64-gnu/README.md deleted file mode 100644 index ab0dd023d410d..0000000000000 --- a/packages/next/build/swc/npm/next-swc-linux-x64-gnu/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `next-swc-linux-x64-gnu` - -This is the **x86_64-unknown-linux-gnu** binary for `next-swc` diff --git a/packages/next/build/swc/npm/next-swc-linux-x64-gnu/package.json b/packages/next/build/swc/npm/next-swc-linux-x64-gnu/package.json deleted file mode 100644 index 46d6a065dc475..0000000000000 --- a/packages/next/build/swc/npm/next-swc-linux-x64-gnu/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "next-swc-linux-x64-gnu", - "version": "0.0.0", - "os": [ - "linux" - ], - "cpu": [ - "x64" - ], - "main": "next-swc.linux-x64-gnu.node", - "files": [ - "next-swc.linux-x64-gnu.node" - ], - "license": "MIT", - "engines": { - "node": ">= 10" - } -} diff --git a/packages/next/build/swc/npm/next-swc-win32-x64-msvc/README.md b/packages/next/build/swc/npm/next-swc-win32-x64-msvc/README.md deleted file mode 100644 index 043a268252d55..0000000000000 --- a/packages/next/build/swc/npm/next-swc-win32-x64-msvc/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# `next-swc-win32-x64-msvc` - -This is the **x86_64-pc-windows-msvc** binary for `next-swc` diff --git a/packages/next/build/swc/npm/next-swc-win32-x64-msvc/package.json b/packages/next/build/swc/npm/next-swc-win32-x64-msvc/package.json deleted file mode 100644 index d5ea85b6c5e7d..0000000000000 --- a/packages/next/build/swc/npm/next-swc-win32-x64-msvc/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "next-swc-win32-x64-msvc", - "version": "0.0.0", - "os": [ - "win32" - ], - "cpu": [ - "x64" - ], - "main": "next-swc.win32-x64-msvc.node", - "files": [ - "next-swc.win32-x64-msvc.node" - ], - "license": "MIT", - "engines": { - "node": ">= 10" - } -} diff --git a/packages/next/native/next-swc.darwin-arm64.node b/packages/next/native/next-swc.darwin-arm64.node index 4a219ab9b44c4..0b6644ec65ec4 100644 Binary files a/packages/next/native/next-swc.darwin-arm64.node and b/packages/next/native/next-swc.darwin-arm64.node differ diff --git a/packages/next/native/next-swc.darwin-x64.node b/packages/next/native/next-swc.darwin-x64.node index a5376a57a4f65..d54ee4958e7b6 100644 Binary files a/packages/next/native/next-swc.darwin-x64.node and b/packages/next/native/next-swc.darwin-x64.node differ diff --git a/packages/next/package.json b/packages/next/package.json index 1b27a9973c394..755ae52b83c52 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -54,7 +54,7 @@ "types": "tsc --declaration --emitDeclarationOnly --declarationDir dist", "typescript": "tsc --noEmit --declaration", "ncc-compiled": "ncc cache clean && taskr ncc", - "build-native": "npx -p @napi-rs/cli napi build --platform --release --cargo-cwd build/swc native" + "build-native": "napi build --platform --release --cargo-cwd build/swc native" }, "taskr": { "requires": [ diff --git a/scripts/prepublish-native.js b/scripts/prepublish-native.js deleted file mode 100755 index 803c45ba3d653..0000000000000 --- a/scripts/prepublish-native.js +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env node - -const path = require('path') -const { readFile, readdir, writeFile } = require('fs/promises') -const { copy } = require('fs-extra') - -const cwd = process.cwd() - -;(async function () { - let version = JSON.parse(await readFile(path.join(cwd, 'lerna.json'))).version - - // Copy binaries to package folders, update version, and copy package folders to packages directory - let nativePackagesDir = path.join(cwd, 'packages/next/build/swc/npm') - let nativePackages = await readdir(nativePackagesDir) - for (let nativePackage of nativePackages) { - let binaryName = `next-swc.${nativePackage.substr(9)}.node` - await copy( - path.join(cwd, 'packages/next/native', binaryName), - path.join(nativePackagesDir, nativePackage, binaryName) - ) - let pkg = JSON.parse( - await readFile( - path.join(nativePackagesDir, nativePackage, 'package.json') - ) - ) - pkg.version = version - await writeFile( - path.join(nativePackagesDir, nativePackage, 'package.json'), - JSON.stringify(pkg, null, 2) - ) - } - await copy( - path.join(cwd, 'packages/next/build/swc/npm'), - path.join(cwd, 'packages') - ) - - // Update optional dependencies versions - let nextPkg = JSON.parse( - await readFile(path.join(cwd, 'packages/next/package.json')) - ) - for (let name of nativePackages) { - let optionalDependencies = nextPkg.optionalDependencies || {} - optionalDependencies[name] = version - nextPkg.optionalDependencies = optionalDependencies - } - await writeFile( - path.join(path.join(cwd, 'packages/next/package.json')), - JSON.stringify(nextPkg, null, 2) - ) -})()