Skip to content

Add run-claude-action composite action#67

Closed
kacper-mikolajczak wants to merge 2 commits into
Expensify:mainfrom
kacper-mikolajczak:slice2-cca-composite
Closed

Add run-claude-action composite action#67
kacper-mikolajczak wants to merge 2 commits into
Expensify:mainfrom
kacper-mikolajczak:slice2-cca-composite

Conversation

@kacper-mikolajczak
Copy link
Copy Markdown
Contributor

@kacper-mikolajczak kacper-mikolajczak commented May 25, 2026

Details

Adds a new composite action under .github/actions/run-claude-action/ that centralises the anthropics/claude-code-action SHA pin currently duplicated across the three client repos that run the Claude PR review pipeline (Expensify/App, Expensify/Auth, Expensify/Web-Expensify).

The composite is intentionally thin: it pins the upstream action SHA, sets the common defaults (display_report, allowed_non_write_users, --model claude-opus-4-6), and forwards structured_output. Caller-specific concerns - the claude-review-toolkit setup, the eyes-reaction lifecycle, the post-violations loop, and any schema extension - remain in the caller workflow.

Pinned to anthropics/claude-code-action@ba026a3e56b9f646ae3b1be02dd9c0812aa2f8ae # v1.0.86, the SHA all three client repos use on main today, so net steady-state behaviour after all client adoption PRs land is zero change.

Inputs:

  • anthropic_api_key, github_token, prompt (required)
  • model (default claude-opus-4-6)
  • claude_args (passthrough; --allowedTools and --json-schema stay caller-side because they vary per invocation)
  • allowed_non_write_users (default *)
  • display_report (default true)

Output:

  • structured_output (passthrough)

Bumping the upstream SHA in the future requires editing only this composite instead of three workflow files.

Related Issues

https://github.com/Expensify/Expensify/issues/635397

Client adoption PRs (referencing this branch's head SHA as a placeholder; will be re-stamped to the merged-main SHA after this PR lands):

Manual Tests

actionlint and validateActions cover the YAML; runtime parity verified against the three client invocations on main (same SHA pin, same defaults).

Centralises the anthropics/claude-code-action SHA pin currently duplicated
across Expensify/App, Expensify/Auth, and Expensify/Web-Expensify into a
single composite. Client workflows consume this via
Expensify/GitHub-Actions/.github/actions/run-claude-action@<sha> so future
pin bumps only need to land here.

The composite stays thin: it sets the common defaults (model, display_report,
allowed_non_write_users) and forwards structured_output. Caller-specific
concerns (toolkit setup, eyes reaction, post-violations loop, schema
extension) remain in the caller workflow.
The composite forced --model claude-opus-4-6 by default, but Auth and
Web-Expensify currently run on claude-sonnet-4-6 (the CLI's built-in
default since they don't pass --model). Forcing Opus is a real
behaviour change.

Move model selection into claude_args - App passes
--model claude-opus-4-6 explicitly; Auth and Web let the CLI default
apply. Composite stays a pure SHA-pin wrapper.
@kacper-mikolajczak
Copy link
Copy Markdown
Contributor Author

Superseded by #68 (consolidated slice 2 work into one PR per repo).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant