[TT-16946][TT-16951] feat(ci): FIPS base image for EE/FIPS Docker builds (release-5.12)#7977
Conversation
|
This PR introduces a dedicated FIPS-compliant build pipeline for Tyk Gateway, enabling its deployment in regulated environments. The changes primarily focus on the CI/CD process to produce a new Files Changed Analysis
Architecture & Impact Assessment
Build & Containerization Flowgraph TD
subgraph sg1 ["GoReleaser Build Matrix"]
A[Source Code] --> B{Build Variants}
B -- tags: ee --> C[EE Binary]
B -- "tags: ee, fips<br/>env: GOFIPS140=v1.0.0" --> D[FIPS Binary]
B -- tags: std --> E[Standard Binary]
end
subgraph sg2 ["GitHub Actions: Docker Image Build"]
C & E --> F[Build Standard/EE Image]
F -- FROM gcr.io/distroless/base-debian13 --> G[Dockerfile.distroless]
D --> H[Build FIPS Image]
H -- "ARG BASE_IMAGE=tykio/dhi-busybox:1.37-fips" --> G
H --> I[Attach VEX Attestation w/ Cosign]
end
subgraph sg3 ["Publish"]
F --> J[Push to Registries]
I --> J
end
Scope Discovery & Context Expansion
Metadata
Powered by Visor from Probelabs Last updated: 2026-04-14T14:59:02.811Z | Triggered by: pr_updated | Commit: 60414af 💡 TIP: You can chat with Visor using |
|
API Changes no api changes detected |
\n\n
Architecture Issues (2)
Performance Issues (1)
Quality Issues (6)
Powered by Visor from Probelabs Last updated: 2026-04-14T14:58:32.123Z | Triggered by: pr_updated | Commit: 60414af 💡 TIP: You can chat with Visor using |
cd904db to
b6eecba
Compare
da47635 to
4f4ae19
Compare
daa6b9e to
4afa693
Compare
| # startsWith covers pull_request_target too | ||
| BASE_REF: ${{startsWith(github.event_name, 'pull_request') && github.base_ref || github.ref_name}} | ||
| jobs: | ||
| dep-guard: |
There was a problem hiding this comment.
@buger Is this intentional, do we not need depguard here? Or is that run as a separate workflow somewhere else?
| if: ${{ matrix.golang_cross == '1.25-bullseye' && startsWith(github.ref, 'refs/tags') }} | ||
| run: | | ||
| # Install Docker Scout CLI | ||
| curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s -- 2>/dev/null |
There was a problem hiding this comment.
Isn't this is a bit risky? If the main has a change due to a supply chain attack similar to trivy, the install script could be compromised. Might be better to fetch using a known good SHA, and pass the latest known immutable release tag as argument. This scripts support this as an option.
Something like:
curl -fssL https://raw.githubusercontent.com/docker/scout-cli/0390daf32edeaee9aca29829ac63aacde4e2ca9b/install.sh | sh -s "1.20.4" -- 2>/dev/nullThis fetches the script from the corresponding commit hash for 1.20.4 tag and installs the 1.20.4 tag.
| - id: std-amd64 | ||
| flags: | ||
| - -tags=goplugin | ||
| - -trimpath |
There was a problem hiding this comment.
If trimpath is removed from here, it also needs to be removed from the plugin compiler build flag, otherwise built plugins would be incompatible.
Unless it's required, I think it might be better to keep trimpath
4afa693 to
a47b05b
Compare
Gromit-generated output: - Dockerfile.distroless: parameterized with BASE_IMAGE ARG for per-build Docker base image override - goreleaser.yml: added FIPS builds (amd64, arm64, s390x) using GOFIPS140=v1.0.0 (Go 1.24+ native FIPS 140-3 module) - release.yml: added FIPS Docker build steps, BASE_IMAGE build-arg on EE builds, Go 1.25 build environment EE and FIPS Docker images use tykio/dhi-busybox:1.37-fips (hardened). OSS (std) images use default distroless base (unchanged). Docker images: amd64/arm64 for EE/FIPS, amd64/arm64/s390x for OSS. Packages: all three archs for all variants. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
a47b05b to
60414af
Compare
🚨 Jira Linter FailedCommit: The Jira linter failed to validate your PR. Please check the error details below: 🔍 Click to view error detailsNext Steps
This comment will be automatically deleted once the linter passes. |
|
|
/release to release-5.12.1 |
|
|




$(gh pr view 7977 --repo TykTechnologies/tyk --json body -q .body)
Related Tickets: