Repository navigation
docs: update security.txt and re-introduce workflow to update the expiry date every year - #2386
Conversation
👷 Deploy Preview for ocm-website processing.
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a vulnerability disclosure policy and security contacts, updates .well-known/security.txt (contacts and Expires), changes the GitHub Actions workflow to sparse-checkout and bump only the Expires field on weekdays, and extends the spell-check wordlist with three security terms. ChangesSecurity & Release Flow
Spell-check vocabulary
Sequence Diagram(s)sequenceDiagram
participant Workflow as GitHub Actions workflow
participant Repo as Repository (files)
participant GitHub as GitHub API (PR)
participant Runner as Actions runner
Workflow->>Runner: scheduled run (Dec weekdays 09:00 UTC)
Runner->>Repo: sparse-checkout `website/static/.well-known/security.txt`
Runner->>Runner: compute next year (date +1)
Runner->>Repo: rewrite `Expires:` in security.txt
Runner->>GitHub: create branch `security/renew-security-txt` and PR (Expires-only update)
GitHub->>Repo: PR created (title/commit/description reference RFC 9116)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🐰 I nibble at lines and hop with glee, Comment |
|
neonephos/guidelines-development#7 has been approved, so this PR can make use of the ne SECURITY.md template from NeoNephos. |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
.github/workflows/website-update-security-txt.yaml (1)
5-7: Adjust Expires calculation to stay within RFC 9116's <1-year horizon.The current workflow runs on December 1st and adds 1 year to the existing Expires timestamp, which typically sets the date to December 31st of the following year. This results in an Expires value ~13 months in the future, exceeding RFC 9116 section 2.5.5's recommendation to keep Expires less than one year ahead.
To comply with the RFC, set the Expires date to approximately 11–12 months from the workflow execution date rather than hardcoding to a fixed end-of-year date.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/website-update-security-txt.yaml around lines 5 - 7, The workflow currently schedules on "0 9 1 12 *" and extends the security.txt Expires field by adding a full year which can push expiry beyond 12 months; change the Expires calculation step so it computes Expires relative to the workflow run date (e.g., run_date + ~330 days or run_date + 11 months) instead of forcing an end-of-year date; update the step that generates the Expires timestamp (the job/step that currently adds 1 year to the existing Expires) to produce a date <1 year ahead (approx 11–12 months) formatted per RFC 9116 before writing security.txt.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/website-update-security-txt.yaml:
- Around line 27-36: The step "Bump Expires date by one year" currently proceeds
even if parsing/computing NEW fails; update the step to validate parsing by
checking that CURRENT is non-empty and NEW was successfully computed (e.g., test
-n "$CURRENT" and test -n "$NEW" or check date exit status) before running sed,
and if either is empty or date failed, print a clear error (including values of
FILE and CURRENT) and exit 1 to fail the job; reference the variables/labels
FILE, CURRENT, NEW and the step name to locate where to add the checks and early
exit.
---
Nitpick comments:
In @.github/workflows/website-update-security-txt.yaml:
- Around line 5-7: The workflow currently schedules on "0 9 1 12 *" and extends
the security.txt Expires field by adding a full year which can push expiry
beyond 12 months; change the Expires calculation step so it computes Expires
relative to the workflow run date (e.g., run_date + ~330 days or run_date + 11
months) instead of forcing an end-of-year date; update the step that generates
the Expires timestamp (the job/step that currently adds 1 year to the existing
Expires) to produce a date <1 year ahead (approx 11–12 months) formatted per RFC
9116 before writing security.txt.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: b6067089-1525-4689-b6f7-d182f52b6e90
📒 Files selected for processing (4)
.github/config/wordlist.txt.github/workflows/website-update-security-txt.yamlSECURITY.mdwebsite/static/.well-known/security.txt
Skarlso
left a comment
There was a problem hiding this comment.
This closes the attached issue but where is assurance-case.md and secure-design.md docs? Is that another PR?
frewilhelm
left a comment
There was a problem hiding this comment.
The neonephos PR is not merged yet - should we wait?
There was a problem hiding this comment.
♻️ Duplicate comments (1)
.github/workflows/website-update-security-txt.yaml (1)
27-54:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winRemove the incomplete duplicate step — it causes a bash syntax error on every run.
Lines 27–34 contain an abandoned partial copy of the "Bump Expires" step, missing the closing
fifor theif [[ -z ... ]]block. GitHub Actions executes both list items sequentially; the first one causes bash to exit withunexpected end of fileunderset -euo pipefail, so the workflow always fails before the correct step (lines 35–54) can execute.The incomplete step also uses the
::error::annotation style inconsistent with the>&2pattern in the real step, and contains none of the date-computation logic — it is clearly a stale draft left over when the "fail-fast" fix from the previous review round was appended rather than merged in-place.🐛 Proposed fix — drop the orphaned first step
- - name: Bump Expires date by one year - run: | - set -euo pipefail - FILE=website/static/.well-known/security.txt - CURRENT=$(sed -n 's/^Expires:[[:space:]]*//p' "$FILE") - if [[ -z "${CURRENT}" ]]; then - echo "::error::Missing Expires field in ${FILE}" - exit 1 - - name: Bump Expires date by one year run: | set -euo pipefail🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/website-update-security-txt.yaml around lines 27 - 54, Remove the stray/incomplete duplicate job step named "Bump Expires date by one year" (the first occurrence) that is missing the closing fi and uses the ::error:: annotation; keep only the complete "Bump Expires date by one year" step that parses CURRENT, computes NEW with date and replaces the Expires line. In practice, delete the earlier run: | block (the abandoned partial copy) so the workflow contains a single correct Bump Expires step (the one that sets FILE, extracts CURRENT, computes NEW with date -u -d ... || date -u -j ..., checks NEW, runs sed -i, and prints the update).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In @.github/workflows/website-update-security-txt.yaml:
- Around line 27-54: Remove the stray/incomplete duplicate job step named "Bump
Expires date by one year" (the first occurrence) that is missing the closing fi
and uses the ::error:: annotation; keep only the complete "Bump Expires date by
one year" step that parses CURRENT, computes NEW with date and replaces the
Expires line. In practice, delete the earlier run: | block (the abandoned
partial copy) so the workflow contains a single correct Bump Expires step (the
one that sets FILE, extracts CURRENT, computes NEW with date -u -d ... || date
-u -j ..., checks NEW, runs sed -i, and prints the update).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 2a29f7b1-b863-489e-8fab-7c0d75e8ac3d
📒 Files selected for processing (2)
.github/config/wordlist.txt.github/workflows/website-update-security-txt.yaml
✅ Files skipped from review due to trivial changes (1)
- .github/config/wordlist.txt
|
put this back to draft, until neonephos/guidelines-development#7 is merged AND approved by NeoNephos TAG. |
Pull request was converted to draft
|
This pull request was marked as stale because it has not had recent activity. |
|
@morri-son status? |
3253fc7 to
f2790f3
Compare
Restore the Expires field in security.txt and implement a compliant automation: - Add Expires: 2028-12-31T00:00:00.000Z to security.txt - Restore workflow that updates expiry date annually - Ensures RFC 9116 compliance (security.txt must have valid Expires) - Uses GitHub App token for automated PR creation - Signs commits for compliance audit trail Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com>
Implement automated renewal of the Expires field in security.txt: - Runs every weekday in December at 09:00 UTC - Updates Expires to next December 31st - Creates idempotent PR for review and merge - Ensures RFC 9116 compliance without manual maintenance - Uses scoped GitHub App token (current repo only) - Signs commits for compliance Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com>
- Replace outdated action with actions/create-github-app-token (v3.2.0) - Update actions/checkout to v7.0.1 to match repo standards - Ensure precise version comments for zizmor security compliance - Aligns workflow with established patterns in the repository Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com>
Restrict the GitHub App token to minimal required permissions following the principle of least privilege and zizmor security best practices: - Add 'repositories' constraint to limit token to current repo only - Add explicit 'permission-pull-requests: write' for PR creation - Add explicit 'permission-contents: write' for commit signing - Remove blanket installation permissions This aligns with security practices used throughout the repository and ensures the token only has the minimum permissions required to create pull requests with signed commits. Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com>
d3df2af to
6192a64
Compare
…iry date every year (#2386) ## Summary Add security.txt and a workflow to update it for Open Component Model vulnerability disclosure, aligned with NeoNephos Security Guidelines and CRA compliance requirements. **Important**: The organization-wide has been moved to a separate PR in the repository (see Related PRs below). This PR focuses on tooling, workflows, and security.txt updates only. ## Changes - ✅ Update `website/static/.well-known/security.txt` (RFC 9116 compliance) - Reference new reporting channels and contacts - Add Expires field with automated renewal workflow - ✅ Restore automated security.txt expiry renewal workflow - Runs every weekday in December at 09:00 UTC - Automatically updates Expires field to next year - Creates idempotent PR for review and merge - Ensures RFC 9116 compliance without manual maintenance - ✅ Security documentation references - Links to `docs/security/secure-design.md` - Links to `docs/security/assurance-case.md` ## Related PRs **⚠️ MERGE ORDER MATTERS:** 1. **FIRST**: Merge `open-component-model/.github#115` - Organization-wide SECURITY.md (applies to all repos) - NeoNephos Security Guidelines compliance - CRA stewardship statement per Linux Foundation - Commercial intent declaration - URL: open-component-model/.github#115 2. **THEN**: Merge this PR (`#2386`) - Security tooling and automation - security.txt updates **Reason**: The .github SECURITY.md is organization-wide and is referenced by this PR's security.txt updates. ## Compliance - ✅ RFC 9116 (security.txt standard) - ✅ NeoNephos Security Guidelines - ✅ CRA (EU Cyber Resilience Act) stewardship - ✅ DCO sign-off on all commits ## Test Plan - [x] Verify `security.txt` is valid per RFC 9116 - [x] Verify `security.txt` references correct SECURITY.md location - [x] Verify workflow runs correctly (manual trigger or wait for December) - [x] Verify Expires field updates to next year + 12-31 ## Closes - open-component-model/ocm-project#683 (security.txt automation) --------- Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com> Signed-off-by: Gerald Morrison <67469729+morri-son@users.noreply.github.com> Co-authored-by: Gerald Morrison (SAP) <gerald.morrison@sap.com> Co-authored-by: Matthias Bruns <github@matthiasbruns.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> 6579bd7
…#115) ## Overview Update the organization-wide SECURITY.md to align with NeoNephos Foundation security standards and EU Cyber Resilience Act (CRA) compliance requirements. ## Changes - Replace SAP-focused security policy with Open Component Model specific policy - Reference [NeoNephos Security Guidelines](https://github.com/neonephos/guidelines-development/blob/main/security-guidelines/security-guidelines.md) for standardized vulnerability handling - Add CRA stewardship statement per Linux Foundation requirements - Document commercial intent (required for CRA compliance) - Include escalation contact for CRA: `steward@linuxfoundation.org` - Align response timelines with NeoNephos standards: - Initial response: 14 calendar days - Vulnerability embargo: up to 90 days - Severity-based response targets (Critical, High, Medium, Low) ## CRA Compliance Details - **Steward**: Linux Foundation - **Steward Contact**: steward@linuxfoundation.org - **Commercial Intent**: Open Component Model software is intended for commercial use - **Reference**: [NeoNephos CRA Guidelines §11](https://github.com/neonephos/guidelines-development/blob/main/security-guidelines/security-guidelines.md#11-eu-cyber-resilience-act-cra-compliance) ## Implementation Notes This update follows the standardized approach adopted by all NeoNephos Foundation projects as of the September 2026 Linux Foundation guidance update. All commits include DCO sign-off for compliance audit trail. ## Related - Upstream PR: open-component-model/open-component-model#2386 (security tooling and workflow) - NeoNephos Guidelines: https://github.com/neonephos/guidelines-development/ - LF CRA Guidance: https://www.linuxfoundation.org/security --------- Signed-off-by: Gerald Morrison (D032990) <gerald.morrison@sap.com> Signed-off-by: Gerald Morrison (SAP) <gerald.morrison@sap.com> Signed-off-by: Gerald Morrison <67469729+morri-son@users.noreply.github.com> Co-authored-by: Gerald Morrison (D032990) <gerald.morrison@sap.com> Co-authored-by: Frederic Wilhelm <fre.wilhelm@gmail.com>
Summary
Add security.txt and a workflow to update it for Open Component Model vulnerability disclosure, aligned with NeoNephos Security Guidelines and CRA compliance requirements.
Important: The organization-wide SECURITY.md has been moved to a separate PR (open-component-model/.github#115) in the repository.
Changes
✅ Update
website/static/.well-known/security.txt(RFC 9116 compliance)✅ Restore automated security.txt expiry renewal workflow
Related PRs
FIRST: Merge
open-component-model/.github#115THEN: Merge this PR (
open-component-model/open-component-model#2386)Reason: The .github SECURITY.md is organization-wide and is referenced by this PR's security.txt updates.
Test Plan
security.txtis valid per RFC 9116security.txtreferences correct SECURITY.md locationCloses