Files
copilotkit__copilotkit/.github/workflows/static_check-binaries.yml
Benjamin Taylor b77ebb435f chore: stop changeset files from reappearing in PRs
The repo migrated off @changesets/* to conventional-commit-driven releases
(scripts/release/ reads commit subjects from git log <lastTag>..HEAD), but
.changeset/ has been removed twice already (5afa55f067, 1e5ba689e0) and five
open PRs currently carry changeset files again. Two mechanisms keep feeding it:
contributor forks whose default branch still has the pre-cleanup .changeset/
debris, and plain convention inference — the repo reads as a Changesets repo
(pnpm monorepo, Changesets-formatted CHANGELOG.md files, "chore: release" PRs)
and nothing anywhere said otherwise.

- CONTRIBUTING.md: explain that we used Changesets, what replaced it, and what
  to do instead (a good conventional commit subject).
- AGENTS.md / CLAUDE.md: same rule for coding agents, which author most of
  these PRs and don't read CONTRIBUTING.md.
- static / check binaries: fail on added .changeset/* files, so this stops
  depending on review catching it. Filters on added/modified only, so a PR
  that deletes stale changesets still passes.
- .oxfmtrc.json: drop the ignore entry for the long-gone vendored
  .github/actions/changesets-action, a stale "we use changesets" signal.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 14:15:44 -05:00

119 lines
4.3 KiB
YAML

name: static / check binaries
on:
pull_request:
branches: [main]
permissions:
contents: read
jobs:
check-config-files:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false
- name: Check build config allowlist
run: bash .github/scripts/check-config-allowlist.sh
check-binaries:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
persist-credentials: false
- name: Check for binary artifacts and files that don't belong
env:
BASE_REF: ${{ github.event.pull_request.base.ref }}
run: |
VIOLATIONS=0
# Get list of added/modified files in the PR
CHANGED_FILES=$(git diff --name-only "origin/${BASE_REF}...HEAD")
if [ -z "$CHANGED_FILES" ]; then
echo "No changed files detected."
exit 0
fi
# Check for binary file extensions
BINARY_FILES=$(echo "$CHANGED_FILES" | grep -iE '\.(exe|dll|so|dylib|o|obj|a|lib|wasm)$' || true)
if [ -n "$BINARY_FILES" ]; then
echo "::error::Binary files detected in PR:"
echo "$BINARY_FILES"
VIOLATIONS=1
fi
# Check for build directories
BUILD_FILES=$(echo "$CHANGED_FILES" | grep -E '/build/' || true)
if [ -n "$BUILD_FILES" ]; then
echo "::error::Files in build directories detected in PR:"
echo "$BUILD_FILES"
VIOLATIONS=1
fi
# Check for dSYM directories
DSYM_FILES=$(echo "$CHANGED_FILES" | grep -E '\.dSYM/' || true)
if [ -n "$DSYM_FILES" ]; then
echo "::error::dSYM debug symbol directories detected in PR:"
echo "$DSYM_FILES"
VIOLATIONS=1
fi
# Check for Changesets files. This repo migrated off @changesets/* to
# conventional-commit-driven releases: scripts/release/ reads commit
# subjects, so .changeset/*.md files are inert. Filter on added/modified
# only, so a PR that *deletes* stale changesets still passes.
CHANGESET_FILES=$(git diff --name-only --diff-filter=AM "origin/${BASE_REF}...HEAD" -- '.changeset' || true)
if [ -n "$CHANGESET_FILES" ]; then
echo "::error::Changeset files detected in PR:"
echo "$CHANGESET_FILES"
echo "This repo no longer uses Changesets — releases are driven by conventional commit subjects (see scripts/release/)."
echo "Nothing reads .changeset/*.md. Delete these files and describe the change in your commit subject instead."
echo "See the 'Changelogs and releases' section of CONTRIBUTING.md."
VIOLATIONS=1
fi
# Check for large files (>1MB) among changed files
# Exclude known large files: lockfiles, assets, bundled actions
LARGE_FILES=""
while IFS= read -r file; do
if [ -f "$file" ]; then
case "$file" in
pnpm-lock.yaml|*/pnpm-lock.yaml|*/package-lock.json|*/poetry.lock) continue ;;
assets/*|examples/*/preview.gif|examples/*/assets/*) continue ;;
.github/actions/*/dist/*) continue ;;
showcase/shell/src/data/*|showcase/shell-docs/src/data/*|showcase/shell-dojo/src/data/demo-content.json) continue ;;
esac
SIZE=$(wc -c < "$file" | tr -d ' ')
if [ "$SIZE" -gt 1048576 ]; then
LARGE_FILES="${LARGE_FILES}${file} ($(( SIZE / 1024 )) KB)\n"
fi
fi
done <<< "$CHANGED_FILES"
if [ -n "$LARGE_FILES" ]; then
echo "::error::Files over 1 MB detected in PR:"
echo -e "$LARGE_FILES"
VIOLATIONS=1
fi
if [ "$VIOLATIONS" -eq 1 ]; then
echo ""
echo "This PR contains files that should not be committed (see the errors above)."
echo "Please remove them and update your .gitignore if needed."
exit 1
fi
echo "No binary artifacts or oversized files detected."