Repository navigation
Roll out add-issues-to-project and check-pr-issue-link to internal repos #12
Description
Problem
add-issues-to-project.yml (#10) and check-pr-issue-link.yml exist as reusable workflows in stacklok/.github, but only a handful of repos actually call them. Most repos tracked by the /eng-report skill's team-config.yaml (in StacklokLabs/stackforce-skills) have neither workflow wired up, so issues opened in those repos aren't landing on project 73 (Stacklok Engineering) and PRs there aren't checked for a linked issue.
Both workflows mutate internal state (an internal Projects v2 board, and depend on internal App credentials) and are documented as internal-use-only, even though stacklok/.github itself is public. They should only be added to internal (private) repos, not public ones.
Scope
Repos are taken from the repos: list in team-config.yaml. Of the 41 repos listed, 7 are internal (private) — the rest are public and are explicitly out of scope for this change.
Internal repos to update
| Repo | add-issues-to-project.yml |
check-pr-issue-link.yml |
Notes |
|---|---|---|---|
stacklok/atrium |
Add | Add | Neither workflow present today. |
stacklok/infra |
Add | Add | Already calls stacklok/.github's needs-triage.yml; follow the same reusable-workflow pattern. |
stacklok/claude-plugins |
Migrate | Repoint | Already has a repo-local copy of add-issues-to-project.yml (the original this was extracted from) — replace with a thin caller of stacklok/.github's reusable workflow. Already calls check-pr-issue-link.yml, but from StacklokLabs/workflow-templates@main, not stacklok/.github — repoint to stacklok/.github's copy for consistency with every other repo. |
stacklok/stacklok-enterprise-platform |
Skip | Add | Already covered by project 73's one-repo automatic-add quota via the built-in Projects automation — adding add-issues-to-project.yml here would be redundant/conflicting. Already calls stacklok/.github's needs-triage.yml, so the pattern for adding a reusable-workflow caller is established in this repo. |
Repos dropped from scope
stacklok/vantage-etl, stacklok/PoC-Demo-Deploy, and stacklok/stacklok-epics are internal but excluded from this rollout: they're not under active development, or are internal management tooling rather than product repos where untracked issues/unlinked PRs are a meaningful problem.
Repos explicitly out of scope (public)
All other repos in team-config.yaml's repos: list are public and must not get either workflow: stacklok/brood-box, stacklok/dockyard, stacklok/docs-website, stacklok/frizbee, stacklok/frizbee-action, stacklok/go-microvm, stacklok/homebrew-tap, stacklok/releaseo, stacklok/toolhive, stacklok/toolhive-catalog, stacklok/toolhive-cloud-ui, stacklok/toolhive-core, stacklok/toolhive-registry-server, stacklok/toolhive-rfcs, stacklok/toolhive-studio, stacklok/waggle, stacklok/mcp-template-py, and all 15 StacklokLabs/* repos.
GitHub App credentials — blocker for add-issues-to-project.yml
add-issues-to-project.yml requires an app-id/app-private-key secret pair for a GitHub App installed on the stacklok org with Organization Projects: Write permission (the default GITHUB_TOKEN cannot write to an org Projects v2 board). Audited repo secrets (gh secret list) across the repos that need this workflow:
| Repo | Existing App-shaped secrets | Usable as-is? |
|---|---|---|
stacklok/atrium |
MIRROR_APP_PRIVATE_KEY, RELEASE_APP_PRIVATE_KEY |
No — unrelated Apps, no Projects scope. |
stacklok/infra |
MODULES_APP_ID, TERRAFORM_GITHUB_APP_ID, STACKLOK_INFRA_ENTERPRISE_APP_KEY |
No — unrelated Apps, no Projects scope. |
stacklok/claude-plugins |
FLOW_METRICS_APP_ID, FLOW_METRICS_APP_PRIVATE_KEY |
Yes — App installation permission has already been bumped to Organization Projects: Write. No further action needed for this repo. |
stacklok/claude-plugins is fully covered — the FLOW_METRICS_APP_ID App now has Organization Projects: Write, and its secrets are already in place. stacklok/atrium and stacklok/infra still need a usable App+secret pair — blocked pending the org admin provisioning the App(s) for these two repos (either reusing the FLOW_METRICS_APP_ID App or creating new ones with Organization Projects: Write). Secret names for app-id/app-private-key in each repo will be decided once the App(s) exist, to match whatever naming the admin settles on.
Adding a GitHub App's credentials as a repo secret is something an org admin does directly in the GitHub UI (Settings → Secrets and variables → Actions, per repo) — not something scriptable via the API with a personal token.
Implementation notes
- Prerequisite (blocked): org admin to provision/confirm the App(s) with Organization Projects: Write for
atriumandinfra, then add its credentials as repo secrets. Exact secret names TBD once the App(s) are settled.claude-pluginsneeds no changes — already has the App's credentials and the permission bump. - For
add-issues-to-project.ymlcallers: passproject-number: 73and the App credentials (app-id/app-private-key) as secrets;status-option-namedefaults toIceboxandownerdefaults tostacklok, so neither needs to be set explicitly for the common case. Trigger onissues: types: [opened]. - For
check-pr-issue-link.ymlcallers: trigger onpull_request: types: [opened, edited, reopened, synchronize], and declarepermissions: pull-requests: write/issues: writein the caller workflow (the reusable workflow does not grant these itself — see itsworkflow_call:comment). No App credentials needed for this workflow. - Reference implementation for both callers:
stacklok/stacklok-enterprise-platform/.github/workflows/triage.yml, which already calls astacklok/.githubreusable workflow (needs-triage.yml) and can be used as a template for theuses:+with:/secrets:shape.
Acceptance criteria
- The
FLOW_METRICS_APP_IDApp has Organization Projects: Write permission on itsstacklokorg installation. (done) - App(s) with Organization Projects: Write are provisioned for
atriumandinfra, and theirapp-id/app-private-keysecrets are added under names TBD once the App(s) are settled. (claude-pluginsalready has these — no action needed.) -
stacklok/atriumandstacklok/infracall bothadd-issues-to-project.ymlandcheck-pr-issue-link.ymlfromstacklok/.github. -
stacklok/stacklok-enterprise-platformcalls onlycheck-pr-issue-link.yml(notadd-issues-to-project.yml). -
stacklok/claude-plugins's repo-localadd-issues-to-project.ymlis removed and replaced by a caller of the reusable workflow; itscheck-pr-issue-link.ymlcaller is repointed fromStacklokLabs/workflow-templatestostacklok/.github. - No public repo (from
team-config.yamlor otherwise) has either workflow added. - A new issue opened in each updated repo appears on project 73 (except
stacklok-enterprise-platform, which is already covered) and a PR without a linked issue is flagged bycheck-pr-issue-link.yml.
Related
- Reusable workflow: feat: add add-issues-to-project reusable workflow #10
- Tracking issue for the reusable workflow itself: Auto-add new issues to the Stacklok Engineering board to reduce untracked/unlinked work #11
Activity