Commit Graph

119 Commits

Author SHA1 Message Date
Jeremy
a845b83ef7 fix: Merge branch 'development' 2026-02-04 16:01:22 +00:00
GitHub Actions
721b533e15 fix(docker-build): enhance feature branch tag generation with improved sanitization 2026-02-04 05:17:19 +00:00
GitHub Actions
1a8df0c732 refactor(docker-build): simplify feature branch tag generation in workflow 2026-02-04 05:00:46 +00:00
GitHub Actions
4a2c3b4631 refactor(docker-build): improve Docker build command handling with array arguments for tags and labels 2026-02-04 04:55:58 +00:00
GitHub Actions
ac39eb6866 refactor(docker-build): optimize Docker build command handling and improve readability 2026-02-04 04:50:48 +00:00
GitHub Actions
6b15aaad08 fix(workflow): enhance Docker build process for PRs and feature branches 2026-02-04 04:46:41 +00:00
GitHub Actions
928033ec37 chore(ci): implement "build once, test many" architecture
Restructures CI/CD pipeline to eliminate redundant Docker image builds
across parallel test workflows. Previously, every PR triggered 5 separate
builds of identical images, consuming compute resources unnecessarily and
contributing to registry storage bloat.

Registry storage was growing at 20GB/week due to unmanaged transient tags
from multiple parallel builds. While automated cleanup exists, preventing
the creation of redundant images is more efficient than cleaning them up.

Changes CI/CD orchestration so docker-build.yml is the single source of
truth for all Docker images. Integration tests (CrowdSec, Cerberus, WAF,
Rate Limiting) and E2E tests now wait for the build to complete via
workflow_run triggers, then pull the pre-built image from GHCR.

PR and feature branch images receive immutable tags that include commit
SHA (pr-123-abc1234, feature-dns-provider-def5678) to prevent race
conditions when branches are updated during test execution. Tag
sanitization handles special characters, slashes, and name length limits
to ensure Docker compatibility.

Adds retry logic for registry operations to handle transient GHCR
failures, with dual-source fallback to artifact downloads when registry
pulls fail. Preserves all existing functionality and backward
compatibility while reducing parallel build count from 5× to 1×.

Security scanning now covers all PR images (previously skipped),
blocking merges on CRITICAL/HIGH vulnerabilities. Concurrency groups
prevent stale test runs from consuming resources when PRs are updated
mid-execution.

Expected impact: 80% reduction in compute resources, 4× faster
total CI time (120min → 30min), prevention of uncontrolled registry
storage growth, and 100% consistency guarantee (all tests validate
the exact same image that would be deployed).

Closes #[issue-number-if-exists]
2026-02-04 04:42:42 +00:00
renovate[bot]
6d746385c3 chore(deps): update actions/checkout digest to de0fac2 2026-02-03 17:20:33 +00:00
GitHub Actions
4178910eac refactor: streamline supply chain workflows by removing Syft and Grype installations and utilizing official Anchore actions for SBOM generation and vulnerability scanning 2026-02-03 07:09:54 +00:00
GitHub Actions
de66689b79 fix: update SYFT and GRYPE versions to include SHA256 digests for improved security 2026-02-03 06:40:50 +00:00
renovate[bot]
22c2e10f64 chore(deps): update weekly-non-major-updates 2026-02-02 21:23:46 +00:00
Jeremy
ca80149faa fix(ci): skip Docker artifact steps for Renovate PRs
The "Save Docker Image as Artifact" and "Upload Image Artifact" steps
were running even when skip_build=true, causing CI failures on Renovate
dependency update PRs.

