Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
d44e8a2
Merge pull request #1046 from Wikid82/main
Wikid82 Jun 2, 2026
acfad4b
chore(deps): update github-actions-non-major
renovate[bot] Jun 2, 2026
a7bf24b
chore(deps): update go-non-major
renovate[bot] Jun 2, 2026
28c7db9
chore(deps): update npm-non-major
renovate[bot] Jun 2, 2026
191223a
Merge pull request #1048 from Wikid82/renovate/github-actions-non-major
Wikid82 Jun 2, 2026
ac8d130
Merge pull request #1049 from Wikid82/renovate/go-non-major
Wikid82 Jun 2, 2026
d9e61a1
fix: regenerate lockfile to restore missing eslint and vite package e…
actions-user Jun 2, 2026
2ade498
fix(security): restore stale Grype code scanning pipeline
actions-user Jun 2, 2026
9e10e07
Merge pull request #1050 from Wikid82/renovate/npm-non-major
Wikid82 Jun 2, 2026
b951bc7
fix(deps): update Renovate configuration to correctly map gopkg.in/ya…
actions-user Jun 2, 2026
c32c43a
chore(deps): update go-non-major
renovate[bot] Jun 3, 2026
a6ae9ed
fix(deps): update Caddy version to 2.11.4 in Dockerfile
actions-user Jun 3, 2026
e6cd75b
fix(deps): update prometheus/common to v0.68.1
actions-user Jun 3, 2026
b16a951
fix(deps): update @tanstack/react-query to v5.101.0 and axios to v1.17.0
actions-user Jun 3, 2026
4149a2e
fix(deps): update Go version to 1.26.4 in settings, Dockerfile, and m…
actions-user Jun 3, 2026
9659f1c
fix(deps): update Syft version to v1.45.0 in multiple workflows and s…
actions-user Jun 3, 2026
525906b
Merge branch 'development' into renovate/go-non-major
Wikid82 Jun 3, 2026
172b0a4
fix(theme): prevent flash of unstyled content on page load
actions-user Jun 3, 2026
dcfb8f3
fix(dep): update grype version to 0.113.0
actions-user Jun 3, 2026
d21ec9a
fix(go): align all workflow and VS Code go.goroot references to 1.26.4
actions-user Jun 3, 2026
70cc2c9
Merge pull request #1052 from Wikid82/renovate/go-non-major
Wikid82 Jun 4, 2026
3ed5f50
chore(deps): update go-non-major to v1.75.0
renovate[bot] Jun 4, 2026
4d184e7
fix(ci): resolve Go toolchain mismatch in CodeQL and all CI workflows
actions-user Jun 4, 2026
92d0973
fix(sec): patch CVE-2026-40898 in buger/jsonparser via crowdsec-builder
actions-user Jun 4, 2026
e318678
Merge pull request #1053 from Wikid82/renovate/go-non-major
Wikid82 Jun 4, 2026
6c6aade
chore(deps): update go-non-major
renovate[bot] Jun 4, 2026
4ca8993
chore(deps): update i18next version to 26.3.1
actions-user Jun 4, 2026
744b5d8
Merge pull request #1054 from Wikid82/renovate/go-non-major
Wikid82 Jun 4, 2026
9cd026e
chore(deps): update github-actions-non-major
renovate[bot] Jun 5, 2026
9bf6760
chore(deps): update go-non-major
renovate[bot] Jun 5, 2026
57491f5
fix(deps): update npm-non-major to ^7.17.0
renovate[bot] Jun 5, 2026
ec9ae35
fix(sec): patch CVE-2026-40898 in buger/jsonparser via caddy-builder
actions-user Jun 5, 2026
dc5af6a
Merge branch 'development' into renovate/github-actions-non-major
Wikid82 Jun 5, 2026
91fdee8
Merge branch 'development' into renovate/go-non-major
Wikid82 Jun 5, 2026
0142a83
Merge branch 'development' into renovate/npm-non-major
Wikid82 Jun 5, 2026
3cec1d3
fix(sec): patch CVE-2026-40898 (quic-go QPACK) in crowdsec-builder
actions-user Jun 5, 2026
870516b
Merge branch 'development' into renovate/github-actions-non-major
Wikid82 Jun 5, 2026
29b4c99
Merge branch 'development' into renovate/go-non-major
Wikid82 Jun 5, 2026
b634842
Merge branch 'development' into renovate/npm-non-major
Wikid82 Jun 5, 2026
602da23
fix(sec): suppress GO-2024-2565, GO-2024-2557, GO-2026-4518 in grype/…
actions-user Jun 5, 2026
f17e7a7
Merge branch 'development' into renovate/github-actions-non-major
Wikid82 Jun 5, 2026
a2bc5aa
Merge branch 'development' into renovate/go-non-major
Wikid82 Jun 5, 2026
5309a8f
Merge branch 'development' into renovate/npm-non-major
Wikid82 Jun 5, 2026
edd0c14
Merge pull request #1057 from Wikid82/renovate/npm-non-major
Wikid82 Jun 5, 2026
4c07533
Merge pull request #1055 from Wikid82/renovate/github-actions-non-major
Wikid82 Jun 5, 2026
e2b2134
Merge pull request #1056 from Wikid82/renovate/go-non-major
Wikid82 Jun 5, 2026
d7293e0
fix(dep) update syft to v 1.45.1 in multiple workflows
actions-user Jun 5, 2026
6ea2d1a
fix(dep): update knip to v 6.16.0
actions-user Jun 5, 2026
d98b727
fix(dep): update bytedance/sonic to v1.15.2 and mattn/go-sqlite3 to v…
actions-user Jun 5, 2026
19eb5e0
chore: add Claude Code configuration from .github copilot files
actions-user Jun 5, 2026
37bb30e
fix(frontend): remove deprecated Firefox CSS and add modern browsersl…
Wikid82 Jun 5, 2026
4c570bd
chore: update ignore files
actions-user Jun 5, 2026
d46aed8
fix(dep) update npm deps to lates versions
actions-user Jun 6, 2026
c524555
chore(deps): update dependency anchore/syft to v1.45.1 (#1061)
renovate[bot] Jun 6, 2026
401c797
chore(deps): update dependency anchore/grype to v0.114.0 (#1062)
renovate[bot] Jun 6, 2026
f63b7d3
fix(dep): update codecov action
actions-user Jun 7, 2026
88f2372
chore(docker): update GeoLite2-Country.mmdb checksum (#1064)
github-actions[bot] Jun 7, 2026
32300e4
fix(assets): serve banner.webp and use picture element for optimized …
Wikid82 Jun 7, 2026
77d62b4
chore(deps): bump quic-go, maxminddb, and sqlite dependencies
actions-user Jun 7, 2026
531a75f
chore(deps): bump knip from 6.16.0 to 6.16.1
actions-user Jun 7, 2026
8b41f81
docs: add no-worktrees instruction to CLAUDE.md
actions-user Jun 7, 2026
9b04d19
chore(deps): bump react-hook-form and eslint-plugin-unicorn
actions-user Jun 8, 2026
19b413c
chore: ignore gorilla/websocket in renovate updates
actions-user Jun 8, 2026
30de6e2
fix(deps): add Renovate sourceUrl overrides for gin packages (#1065)
Wikid82 Jun 8, 2026
b4697c2
chore: clean node_modules before npm install in update script
actions-user Jun 8, 2026
4a817e8
chore(frontend): bump typescript-eslint to 8.61.0 and update deps
actions-user Jun 8, 2026
49b3cb3
chore: bump dev dependencies (obug, semver, tinyexec)
actions-user Jun 8, 2026
8890f94
chore(deps): bump golang.org/x/sys from v0.45.0 to v0.46.0
actions-user Jun 8, 2026
62fcd2e
chore(deps): bump golang.org/x and modernc.org dependencies
actions-user Jun 8, 2026
3febf21
fix(ci): pass pr_number when dispatching security-pr.yml from weekly …
actions-user Jun 8, 2026
8895f5c
fix(ci): extend no-cache-filters to caddy-builder and crowdsec-builde…
actions-user Jun 8, 2026
06b90a6
chore: bump prettier from 3.8.3 to 3.8.4
actions-user Jun 9, 2026
2d56bfd
chore(deps): bump eslint-plugin-unicorn to 65.0.1
actions-user Jun 9, 2026
eb62b08
fix(dockerfile): gate Delve install on BUILD_DEBUG, pin x/sys for GO-…
actions-user Jun 9, 2026
ab462f7
fix(entrypoint): gracefully handle production dlv stub when CHARON_DE…
actions-user Jun 9, 2026
cd4e264
chore(deps): update go-non-major (#1058)
renovate[bot] Jun 9, 2026
93425a6
chore(deps): update github-actions-non-major to v46.1.15 (#1067)
renovate[bot] Jun 9, 2026
6e1fd42
fix(deps): update go-non-major to v0.7.2 (#1068)
renovate[bot] Jun 10, 2026
2cafaaf
chore(deps): update alpine docker tag to v3.24.0 (#1069)
renovate[bot] Jun 10, 2026
45803d0
chore(deps): bump go-pkcs12 from v0.7.1 to v0.7.2
actions-user Jun 10, 2026
60077a5
chore: bump semver from 7.8.3 to 7.8.4
actions-user Jun 10, 2026
fc71385
chore(deps): bump frontend dev dependencies to latest patch versions
actions-user Jun 10, 2026
30eee6a
chore: replace eslint-plugin-react-compiler with react-hooks built-in
actions-user Jun 10, 2026
0536e73
fix(frontend): unregister auth error handler on AuthProvider unmount …
Wikid82 Jun 10, 2026
48c702e
chore: bump golang.org/x/net from v0.55.0 to v0.56.0
actions-user Jun 10, 2026
62e0106
chore: bump @napi-rs/wasm-runtime from 1.1.4 to 1.1.5
actions-user Jun 10, 2026
2f50483
chore: bump frontend dev dependencies to latest versions
actions-user Jun 10, 2026
6acb226
chore: add Docker Scout CLI install script
actions-user Jun 10, 2026
2ee04c4
fix(docker): move frontend builder to node alpine3.24 base to clear c…
actions-user Jun 10, 2026
7b55b2e
chore: bump @types/node from 25.9.2 to 25.9.3
actions-user Jun 11, 2026
9b5bad9
chore: remove lint step from npm_update script
actions-user Jun 11, 2026
e880852
chore: enhance go_update.sh with vuln checks and test runs
actions-user Jun 11, 2026
90c18ff
fix(go_update): simplify PATH export and remove redundant list cmd
actions-user Jun 11, 2026
292d73c
chore(renovate): group Dockerfile ARG updates separately from Go/NPM
actions-user Jun 11, 2026
0175723
chore(deps): update go-non-major to v0.56.0 (#1071)
renovate[bot] Jun 11, 2026
8e7faaf
chore: update acorn from 8.16.0 to 8.17.0
actions-user Jun 11, 2026
e8a30b1
chore: bump frontend deps (acorn, caniuse-lite, enhanced-resolve)
actions-user Jun 11, 2026
ea42263
chore: bump felixge/httpsnoop from v1.0.4 to v1.1.0
actions-user Jun 11, 2026
93e1b48
chore: update frontend lock file dependencies
actions-user Jun 12, 2026
d48a80c
fix(security): prepare for npm v12 breaking changes (#1072)
Wikid82 Jun 12, 2026
46d4b43
chore: bump eslint-plugin-security to 4.0.1
actions-user Jun 12, 2026
1f9c778
chore: bump npm to 11.17.0
actions-user Jun 12, 2026
c174a4a
chore(frontend): bump lucide-react, tailwindcss, and eslint deps
actions-user Jun 13, 2026
8b5874f
chore: bump obug from 2.1.2 to 2.1.3
actions-user Jun 13, 2026
36bc728
chore(deps): bump modernc.org/libc from v1.73.0 to v1.73.1
actions-user Jun 13, 2026
4bb8845
chore: fix renovate datasource config for expr-lang/expr
actions-user Jun 13, 2026
93dcabc
chore(deps): bump react-hook-form from 7.78.0 to 7.79.0
actions-user Jun 13, 2026
d937145
chore(deps): update npm-non-major to ^10.5.0 (#1073)
renovate[bot] Jun 13, 2026
8410cc2
chore: bump regjsparser from 0.13.1 to 0.13.2
actions-user Jun 13, 2026
a9691be
chore: update go.work.sum with golang.org/x/term v0.44.0
actions-user Jun 14, 2026
e972633
chore(deps): bump modernc.org/libc from v1.73.1 to v1.73.3
actions-user Jun 14, 2026
470673b
chore: bump @csstools/css-color-parser to 4.1.4
actions-user Jun 14, 2026
8d52783
chore(deps): update eslint-plugin-unicorn to v66 and react-refresh to…
actions-user Jun 14, 2026
5a3dbec
chore(docker): update GeoLite2-Country.mmdb checksum (#1074)
github-actions[bot] Jun 14, 2026
91b805b
Merge branch 'main' into nightly
Wikid82 Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .docker/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -414,9 +414,18 @@ if [ ! -f "$bin_path" ]; then
fi

if [ "$DEBUG_FLAG" = "1" ]; then
# Verify that /usr/local/bin/dlv is a real Delve binary, not the production stub
# (production images ship a shell stub that exits 1 to satisfy the COPY instruction
# without embedding the vulnerable golang.org/x/sys < v0.27.0 — GO-2026-5024).
# Real Delve exits 0 on `dlv version`; the stub exits 1.
if ! /usr/local/bin/dlv version >/dev/null 2>&1; then
echo "Note: Delve not available in this image (production build, GO-2026-5024 mitigation)."
echo " Running Charon directly. To enable remote debugging, rebuild with:"
echo " docker build --build-arg BUILD_DEBUG=1 ..."
run_as_charon "$bin_path" &
# Check if binary has debug symbols (required for Delve)
# objdump -h lists section headers; .debug_info is present if DWARF symbols exist
if command -v objdump >/dev/null 2>&1; then
elif command -v objdump >/dev/null 2>&1; then
if ! objdump -h "$bin_path" 2>/dev/null | grep -q '\.debug_info'; then
echo "⚠️ WARNING: Binary lacks debug symbols (DWARF info stripped)."
echo " Delve debugging will NOT work with this binary."
Expand Down
46 changes: 28 additions & 18 deletions .github/renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,19 @@
"datasourceTemplate": "golang-version",
"versioningTemplate": "semver"
},
{
"customType": "regex",
"description": "Track NODE_VERSION in Actions workflows",
"managerFilePatterns": [
"/^\\.github/workflows/.*\\.yml$/"
],
"matchStrings": [
"NODE_VERSION: ['\"]?(?<currentValue>[\\d\\.]+)['\"]?"
],
"depNameTemplate": "node",
"datasourceTemplate": "node-version",
"versioningTemplate": "node"
},
{
"customType": "regex",
"description": "Track GO_VERSION in Actions workflows",
Expand Down Expand Up @@ -414,41 +427,38 @@
"groupSlug": "go-non-major"
},
{
"description": "Group Go github-tags fallback updates from Dockerfile custom manager into Go non-major PR",
"description": "Group NPM non-major updates into one PR",
"matchDatasources": [
"github-tags"
],
"matchManagers": [
"custom.regex"
],
"matchFileNames": [
"Dockerfile"
],
"matchPackageNames": [
"jackc/pgx"
"npm"
],
"matchUpdateTypes": [
"minor",
"patch",
"pin",
"digest"
],
"groupName": "go-non-major",
"groupSlug": "go-non-major"
"groupName": "npm-non-major",
"groupSlug": "npm-non-major"
},
{
"description": "Group NPM non-major updates into one PR",
"matchDatasources": [
"npm"
"description": "Dockerfile ARG trackers (any datasource) group under Dockerfile, not Go/NPM — placed after the datasource group rules so it wins",
"matchManagers": [
"custom.regex"
],
"matchFileNames": [
"Dockerfile"
],
"matchUpdateTypes": [
"minor",
"patch",
"pin",
"digest"
],
"groupName": "npm-non-major",
"groupSlug": "npm-non-major"
"groupName": "dockerfile-non-major",
"groupSlug": "dockerfile-non-major",
"addLabels": [
"dockerfile"
]
},
{
"description": "Development branch: Auto-merge non-major updates after proven stable",
Expand Down
2 changes: 1 addition & 1 deletion .github/skills/test-e2e-playwright-coverage-scripts/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ start_vite() {
# Ensure dependencies are installed
if [[ ! -d "node_modules" ]]; then
log_info "Installing frontend dependencies..."
npm ci --silent
npm ci --silent --ignore-scripts
fi

# Start Vite in background with explicit port
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codecov-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ jobs:

- name: Install dependencies
working-directory: frontend
run: npm ci
run: npm ci --ignore-scripts

- name: Run frontend tests and coverage
working-directory: ${{ github.workspace }}
Expand Down
17 changes: 9 additions & 8 deletions .github/workflows/e2e-tests-split.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ on:
pull_request:

env:
NODE_VERSION: '20'
NODE_VERSION: '24.12.0'
GO_VERSION: '1.26.4'
GOTOOLCHAIN: local
DOCKERHUB_REGISTRY: docker.io
Expand Down Expand Up @@ -166,7 +166,7 @@ jobs:

- name: Install dependencies
if: steps.resolve-image.outputs.image_source == 'build'
run: npm ci
run: npm ci --ignore-scripts

- name: Set up Docker Buildx
if: steps.resolve-image.outputs.image_source == 'build'
Expand All @@ -184,6 +184,7 @@ jobs:
tags: ${{ steps.resolve-image.outputs.image_tag }}
cache-from: type=gha
cache-to: type=gha,mode=max
no-cache-filters: caddy-builder,crowdsec-builder

- name: Save Docker image
if: steps.resolve-image.outputs.image_source == 'build'
Expand Down Expand Up @@ -303,7 +304,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium
run: |
Expand Down Expand Up @@ -505,7 +506,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium (required by security-tests dependency)
run: |
Expand Down Expand Up @@ -715,7 +716,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium (required by security-tests dependency)
run: |
Expand Down Expand Up @@ -952,7 +953,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium
run: |
Expand Down Expand Up @@ -1190,7 +1191,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium (required by security-tests dependency)
run: |
Expand Down Expand Up @@ -1436,7 +1437,7 @@ jobs:
exit 1

- name: Install dependencies
run: npm ci
run: npm ci --ignore-scripts

- name: Install Playwright Chromium (required by security-tests dependency)
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/quality-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ jobs:

- name: Install dependencies
working-directory: frontend
run: npm ci
run: npm ci --ignore-scripts

- name: Run frontend tests and coverage
id: frontend-tests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
# Inject version into frontend build from tag (if present)
VERSION=${GITHUB_REF#refs/tags/}
echo "VITE_APP_VERSION=${VERSION}" >> "$GITHUB_ENV"
npm ci
npm ci --ignore-scripts
npm run build

- name: Install Cross-Compilation Tools (Zig)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/renovate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
go-version-file: backend/go.mod

- name: Run Renovate
uses: renovatebot/github-action@693b9ef15eec82123529a37c782242f091365961 # v46.1.14
uses: renovatebot/github-action@8217b3fc286df088d7c27f3255fe8414463bc0fd # v46.1.15
with:
configurationFile: .github/renovate.json
token: ${{ secrets.RENOVATE_TOKEN || secrets.GITHUB_TOKEN }}
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/weekly-nightly-promotion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -443,11 +443,12 @@ jobs:
const nightlyHeadSha = nightlyBranch.commit.sha;
core.info(`Current nightly HEAD for dispatch fallback: ${nightlyHeadSha}`);

const prNumber = '${{ needs.create-promotion-pr.outputs.pr_number }}';
const requiredWorkflows = [
{ id: 'e2e-tests-split.yml' },
{ id: 'codeql.yml' },
{ id: 'codecov-upload.yml', inputs: { run_backend: 'true', run_frontend: 'true' } },
{ id: 'security-pr.yml' },
{ id: 'security-pr.yml', inputs: { pr_number: prNumber } },
{ id: 'supply-chain-verify.yml' },
];

Expand Down
60 changes: 39 additions & 21 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ARG BUILD_DEBUG=0
ARG GO_VERSION=1.26.4

# renovate: datasource=docker depName=alpine versioning=docker
ARG ALPINE_IMAGE=alpine:3.23.4@sha256:5b10f432ef3da1b8d4c7eb6c487f2f5a8f096bc91145e68878dd4a5019afde11
ARG ALPINE_IMAGE=alpine:3.24.0@sha256:a2d49ea686c2adfe3c992e47dc3b5e7fa6e6b5055609400dc2acaeb241c829f4

# ---- Shared CrowdSec Version ----
# renovate: datasource=github-releases depName=crowdsecurity/crowdsec
Expand All @@ -22,22 +22,22 @@ ARG CROWDSEC_VERSION=1.7.8
ARG CROWDSEC_RELEASE_SHA256=704e37121e7ac215991441cef0d8732e33fa3b1a2b2b88b53a0bfe5e38f863bd

# ---- Shared Go Security Patches ----
# renovate: datasource=go depName=github.com/expr-lang/expr
# renovate: datasource=github-tags depName=expr-lang/expr extractVersion=^v(?<version>.+)$
ARG EXPR_LANG_VERSION=1.17.8
# renovate: datasource=go depName=golang.org/x/net
ARG XNET_VERSION=0.55.0
ARG XNET_VERSION=0.56.0
# renovate: datasource=go depName=golang.org/x/crypto
ARG XCRYPTO_VERSION=0.52.0
ARG XCRYPTO_VERSION=0.53.0
# renovate: datasource=npm depName=npm
ARG NPM_VERSION=11.16.0
ARG NPM_VERSION=11.17.0

# Allow pinning Caddy version - Renovate will update this
# Build the most recent Caddy 2.x release (keeps major pinned under v3).
# Setting this to '2' tells xcaddy to resolve the latest v2.x tag so we
# avoid accidentally pulling a v3 major release. Renovate can still update
# this ARG to a specific v2.x tag when desired.
## Try to build the requested Caddy v2.x tag (Renovate can update this ARG).
## If the requested tag isn't available, fall back to a known-good v2.11.3 build.
## If the requested tag isn't available, fall back to a known-good v2.11.4 build.
# renovate: datasource=go depName=github.com/caddyserver/caddy/v2
ARG CADDY_VERSION=2.11.4
# renovate: datasource=go depName=github.com/caddyserver/caddy/v2
Expand Down Expand Up @@ -94,7 +94,7 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
# ---- Frontend Builder ----
# Build the frontend using the BUILDPLATFORM to avoid arm64 musl Rollup native issues
# renovate: datasource=docker depName=node
FROM --platform=$BUILDPLATFORM node:24.16.0-alpine@sha256:2bdb65ed1dab192432bc31c95f94155ca5ad7fc1392fb7eb7526ab682fa5bf14 AS frontend-builder
FROM --platform=$BUILDPLATFORM node:24.16.0-alpine3.24@sha256:fb71d01345f11b708a3553c66e7c74074f2d506400ea81973343d915cb64eef0 AS frontend-builder
WORKDIR /app/frontend

# Copy frontend package files
Expand All @@ -118,7 +118,7 @@ RUN apk upgrade --no-cache && \
# hadolint ignore=DL3059
RUN npm install -g picomatch@4.0.4 --no-fund --no-audit

RUN npm ci
RUN npm ci --ignore-scripts

# Copy frontend source and build
COPY frontend/ ./
Expand Down Expand Up @@ -164,18 +164,32 @@ RUN set -eux; \
test -e "$LOADER"; \
fi

# Install Delve (cross-compile for target)
# Note: xx-go install puts binaries in /go/bin/TARGETOS_TARGETARCH/dlv if cross-compiling.
# We find it and move it to /go/bin/dlv so it's in a consistent location for the next stage.
# Install Delve (cross-compile for target) — debug builds only.
# Security: dlv is only installed when BUILD_DEBUG=1. Production images (BUILD_DEBUG=0,
# the default) receive a harmless stub so the unconditional COPY below still succeeds,
# but no Delve binary with golang.org/x/sys < v0.27.0 (GO-2026-5024) is shipped.
# When dlv IS needed, we build it inside a temporary module that pins
# golang.org/x/sys to the patched version used by the rest of the project.
# renovate: datasource=go depName=github.com/go-delve/delve
ARG DLV_VERSION=1.26.3
# hadolint ignore=DL3059,DL4006
RUN CGO_ENABLED=0 xx-go install github.com/go-delve/delve/cmd/dlv@v${DLV_VERSION} && \
DLV_PATH=$(find /go/bin -name dlv -type f | head -n 1) && \
if [ -n "$DLV_PATH" ] && [ "$DLV_PATH" != "/go/bin/dlv" ]; then \
mv "$DLV_PATH" /go/bin/dlv; \
fi && \
xx-verify /go/bin/dlv
RUN if [ "$BUILD_DEBUG" = "1" ]; then \
echo "DEBUG build: installing Delve v${DLV_VERSION} with patched golang.org/x/sys..."; \
mkdir -p /tmp/dlv-install && cd /tmp/dlv-install && \
go mod init dlv_install && \
go get golang.org/x/sys@v0.46.0 && \
CGO_ENABLED=0 GOFLAGS="-mod=mod" xx-go install github.com/go-delve/delve/cmd/dlv@v${DLV_VERSION} && \
DLV_PATH=$(find /go/bin -name dlv -type f | head -n 1) && \
if [ -n "$DLV_PATH" ] && [ "$DLV_PATH" != "/go/bin/dlv" ]; then \
mv "$DLV_PATH" /go/bin/dlv; \
fi && \
xx-verify /go/bin/dlv && \
cd / && rm -rf /tmp/dlv-install; \
else \
echo "Production build: skipping Delve install (GO-2026-5024 mitigation)"; \
printf '#!/bin/sh\necho "Delve not available in production builds. Rebuild with BUILD_DEBUG=1." >&2\nexit 1\n' \
> /go/bin/dlv && chmod +x /go/bin/dlv; \
fi

# Copy Go module files
COPY backend/go.mod backend/go.sum ./
Expand Down Expand Up @@ -466,7 +480,7 @@ RUN go get github.com/expr-lang/expr@v${EXPR_LANG_VERSION} && \
# renovate: datasource=go depName=github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream
go get github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream@v1.7.13 && \
# renovate: datasource=go depName=github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs
go get github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs@v1.75.1 && \
go get github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs@v1.75.2 && \
go get github.com/aws/aws-sdk-go-v2/service/kinesis@v1.43.7 && \
go get github.com/aws/aws-sdk-go-v2/service/s3@v1.102.1 && \
# CVE-2026-32952: go-ntlmssp DoS via malicious NTLM challenge response
Expand All @@ -477,7 +491,7 @@ RUN go get github.com/expr-lang/expr@v${EXPR_LANG_VERSION} && \
# Affects /usr/local/bin/crowdsec and /usr/local/bin/cscli (CrowdSec embeds quic-go v0.57.0).
# Fix available at v0.59.1. Caddy already resolves v0.59.1 through its own graph.
# renovate: datasource=go depName=github.com/quic-go/quic-go
go get github.com/quic-go/quic-go@v0.59.1 && \
go get github.com/quic-go/quic-go@v0.60.0 && \
# buger/jsonparser Delete() panic via negative slice index on malformed JSON.
# Fix available at v1.2.0.
# renovate: datasource=go depName=github.com/buger/jsonparser
Expand Down Expand Up @@ -579,7 +593,7 @@ SHELL ["/bin/ash", "-o", "pipefail", "-c"]
# Note: In production, users should provide their own MaxMind license key
# This uses the publicly available GeoLite2 database
# In CI, timeout quickly rather than retrying to save build time
ARG GEOLITE2_COUNTRY_SHA256=abce3a42f4f6bfb2c90cded582341da6764f5e152782ce6c832bc8fa1d873778
ARG GEOLITE2_COUNTRY_SHA256=11b88595d026953920668d91f6d531057b397f05170237fc98a13a8b051ab861
RUN mkdir -p /app/data/geoip && \
if [ "$CI" = "true" ] || [ "$CI" = "1" ]; then \
echo "⏱️ CI detected - quick download (10s timeout, no retries)"; \
Expand Down Expand Up @@ -664,7 +678,11 @@ RUN chmod +x /usr/local/bin/install_hub_items.sh /usr/local/bin/register_bouncer
# Copy Go binary from backend builder
COPY --from=backend-builder /app/backend/charon /app/charon
RUN ln -s /app/charon /app/cpmp || true
# Copy Delve debugger (xx-go install places it in /go/bin)
# Copy Delve stub/binary from backend-builder.
# Security (GO-2026-5024): production builds (BUILD_DEBUG=0) receive a harmless shell
# stub that prints an error and exits 1 — no vulnerable golang.org/x/sys v0.26.0 binary
# is present in production images. Debug builds (BUILD_DEBUG=1) receive the real dlv
# compiled against golang.org/x/sys v0.46.0 (patched).
COPY --from=backend-builder /go/bin/dlv /usr/local/bin/dlv

# Copy frontend build from frontend builder
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ install:
@echo "Installing backend dependencies..."
cd backend && go mod download
@echo "Installing frontend dependencies..."
cd frontend && npm install
cd frontend && npm install --ignore-scripts

# Install Go development tools
install-tools:
Expand Down
Loading
Loading