Skip to content

Harden CI workflows and remediate supply-chain security findings - #1948

Merged
kriswest merged 7 commits into
mainfrom
harden-github-workflows
Jul 8, 2026
Merged

Harden CI workflows and remediate supply-chain security findings#1948
kriswest merged 7 commits into
mainfrom
harden-github-workflows

Conversation

@kriswest

@kriswest kriswest commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Resolves #1946
Resolves #1818

Summary

Remediates all blocking Semgrep findings related to mutable GitHub Actions tags and a missing min-release-age in .npmrc. Upgrades actions to their latest major versions, introduces runtime security hardening across all workflows, and adds Dependabot with cooldown periods to automate future dependency updates safely.

Changes

GitHub Actions — pinned to commit SHAs and upgraded to latest majors:

Action Previous New
actions/checkout v4 / v6 (mutable tags) v7.0.0
actions/setup-node v4 / v6 (mutable tags) v6.4.0
codecov/codecov-action v6 (mutable tag) v7.0.0
actions/upload-artifact v4 (mutable tag) v7.0.1
actions/download-artifact v4 (mutable tag) v8.0.1
ossf/scorecard-action v2.4.0 v2.4.3
github/codeql-action v3.28.8 v3 (latest)

All references are now immutable 40-character commit SHAs with version comments.

StepSecurity Harden Runner (v2.19.4):

  • Added as the first step in every job across all workflows.
  • Configured with egress-policy: audit to log outbound network connections without blocking.

New codeql.yml workflow (replaces semgrep.yml):

  • Hardened with harden-runner and pinned to latest action SHAs consistent with all other workflows.

.npmrc — supply-chain protection:

  • Added min-release-age = 7 — npm will refuse to resolve any package version published fewer than 7 days ago.

Dependabot configuration (new .github/dependabot.yml):

  • Daily schedule with a 7-day cooldown period (aligns with min-release-age).
  • Minor and patch updates grouped into single PRs; major bumps proposed individually.
  • Covers both npm and github-actions ecosystems.

Breaking change notes for upgraded actions

  • checkout v7: Blocks fork PR checkout on pull_request_target/workflow_run — not used in this repo.
  • upload-artifact v7: Adds direct upload support; existing usage unchanged.
  • download-artifact v8: Hash mismatches now error by default (previously warned) — a security improvement.
  • codecov v7: Internal cleanup only, no functional changes.

Testing

  • All workflow YAML validated for correct syntax.
  • No functional changes to build/test/publish logic.

- Upgrade GitHub Actions to latest majors (checkout v7, setup-node v6,
  codecov v7, upload-artifact v7, download-artifact v8) and pin all
  references to immutable commit SHAs.
- Add StepSecurity harden-runner (v2.19.4) to every workflow job.
- Add min-release-age = 7 to .npmrc to block newly published packages.
- Add dependabot.yml with cooldown periods and grouped updates.
@kriswest
kriswest requested a review from a team as a code owner July 6, 2026 17:04
@netlify

netlify Bot commented Jul 6, 2026

Copy link
Copy Markdown

Deploy Preview for fdc3 ready!

Name Link
🔨 Latest commit 7365992
🔍 Latest deploy log https://app.netlify.com/projects/fdc3/deploys/6a4be5640e60a50008ad9d13
😎 Deploy Preview https://deploy-preview-1948.preview-fdc3.finos.org
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@codecov-commenter

codecov-commenter commented Jul 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.32%. Comparing base (18f6c75) to head (7365992).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main    #1948    +/-   ##
========================================
  Coverage   95.32%   95.32%            
========================================
  Files          85       85            
  Lines        6690     6690            
  Branches      811     1028   +217     
========================================
  Hits         6377     6377            
  Misses        313      313            

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