Add skip_build check to artifact saving step condition
Add skip_build check to artifact upload step condition
Aligns artifact steps with existing build skip logic
2026-01-30 15:07:32 +00:00
GitHub Actions
2427b25940 fix: resolve three CI workflow failures blocking deployments 2026-01-30 07:13:59 +00:00
GitHub Actions
6675f2a169 fix: Implement dependency digest tracking for nightly builds
- Updated Docker Compose files to use digest-pinned images for CI contexts.
- Enhanced Dockerfile to pin Go tool installations and verify external downloads with SHA256 checksums.
- Added Renovate configuration for tracking Go tool versions and digest updates.
- Introduced a new design document outlining the architecture and data flow for dependency tracking.
- Created tasks and requirements documentation to ensure compliance with the new digest pinning policy.
- Updated security documentation to reflect the new digest pinning policy and exceptions.
2026-01-30 06:39:26 +00:00
GitHub Actions
98eae4afd9 fix(docs): update Grype version to v0.107.0 in scripts and documentation 2026-01-30 01:04:46 +00:00
renovate[bot]
74bb7d711d fix(deps): update weekly-non-major-updates 2026-01-28 21:36:35 +00:00
renovate[bot]
300e89aa9a fix(deps): update weekly-non-major-updates 2026-01-27 23:26:52 +00:00
renovate[bot]
859d987d1e fix(deps): update weekly-non-major-updates 2026-01-26 22:31:20 +00:00
GitHub Actions
ac803fd411 fix(ci): add CHARON_EMERGENCY_TOKEN to E2E test workflows
Add missing emergency token environment variable to all E2E test workflows to
fix security teardown failures in CI. Without this token, the emergency reset
endpoint returns 501 "not configured", causing test teardown to fail and
leaving ACL enabled, which blocks 83 subsequent tests.

Changes:

Add CHARON_EMERGENCY_TOKEN to docker-build.yml test-image job
Add CHARON_EMERGENCY_TOKEN to e2e-tests.yml e2e-tests job
Add CHARON_EMERGENCY_TOKEN to playwright.yml playwright job
Verified:

Docker build strategy already optimal (build once, push to both GHCR + Docker Hub)
Testing strategy correct (test once by digest, validates both registries)
All workflows now have environment parity with local development setup
Requires GitHub repository secret:

Name: CHARON_EMERGENCY_TOKEN
Value: 64-char hex token (e.g., from openssl rand -hex 32)
Related:

Emergency endpoint rate limiting removal (proper fix)
Local emergency token configuration (.env, docker-compose.local.yml)
Security test suite teardown mechanism
Refs #550
2026-01-26 20:03:30 +00:00
GitHub Actions
f64e3feef8 chore: clean .gitignore cache 2026-01-26 19:22:05 +00:00
GitHub Actions
e5f0fec5db chore: clean .gitignore cache 2026-01-26 19:21:33 +00:00
renovate[bot]
3f341fadba chore(deps): update sigstore/cosign-installer action to v4 2026-01-26 05:00:59 +00:00
GitHub Actions
3ba2ddcfe4 fix(ci): use env var for Docker Hub token check in workflow conditions
GitHub Actions doesn't allow secrets context in step if expressions.
Add HAS_DOCKERHUB_TOKEN env var at job level that evaluates the secret
existence, then reference that env var in step conditions.

Fixes: "Unrecognized named-value: 'secrets'" workflow validation error
2026-01-25 20:19:57 +00:00
GitHub Actions
ba900e20c5 chore(ci): add Docker Hub as secondary container registry
Publish Docker images to both Docker Hub (docker.io/wikid82/charon) and
GitHub Container Registry (ghcr.io/wikid82/charon) for maximum reach.

Add Docker Hub login with secret existence check for graceful fallback
Update docker/metadata-action to generate tags for both registries
Add Cosign keyless signing for both GHCR and Docker Hub images
Attach SBOM to Docker Hub via cosign attach sbom
Add Docker Hub signature verification to supply-chain-verify workflow
Update README with Docker Hub badges and dual registry examples
Update getting-started.md with both registry options
Supply chain security maintained: identical tags, signatures, and SBOMs
on both registries. PR images remain GHCR-only.
2026-01-25 16:04:42 +00:00
renovate[bot]
dfffa66e36 fix(deps): update weekly-non-major-updates 2026-01-25 14:42:45 +00:00
renovate[bot]
e1e840bac1 fix(deps): update weekly-non-major-updates 2026-01-25 05:39:59 +00:00
GitHub Actions
4fcca5ed7d fix(workflow): update base image in docker-build.yml from debian:bookworm-slim to debian:trixie-slim to resolve build inconsistency 2026-01-25 05:08:14 +00:00
GitHub Actions
2edd3de9a0 fix(ci): use --pull=never for PR image verification
On PRs, images are loaded locally but not pushed to registry.
Add --pull=never to prevent Docker from trying to fetch the
image from ghcr.io, which fails with 'manifest unknown'.

