# Code copied from [rome](https://github.com/rome/tools/blob/main/.github/workflows/release_cli.yml) name: Release CLI on: workflow_run: workflows: [check] types: [completed] workflow_dispatch: push: branches: - main paths: - npm/oxc/package.json concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: CARGO_TERM_QUIET: true jobs: check: name: Check version runs-on: ubuntu-latest outputs: version: ${{ env.version }} version_changed: ${{ steps.version.outputs.changed }} steps: - uses: actions/checkout@v3 - name: Check version changes uses: EndBug/version-check@v1 id: version with: static-checking: localIsNew file-url: https://unpkg.com/oxidation-compiler@latest/package.json file-name: npm/oxc/package.json - name: Set version name if: steps.version.outputs.changed == 'true' run: | echo "Version change found! New version: ${{ steps.version.outputs.version }} (${{ steps.version.outputs.version_type }})" echo "version=${{ steps.version.outputs.version }}" >> $GITHUB_ENV build: needs: check if: ${{ github.event.workflow_run.conclusion == 'success' }} && needs.check.outputs.version_changed == 'true' env: version: ${{ needs.check.outputs.version }} outputs: version: ${{ env.version }} strategy: matrix: include: - os: windows-2022 target: x86_64-pc-windows-msvc code-target: win32-x64 - os: windows-2022 target: aarch64-pc-windows-msvc code-target: win32-arm64 - os: ubuntu-20.04 target: x86_64-unknown-linux-gnu code-target: linux-x64 - os: ubuntu-20.04 target: aarch64-unknown-linux-gnu code-target: linux-arm64 - os: macos-11 target: x86_64-apple-darwin code-target: darwin-x64 - os: macos-11 target: aarch64-apple-darwin code-target: darwin-arm64 name: Package ${{ matrix.code-target }} runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Install Rust toolchain run: | rustup target add ${{ matrix.target }} rustup component add rust-src --toolchain nightly - name: Install arm64 toolchain if: matrix.code-target == 'linux-arm64' run: | sudo apt-get update sudo apt-get install -y gcc-aarch64-linux-gnu - name: Cache uses: Swatinem/rust-cache@v2 with: shared-key: release-${{ matrix.target }} - name: Build Binary # strip debug symbols from std, see https://github.com/johnthagen/min-sized-rust#remove-panic-string-formatting-with-panic_immediate_abort run: cargo build --release -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort --target ${{ matrix.target }} -p oxc_cli env: CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc # The binary is zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss - name: Archive Binary if: matrix.os == 'windows-2022' shell: bash run: | BIN_NAME=oxc-${{ matrix.code-target }} mv target/${{ matrix.target }}/release/oxc_cli.exe $BIN_NAME.exe 7z a $BIN_NAME.zip $BIN_NAME.exe # The binary is zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss - name: Archive Binary if: matrix.os != 'windows-2022' run: | BIN_NAME=oxc-${{ matrix.code-target }} mv target/${{ matrix.target }}/release/oxc_cli $BIN_NAME tar czf $BIN_NAME.tar.gz $BIN_NAME - name: Upload Binary uses: actions/upload-artifact@v3 with: if-no-files-found: error name: binaries path: | *.zip *.tar.gz publish: name: Publish runs-on: ubuntu-latest needs: - build steps: - uses: actions/checkout@v3 - name: Install Node.js uses: actions/setup-node@v3 with: node-version: 16 registry-url: 'https://registry.npmjs.org' - name: Download Artifacts uses: actions/download-artifact@v3 with: name: binaries - name: Unzip uses: montudor/action-zip@v1 with: args: unzip -qq *.zip -d . - name: Untar run: ls *.gz | xargs -i tar xf {} - name: Generate npm packages run: | node npm/oxc/scripts/generate-packages.mjs cat npm/oxc/package.json for package in npm/*; do cat $package/package.json ; echo ; done - name: Publish npm packages as latest # NOTE: The trailing slash on $package/ changes it to publishing the directory run: for package in npm/*; do npm publish $package/ --tag latest --access public; done env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: name: CLI v${{ needs.build.outputs.version }} draft: true files: oxc-* fail_on_unmatched_files: true generate_release_notes: true