name: Codeflash JS/TS Optimization on: pull_request: paths: - "js/cf-api/**" - "js/cf-webapp/**" workflow_dispatch: inputs: project: description: "Project to optimize (cf-api, cf-webapp, or both)" required: false default: "both" type: choice options: - both - cf-api - cf-webapp permissions: contents: read packages: read pull-requests: read checks: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: # Check which projects have changes check-changes: runs-on: ubuntu-latest outputs: cf-api: ${{ steps.filter.outputs.cf-api }} cf-webapp: ${{ steps.filter.outputs.cf-webapp }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: dorny/paths-filter@v4 id: filter with: filters: | cf-api: - 'js/cf-api/**' cf-webapp: - 'js/cf-webapp/**' # Skip job when no JS changes detected (only for pull_request events) no-js-changes: name: No JS/TS changes detected needs: check-changes if: | github.event_name == 'pull_request' && needs.check-changes.outputs.cf-api != 'true' && needs.check-changes.outputs.cf-webapp != 'true' runs-on: ubuntu-latest steps: - name: Skip optimization run: echo "Skipping codeflash optimization - no changes in js/cf-api/ or js/cf-webapp/" # Optimize cf-api (Jest) optimize-cf-api: needs: [check-changes] if: | ( needs.check-changes.outputs.cf-api == 'true' || github.event_name == 'workflow_dispatch' && (github.event.inputs.project == 'cf-api' || github.event.inputs.project == 'both') ) && github.actor != 'codeflash-ai[bot]' name: Optimize cf-api runs-on: ubuntu-latest env: CODEFLASH_API_KEY: ${{ secrets.CODEFLASH_API_KEY }} CODEFLASH_PR_NUMBER: ${{ github.event.number }} COLUMNS: 110 NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: "20" registry-url: https://npm.pkg.github.com scope: "@codeflash-ai" - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Install cf-api dependencies working-directory: js run: pnpm install --frozen-lockfile - name: Set up Python and install Codeflash uses: astral-sh/setup-uv@v7 with: python-version: "3.12" - name: Install Codeflash CLI run: | uv tool install git+https://github.com/codeflash-ai/codeflash@main - name: Run Codeflash optimization working-directory: js/cf-api run: | export PATH="$HOME/.local/bin:$PATH" codeflash --yes # Optimize cf-webapp (Vitest) optimize-cf-webapp: needs: [check-changes] if: | ( needs.check-changes.outputs.cf-webapp == 'true' || github.event_name == 'workflow_dispatch' && (github.event.inputs.project == 'cf-webapp' || github.event.inputs.project == 'both') ) && github.actor != 'codeflash-ai[bot]' name: Optimize cf-webapp runs-on: ubuntu-latest env: CODEFLASH_API_KEY: ${{ secrets.CODEFLASH_API_KEY }} CODEFLASH_PR_NUMBER: ${{ github.event.number }} COLUMNS: 110 NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: Set up Node.js uses: actions/setup-node@v6 with: node-version: "20" registry-url: https://npm.pkg.github.com scope: "@codeflash-ai" - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Install cf-webapp dependencies working-directory: js run: pnpm install --frozen-lockfile - name: Set up Python and install Codeflash uses: astral-sh/setup-uv@v7 with: python-version: "3.12" - name: Install Codeflash CLI run: | uv tool install git+https://github.com/codeflash-ai/codeflash@main - name: Run Codeflash optimization working-directory: js/cf-webapp run: | export PATH="$HOME/.local/bin:$PATH" codeflash --yes