diff --git a/.compliance/config.yml b/.compliance/config.yml new file mode 100644 index 00000000..3420a70a --- /dev/null +++ b/.compliance/config.yml @@ -0,0 +1,22 @@ +# yaml-language-server: $schema=../.claude/skills/compliance-swarm/.compliance/config.schema.yml + +# Bootstrap config for gnubok itself. Threshold starts at "critical" so the +# advisory PR check warns loudly without blocking merges. Tighten to "high" +# once findings are triaged and suppressions are in place. + +enabled_skills: + - oss-license-compliance + - owasp-asvs-v5-compliance + - iso-27001-2022-compliance + - soc2-cicd-compliance + - gdpr-cicd-compliance + +asvs_level: L2 +soc2_categories: [security, confidentiality] +severity_threshold_to_block: critical +llm_provider: bedrock +llm_model: eu.anthropic.claude-sonnet-4-6 + +# Add suppressions here as triage progresses. Each rule needs a justification +# and (for ISO/SOC 2 controls) a risk_id pointing at a Risk Register entry. +suppressions: [] diff --git a/.github/workflows/compliance-pr.yml b/.github/workflows/compliance-pr.yml new file mode 100644 index 00000000..212f04ff --- /dev/null +++ b/.github/workflows/compliance-pr.yml @@ -0,0 +1,30 @@ +name: compliance — PR mode (advisory) + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + security-events: write + +concurrency: + group: compliance-pr-${{ github.ref }} + cancel-in-progress: true + +jobs: + compliance: + name: PR static checks (advisory) + runs-on: ubuntu-latest + timeout-minutes: 8 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: erp-mafia/compliancemaxx@v1 + with: + mode: pr + base: ${{ github.event.pull_request.base.sha }} + fail-on-findings: false # advisory while bedding in; flip to true after triage diff --git a/.github/workflows/compliance-swarm.yml b/.github/workflows/compliance-swarm.yml new file mode 100644 index 00000000..a55a9969 --- /dev/null +++ b/.github/workflows/compliance-swarm.yml @@ -0,0 +1,57 @@ +name: compliance — full swarm + +# Full hybrid audit: deterministic scanners + LLM-driven deep_audit checks +# (RoPA drift, AGPL §13 evaluation, IDOR/access-control reasoning, ISMS clause +# review, change-management bypass detection). +# +# Triggers: +# - Nightly cron at 02:00 UTC +# - workflow_dispatch (run anytime) +# - PRs labeled `compliance:full-audit` + +on: + schedule: + - cron: '0 2 * * *' + workflow_dispatch: + inputs: + reason: + description: 'Why are you running this manually?' + required: false + default: '' + pull_request: + types: [labeled] + +permissions: + contents: read + pull-requests: write + security-events: write + +concurrency: + group: compliance-swarm-${{ github.ref }} + cancel-in-progress: false + +jobs: + swarm: + name: Full hybrid audit + if: | + github.event_name != 'pull_request' + || github.event.label.name == 'compliance:full-audit' + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: erp-mafia/compliancemaxx@v1 + with: + mode: swarm + llm-provider: bedrock + fail-on-findings: false # observational while bedding in + env: + AWS_REGION: eu-north-1 + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # Override default model if desired: + # COMPLIANCE_BEDROCK_MODEL: 'eu.anthropic.claude-sonnet-4-6'