Files
AutoGPT/plans/SECRT-1950-claude-ci-optimizations.md
Otto 86af8fc856 ci: apply E2E CI optimizations to Claude workflows (#12097)
## Summary

Applies the CI performance optimizations from #12090 to Claude Code
workflows.

## Changes

### `claude.yml` & `claude-dependabot.yml`
- **pnpm caching**: Replaced manual `actions/cache` with `setup-node`
built-in `cache: "pnpm"`
- Removes 4 steps (set pnpm store dir, cache step, manual config) → 1
step

### `claude-ci-failure-auto-fix.yml`
- **Added dev environment setup** with optimized caching
- Now Claude can run lint/tests when fixing CI failures (previously
could only edit files)
- Uses the same optimized caching patterns

## Dependency

This PR is based on #12090 and will merge after it.

## Testing

- Workflow YAML syntax validated
- Patterns match proven #12090 implementation
- CI caching changes fail gracefully to uncached builds

## Linear

Fixes [SECRT-1950](https://linear.app/autogpt/issue/SECRT-1950)

## Future Enhancements

E2E test data caching could be added to Claude workflows if needed for
running integration tests. Currently Claude workflows set up a dev
environment but don't run E2E tests by default.

<!-- greptile_comment -->

<h2>Greptile Overview</h2>

<details><summary><h3>Greptile Summary</h3></summary>

Applies proven CI performance optimizations to Claude workflows by
simplifying pnpm caching and adding dev environment setup to the
auto-fix workflow.

**Key changes:**
- Replaced manual pnpm cache configuration (4 steps) with built-in
`setup-node` `cache: "pnpm"` support in `claude.yml` and
`claude-dependabot.yml`
- Added complete dev environment setup (Python/Poetry + Node.js/pnpm) to
`claude-ci-failure-auto-fix.yml` so Claude can run linting and tests
when fixing CI failures
- Correctly orders `corepack enable` before `setup-node` to ensure pnpm
is available for caching

The changes mirror the optimizations from PR #12090 and maintain
consistency across all Claude workflows.
</details>


<details><summary><h3>Confidence Score: 5/5</h3></summary>

- This PR is safe to merge with minimal risk
- The changes are CI infrastructure optimizations that mirror proven
patterns from PR #12090. The pnpm caching simplification reduces
complexity without changing functionality (caching failures gracefully
fall back to uncached builds). The dev environment setup in the auto-fix
workflow is additive and enables Claude to run linting/tests. All YAML
syntax is correct and the step ordering follows best practices.
- No files require special attention
</details>


<details><summary><h3>Sequence Diagram</h3></summary>

```mermaid
sequenceDiagram
    participant GHA as GitHub Actions
    participant Corepack as Corepack
    participant SetupNode as setup-node@v6
    participant Cache as GHA Cache
    participant pnpm as pnpm

    Note over GHA,pnpm: Before (Manual Caching)
    GHA->>SetupNode: Set up Node.js 22
    SetupNode-->>GHA: Node.js ready
    GHA->>Corepack: Enable corepack
    Corepack-->>GHA: pnpm available
    GHA->>pnpm: Configure store directory
    pnpm-->>GHA: Store path set
    GHA->>Cache: actions/cache (manual key)
    Cache-->>GHA: Cache restored/missed
    GHA->>pnpm: Install dependencies
    pnpm-->>GHA: Dependencies installed

    Note over GHA,pnpm: After (Built-in Caching)
    GHA->>Corepack: Enable corepack
    Corepack-->>GHA: pnpm available
    GHA->>SetupNode: Set up Node.js 22<br/>cache: "pnpm"<br/>cache-dependency-path: pnpm-lock.yaml
    SetupNode->>Cache: Auto-detect pnpm store
    Cache-->>SetupNode: Cache restored/missed
    SetupNode-->>GHA: Node.js + cache ready
    GHA->>pnpm: Install dependencies
    pnpm-->>GHA: Dependencies installed
```
</details>


<sub>Last reviewed commit: f1681a0</sub>

<!-- greptile_other_comments_section -->

<!-- /greptile_comment -->

---------

Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
Co-authored-by: Ubbe <hi@ubbe.dev>
2026-02-13 13:48:04 +00:00

4.8 KiB

Implementation Plan: SECRT-1950 - Apply E2E CI Optimizations to Claude Code Workflows

Ticket

SECRT-1950

Summary

Apply Pwuts's CI performance optimizations from PR #12090 to Claude Code workflows.

Reference PR

https://github.com/Significant-Gravitas/AutoGPT/pull/12090


Analysis

Current State (claude.yml)

pnpm caching (lines 104-118):

- name: Set up Node.js
  uses: actions/setup-node@v6
  with:
    node-version: "22"

- name: Enable corepack
  run: corepack enable

- name: Set pnpm store directory
  run: |
    pnpm config set store-dir ~/.pnpm-store
    echo "PNPM_HOME=$HOME/.pnpm-store" >> $GITHUB_ENV

- name: Cache frontend dependencies
  uses: actions/cache@v5
  with:
    path: ~/.pnpm-store
    key: ${{ runner.os }}-pnpm-${{ hashFiles('autogpt_platform/frontend/pnpm-lock.yaml', 'autogpt_platform/frontend/package.json') }}
    restore-keys: |
      ${{ runner.os }}-pnpm-${{ hashFiles('autogpt_platform/frontend/pnpm-lock.yaml') }}
      ${{ runner.os }}-pnpm-

Docker setup (lines 134-165):

  • Uses docker-buildx-action@v3
  • Has manual Docker image caching via actions/cache
  • Runs docker compose up without buildx bake optimization

Pwuts's Optimizations (PR #12090)

  1. Simplified pnpm caching - Use setup-node built-in cache:
- name: Enable corepack
  run: corepack enable

- name: Set up Node
  uses: actions/setup-node@v6
  with:
    node-version: "22.18.0"
    cache: "pnpm"
    cache-dependency-path: autogpt_platform/frontend/pnpm-lock.yaml
  1. Docker build caching via buildx bake:
- name: Set up Docker Buildx
  uses: docker/setup-buildx-action@v3
  with:
    driver: docker-container
    driver-opts: network=host

- name: Expose GHA cache to docker buildx CLI
  uses: crazy-max/ghaction-github-runtime@v3

- name: Build Docker images (with cache)
  run: |
    pip install pyyaml
    docker compose -f docker-compose.yml config > docker-compose.resolved.yml
    python ../.github/workflows/scripts/docker-ci-fix-compose-build-cache.py \
      --source docker-compose.resolved.yml \
      --cache-from "type=gha" \
      --cache-to "type=gha,mode=max" \
      ...
    docker buildx bake --allow=fs.read=.. -f docker-compose.resolved.yml --load

Proposed Changes

1. Update pnpm caching in claude.yml

Before:

  • Manual cache key generation
  • Separate actions/cache step
  • Manual pnpm store directory config

After:

  • Use setup-node built-in cache: "pnpm" option
  • Remove manual cache step
  • Keep corepack enable before setup-node

2. Update Docker build in claude.yml

Before:

  • Manual Docker layer caching via actions/cache with /tmp/.buildx-cache
  • Simple docker compose build

After:

  • Use crazy-max/ghaction-github-runtime@v3 to expose GHA cache
  • Use docker-ci-fix-compose-build-cache.py script
  • Build with docker buildx bake

3. Apply same changes to other Claude workflows

  • claude-dependabot.yml - Check if it has similar patterns
  • claude-ci-failure-auto-fix.yml - Check if it has similar patterns
  • copilot-setup-steps.yml - Reusable workflow, may be the source of truth

Files to Modify

  1. .github/workflows/claude.yml
  2. .github/workflows/claude-dependabot.yml (if applicable)
  3. .github/workflows/claude-ci-failure-auto-fix.yml (if applicable)

Dependencies

  • PR #12090 must be merged first (provides the docker-ci-fix-compose-build-cache.py script)
  • Backend Dockerfile optimizations (already in PR #12090)

Test Plan

  1. Create PR with changes
  2. Trigger Claude workflow manually or via @claude mention on a test issue
  3. Compare CI runtime before/after
  4. Verify Claude agent still works correctly (can checkout, build, run tests)

Risk Assessment

Low risk:

  • These are CI infrastructure changes, not code changes
  • If caching fails, builds fall back to uncached (slower but works)
  • Changes mirror proven patterns from PR #12090

Questions for Reviewer

  1. Should we wait for PR #12090 to merge before creating this PR?
  2. Does copilot-setup-steps.yml need updating, or is it a separate concern?
  3. Any concerns about cache key collisions between frontend E2E and Claude workflows?

Verified

  • claude-dependabot.yml: Has same pnpm caching pattern as claude.yml (manual actions/cache) — NEEDS UPDATE
  • claude-ci-failure-auto-fix.yml: Simple workflow with no pnpm or Docker caching — NO CHANGES NEEDED
  • Script path: docker-ci-fix-compose-build-cache.py will be at .github/workflows/scripts/ after PR #12090 merges
  • Test seed caching: NOT APPLICABLE — Claude workflows spin up a dev environment but don't run E2E tests with pre-seeded data. The seed caching in PR #12090 is specific to the frontend E2E test suite which needs consistent test data. Claude just needs the services running.