diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8650315..e1c629b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -35,7 +35,7 @@ jobs: run: | REGISTRY="${{ forgejo.server_url }}" echo "registry=${REGISTRY#https://}" >> "$GITHUB_OUTPUT" - ORG="${{ forgejo.repository_owner }}" + ORG="${{ github.repository_owner }}" echo "org=$(echo "$ORG" | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT" id: sanitize_credentials diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 3f5f26e..dd707f5 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,6 +1,6 @@ version: 2 -project_name: optimiser +project_name: sizer gitea_urls: api: "{{ .Env.GITHUB_SERVER_URL }}/api/v1" @@ -53,7 +53,7 @@ dockers_v2: ids: - collector images: - - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_ORG }}/forgejo-runner-optimiser-collector" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_ORG }}/forgejo-runner-sizer-collector" tags: - "{{ .Version }}" - latest @@ -64,7 +64,7 @@ dockers_v2: ids: - receiver images: - - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_ORG }}/forgejo-runner-optimiser-receiver" + - "{{ .Env.DOCKER_REGISTRY }}/{{ .Env.DOCKER_ORG }}/forgejo-runner-sizer-receiver" tags: - "{{ .Version }}" - latest diff --git a/CLAUDE.md b/CLAUDE.md index 6b6d7ef..819e2c1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -28,7 +28,7 @@ make install-hooks # Install pre-commit and commit-msg hooks ## Architecture Overview -A resource optimiser for CI/CD environments with shared PID namespaces. It consists of two binaries — a **collector** and a **receiver** (which includes the **sizer**): +A resource sizer for CI/CD environments with shared PID namespaces. It consists of two binaries — a **collector** and a **receiver** (which includes the **sizer**): ### Collector (`cmd/collector`) Runs alongside CI workloads, periodically reads `/proc` filesystem, and pushes a summary to the receiver on shutdown (SIGINT/SIGTERM). diff --git a/Dockerfile b/Dockerfile index 61ae4e0..070beff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ COPY . . # Collector build (no CGO needed) FROM builder-base AS builder-collector -RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /optimiser ./cmd/collector +RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /sizer ./cmd/collector # Receiver build FROM builder-base AS builder-receiver @@ -20,9 +20,9 @@ RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /metrics-receiver ./cm # Collector image FROM alpine:3.19 AS collector -COPY --from=builder-collector /optimiser /usr/local/bin/optimiser +COPY --from=builder-collector /sizer /usr/local/bin/sizer -ENTRYPOINT ["/usr/local/bin/optimiser"] +ENTRYPOINT ["/usr/local/bin/sizer"] # Receiver image FROM alpine:3.19 AS receiver diff --git a/Makefile b/Makefile index 8bb918a..d1e1543 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -# ABOUTME: Makefile for forgejo-runner-optimiser project. +# ABOUTME: Makefile for forgejo-runner-sizer project. # ABOUTME: Provides targets for building, formatting, linting, and testing. -BINARY_NAME := optimiser +BINARY_NAME := sizer CMD_PATH := ./cmd/collector GO := go GOLANGCI_LINT := $(GO) run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.6.2 diff --git a/README.md b/README.md index fc7fb7b..f8a9cf4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Forgejo Runner Optimiser +# Forgejo Runner Sizer -A resource optimiser for CI/CD workloads in shared PID namespace environments. The **collector** reads `/proc` to gather CPU and memory metrics grouped by container/cgroup, and pushes run summaries to the **receiver**. The receiver stores metrics and exposes a **sizer** API that computes right-sized Kubernetes resource requests and limits from historical data. +A resource sizer for CI/CD workloads in shared PID namespace environments. The **collector** reads `/proc` to gather CPU and memory metrics grouped by container/cgroup, and pushes run summaries to the **receiver**. The receiver stores metrics and exposes a **sizer** API that computes right-sized Kubernetes resource requests and limits from historical data. ## Architecture diff --git a/cmd/collector/main.go b/cmd/collector/main.go index 65b7ce4..4e7ce27 100644 --- a/cmd/collector/main.go +++ b/cmd/collector/main.go @@ -10,9 +10,9 @@ import ( "syscall" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/collector" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/output" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/collector" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/output" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) const ( diff --git a/cmd/receiver/main.go b/cmd/receiver/main.go index c540736..a7863c7 100644 --- a/cmd/receiver/main.go +++ b/cmd/receiver/main.go @@ -11,7 +11,7 @@ import ( "syscall" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/receiver" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/receiver" ) const ( diff --git a/go.mod b/go.mod index 898904b..a51ecd1 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser +module edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer go 1.25.6 diff --git a/internal/collector/collector.go b/internal/collector/collector.go index 8ed587a..4c800c7 100644 --- a/internal/collector/collector.go +++ b/internal/collector/collector.go @@ -6,9 +6,9 @@ import ( "log/slog" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/metrics" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/output" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/metrics" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/output" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) // Config holds the collector configuration diff --git a/internal/collector/collector_test.go b/internal/collector/collector_test.go index a9791ca..b0a9a38 100644 --- a/internal/collector/collector_test.go +++ b/internal/collector/collector_test.go @@ -10,8 +10,8 @@ import ( "testing" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/output" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/output" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) func TestCollector_EmitsSummaryOnShutdown(t *testing.T) { diff --git a/internal/integration/integration_test.go b/internal/integration/integration_test.go index f21fa6f..91f532c 100644 --- a/internal/integration/integration_test.go +++ b/internal/integration/integration_test.go @@ -14,8 +14,8 @@ import ( "testing" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/receiver" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/receiver" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) const ( diff --git a/internal/metrics/aggregator.go b/internal/metrics/aggregator.go index a4997d2..bd5bb8c 100644 --- a/internal/metrics/aggregator.go +++ b/internal/metrics/aggregator.go @@ -4,8 +4,8 @@ import ( "sort" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/cgroup" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/proc" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/cgroup" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/proc" ) // Aggregator collects and aggregates metrics from processes diff --git a/internal/output/logger.go b/internal/output/logger.go index d8541bb..c557f89 100644 --- a/internal/output/logger.go +++ b/internal/output/logger.go @@ -6,7 +6,7 @@ import ( "log/slog" "os" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/metrics" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/metrics" ) // LogFormat specifies the log output format diff --git a/internal/output/types.go b/internal/output/types.go index 28576c8..ffd3754 100644 --- a/internal/output/types.go +++ b/internal/output/types.go @@ -1,6 +1,6 @@ package output -import "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/metrics" +import "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/metrics" // Writer defines the interface for outputting metrics // This allows for different implementations (logging, HTTP push, etc.) diff --git a/internal/receiver/handler_test.go b/internal/receiver/handler_test.go index 12b327e..dcf1791 100644 --- a/internal/receiver/handler_test.go +++ b/internal/receiver/handler_test.go @@ -11,7 +11,7 @@ import ( "strings" "testing" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) func TestHandler_ReceiveMetrics(t *testing.T) { diff --git a/internal/receiver/sizing.go b/internal/receiver/sizing.go index 32951ab..256a48d 100644 --- a/internal/receiver/sizing.go +++ b/internal/receiver/sizing.go @@ -8,7 +8,7 @@ import ( "math" "sort" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) // ResourceSize holds Kubernetes-formatted resource values diff --git a/internal/receiver/sizing_test.go b/internal/receiver/sizing_test.go index a1ac3c5..ce57210 100644 --- a/internal/receiver/sizing_test.go +++ b/internal/receiver/sizing_test.go @@ -6,7 +6,7 @@ import ( "net/http/httptest" "testing" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) func TestFormatMemoryK8s(t *testing.T) { diff --git a/internal/receiver/store_test.go b/internal/receiver/store_test.go index d63169f..eebd06d 100644 --- a/internal/receiver/store_test.go +++ b/internal/receiver/store_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" ) func TestNewStore(t *testing.T) { diff --git a/internal/receiver/types.go b/internal/receiver/types.go index 58f6a50..1afee44 100644 --- a/internal/receiver/types.go +++ b/internal/receiver/types.go @@ -2,7 +2,7 @@ // ABOUTME: Defines MetricsPayload combining execution metadata with run summary. package receiver -import "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/summary" +import "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/summary" // ExecutionContext holds GitHub Actions style identifiers for a workflow run type ExecutionContext struct { diff --git a/internal/summary/accumulator.go b/internal/summary/accumulator.go index 972ff28..65530ca 100644 --- a/internal/summary/accumulator.go +++ b/internal/summary/accumulator.go @@ -7,7 +7,7 @@ import ( "sort" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/metrics" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/metrics" ) // containerAccumulator tracks metrics for a single container diff --git a/internal/summary/accumulator_test.go b/internal/summary/accumulator_test.go index 00f1b3c..1bbaab4 100644 --- a/internal/summary/accumulator_test.go +++ b/internal/summary/accumulator_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "edp.buildth.ing/DevFW-CICD/forgejo-runner-optimiser/internal/metrics" + "edp.buildth.ing/DevFW-CICD/forgejo-runner-sizer/internal/metrics" ) func TestAccumulator_NoSamples(t *testing.T) { diff --git a/test/docker/docker-compose-stress.yaml b/test/docker/docker-compose-stress.yaml index d4a0be0..7c8578f 100644 --- a/test/docker/docker-compose-stress.yaml +++ b/test/docker/docker-compose-stress.yaml @@ -113,7 +113,7 @@ services: # Cgroup configuration # stress-ng-cpu is the worker process name for CPU stress # stress-ng-vm is the worker process name for memory stress - CGROUP_PROCESS_MAP: '{"stress-ng-cpu":"cpu-stress","stress-ng-vm":"mem-stress","dd":"io-stress","resource-collec":"collector"}' + CGROUP_PROCESS_MAP: '{"stress-ng-cpu":"cpu-stress","stress-ng-vm":"mem-stress","dd":"io-stress","sizer":"collector"}' CGROUP_LIMITS: '{"cpu-stress":{"cpu":"1","memory":"128Mi"},"mem-stress":{"cpu":"500m","memory":"256Mi"},"io-stress":{"cpu":"500m","memory":"128Mi"},"collector":{"cpu":"200m","memory":"64Mi"}}' deploy: resources: diff --git a/test/docker/docker-compose.yaml b/test/docker/docker-compose.yaml index 87a9a9a..af438af 100644 --- a/test/docker/docker-compose.yaml +++ b/test/docker/docker-compose.yaml @@ -68,7 +68,7 @@ services: environment: # Map unique process names to container names # 'cat' runs only in runner, 'sleep' runs only in sidecar - CGROUP_PROCESS_MAP: '{"cat":"runner","sleep":"sidecar","resource-collec":"collector"}' + CGROUP_PROCESS_MAP: '{"cat":"runner","sleep":"sidecar","sizer":"collector"}' CGROUP_LIMITS: '{"runner":{"cpu":"500m","memory":"256Mi"},"sidecar":{"cpu":"100m","memory":"128Mi"},"collector":{"cpu":"100m","memory":"64Mi"}}' deploy: resources: diff --git a/test/k8s/test-cgroup-grouping.yaml b/test/k8s/test-cgroup-grouping.yaml index 4b2b1c1..fc27d81 100644 --- a/test/k8s/test-cgroup-grouping.yaml +++ b/test/k8s/test-cgroup-grouping.yaml @@ -55,7 +55,7 @@ spec: # Resource collector sidecar - name: collector - image: ghcr.io/your-org/forgejo-runner-optimiser:latest # Replace with your image + image: ghcr.io/your-org/forgejo-runner-sizer:latest args: - --interval=5s - --top=3 @@ -121,7 +121,7 @@ spec: # Collector - name: collector - image: ghcr.io/your-org/forgejo-runner-optimiser:latest # Replace with your image + image: ghcr.io/your-org/forgejo-runner-sizer:latest args: - --interval=2s - --top=5