Repository navigation
project-automation cannot create GitHub App token for FastLED project sync #2383
Description
Problem
The project-automation workflow is currently failing before it can sync issues/PRs to the project board.
Failing run/job:
- Run: https://github.com/FastLED/FastLED/actions/runs/24797158573
- Job: https://github.com/FastLED/FastLED/actions/runs/24797158573/job/72569883734
- Workflow:
project-automation - Event:
pull_request_target - Head branch/SHA:
fix-span-static-subviews/cce99e7738916f9419981866adeb3e356d6b00b8
The failure is not related to the PR code. The job fails in the Generate GitHub App token step before ci/github_project_sync.py runs.
Observed failure
actions/create-github-app-token@v1 is called from .github/workflows/project_automation.yml with:
app-id: ${{ vars.PROJECT_APP_ID }}
private-key: ${{ secrets.PROJECT_APP_PRIVATE_KEY }}
owner: ${{ vars.PROJECT_OWNER }}Current repo variables observed through the Actions variables API:
PROJECT_APP_ID=3422407PROJECT_OWNER=FastLEDPROJECT_NUMBER=1
The secret PROJECT_APP_PRIVATE_KEY exists and was last updated on 2026-04-18T15:41:00Z.
The workflow log shows:
repositories not set, creating token for all repositories for given owner FastLED
Failed to create token for FastLED (attempt 1): Not Found - https://docs.github.com/rest/apps/apps#get-a-user-installation-for-the-authenticated-app
...
RequestError [HttpError]: Not Found
request url: https://github.com/@api/users/FastLED/installation
The same authentication pattern is also used by .github/workflows/project_drift_sync.yml, so the nightly/project backfill sync is likely affected too.
Likely cause
The GitHub App identified by PROJECT_APP_ID=3422407 is not currently installed on the FastLED organization, or PROJECT_APP_PRIVATE_KEY belongs to a different GitHub App than app ID 3422407.
A missing repo variable is unlikely: the job passes the variable guard, and the action receives app ID 3422407 and owner FastLED.
Fix checklist
An org/repo admin should verify:
- GitHub App ID
3422407still exists and is the intended project-sync app. - The private key stored in
PROJECT_APP_PRIVATE_KEYwas generated from that exact app. - The app is installed on the
FastLEDorganization. - The app installation has access to the
FastLED/FastLEDrepository, or all repositories if the workflow should keep requesting an owner-wide token. - The app has the permissions needed by
ci/github_project_sync.pyandci/github_project_drift_sync.py, especially project access plus issue/PR metadata access.
Optional workflow hardening after the app is confirmed:
- Consider updating
actions/create-github-app-token@v1to the current major version. - Consider scoping the token to the repository with
repositories: FastLEDif org-wide repository access is not required. The project sync may still need organization project permissions, so this should be tested against both event sync and drift sync.
Validation
After the app installation/key pairing is corrected, re-run the failed project-automation job or trigger a new issue/PR event. Then manually run project-drift-sync with workflow_dispatch to confirm the nightly sync path also generates a token successfully.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
zackees commentedon Apr 22, 2026
Additional
ghinvestigation:ghauth is userzackeeswithrepo,workflow,project, andread:orgscopes.FastLED Tracker:https://github.com/orgs/FastLED/projects/1.gh api orgs/FastLED/installationsare:cursor, app ID1210556, installed for all reposclaude, app ID1236702, installed for all reposcoderabbitai, app ID347564, installed for all repos3422407.gh api repos/FastLED/FastLED/installationwith the user token returns401 A JSON web token could not be decoded; that endpoint is for GitHub App JWT auth, so it does not validate the workflow app from a normal PAT.Conclusion:
PROJECT_APP_ID=3422407is stale or refers to a GitHub App that has not been installed on the FastLED org. The next required step is admin/web UI work: locate app ID3422407under the app owner account and install it on FastLED, or create a replacement GitHub App and updatePROJECT_APP_IDplusPROJECT_APP_PRIVATE_KEY.zackees commentedon Apr 22, 2026
Repo-side follow-up completed:
PROJECT_APP_CLIENT_ID=Iv23liL4dLxjYFwTNWKt.actions/create-github-app-token@v1+app-idtoactions/create-github-app-token@v3+client-id:Use GitHub App client ID for project sync token #2384
This is the CLI-fixable workflow modernization step. It does not install the GitHub App. The FastLED-owned app still needs to be installed on the FastLED organization before token generation can succeed.
Current FastLED org installations visible from
gh api orgs/FastLED/installationsstill do not include app ID3422407/ client IDIv23liL4dLxjYFwTNWKt.zackees commentedon Apr 22, 2026
Applied the client-ID workflow update across the other feeder repos and added
PROJECT_APP_CLIENT_ID=Iv23liL4dLxjYFwTNWKtas a repo Actions variable everywhere.PRs:
Each feeder PR changes only
.github/workflows/add-to-project.ymlfromactions/create-github-app-token@v1/PROJECT_APP_IDtoactions/create-github-app-token@v3/PROJECT_APP_CLIENT_ID.Remaining non-CLI blocker is still the same: the GitHub App with app ID
3422407/ client IDIv23liL4dLxjYFwTNWKtmust be installed on the FastLED org.zackees commentedon Apr 22, 2026
Still reproducing after #2384 merged.
New failing run/job:
project-automationpull_request_targetf104eb88fc64957b9b756241086eb0d708a1b203, headf9b474446ba5f31a5939522263b489dcbeb34a72This run is using the post-#2384 config:
It still fails with:
So the earlier workflow fix corrected the action version/input (
client-id), but this is still blocked on org/app configuration: the app identified byPROJECT_APP_CLIENT_ID=Iv23liL4dLxjYFwTNWKtis not visible as installed for ownerFastLED, or the private key does not belong to that app. The scheduledproject-drift-syncworkflow has also been failing daily since at least 2026-04-19, which is consistent with the same root cause.zackees commentedon Apr 22, 2026
Follow-up on the post-#2384 failure: the run is no longer failing because of the old
app-id/v1 config. It is failing insideactions/create-github-app-token@v3before our Python project sync runs.The owner-only token path logs:
FastLEDis an organization, but the action's owner-only path is still using the/users/{owner}/installationlookup. I patched the workflows to pass explicitrepositoriesso the action uses the repository installation path instead:project_automation.yml: scope the token to the event repository.project_drift_sync.yml: scope the token to the known feeder repositories.I also made token generation best-effort: if the GitHub App is genuinely not installed or the private key/client ID is wrong, the workflows emit a warning and skip project sync instead of failing unrelated issue/PR checks.
zackees commentedon Aug 20, 2026
Resolved after the merged workflow update in PR #2384 and the subsequent organization-side app installation.
Live verification on 2026-08-20:
gh api orgs/FastLED/installationsnow reports app ID3422407(fastled-project-sync) installed for all repositories.project-automationruns are completing successfully, including https://github.com/FastLED/FastLED/actions/runs/32392228844.project-drift-syncrun is green today and for each of the prior nine sampled daily runs, including https://github.com/FastLED/FastLED/actions/runs/32327736596.actions/create-github-app-token@v3withPROJECT_APP_CLIENT_ID, and successful jobs proceed through the sync step.The original token-generation blocker no longer reproduces.