Skip to content

chore: add Contributor License Agreement workflow#430

Merged
jedrazb merged 3 commits into
mainfrom
worktree-sleepy-orbiting-wilkes
May 9, 2026
Merged

chore: add Contributor License Agreement workflow#430
jedrazb merged 3 commits into
mainfrom
worktree-sleepy-orbiting-wilkes

Conversation

@jedrazb
Copy link
Copy Markdown
Contributor

@jedrazb jedrazb commented May 9, 2026

Self-hosted CLA enforcement. Contributors sign once via a PR comment; signatures are recorded in signatures/version1/cla.json, matched on stable GitHub user ID, and recognized on every future PR.

Built our own because contributor-assistant/github-action was archived in March 2026. Bot wording matches its templates so the experience is familiar.

What's in here

File Role
CLA.md Apache 2.0 ICLA, party names substituted
.github/workflows/cla.yml Thin orchestrator, only third-party action is actions/checkout (SHA-pinned)
.github/cla/cla.sh Workflow logic
.github/cla/cla.test.sh 41 hermetic tests, wired into ci.yml
CONTRIBUTING.md, README.md New CLA section + Contributing pointer

Allowlist

Three layers: literal allowlist (dependabot[bot], etc. + jedrazb), eigenpal org membership (auto-recognizes 3 public members today), and the signatures JSON.

Manual follow-ups after merge

  1. Comment recheck on existing open external pull requests so the workflow evaluates them.
  2. Once those are clean, mark the CLA status check as required in branch protection.
  3. Counsel review of CLA.md before flipping the required check on.

🤖 Generated with Claude Code

Self-hosted CLA enforcement. Contributors sign once by posting a magic
phrase as a PR comment; signatures are recorded in
signatures/version1/cla.json and matched on stable GitHub user ID, so
returning signers are recognized automatically on every future PR.

- CLA.md: Apache 2.0 ICLA, party names substituted
- .github/workflows/cla.yml: triggers on PR open/sync/reopen and on PR
  comments containing the sign phrase or `recheck`
- .github/cla/cla.sh: workflow logic, sourceable + testable
- .github/cla/cla.test.sh: 37 hermetic tests (no network, no git, no gh)
- ci.yml: runs the CLA tests on every PR
- CONTRIBUTING.md: CLA section above "Making Changes"
- README.md: short Contributing pointer

Allowlists bots, named maintainers, and members of the eigenpal org
(via gh api orgs/eigenpal/members/<login>). Wording in bot comments
matches the templates from contributor-assistant/github-action so the
experience is familiar to contributors who have signed CLAs elsewhere.

Manual follow-ups after merge:
- Comment `recheck` on existing open external PRs to evaluate them.
- Once those are clean, mark the "CLA" status check as required in
  branch protection.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docx-editor Ready Ready Preview, Comment May 9, 2026 8:10pm

Request Review

Two findings from /review on the CLA workflow:

1. Commits whose author email isn't linked to any GitHub account were
   silently dropped from the CLA check — same flaw as the original
   contributor-assistant action's gate. Now surfaced in the bot
   comment with the standard "link your email" instruction (text
   matches the original action). Per upstream, the gate stays
   warn-only: it does not block on unknowns.

2. Combined the two `gh pr view` calls (commits + headRefOid) into one,
   one fewer API request per workflow run.

41 tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two findings from /simplify on the CLA workflow:

1. The "is this user allowlisted-or-org-member" check was duplicated in
   cla_main — once for the sign-comment author, once in the partition
   loop. Extracted to cla_should_skip(login, allowlist, org).

2. cla_unsigned was no longer called by cla_main (which does its own
   inline partition). Existed only to be tested. Deleted; the underlying
   filter logic is now tested directly via cla_should_skip + cla_signed.

Net: production code shrinks by ~6 lines, test code by ~25, with no
loss of coverage. 41 tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jedrazb jedrazb merged commit 21fef23 into main May 9, 2026
4 checks passed
@jedrazb jedrazb deleted the worktree-sleepy-orbiting-wilkes branch May 9, 2026 20:37
jedrazb added a commit that referenced this pull request May 11, 2026
Brings in 13 main commits:
- #425 (f7a1060): header/footer table render + inline-editor parity
  (core HF measurement + renderPage + editor.css; React PagedEditor /
  DocxEditor / InlineHeaderFooterEditor).
- #441 (cbff36e): resolve themed table-cell border colors against the
  document theme.
- #429 (2158433): Turkish (tr) translation, 100% coverage.
- #430#437 + the per-PR signature commits: Contributor License
  Agreement workflow (.github/cla/*, .github/workflows/cla.yml,
  CLA.md, signatures/version1/cla.json) and its follow-ups.

Conflict resolution:
- .github/workflows/ci.yml: kept the train's three-job layout
  (lint / test / build needs:[lint,test]); added main's
  "CLA logic tests" step (bash .github/cla/cla.test.sh) to the
  test job.
- i18n tr.json: main added it under the pre-rename path
  packages/react/i18n/; relocated to packages/i18n/ (the shared
  @eigenpal/docx-editor-i18n package from #444), ran i18n:fix to add
  the 5 newer dialogs.insertTable.* keys as null, and listed `tr` in
  packages/i18n/README.md.
- React DocxEditor.tsx: kept the train's resolveHeaderFooter() core
  helper; adopted #425's fix of resolving headers/footers against
  finalSectionProperties ?? initialSectionProperties (was
  initialSectionProperties only).
- React PagedEditor.tsx: kept the train's version (measureTableBlock
  already lives in core); ported #425's measureTableCellBlockVisualHeight
  (image-only single-line paragraphs use intrinsic image height) and
  per-cell vertical-border-height contribution into
  core/layout-bridge/measureTable.ts; retargeted the new
  PagedEditor.tableMeasure.test.ts onto @eigenpal/docx-editor-core
  (was @eigenpal/docx-core).

All 6 packages typecheck. Core layout-bridge tests + the new
table-measure test pass; i18n parity gate green.

Known pre-existing failure (NOT a merge regression): e2e
hf-toolbar-and-zindex.spec.ts:9 ("removing a header still allows
recreating it") fails identically on origin/main.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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