- 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
227 lines
7.8 KiB
YAML
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
|