ninjabot92 and others added 4 commits July 6, 2026 18:24
…1776) (#1888)

* feat(conformance): add basicGI2 test for ImplementationMetadata.optionalFeatures (#1776)

Adds basicGI2, a conformance test that asserts fdc3.getInfo() returns a valid optionalFeatures object containing booleans for OriginatingAppMetadata, UserChannelMembershipAPIs, and DesktopAgentBridging. Validates shape only, not specific values, so vendor differences in supported features do not cause failures.

Refs #1776

* Update testSuite.ts

* fix(conformance): cast key to keyof optionalFeatures (TS7053)

Adds fdc3BasicGI2 to the basic conformance suite
for optionalFeatures coverage from getInfo().

Refs #1776

* test(conformance): drop OriginatingAppMetadata from requiredKeys (3.0)

Removed 'OriginatingAppMetadata' from requiredKeys in fdc3 basic tests.
…1937) (#1944)

* Remove deprecated name and customConfig from AppD spec (#1937)

* Copy updated AppD schema to next (#1937)

* Remove reference to deprecated name property in OpenHandler.filterPublicDetails (#1937)

Remove 'name' property from filterPublicDetails method.
#1868)

* chore: switch SAST from semgrep to CodeQL and update Node workflows to v24

- Replace semgrep workflow with CodeQL static analysis (github/codeql-action)
  to align with OpenSSF Scorecard recognition requirement (issue #1827)
- Update CI workflows from Node 20 (EOL) to Node 24 (current LTS):
  - coverage.yml: Node 20.x to 24.x
  - release.yml: Node 20 to 24 (all three jobs)
  - cve-scanning.yml: simplify to single Node 24 (removes matrix)
- Add Node engine constraint (>=22) to root package.json per maintainer guidance
  indicating support floor and future Node 25 capability (issue #1826)

Closes #1827 #1826

* fix: restore clean release workflow after rebase
@kriswest kriswest changed the title Harden CI workflows and remediate Semgrep supply-chain findings Harden CI workflows and remediate supply-chain security findings Jul 6, 2026
@kriswest

kriswest commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

@Roaders or @bingenito could you give this quick workflow hardening PR a quick review and approval?

After this is done I hope to get back around to reviewing and merging @Roaders PRs!

@julianna-ciq julianna-ciq left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@kriswest
kriswest merged commit 97a4c85 into main Jul 8, 2026
9 checks passed
Roaders pushed a commit that referenced this pull request Jul 10, 2026
* chore(ci): harden workflows, pin actions to SHAs, add min-release-age

- Upgrade GitHub Actions to latest majors (checkout v7, setup-node v6,
  codecov v7, upload-artifact v7, download-artifact v8) and pin all
  references to immutable commit SHAs.
- Add StepSecurity harden-runner (v2.19.4) to every workflow job.
- Add min-release-age = 7 to .npmrc to block newly published packages.
- Add dependabot.yml with cooldown periods and grouped updates.

* Update CHANGELOG.md

* test(conformance): add optionalFeatures coverage from getInfo() (Refs #1776) (#1888)

* feat(conformance): add basicGI2 test for ImplementationMetadata.optionalFeatures (#1776)

Adds basicGI2, a conformance test that asserts fdc3.getInfo() returns a valid optionalFeatures object containing booleans for OriginatingAppMetadata, UserChannelMembershipAPIs, and DesktopAgentBridging. Validates shape only, not specific values, so vendor differences in supported features do not cause failures.

Refs #1776

* Update testSuite.ts

* fix(conformance): cast key to keyof optionalFeatures (TS7053)

Adds fdc3BasicGI2 to the basic conformance suite
for optionalFeatures coverage from getInfo().

Refs #1776

* test(conformance): drop OriginatingAppMetadata from requiredKeys (3.0)

Removed 'OriginatingAppMetadata' from requiredKeys in fdc3 basic tests.

* Remove deprecated `name` and `customConfig` from AppD specification (#1937) (#1944)

* Remove deprecated name and customConfig from AppD spec (#1937)

* Copy updated AppD schema to next (#1937)

* Remove reference to deprecated name property in OpenHandler.filterPublicDetails (#1937)

Remove 'name' property from filterPublicDetails method.

* chore: switch SAST from semgrep to CodeQL and update Node workflows t… (#1868)

* chore: switch SAST from semgrep to CodeQL and update Node workflows to v24

- Replace semgrep workflow with CodeQL static analysis (github/codeql-action)
  to align with OpenSSF Scorecard recognition requirement (issue #1827)
- Update CI workflows from Node 20 (EOL) to Node 24 (current LTS):
  - coverage.yml: Node 20.x to 24.x
  - release.yml: Node 20 to 24 (all three jobs)
  - cve-scanning.yml: simplify to single Node 24 (removes matrix)
- Add Node engine constraint (>=22) to root package.json per maintainer guidance
  indicating support floor and future Node 25 capability (issue #1826)

Closes #1827 #1826

* fix: restore clean release workflow after rebase

* chore(ci): harden and update the actions in the codeql workflow

---------

Co-authored-by: ninjabot92 <76234287+ninjabot92@users.noreply.github.com>
Co-authored-by: mayank singh <mayankchaudhary.bte05@gmail.com>
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.

Investigate and improve OpenSSF scorecard result Resolve semgrep findings

5 participants