Modified 4 docker commands:
- Caddy version check (docker run)
- Caddy binary extraction (docker create)
- CrowdSec version check (docker run)
- CrowdSec binary extraction (docker create)
2026-01-24 23:04:11 +00:00
GitHub Actions
3ef09d44b7 fix(ci): increase container health timeout for Debian image
Debian-based image takes longer to start than Alpine due to:
- Larger base image
- gosu and CrowdSec built from source
- Additional package dependencies

Increase timeout from 120s to 180s to accommodate slower startup.
2026-01-24 22:58:59 +00:00
GitHub Actions
710d729022 chore: replace wget with curl in various scripts for consistency and reliability
- Updated WafConfig.tsx to correct regex for common bad bots.
- Modified cerberus_integration.sh to use curl instead of wget for backend readiness check.
- Changed coraza_integration.sh to utilize curl for checking httpbin backend status.
- Updated crowdsec_startup_test.sh to use curl for LAPI health check.
- Replaced wget with curl in install-go-1.25.5.sh for downloading Go.
- Modified rate_limit_integration.sh to use curl for backend readiness check.
- Updated waf_integration.sh to replace wget with curl for checking httpbin backend status.
2026-01-24 22:22:39 +00:00
GitHub Actions
e0a39518ba chore: migrate Docker base images from Alpine to Debian Trixie
Migrated all Docker stages from Alpine 3.23 to Debian Trixie (13) to
address critical CVE in Alpine's gosu package and improve security
update frequency.

Key changes:

Updated CADDY_IMAGE to debian:trixie-slim
Added gosu-builder stage to compile gosu 1.17 from source with Go 1.25.6
Migrated all builder stages to golang:1.25-trixie
Updated package manager from apk to apt-get
Updated user/group creation to use groupadd/useradd
Changed nologin path from /sbin/nologin to /usr/sbin/nologin
Security impact:

Resolved gosu Critical CVE (built from source eliminates vulnerable Go stdlib)
Reduced overall CVE count from 6 (bookworm) to 2 (trixie)
Remaining 2 CVEs are glibc-related with no upstream fix available
All Go binaries verified vulnerability-free by Trivy and govulncheck
Verification:

E2E tests: 243 passed (5 pre-existing failures unrelated to migration)
Backend coverage: 87.2%
Frontend coverage: 85.89%
Pre-commit hooks: 13/13 passed
TypeScript: 0 errors
Refs: CVE-2026-0861 (glibc, no upstream fix - accepted risk)
2026-01-20 06:11:59 +00:00
GitHub Actions
b395610158 feat: enhance auto-versioning and docker build workflows with improved semantic versioning patterns 2026-01-16 04:13:07 +00:00
GitHub Actions
753b694dbd fix(ci): skip SBOM/Trivy in docker-build for feature branch pushes 2026-01-15 19:44:52 +00:00
GitHub Actions
cd0385d770 fix(ci): load docker image locally for feature branch pushes
Feature branch pushes were failing to save artifacts because the image
was pushed to GHCR but not loaded locally. Multi-platform builds
cannot use load:true, so feature branch pushes now build single-platform.
2026-01-15 16:50:46 +00:00
GitHub Actions
07796bf610 fix(ci): enable workflow_run triggers for all push branches
Update branch triggers and downstream workflow logic to support all
branches defined in docker-build.yml (main, development, feature/**).

Changes:

docker-build.yml: Expand branch glob to feature/**, use branch-based tags
playwright.yml: Replace is_beta_push with generic is_push detection
security-pr.yml: Same branch-agnostic pattern
supply-chain-pr.yml: Same pattern, skip PR comments for push events
The workflows now support any push that triggers docker-build:

main branch → tag: latest
development branch → tag: dev
feature/* branches → tag: {branch-name}
Pull requests → tag: pr-{number}
Dynamic artifact naming:

Push events: push-image (shared across all branches)
Pull requests: pr-image-{number}
This ensures CI/CD pipelines work for stable releases, bug fixes,
and new feature development without hardcoded branch names.
2026-01-15 16:07:40 +00:00
GitHub Actions
0892637164 chore(ci): modularize post-build testing into independent workflows
Separate PR-specific tests from docker-build.yml into dedicated workflows
that trigger via workflow_run. This creates a cleaner CI architecture where:

playwright.yml: E2E tests triggered after docker-build completes
security-pr.yml: Trivy binary scanning for PRs
supply-chain-pr.yml: SBOM generation + Grype vulnerability scanning
2026-01-15 15:00:55 +00:00
GitHub Actions
9b3c7eaeae fix(ci): detect beta-release branch correctly for PR events
The skip condition used github.ref to detect the beta-release branch,
but for PRs github.ref is "refs/pull/N/merge", not the branch name.

Added github.head_ref to env variables for PR branch detection
Updated condition to check both REF and HEAD_REF
This ensures E2E tests run for PRs from feature/beta-release branch
2026-01-15 06:18:35 +00:00
GitHub Actions
19a34201bf fix(ci): use valid 32-byte base64 encryption key for E2E tests
The DNS provider API endpoints were returning 404 in CI because the
encryption service failed to initialize with an invalid key.

Changed CHARON_ENCRYPTION_KEY from plain text to valid base64 string
Key "dGVzdC1lbmNyeXB0aW9uLWtleS1mb3ItY2ktMzJieXQ=" decodes to 32 bytes
Without valid encryption key, DNS provider routes don't register
This was causing all dns-provider-types.spec.ts tests to fail
Root cause: AES-256-GCM requires exactly 32 bytes for the key
2026-01-15 06:02:42 +00:00
GitHub Actions
bb14a5a1e3 fix(tests): change console.error to console.log for login failure messages
feat(tests): update Playwright configuration to include GitHub reporter and adjust base URL handling
2026-01-15 03:19:59 +00:00
Jeremy
809d40e431 Merge pull request #509 from Wikid82/renovate/feature/beta-release-github-codeql-action-4.x
chore(deps): update github/codeql-action action to v4.31.10 (feature/beta-release)
2026-01-13 15:28:25 -05:00
renovate[bot]
5a56d4a3ed chore(deps): update github/codeql-action action to v4.31.10 2026-01-12 20:29:11 +00:00
GitHub Actions
4907efc876 fix(ci): remove specific Chromium project reference from Playwright test commands 2026-01-12 20:16:53 +00:00
GitHub Actions
c909525bcf fix(tests): specify Chromium project for Playwright E2E tests 2026-01-12 20:13:09 +00:00
GitHub Actions
b1b7defaae feat(ci): integrate Playwright E2E tests into Docker build workflow 2026-01-12 20:10:16 +00:00
renovate[bot]
9d25ca7f09 chore(deps): update github artifact actions to v6 2026-01-12 06:11:30 +00:00
Jeremy
e4d3acf3c1 Merge branch 'feature/beta-release' into renovate/feature/beta-release-major-5-github-artifact-actions 2026-01-12 01:09:21 -05:00
Jeremy
63d4cfae39 Merge pull request #504 from Wikid82/renovate/feature/beta-release-actions-github-script-8.x
chore(deps): update actions/github-script action to v8 (feature/beta-release)
2026-01-12 01:08:51 -05:00
renovate[bot]
e7e42655f2 chore(deps): update github artifact actions to v5 2026-01-12 06:08:41 +00:00
Jeremy
d1c5f2ad32 Merge pull request #503 from Wikid82/renovate/feature/beta-release-major-7-github-artifact-actions
chore(deps): update actions/download-artifact action to v7 (feature/beta-release)
2026-01-12 01:08:33 -05:00
renovate[bot]
0759ddeab6 chore(deps): update actions/github-script action to v8 2026-01-12 06:00:39 +00:00