Repository navigation
Merge devantler-tech/actions into devantler-tech/.github as the single home for GitHub software and configuration #164
Description
🤖 Generated by the Agentic Engineer
Evidence
The suite hosts its GitHub tooling in two repositories that serve one concern:
| repo | holds | released as |
|---|---|---|
devantler-tech/.github |
org profile, workflow-templates/, org governance workflows (repository drift check, stale-repository identifier), shared lint/review config |
v1.22.8 |
devantler-tech/actions |
16 composite actions, 19 workflows incl. the reusable ones | v13.0.9 |
actions is itself the product of this same consolidation: devantler-tech/reusable-workflows was merged into it and archived in July 2026, and that repo is archived today. The pattern is proven in this org; this issue applies it one step further, to the last remaining split.
.github is already the org-wide GitHub configuration repo — it is the only repo where profile/ and workflow-templates/ do anything at all. That makes it the natural single home for GitHub-related software and configuration, rather than a coin-flip between two candidates.
Problem and audience
The audience is anyone — human or agent — changing CI for this portfolio. Today a change to "how our repositories build" lands in one of two places depending on whether it is an action, a reusable workflow, an org template, or a governance workflow, and the boundary is historical rather than principled. Two repos also means two release trains, two AGENTS.md, two review configs, and two sets of repo settings to keep from drifting.
Hypothesis
Consolidating into .github gives one home, one release train, and one set of conventions for all GitHub-related software and configuration — removing a whole class of "which repo does this belong in?" decision and the drift that follows from answering it inconsistently.
Required layout — maintainer direction, 2026-08-20
Composite actions live in an actions/ folder at the root of .github, so a reference reads:
uses: devantler-tech/.github/actions/aggregate-job-checks@<ref>Two reasons, both binding: it keeps the repository root uncluttered rather than scattering ~16 action directories across it, and it keeps the word actions in the pointer so the reference still says what it is.
Reusable workflows cannot follow the same pattern, and that is a GitHub constraint rather than a choice. A reusable workflow is only callable from .github/workflows/ in its host repo, so in a repo named .github the reference necessarily doubles the segment:
uses: devantler-tech/.github/.github/workflows/validate-go-project.yaml@<ref>That is correct and expected. Record it plainly wherever the convention is documented, so nobody later "fixes" it into something that does not resolve.
Success signal
devantler-tech/actionsis archived, and no non-archived repo in the org references it.- Every consumer builds green on the
.github-hosted equivalents. profile/andworkflow-templates/still work — the org-special behaviours.githubuniquely provides are not regressed by the move.
Cost, measured
154 code references to devantler-tech/actions across the org, of which 83 are uses: call sites — the ones that break on a move — spread over ~14 repositories, the largest being platform (24), monorepo (11), ksail (5) and platform-tenant-template (5).
Roughly split between the two kinds: in a local sweep of the monorepo and its populated submodules, reusable-workflow and composite-action references appear in comparable numbers, so neither half of the move is a rounding error.
The hard part — and a correction to an earlier version of this issue
An earlier revision of this issue claimed the two release trains collide "backwards", because actions is at v13.0.9 while .github is at v1.22.8, and that consumers would be asked to repoint to a lower version for the same code.
That risk is real but overstated, and the measurement is worth having before the Spike starts. Consumers do not resolve by tag: of 1,434 uses: devantler-tech/actions references in the local sweep, 1,418 are pinned to a 40-character SHA and 0 to a version tag, with the version carried as a trailing # vX.Y.Z comment for update tooling. So tag ordering does not affect resolution at all.
What it does affect is narrower: how Renovate/Dependabot detect and present updates, what the version comment means after the move, and human legibility of a pin that appears to go backwards. That is a tractable problem about update tooling rather than a correctness problem about resolution — but it still needs a decision before 83 call sites are rewritten, which is what #165 exists for.
Constraints
.githubis a special repository:profile/README.mdrenders the public org profile andworkflow-templates/supplies org workflow templates. Any layout chosen must preserve both.- The cutover should allow a period where both references resolve, so consumers can be repointed incrementally rather than in one flag-day change across 14 repos.
actionsis archived only once nothing references it — archiving is the last step, not the first.
Definition of done
Decomposed into sub-issues and closed when they are. Not implemented directly.
Metadata
Metadata
Assignees
Labels
Type
Fields
Projects
- StatusShow more project fields📥 Backlog
Activity
devantler commentedon Oct 2, 2026
Fresh native child readback finds 11 children: five closed and six open (#237, #238, #239, #240, #242 and #250). The catalogue's new scanner controls and default-on shell guard are merged, but those deliveries do not complete consolidation.
The migration decision is now narrower and recorded on the children: Dependabot's first catalogue upgrade has shipped (#238), whereas shared Go/signed-autofix consumer execution remains unproven. Required-workflow sources still point at legacy Actions (#237); publisher identity migration is still unimplemented (#242). Legacy Actions also has an intentional release backport issue, which must be delivered or explicitly disposed of before archival (#240).
Keep the epic open until the remaining child acceptance gates have readback proof. No repository was archived or consumer check relaxed by this refresh.