name: Release NAPI transform on: push: branches: - main paths: - npm/oxc-transform/package.json # Please only commit this file, so we don't need to wait for test CI to pass. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true defaults: run: shell: bash jobs: check: name: Check version runs-on: ubuntu-latest outputs: version: ${{ env.version }} version_changed: ${{ steps.version.outputs.changed }} steps: - uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 - name: Check version changes uses: EndBug/version-check@36ff30f37c7deabe56a30caa043d127be658c425 # v2.1.5 id: version with: static-checking: localIsNew file-url: https://unpkg.com/oxc-transform@latest/package.json file-name: npm/oxc-transform/package.json - name: Set version name if: steps.version.outputs.changed == 'true' env: VERSION_NUMBER: ${{ steps.version.outputs.version }} VERSION_TYPE: ${{ steps.version.outputs.version_type }} run: | echo "Version change found! New version: ${VERSION_NUMBER} (${VERSION_NUMBER})" echo "version=${VERSION_NUMBER}" >> $GITHUB_ENV build: needs: check if: needs.check.outputs.version_changed == 'true' env: version: ${{ needs.check.outputs.version }} outputs: version: ${{ env.version }} strategy: fail-fast: false matrix: include: - os: windows-latest target: x86_64-pc-windows-msvc code-target: win32-x64-msvc - os: windows-latest target: aarch64-pc-windows-msvc code-target: win32-arm64-msvc - os: ubuntu-latest target: x86_64-unknown-linux-gnu code-target: linux-x64-gnu - os: ubuntu-latest target: aarch64-unknown-linux-gnu code-target: linux-arm64-gnu - os: ubuntu-latest target: x86_64-unknown-linux-musl code-target: linux-x64-musl - os: ubuntu-latest target: aarch64-unknown-linux-musl code-target: linux-arm64-musl - os: macos-13 target: x86_64-apple-darwin code-target: darwin-x64 - os: macos-14 # M1 target: aarch64-apple-darwin code-target: darwin-arm64 name: Package ${{ matrix.target }} runs-on: ${{ matrix.os }} steps: - uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 ### install musl dependencies ### - uses: mlugg/setup-zig@a67e68dc5c8281d9608136d3d7ca1b282213e4ac # v1.2.1 if: ${{ contains(matrix.target, 'musl') }} with: version: 0.11.0 - name: Install cargo-zigbuild if: ${{ contains(matrix.target, 'musl') }} uses: taiki-e/install-action@8c39981484df4e7ba41af8e8e078ac546d5e1b11 # v2.46.8 with: tool: cargo-zigbuild ### install non-musl dependencies ### - name: Install cross if: ${{ !contains(matrix.target, 'musl') }} uses: taiki-e/install-action@8c39981484df4e7ba41af8e8e078ac546d5e1b11 # v2.46.8 with: tool: cross ### Build - name: Add Rust Target run: rustup target add ${{ matrix.target }} - name: Build with cross if: ${{ !contains(matrix.target, 'musl') }} run: cross build --release -p oxc_transform_napi --target=${{ matrix.target }} - name: Build with zig if: ${{ contains(matrix.target, 'musl') }} env: RUSTFLAGS: "-C target-feature=-crt-static" run: cargo zigbuild --release -p oxc_transform_napi --target=${{ matrix.target }} ### Build Done - name: Move file on ${{ matrix.os }} run: | shopt -s extglob ls target/${{ matrix.target }}/release/*.@(so|dll|dylib) mv target/${{ matrix.target }}/release/*.@(so|dll|dylib) napi/transform/transform.${{ matrix.code-target }}.node ls napi/transform - uses: ./.github/actions/pnpm if: ${{ contains(matrix.target, 'x86') && !contains(matrix.target, 'musl') }} # Need docker for aarch64 - name: Test working-directory: napi/transform if: ${{ contains(matrix.target, 'x86') && !contains(matrix.target, 'musl') }} # Need docker for aarch64 run: pnpm run test # The binary is zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss - name: Archive Binary if: runner.os == 'Windows' run: 7z a ${{ matrix.code-target }}.zip napi/transform/transform.${{ matrix.code-target }}.node # The binary is zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss - name: Archive Binary if: runner.os != 'Windows' run: tar czf ${{ matrix.code-target }}.tar.gz napi/transform/transform.${{ matrix.code-target }}.node - name: Upload artifact uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 with: if-no-files-found: error name: binaries-${{ matrix.code-target }} path: | *.zip *.tar.gz publish: name: Publish NAPI runs-on: ubuntu-latest permissions: id-token: write # for `pnpm publish --provenance` needs: - build steps: - uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 - uses: ./.github/actions/pnpm - name: Download Artifacts uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4 with: merge-multiple: true - name: Unzip uses: montudor/action-zip@0852c26906e00f8a315c704958823928d8018b28 # v1.0.0 with: args: unzip -qq *.zip -d . - name: Untar run: ls *.gz | xargs -i tar xvf {} - name: Generate npm packages run: | ls ls napi/transform node npm/oxc-transform/scripts/generate-packages.mjs cat npm/oxc-transform/package.json for package in npm/oxc-transform* do ls $package cat $package/package.json echo '----' done - name: Publish npm packages as latest env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # NOTE: The trailing slash on $package/ changes it to publishing the directory run: | # publish subpackages first for package in npm/oxc-transform-* do pnpm publish $package/ --provenance --access public --no-git-checks done # publish root package last pnpm publish npm/oxc-transform/ --provenance --access public --no-git-checks