Skip to content

fix(reusable): name this repository when using its vendored actions - #122

Merged
rldyourmnd merged 1 commit into
mainfrom
fix/reusable-self-action-refs
Sep 20, 2026
Merged

rldyourmnd merged 1 commit into
mainfrom
fix/reusable-self-action-refs

Conversation

@rldyourmnd

Copy link
Copy Markdown
Contributor

./actions/... in a called workflow resolves against the caller's workspace, never against the repository that holds the workflow. Five uses: were written that way while vendoring, and every one of them fails at job setup for a cross-repository caller.

Two live failures, both observed today

ci-feedback.yml./actions/ci-feedback since 0.1.21. The job runs no checkout, so the workspace is empty. Its if: only fires on a failed conclusion, which is why three releases shipped with the CI-feedback path silently unable to publish anything. It was finally exercised in github-device-sync run 35541640707:

Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under
'/home/runner/work/github-device-sync/github-device-sync/actions/ci-feedback'

private-security-bundle-free.yml — four ./actions/tool-cache references added in 0.1.22/0.1.23, replacing NDDev-Archive/github-actions-garm/actions/tool-cache@468af475, which was fully qualified and worked. This workflow does check out the caller, so the relative path resolved into the caller's tree. NDDev-it-com/setup-systems run 35541466805:

Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under
'.../setup-systems/setup-systems/actions/tool-cache'

Fix

All five now name the repository and pin it: NDDev-OpenNetwork/ci-workflows/actions/<name>@96215b32. That commit is 0.1.23, where both vendored actions already live, so the pin is real and immutable rather than a forward reference.

catalog/cache-contract.yml declares the producer under the same string — cache-contract compares the uses: text exactly, and caught the mismatch when only the workflow was changed.

Vendoring the actions was right. Addressing them with ./ was not: a called workflow has no path to its own repository unless it names it.

Verification

validate_all.py --tier coreRC=0, 47 validators OK, zero failures, including cache-contract, pinned-actions, actionlint-contract and runner-routing.

Consumer impact

The estate-wide convergence onto 0.1.23 is held for this. The four private callers of private-security-bundle-free.yml (setup-systems, nddev-platform-backend, nddev-seo-service, nddev-observability-service) cannot pass on 0.1.23; every reusable caller of ci-feedback.yml is affected too. Consumers will be pointed at the release carrying this fix instead.

🤖 Generated with Claude Code

`./actions/...` in a called workflow resolves against the caller's workspace,
never against the repository that holds the workflow. Five `uses:` were
written that way while vendoring, and each fails at job setup for every
cross-repository caller.

ci-feedback.yml has used `./actions/ci-feedback` since 0.1.21. It runs no
checkout, so the workspace is empty and the step cannot resolve. Its job only
fires on a failed conclusion, which is why three releases shipped with the
CI-feedback path silently unable to publish: github-device-sync run
35541640707 finally exercised it and reported `Can't find 'action.yml' ...
under /home/runner/work/github-device-sync/github-device-sync/actions/ci-feedback`.

private-security-bundle-free.yml gained four `./actions/tool-cache`
references in 0.1.22/0.1.23, replacing a fully-qualified archived-repository
pin that worked. This workflow does check out the caller, so the path resolved
into the caller's tree: setup-systems run 35541466805 failed with `Can't find
'action.yml' ... under .../setup-systems/setup-systems/actions/tool-cache`.

All five now name the repository and pin it at 96215b3 (0.1.23), the commit
where both vendored actions already live. catalog/cache-contract.yml declares
the producer under the same string, which is what cache-contract compares.

Vendoring the actions was right; addressing them with `./` was not. A called
workflow has no path to its own repository unless it names it.

Signed-off-by: rldyourmnd <danil@nddev.it.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions github-actions Bot added ci and removed ci labels Sep 20, 2026
@rldyourmnd
rldyourmnd merged commit 37a827f into main Sep 20, 2026
28 checks passed
@rldyourmnd
rldyourmnd deleted the fix/reusable-self-action-refs branch September 20, 2026 22:35
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