1
0
Fork 0
mirror of https://github.com/imjasonh/apidiff-action synced 2026-07-06 22:52:43 +00:00

Add CLAUDE.md for Claude Code guidance

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>
This commit is contained in:
Jason Hall 2025-07-30 08:34:48 -04:00
parent ca7b01f792
commit 068aae0845
Failed to extract signature

105
CLAUDE.md Normal file
View file

@ -0,0 +1,105 @@
# 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
```bash
# 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:
```bash
# 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
1. **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
2. **lib/apidiff.js** - Handles running the official apidiff tool:
- Installs `golang.org/x/exp/cmd/apidiff` if 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
3. **lib/parser.js** - Parses apidiff text output:
- Extracts breaking and compatible changes by package
- Converts to structured format
- Generates markdown reports for PR comments
4. **lib/commenter.js** - Manages PR comments:
- Creates or updates existing comments (identified by hidden tag)
- Requires `pull-requests: write` permission
- Uses GitHub Actions toolkit for API access
### Testing Structure
The `testdata/` directory contains test cases:
- `clean/` - No API changes
- `safe/` - 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
1. **Node.js wrapper around Go tool**: Rather than reimplementing apidiff, this action wraps the official tool
2. **Support for both directories and git refs**: Allows testing without git commits
3. **Structured parsing**: Converts free-text apidiff output into structured data for better formatting
4. **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