Skip to content

ci(dco): add DCO enforcement workflow#425

Merged
nullvariant merged 3 commits into
mainfrom
feat/dco-enforcement
Apr 1, 2026
Merged

ci(dco): add DCO enforcement workflow#425
nullvariant merged 3 commits into
mainfrom
feat/dco-enforcement

Conversation

@nullvariant
Copy link
Copy Markdown
Owner

Summary

  • Add Developer Certificate of Origin (DCO) check for all pull requests
  • Use dco-check (PyPI, christophebedard/dco-check) directly in workflow instead of cncf/dcochecker wrapper (stale actions/checkout@v2, no version pinning)
  • Reject dcoapp/app (GitHub App) due to external Probot server dependency and override bypass capability

Changes

  • .github/workflows/dco.yml: New workflow with SHA-pinned actions and hash-verified pip install dco-check==0.5.0
  • CONTRIBUTING.md: Add DCO section with sign-off instructions and DCO v1.1 summary
  • AGENTS.md: Add --signoff requirement to Key Constraints

Security

  • actions/checkout@v6.0.2, actions/setup-python@v6.2.0, step-security/harden-runner@v2.16.1 — all SHA-pinned
  • pip install uses --require-hashes --no-deps for supply chain integrity
  • permissions: {} at top level, contents: read only at job level

Test plan

  • DCO Check workflow runs on PR and passes when commits have Signed-off-by
  • DCO Check workflow fails when commits lack Signed-off-by
  • CONTRIBUTING.md renders correctly with DCO section

🤖 Generated with Claude Code

## Summary
Add Developer Certificate of Origin (DCO) check for all pull requests
using dco-check (PyPI) with SHA-pinned actions and hash-verified pip install.
## Changes
- Add .github/workflows/dco.yml with dco-check==0.5.0 (hash-pinned)
- Add DCO section to CONTRIBUTING.md with sign-off instructions
- Add --signoff requirement to AGENTS.md Key Constraints
Signed-off-by: Null;Variant <null@nullvariant.com>

🖥️ IDE: [Cursor](https://cursor.sh)
🔌 Extension: [Claude Code](https://claude.ai/download)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Model-Raw: claude-opus-4-6
@nullvariant-slow
Copy link
Copy Markdown
Contributor

nullvariant-slow Bot commented Apr 1, 2026

🦥 Slow's Code Review 😩

...yawn... Do I really have to review this?

⚠️ TOO LONG... I can barely keep my eyes open reading these:

File Lines

| extensions/git-id-switcher/src/ui/documentationInternal.ts | 483 |

Split it up... reading long files is exhausting.


働きたくないでござる

This review was reluctantly filed by nullvariant-slow[bot]

@nullvariant-mimi
Copy link
Copy Markdown
Contributor

nullvariant-mimi Bot commented Apr 1, 2026

🐰 Mimi's Validation Report ✅

All checks are looking good! Great job! 🎉

⏳ Some checks are still running. I will keep watching!


バリデーターを通してくださいね

This report was carefully prepared by nullvariant-mimi[bot]

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 1, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 2d15c76.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

OpenSSF Scorecard

PackageVersionScoreDetails
actions/actions/checkout de0fac2e4500dabe0009e67214ff5f5447ce83dd 🟢 6
Details
CheckScoreReason
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Packaging⚠️ -1packaging workflow not detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
Security-Policy🟢 9security policy file detected
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
SAST🟢 8SAST tool detected but not run on all commits
actions/actions/setup-python a309ff8b426b58ec0e2a45f0f869d46889d02405 🟢 5.2
Details
CheckScoreReason
Maintained⚠️ 23 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Code-Review🟢 10all changesets reviewed
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Packaging⚠️ -1packaging workflow not detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
Security-Policy🟢 9security policy file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
actions/step-security/harden-runner fe104658747b27e96e4f7e80cd0a94068e53901d 🟢 7.9
Details
CheckScoreReason
Binary-Artifacts🟢 10no binaries found in the repo
Branch-Protection🟢 8branch protection is not maximal on development and all release branches
CI-Tests🟢 1013 out of 13 merged PRs checked by a CI test -- score normalized to 10
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Code-Review🟢 10all changesets reviewed
Contributors🟢 6project has 2 contributing companies or organizations -- score normalized to 6
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Dependency-Update-Tool🟢 10update tool detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Maintained🟢 1010 commit(s) and 9 issue activity found in the last 90 days -- score normalized to 10
Packaging⚠️ -1packaging workflow not detected
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
SAST🟢 10SAST tool is run on all commits
Security-Policy🟢 10security policy file detected
Signed-Releases⚠️ -1no releases found
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Vulnerabilities⚠️ 011 existing vulnerabilities detected

Scanned Files

  • .github/workflows/dco.yml

@nullvariant-ciel
Copy link
Copy Markdown
Contributor

nullvariant-ciel Bot commented Apr 1, 2026

🕊️ Ciel's Mediation 🌤️

*~~ floating down from the clouds ~~ The zoo seems a bit noisy today...*

2 zoo members have reviewed this PR.

Zoo Member Status
🦥 Slow Commented
🐰 Mimi Commented

⚖️ The zoo has mixed opinions. Some are concerned, some are fine with it. Please review each comment carefully and make the final call.


まあまあ、ほどほどに。

This mediation was peacefully delivered by nullvariant-ciel[bot]

1 similar comment
@nullvariant-ciel
Copy link
Copy Markdown
Contributor

🕊️ Ciel's Mediation 🌤️

*~~ floating down from the clouds ~~ The zoo seems a bit noisy today...*

2 zoo members have reviewed this PR.

Zoo Member Status
🦥 Slow Commented
🐰 Mimi Commented

⚖️ The zoo has mixed opinions. Some are concerned, some are fine with it. Please review each comment carefully and make the final call.


まあまあ、ほどほどに。

This mediation was peacefully delivered by nullvariant-ciel[bot]

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 1, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

nullvariant and others added 2 commits April 1, 2026 20:14
## Summary
Fix DCO Check workflow failure. pip's --hash option is only available
via requirements files, not as a CLI argument.
## Changes
- Write requirements to temp file with hash, then install via -r flag
Signed-off-by: Null;Variant <null@nullvariant.com>

🖥️ IDE: [Cursor](https://cursor.sh)
🔌 Extension: [Claude Code](https://claude.ai/download)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Model-Raw: claude-opus-4-6
## Summary
dco-check requires GITHUB_TOKEN to fetch PR commit data via GitHub API.
## Changes
- Add GITHUB_TOKEN env to Run DCO Check step
Signed-off-by: Null;Variant <null@nullvariant.com>

🖥️ IDE: [Cursor](https://cursor.sh)
🔌 Extension: [Claude Code](https://claude.ai/download)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Model-Raw: claude-opus-4-6
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Apr 1, 2026

@nullvariant nullvariant merged commit 24f6c1f into main Apr 1, 2026
36 checks passed
@nullvariant nullvariant deleted the feat/dco-enforcement branch April 1, 2026 11:20
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