CI hardening: testdriver.yml uses testdriverai/action@main (mutable branch) in a job holding DASHCAM_API + GITHUB_TOKEN
Nobody has claimed this yet.
Assessment
- Difficulty
- 1/5
- Estimated time
- Under an hour
- Newbie friendliness
- 85/100
Research direction
Open .github/workflows/testdriver.yml and inspect the testdriverai/action@main reference in the run_testdriver job. Find the current full commit SHA for that action, replace the mutable ref with the SHA and an explanatory comment, then validate that the workflow has no other required changes.
Written by the indexing model from the issue text.
Description
Summary
.github/workflows/testdriver.yml pins a third-party action to a mutable branch — uses: testdriverai/action@main — inside a job that holds real secrets. I wanted to flag it as a small supply-chain hardening opportunity, and I'm happy to open the one-line fix if that's welcome.
I know this is a solo-maintained project with a discuss-first process, so please treat this as a heads-up rather than a demand on your time — no worries at all if it's not a priority.
What I observed (facts, at commit c99022c)
In testdriver.yml, the run_testdriver job:
- triggers on
workflow_run(line 3–4) — which runs from the default branch with access to repo secrets; - runs
uses: testdriverai/action@main(line 50).testdriverai/actionis a third-party action (ownertestdriverai, notwavetermdev/actions;default_branch: main), so@mainresolves to whatever that branch's HEAD points at, at run time; - in that same step passes
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}(line 54) andkey: ${{ secrets.DASHCAM_API }}(line 56), and embeds theGITHUB_TOKENin anAuthorizationheader (line 59). Job permissions arecontents: read+statuses: write.
Every other third-party action in the file is pinned to a version tag (e.g. mlugg/setup-zig@v2, nick-fields/retry@v4, softprops/action-gh-release@v2) — testdriverai/action@main is the only one on a moving branch.
Why I think it's worth a look (my inference)
If that upstream branch were ever repointed to malicious code — the class of thing that happened with tj-actions/changed-files in 2025 — it would execute in a job that can read DASHCAM_API and use the GITHUB_TOKEN. Pinning to a full commit SHA closes that window while still letting you bump it deliberately. I also noticed dependabot.yml enables the github-actions ecosystem, but Dependabot updates tags/SHAs and can't rewrite a @main branch ref, so this particular pin isn't covered by your existing tooling.
Suggested fix
Pin to the current commit SHA with a comment, e.g.:
- uses: testdriverai/action@<full-40-char-sha> # main as of <date>
I checked open and closed issues/PRs and didn't find an existing one for this. If you'd like, I'm glad to open a tiny PR with the SHA pin (I'd sign the CLA first) — or feel free to just make the one-line change yourself, whichever is less overhead for you.
Disclosure: I used an AI tool to help spot this and draft the report; I verified every line against the workflow file at the commit above myself and take responsibility for it.
- Dominant language
- Go
- Stars
- 22.3k
- Forks
- 1.1k
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from wavetermdev/waveterm
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
wavetermdev/waveterm#3481 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
wavetermdev/waveterm#3435 ·
-
enhancement triage
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
wavetermdev/waveterm#3431 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
wavetermdev/waveterm#3428 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
wavetermdev/waveterm#3355 · 1 comment ·
All issues in wavetermdev/waveterm
Similar issues
-
Difficulty 1/5 Under an hour Newbie friendliness 84/100
-
enhancement needs triage
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
kind/cleanup
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
kubernetes-sigs/kueue#15947 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
sympozium-ai/sympozium#627 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100