fetch_ml/.forgejo/workflows/security-modes-test.yml
Workflow config file is invalid. Please check your config file: yaml: line 141: could not find expected ':'
Jeremie Fraeys a653a2d0ed
ci: add plugin, quota, and scheduler tests to workflows
- Add plugin quota, service templates, scheduler tests to ci.yml

- Add vLLM plugin and audit logging test steps

- Add plugin configuration validation to security-modes-test.yml:

  - Verify HIPAA mode disables plugins

  - Verify standard mode enables plugins with security

  - Verify dev mode enables plugins with relaxed security
2026-02-26 14:34:49 -05:00

227 lines
7.8 KiB
YAML

name: Security Modes Test Matrix
on:
workflow_dispatch:
push:
paths-ignore:
- 'docs/**'
- 'README.md'
- 'CHANGELOG.md'
- '.forgejo/ISSUE_TEMPLATE/**'
- '**/*.md'
pull_request:
paths-ignore:
- 'docs/**'
- 'README.md'
- 'CHANGELOG.md'
- '.forgejo/ISSUE_TEMPLATE/**'
- '**/*.md'
concurrency:
group: security-modes-${{ gitea.workflow }}-${{ gitea.ref }}
cancel-in-progress: true
permissions:
contents: read
env:
GO_VERSION: '1.25.0'
jobs:
security-mode-tests:
name: Security Mode - ${{ matrix.security_mode }}
runs-on: self-hosted
timeout-minutes: 20
strategy:
matrix:
security_mode: [dev, standard, hipaa]
include:
- security_mode: hipaa
required_fields:
- ConfigHash
- SandboxSeccomp
- NoNewPrivileges
- NetworkMode
- MaxWorkers
config_file: deployments/configs/worker/docker-hipaa.yaml
- security_mode: standard
config_file: deployments/configs/worker/docker-standard.yaml
- security_mode: dev
config_file: deployments/configs/worker/docker-dev.yaml
fail-fast: false
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Set up Go
run: |
REQUIRED_GO="1.25.0"
if command -v go &> /dev/null && go version | grep -q "go${REQUIRED_GO}"; then
echo "Go ${REQUIRED_GO} already installed - skipping download"
else
echo "Installing Go ${REQUIRED_GO}..."
curl -sL "https://go.dev/dl/go${REQUIRED_GO}.linux-amd64.tar.gz" | sudo tar -C /usr/local -xzf -
export PATH="/usr/local/go/bin:$PATH"
echo "/usr/local/go/bin" >> $GITHUB_PATH
echo "Go ${REQUIRED_GO} installed"
fi
go version
- name: Install dependencies
run: |
go mod download
- name: Run HIPAA validation tests
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Running HIPAA-specific validation tests ==="
go test -v ./tests/unit/security/... -run TestHIPAAValidation
- name: Run PHI denylist tests
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Running PHI denylist validation tests ==="
go test -v ./tests/unit/security/... -run TestPHIDenylist
- name: Run artifact ingestion cap tests
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Running artifact ingestion cap tests ==="
go test -v ./tests/unit/security/... -run TestArtifactIngestionCaps
- name: Run config hash tests
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Running config hash computation tests ==="
go test -v ./tests/unit/security/... -run TestConfigHash
- name: Run inline credential rejection tests
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Running inline credential rejection tests ==="
go test -v ./tests/unit/security/... -run TestHIPAAValidation_InlineCredentials
- name: Test config validation for ${{ matrix.security_mode }} mode
run: |
echo "=== Testing config validation for ${{ matrix.security_mode }} mode ==="
go test -v ./tests/unit/security/... || true
- name: Verify compliance mode in config
run: |
echo "=== Verifying ${{ matrix.security_mode }} mode configuration ==="
# Check if the config file exists or create a minimal one for testing
CONFIG_FILE="${{ matrix.config_file }}"
if [ -f "$CONFIG_FILE" ]; then
echo "Config file found: $CONFIG_FILE"
# Check for compliance_mode in the config
if grep -q "compliance_mode.*${{ matrix.security_mode }}" "$CONFIG_FILE"; then
echo "✓ compliance_mode is set to ${{ matrix.security_mode }}"
else
echo "⚠ compliance_mode not explicitly set to ${{ matrix.security_mode }} in config"
fi
else
echo "⚠ Config file not found: $CONFIG_FILE"
echo "Creating minimal config for testing..."
mkdir -p $(dirname "$CONFIG_FILE")
cat > "$CONFIG_FILE" << EOF
host: localhost
port: 22
user: test
base_path: /tmp/fetchml_test
compliance_mode: ${{ matrix.security_mode }}
max_workers: 1
sandbox:
network_mode: none
seccomp_profile: default-hardened
no_new_privileges: true
EOF
echo "Created minimal ${{ matrix.security_mode }} mode config"
fi
- name: Validate required HIPAA fields
if: matrix.security_mode == 'hipaa'
run: |
echo "=== Validating required HIPAA fields ==="
CONFIG_FILE="${{ matrix.config_file }}"
REQUIRED_FIELDS="${{ join(matrix.required_fields, ' ') }}"
echo "Required fields: $REQUIRED_FIELDS"
# For HIPAA mode, these fields must be present in the worker config
# The actual validation happens in the worker.Config.Validate() method
# which is tested by the unit tests above
# Check that the test covers all required validations
if grep -r "compliance_mode" tests/unit/security/hipaa*.go 2>/dev/null; then
echo "✓ compliance_mode validation is tested"
fi
if grep -r "network_mode" tests/unit/security/hipaa*.go 2>/dev/null; then
echo "✓ network_mode validation is tested"
fi
if grep -r "no_new_privileges" tests/unit/security/hipaa*.go 2>/dev/null; then
echo "✓ no_new_privileges validation is tested"
fi
if grep -r "seccomp_profile" tests/unit/security/hipaa*.go 2>/dev/null; then
echo "✓ seccomp_profile validation is tested"
fi
echo "All required HIPAA fields have corresponding tests"
- name: Validate plugin configuration for ${{ matrix.security_mode }} mode
run: |
echo "=== Validating plugin configuration for ${{ matrix.security_mode }} mode ==="
CONFIG_FILE="${{ matrix.config_file }}"
# Check plugin configuration based on security mode
case "${{ matrix.security_mode }}" in
hipaa)
echo "Checking HIPAA mode: plugins should be disabled"
if grep -A 5 "plugins:" "$CONFIG_FILE" | grep -q "enabled: false"; then
echo "✓ Plugins are disabled for HIPAA compliance"
else
echo "⚠ Warning: Plugins may not be properly disabled in HIPAA mode"
fi
;;
standard)
echo "Checking standard mode: plugins should be enabled with security"
if grep -A 10 "plugins:" "$CONFIG_FILE" | grep -q "enabled: true"; then
echo "✓ Plugins are enabled in standard mode"
# Check for security settings
if grep -A 20 "plugins:" "$CONFIG_FILE" | grep -q "require_password: true"; then
echo "✓ Plugin security (password) is enabled"
fi
fi
;;
dev)
echo "Checking dev mode: plugins should be enabled (relaxed security)"
if grep -A 10 "plugins:" "$CONFIG_FILE" | grep -q "enabled: true"; then
echo "✓ Plugins are enabled in dev mode"
fi
;;
esac
- name: Security mode test summary
if: always()
run: |
echo "=== Security Mode Test Summary for ${{ matrix.security_mode }} ==="
echo "Security mode: ${{ matrix.security_mode }}"
echo "Config file: ${{ matrix.config_file }}"
if [ "${{ matrix.security_mode }}" = "hipaa" ]; then
echo "Required fields checked:"
echo " - ConfigHash"
echo " - SandboxSeccomp"
echo " - NoNewPrivileges"
echo " - NetworkMode"
echo " - MaxWorkers"
echo " - ComplianceMode"
fi