ci: add security/performance/audit validators to pre-commit and CI
Some checks failed
Some checks failed
- Add validate-security, validate-performance, validate-audit hooks to .pre-commit-config.yaml (previously only architecture was checked) - Break single "Run all validators" CI step into 4 explicit steps (architecture, security, performance, audit) for clearer pipeline output - Add noqa: SEC001 suppressions for test fixture hashed_password values Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -94,8 +94,17 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: uv pip install --system -r requirements.txt
|
run: uv pip install --system -r requirements.txt
|
||||||
|
|
||||||
- name: Run all validators
|
- name: Validate architecture patterns
|
||||||
run: python scripts/validate/validate_all.py
|
run: python scripts/validate/validate_all.py --architecture
|
||||||
|
|
||||||
|
- name: Validate security patterns
|
||||||
|
run: python scripts/validate/validate_all.py --security
|
||||||
|
|
||||||
|
- name: Validate performance patterns
|
||||||
|
run: python scripts/validate/validate_all.py --performance
|
||||||
|
|
||||||
|
- name: Validate audit patterns
|
||||||
|
run: python scripts/validate/validate_all.py --audit
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Security (non-blocking)
|
# Security (non-blocking)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# Run manually: pre-commit run --all-files
|
# Run manually: pre-commit run --all-files
|
||||||
|
|
||||||
repos:
|
repos:
|
||||||
# Architecture validation
|
# Code validators (architecture, security, performance, audit)
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
- id: validate-architecture
|
- id: validate-architecture
|
||||||
@@ -16,6 +16,33 @@ repos:
|
|||||||
additional_dependencies: [pyyaml]
|
additional_dependencies: [pyyaml]
|
||||||
verbose: true
|
verbose: true
|
||||||
|
|
||||||
|
- id: validate-security
|
||||||
|
name: Validate Security Patterns
|
||||||
|
entry: python scripts/validate/validate_all.py --security
|
||||||
|
language: python
|
||||||
|
pass_filenames: false
|
||||||
|
always_run: true
|
||||||
|
additional_dependencies: [pyyaml]
|
||||||
|
verbose: true
|
||||||
|
|
||||||
|
- id: validate-performance
|
||||||
|
name: Validate Performance Patterns
|
||||||
|
entry: python scripts/validate/validate_all.py --performance
|
||||||
|
language: python
|
||||||
|
pass_filenames: false
|
||||||
|
always_run: true
|
||||||
|
additional_dependencies: [pyyaml]
|
||||||
|
verbose: true
|
||||||
|
|
||||||
|
- id: validate-audit
|
||||||
|
name: Validate Audit Patterns
|
||||||
|
entry: python scripts/validate/validate_all.py --audit
|
||||||
|
language: python
|
||||||
|
pass_filenames: false
|
||||||
|
always_run: true
|
||||||
|
additional_dependencies: [pyyaml]
|
||||||
|
verbose: true
|
||||||
|
|
||||||
# Python code quality
|
# Python code quality
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.5.0
|
rev: v4.5.0
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ class TestValidateCustomerToken:
|
|||||||
owner = User(
|
owner = User(
|
||||||
email=f"owner_{uid}@test.com",
|
email=f"owner_{uid}@test.com",
|
||||||
username=f"owner_{uid}",
|
username=f"owner_{uid}",
|
||||||
hashed_password="not_a_real_hash",
|
hashed_password="not_a_real_hash", # noqa: SEC001
|
||||||
role="merchant_owner",
|
role="merchant_owner",
|
||||||
is_active=True,
|
is_active=True,
|
||||||
)
|
)
|
||||||
@@ -239,7 +239,7 @@ class TestValidateCustomerToken:
|
|||||||
customer = Customer(
|
customer = Customer(
|
||||||
store_id=store.id,
|
store_id=store.id,
|
||||||
email=f"{email_prefix}_{uid}@example.com",
|
email=f"{email_prefix}_{uid}@example.com",
|
||||||
hashed_password="not_a_real_hash", # noqa: SEC001
|
hashed_password="not_a_real_hash", # noqa: SEC001 # noqa: SEC001
|
||||||
first_name="Test",
|
first_name="Test",
|
||||||
last_name="Customer",
|
last_name="Customer",
|
||||||
customer_number=f"CUST_{uid}",
|
customer_number=f"CUST_{uid}",
|
||||||
@@ -785,7 +785,7 @@ class TestGetCurrentCustomerFromCookieOrHeader:
|
|||||||
owner = User(
|
owner = User(
|
||||||
email=f"csowner_{uid}@test.com",
|
email=f"csowner_{uid}@test.com",
|
||||||
username=f"csowner_{uid}",
|
username=f"csowner_{uid}",
|
||||||
hashed_password="not_a_real_hash",
|
hashed_password="not_a_real_hash", # noqa: SEC001
|
||||||
role="merchant_owner",
|
role="merchant_owner",
|
||||||
is_active=True,
|
is_active=True,
|
||||||
)
|
)
|
||||||
@@ -813,7 +813,7 @@ class TestGetCurrentCustomerFromCookieOrHeader:
|
|||||||
customer = Customer(
|
customer = Customer(
|
||||||
store_id=store.id,
|
store_id=store.id,
|
||||||
email=f"cust_{uid}@example.com",
|
email=f"cust_{uid}@example.com",
|
||||||
hashed_password="not_a_real_hash", # noqa: SEC001
|
hashed_password="not_a_real_hash", # noqa: SEC001 # noqa: SEC001
|
||||||
first_name="Test",
|
first_name="Test",
|
||||||
last_name="Customer",
|
last_name="Customer",
|
||||||
customer_number=f"CUST_{uid}",
|
customer_number=f"CUST_{uid}",
|
||||||
@@ -878,7 +878,7 @@ class TestGetCurrentCustomerApi:
|
|||||||
owner = User(
|
owner = User(
|
||||||
email=f"caowner_{uid}@test.com",
|
email=f"caowner_{uid}@test.com",
|
||||||
username=f"caowner_{uid}",
|
username=f"caowner_{uid}",
|
||||||
hashed_password="not_a_real_hash",
|
hashed_password="not_a_real_hash", # noqa: SEC001
|
||||||
role="merchant_owner",
|
role="merchant_owner",
|
||||||
is_active=True,
|
is_active=True,
|
||||||
)
|
)
|
||||||
@@ -906,7 +906,7 @@ class TestGetCurrentCustomerApi:
|
|||||||
customer = Customer(
|
customer = Customer(
|
||||||
store_id=store.id,
|
store_id=store.id,
|
||||||
email=f"capi_{uid}@example.com",
|
email=f"capi_{uid}@example.com",
|
||||||
hashed_password="not_a_real_hash", # noqa: SEC001
|
hashed_password="not_a_real_hash", # noqa: SEC001 # noqa: SEC001
|
||||||
first_name="API",
|
first_name="API",
|
||||||
last_name="Customer",
|
last_name="Customer",
|
||||||
customer_number=f"CAPI_{uid}",
|
customer_number=f"CAPI_{uid}",
|
||||||
@@ -961,7 +961,7 @@ class TestGetCurrentCustomerOptional:
|
|||||||
owner = User(
|
owner = User(
|
||||||
email=f"coowner_{uid}@test.com",
|
email=f"coowner_{uid}@test.com",
|
||||||
username=f"coowner_{uid}",
|
username=f"coowner_{uid}",
|
||||||
hashed_password="not_a_real_hash",
|
hashed_password="not_a_real_hash", # noqa: SEC001
|
||||||
role="merchant_owner",
|
role="merchant_owner",
|
||||||
is_active=True,
|
is_active=True,
|
||||||
)
|
)
|
||||||
@@ -989,7 +989,7 @@ class TestGetCurrentCustomerOptional:
|
|||||||
customer = Customer(
|
customer = Customer(
|
||||||
store_id=store.id,
|
store_id=store.id,
|
||||||
email=f"copt_{uid}@example.com",
|
email=f"copt_{uid}@example.com",
|
||||||
hashed_password="not_a_real_hash", # noqa: SEC001
|
hashed_password="not_a_real_hash", # noqa: SEC001 # noqa: SEC001
|
||||||
first_name="Optional",
|
first_name="Optional",
|
||||||
last_name="Customer",
|
last_name="Customer",
|
||||||
customer_number=f"COPT_{uid}",
|
customer_number=f"COPT_{uid}",
|
||||||
|
|||||||
Reference in New Issue
Block a user