name: CLI Release on: push: branches: [main] paths: - 'packages/cli/src/**' - 'packages/cli/package.json' - 'packages/cli/bun.lock' workflow_dispatch: concurrency: group: cli-release cancel-in-progress: true jobs: build: name: Build and release CLI runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Bun uses: oven-sh/setup-bun@v2 - name: Install dependencies and build working-directory: packages/cli run: | bun install bun run build - name: Build cloud bundles run: bun run packages/cli/build-clouds.ts - name: Get version id: version working-directory: packages/cli run: echo "version=$(jq -r .version package.json)" >> "$GITHUB_OUTPUT" - name: Update cli-latest release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Delete existing release if present gh release delete cli-latest --yes 2>/dev/null || true git tag -d cli-latest 2>/dev/null || true git push origin :refs/tags/cli-latest 2>/dev/null || true # Create new release with built cli.js gh release create cli-latest \ --title "CLI v${{ steps.version.outputs.version }}" \ --notes "Pre-built CLI binary (auto-updated on every push to main). This release is used as a fallback by \`install.sh\` when the local build fails (e.g. Termux proot). **Version:** ${{ steps.version.outputs.version }} **Built:** $(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --prerelease \ packages/cli/cli.js - name: Upload cloud bundles env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | # Upload each cloud bundle as a separate release (aws-latest/aws.js, etc.) for bundle in packages/cli/*.js; do name=$(basename "$bundle" .js) [[ "$name" == "cli" ]] && continue # skip cli.js, already uploaded above gh release delete "${name}-latest" --yes 2>/dev/null || true git tag -d "${name}-latest" 2>/dev/null || true git push origin ":refs/tags/${name}-latest" 2>/dev/null || true gh release create "${name}-latest" \ --title "${name} bundle v${{ steps.version.outputs.version }}" \ --notes "Pre-built ${name} cloud provider bundle. Downloaded by \`sh/${name}/*.sh\` shims for \`bash <(curl ...)\` execution. **Built:** $(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --prerelease \ "$bundle" done