Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/asyncapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up Node.js
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ jobs:
IMPORTANT: Today's date is ${{ steps.date.outputs.current_date }}.

Key project facts:
- This project uses Go 1.26.1 (latest stable release)
- Go 1.26.1 is a valid version - do not question or flag it
- This project uses Go 1.26.2 (latest stable release)
- Go 1.26.2 is a valid version - do not question or flag it
- Architecture: BIAN-compliant microservices
- Stack: Go, Protocol Buffers, gRPC, Kubernetes
- Security: All security scans must remain BLOCKING (never suggest making them non-blocking)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
if: matrix.language == 'go'
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

# Set up buf for protobuf generation (pinned version for reproducibility)
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/control-plane-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -80,7 +80,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -117,7 +117,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -207,7 +207,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-demo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/migrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Install Atlas CLI
Expand Down Expand Up @@ -82,7 +82,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Install Atlas CLI
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -101,7 +101,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand All @@ -83,7 +83,7 @@ jobs:
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.9.0
version: v2.11.4
args: --timeout=5m --config=.golangci.yml

proto-freshness:
Expand All @@ -98,7 +98,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/saga-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/schema-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Install protoc
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down Expand Up @@ -131,7 +131,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: '1.26.1'
go-version: '1.26.2'
cache: true

- name: Set up buf
Expand Down
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ linters:
- err113 # Tests need dynamic errors to test error pattern matching
- funlen # Tests can be verbose with setup/assertions
- cyclop # Tests can have complex control flow
- noctx # httptest.NewRequest creates a valid context; requiring WithContext in tests is noise

# Allow context-as-argument after *testing.T in test helper functions
- path: _test\.go
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Uses distroless base image (~2MB) enabled by pure-Go franz-go Kafka client

# Build stage
FROM golang:1.26.1-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder
Comment thread
bjcoombs marked this conversation as resolved.

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# audit-worker - Development Dockerfile for Tilt Live Update
# Uses Debian bookworm for CGO support (required by confluent-kafka-go/librdkafka)

FROM golang:1.26.1-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder

# Install build dependencies for CGO (librdkafka)
RUN apt-get update && apt-get install -y --no-install-recommends \
Expand Down
2 changes: 1 addition & 1 deletion cmd/meridian/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Uses distroless base image (~2MB) enabled by CGO_ENABLED=0 static binary

# Build stage
FROM golang:1.26.1-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/new-bian-service-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -604,7 +604,7 @@ Create a multi-stage Docker build.

```dockerfile
# Stage 1: Build
FROM golang:1.26.0-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder

ARG VERSION=dev
ARG COMMIT=unknown
Expand Down
4 changes: 2 additions & 2 deletions docs/skills/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ This document describes the Docker setup for Meridian, optimized for production

Meridian uses a multi-stage Docker build to create minimal, secure production images:

- **Build stage**: golang:1.26.0-bookworm for compiling static binaries
- **Build stage**: golang:1.26.2-bookworm for compiling static binaries
- **Runtime stage**: gcr.io/distroless/static:nonroot for minimal attack surface
- **Image size**: ~3-5MB (binary: 1.4MB + distroless base: ~2MB)
- **Security**: Non-root user, no shell, minimal dependencies
Expand Down Expand Up @@ -64,7 +64,7 @@ docker build \
### Multi-Stage Build

1. **Builder Stage**
- Base: `golang:1.26.0-bookworm`
- Base: `golang:1.26.2-bookworm`
- Installs: git, ca-certificates, tzdata
- Compiles: Static binary with CGO disabled
- Optimizations: `-ldflags="-w -s"` for stripped, reduced size
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/meridianhub/meridian

go 1.26.1
go 1.26.2

require (
ariga.io/atlas-provider-gorm v0.6.0
Expand Down
2 changes: 1 addition & 1 deletion services/api-gateway/cmd/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Uses distroless base image (~2MB) enabled by pure-Go franz-go Kafka client

# Build stage
FROM golang:1.26.1-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
Expand Down
26 changes: 13 additions & 13 deletions services/api-gateway/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,29 +65,29 @@ func NewProxyHandler(backends []BackendRoute) *ProxyHandler {
// Consider adding configurable timeout settings for production resilience:
// ResponseHeaderTimeout, IdleConnTimeout, MaxIdleConnsPerHost

// Configure the proxy director to add X-Forwarded-Host and identity headers.
// Configure the proxy rewrite to add X-Forwarded-Host and identity headers.
// Connect protocol headers (Content-Type, Connect-Protocol-Version, Connect-Timeout-Ms)
// are standard headers (not hop-by-hop) and are preserved by httputil.ReverseProxy.
originalDirector := proxy.Director
proxy.Director = func(req *http.Request) {
originalDirector(req)
// Set X-Forwarded-Host so backends know the original Host header
if req.Header.Get("X-Forwarded-Host") == "" {
req.Header.Set("X-Forwarded-Host", req.Host)
proxy.Rewrite = func(r *httputil.ProxyRequest) {
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
r.SetURL(target)
r.SetXForwarded()
Comment thread
bjcoombs marked this conversation as resolved.
// Preserve the original Host header for X-Forwarded-Host
if r.Out.Header.Get("X-Forwarded-Host") == "" {
r.Out.Header.Set("X-Forwarded-Host", r.In.Host)
}
Comment thread
bjcoombs marked this conversation as resolved.

// SECURITY: Strip any incoming identity headers to prevent spoofing.
// These headers are set only by the gateway after successful authentication.
req.Header.Del(HeaderUserID)
req.Header.Del(HeaderTenantID)
req.Header.Del(HeaderAuthMethod)
req.Header.Del(HeaderAuthRoles)
r.Out.Header.Del(HeaderUserID)
r.Out.Header.Del(HeaderTenantID)
r.Out.Header.Del(HeaderAuthMethod)
r.Out.Header.Del(HeaderAuthRoles)

// SECURITY: Strip X-API-Key header to prevent credential leakage to backends.
req.Header.Del(auth.APIKeyHeader)
r.Out.Header.Del(auth.APIKeyHeader)

// Add identity headers if the request was authenticated
addIdentityHeaders(req)
addIdentityHeaders(r.Out)
}

routes = append(routes, proxyRoute{
Expand Down
2 changes: 1 addition & 1 deletion services/api-gateway/transcoding_bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func startBenchEnv(b *testing.B, backends []ServiceBackend) *benchEnv {
AtMost(5 * time.Second).
PollInterval(20 * time.Millisecond).
Until(func() bool {
resp, e := http.Get(baseURL + "/health") //nolint:noctx // Health check in benchmark setup does not need request context
resp, e := http.Get(baseURL + "/health")
if e != nil {
return false
}
Expand Down
2 changes: 1 addition & 1 deletion services/control-plane/cmd/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Uses distroless base image (~2MB) enabled by pure-Go dependencies

# Build stage
FROM golang:1.26.1-bookworm AS builder
FROM golang:1.26.2-bookworm AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func BuildHandlerReferenceCard(registry *schema.Registry) string {
return handlers[i].fullName < handlers[j].fullName
})

sb.WriteString(fmt.Sprintf("### %s\n\n", svc))
fmt.Fprintf(&sb, "### %s\n\n", svc)

for _, h := range handlers {
writeHandlerEntry(&sb, h.fullName, h.def)
Expand Down
Loading
Loading