chore(cla): point the agreement link at the canonical repository (ENG-2017) - #409
Merged
Merged
Conversation
…-2017) The URL this passed was an alias that redirects to the repository actually holding the file, and it served byte-identical content, so nothing a contributor reads changes. An alias stops being harmless the moment somebody creates a repository at that name, and this is the page a contributor reads before agreeing to it. Ten library repos moved to the canonical name in the same change set; this makes all thirteen agree. Refs: ENG-2017
7 tasks
The shared reusable now declares `actions: read`, so write buys this caller nothing: a called workflow can never hold more than its caller grants, and the callee's own declaration caps it further. The only write the scope would buy is pullRerunRunner.ts re-running a previously failed CLA run, and that API refuses a GITHUB_TOKEN. Dropping the scope entirely is not an option, because the same file lists the repo's workflows first and main.ts turns any throw into a failed job. This is the grant the README documents for a caller, and this repo was one of three still on the old one.
…2017)
The allowlist moved into mindsdb/github-actions and is bots only. This repo
carried one of six hand-maintained copies naming people, and 11 of the 25 names
across those copies had already left the org while still being exempt from
signing. Staff sign like everybody else now. A bot cannot sign, so the two that
actually open pull requests in this org stay exempt in the reusable.
Dropping the line also drops two defects that rode inside it. `bot*` compiled to
an unanchored `new RegExp("bot.*").test(login)`, so it exempted any login
containing "bot", `robotnik` and `sabotage` included. And `Stpmax` never matched
the real login `StpMax`, because non-wildcard entries are compared with a
case-sensitive `===`.
Needs mindsdb/github-actions#56 first, which gives the input a default.
mindsdb-devops
approved these changes
Aug 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User story
As an outside contributor being asked to sign a contributor agreement
I want the link to name the repository that actually holds the document
So that what I read cannot be changed by somebody claiming an unused repository name
Why this matters
The URL this workflow passed is an alias. It redirects to the repository that actually holds the agreement, and it serves byte-identical content,
md5 1d587ab6722aa5dd0885ed1daad806d7. So nothing a contributor reads changes today.An alias holds only while nobody occupies the name. Anyone who creates a repository at the old name takes the URL, and the redirect stops. The page this points at is the one a contributor reads immediately before agreeing to it, which makes it a worse place than most to leave that open.
This is the same shape as the other supply-chain finding in this change set.
cla-assistant/github-action, referenced by three library repos, is also an alias for a repository under a different name, and the fix there was the same: name the thing that actually serves the content.The org used two different aliases for one document.
antonpassed one,coworkandcowork-serverpassed another, and the ten library repos in this change set passed a mix. All of them resolve to the same file. After this, all thirteen name the same repository.Acceptance criteria
How to test
clabranch is untouched.Notes for the reviewer
The allowlist is gone from this file, and staff now sign like everybody else. Fifteen repositories carried six different hand-maintained copies naming 25 people between them, and 11 of those 25 had already left the org while still being exempt from signing. It now defaults in the reusable and is bots only:
dependabot[bot]andmindsdb-release-train[bot], the two that actually open pull requests in this org. A bot cannot post the agreement sentence, so without an exemption its pull request is red forever.Dropping the line also drops two live defects that rode inside it.
bot*compiled to an unanchorednew RegExp("bot.*").test(login), so it exempted any login containing "bot", includingrobotnikandsabotage; anyone could opt out of the CLA by choosing a username. AndStpmaxnever matched the real loginStpMax, because non-wildcard entries use a case-sensitive===. Needs mindsdb/github-actions#56, which gives the input its default.The green
CLAssistantrow on this pull request does not exercise this change.pull_request_targetloads the workflow from the base branch, so the check that passed here is the copy this PR replaces, running onmdb-dev. The new job cannot test itself on its own pull request; it is exercised on the first pull request opened after this merges.One line, and deliberately only one line. The agreement itself is not changing and neither is the ledger. This repo already runs the CLA check on a hosted runner through the shared reusable, which is what the rest of ENG-2017 is bringing the other ten repos up to.
Based off
staging, so it reachesmainon the next release.pull_request_targetevaluates the workflow from the pull request's base branch, so this takes effect for staging-targeting PRs on merge and for main-targeting PRs after the release train carries it across.Verified locally
actionlinton the changed filecurlof both URLs,md5 1d587ab6722aa5dd0885ed1daad806d7on each, anddiffreports no difference.Ships with
The ENG-2017 change set, which takes the CLA check off the in-cluster runners in
ten library repos and hardens the shared reusable. This repo already called that
reusable, so only the document link changes here.
Anchor: mindsdb/github-actions#55.
Merge order: the anchor first, and that is a requirement rather than a
preference. This wrapper grants
actions: read, and untilmindsdb/github-actions#55 merges the reusable still declares
actions: write.A called workflow's permissions are enforced when its file is loaded, so a
callee naming a scope its caller has not granted rejects the whole run as a
startup_failurewith zero jobs, and there is no job left to report it. Therun is red, the CLA gate is down, and nothing announces either.
Refs: ENG-2017