name: Release CLI to NPM on: push: tags: [v*] workflow_dispatch: inputs: version: description: Version to publish (for example v2026.3.0) required: true type: string permissions: contents: read jobs: build-binaries: name: Build ${{ matrix.pkg }} runs-on: ${{ matrix.runner }} strategy: fail-fast: false matrix: include: - pkg: cli-darwin-arm64 runner: macos-latest target: aarch64-apple-darwin binary: yaakcli - pkg: cli-darwin-x64 runner: macos-latest target: x86_64-apple-darwin binary: yaakcli - pkg: cli-linux-arm64 runner: ubuntu-22.04-arm target: aarch64-unknown-linux-gnu binary: yaakcli - pkg: cli-linux-x64 runner: ubuntu-22.04 target: x86_64-unknown-linux-gnu binary: yaakcli - pkg: cli-win32-arm64 runner: windows-latest target: aarch64-pc-windows-msvc binary: yaakcli.exe - pkg: cli-win32-x64 runner: windows-latest target: x86_64-pc-windows-msvc binary: yaakcli.exe steps: - name: Checkout uses: actions/checkout@v4 - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Restore Rust cache uses: Swatinem/rust-cache@v2 with: shared-key: release-cli-npm cache-on-failure: true - name: Build yaakcli run: cargo build --locked --release -p yaak-cli --bin yaakcli --target ${{ matrix.target }} - name: Stage binary artifact shell: bash run: | set -euo pipefail mkdir -p "npm/dist/${{ matrix.pkg }}" cp "target/${{ matrix.target }}/release/${{ matrix.binary }}" "npm/dist/${{ matrix.pkg }}/${{ matrix.binary }}" - name: Upload binary artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.pkg }} path: npm/dist/${{ matrix.pkg }}/${{ matrix.binary }} if-no-files-found: error publish-npm: name: Publish @yaakapp/cli packages needs: build-binaries runs-on: ubuntu-latest permissions: contents: read id-token: write steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: 22 registry-url: https://registry.npmjs.org - name: Download binary artifacts uses: actions/download-artifact@v4 with: pattern: cli-* path: npm/dist merge-multiple: false - name: Prepare npm packages env: YAAK_CLI_VERSION: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }} run: node npm/prepare-publish.js - name: Ensure NPM token exists env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} run: | if [ -z "$NODE_AUTH_TOKEN" ]; then echo "NPM_TOKEN is not configured" exit 1 fi - name: Publish @yaakapp/cli-darwin-arm64 run: npm publish --provenance --access public working-directory: npm/cli-darwin-arm64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli-darwin-x64 run: npm publish --provenance --access public working-directory: npm/cli-darwin-x64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli-linux-arm64 run: npm publish --provenance --access public working-directory: npm/cli-linux-arm64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli-linux-x64 run: npm publish --provenance --access public working-directory: npm/cli-linux-x64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli-win32-arm64 run: npm publish --provenance --access public working-directory: npm/cli-win32-arm64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli-win32-x64 run: npm publish --provenance --access public working-directory: npm/cli-win32-x64 env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" } - name: Publish @yaakapp/cli run: npm publish --provenance --access public working-directory: npm/cli env: { NODE_AUTH_TOKEN: "${{ secrets.NPM_TOKEN }}" }