docs: note portfolio superseded by clade system portal #11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-License-Identifier: PMPL-1.0-or-later | |
| # Prevention workflow - runs OpenSSF Scorecard and fails on low scores | |
| name: OpenSSF Scorecard Enforcer | |
| on: | |
| push: | |
| branches: [main] | |
| schedule: | |
| - cron: '0 6 * * 1' # Weekly on Monday | |
| workflow_dispatch: | |
| permissions: | |
| security-events: write | |
| id-token: write | |
| contents: read | |
| jobs: | |
| scorecard: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| security-events: write | |
| id-token: write | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - name: Run Scorecard | |
| uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 | |
| with: | |
| results_file: results.sarif | |
| results_format: sarif | |
| publish_results: true | |
| - name: Upload SARIF | |
| uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4 | |
| with: | |
| sarif_file: results.sarif | |
| - name: Check minimum score | |
| run: | | |
| # Parse score from results | |
| SCORE=$(jq -r '.runs[0].tool.driver.properties.score // 0' results.sarif 2>/dev/null || echo "0") | |
| echo "OpenSSF Scorecard Score: $SCORE" | |
| # Minimum acceptable score (0-10 scale) | |
| MIN_SCORE=5 | |
| if [ "$(echo "$SCORE < $MIN_SCORE" | bc -l)" = "1" ]; then | |
| echo "::error::Scorecard score $SCORE is below minimum $MIN_SCORE" | |
| exit 1 | |
| fi | |
| # Check specific high-priority items | |
| check-critical: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Check SECURITY.md exists | |
| run: | | |
| if [ ! -f "SECURITY.md" ]; then | |
| echo "::error::SECURITY.md is required" | |
| exit 1 | |
| fi | |
| - name: Check for pinned dependencies | |
| run: | | |
| # Check workflows for unpinned actions - using anchored regex to avoid self-match | |
| unpinned=$(grep -rE "^[[:space:]]+uses:.*@v[0-9]" .github/workflows/*.yml 2>/dev/null | grep -v "#" | head -5 || true) | |
| if [ -n "$unpinned" ]; then | |
| echo "::warning::Found unpinned actions:" | |
| echo "$unpinned" | |
| fi |