This file provides essential guidance for future Claude instances working on this repository, including: - Common development commands - High-level architecture overview - Testing structure and local testing instructions - Build process details - Key design decisions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
This is a GitHub Action written in Node.js that detects breaking API changes in Go code using the official golang.org/x/exp/cmd/apidiff tool. It analyzes Go API compatibility between commits and can comment on pull requests with detailed change reports.
Common Commands
Development
# Install dependencies
npm ci
# Run tests
npm test
# Run linting
npm run lint
# Run formatter
npm run format
# Build the action (compiles to dist/)
npm run build
# Run pre-commit hooks manually
pre-commit run --all-files
Testing the Action Locally
The action supports testing with environment variables:
# Test with directories
INPUT_OLD=testdata/break/old INPUT_NEW=testdata/break/new node index.js
# Test with git refs
INPUT_OLD=HEAD~1 INPUT_NEW=HEAD node index.js
Architecture
Core Components
-
index.js - Main entry point that:
- Reads GitHub Action inputs
- Determines which commits/directories to compare
- Orchestrates the apidiff run, parsing, and PR commenting
- Sets action outputs
-
lib/apidiff.js - Handles running the official apidiff tool:
- Installs
golang.org/x/exp/cmd/apidiffif not present - Supports both git refs and directory comparisons
- For directories: creates export files first, then compares them
- For git refs: runs apidiff directly on the commits
- Installs
-
lib/parser.js - Parses apidiff text output:
- Extracts breaking and compatible changes by package
- Converts to structured format
- Generates markdown reports for PR comments
-
lib/commenter.js - Manages PR comments:
- Creates or updates existing comments (identified by hidden tag)
- Requires
pull-requests: writepermission - Uses GitHub Actions toolkit for API access
Testing Structure
The testdata/ directory contains test cases:
clean/- No API changessafe/- Only compatible changes (additions)break/- Contains breaking changes
Each test case has old/ and new/ subdirectories with Go code.
Build Process
The action uses @vercel/ncc to compile all dependencies into a single dist/index.js file. This is required for GitHub Actions and must be committed to the repository.
Pre-commit Hooks
Configured with husky to run:
- ESLint and Prettier on JS files
- Pretty-format-json on JSON files (excluding package-lock.json)
- Builds dist/ and verifies it's up to date
Key Design Decisions
- Node.js wrapper around Go tool: Rather than reimplementing apidiff, this action wraps the official tool
- Support for both directories and git refs: Allows testing without git commits
- Structured parsing: Converts free-text apidiff output into structured data for better formatting
- Comment management: Updates existing comments rather than creating duplicates
Workflow Guidance
- When you open a PR, enable auto-merge, and watch CI checks until they complete and the PR merges. If CI fails, use the gh CLI to diagnose the error