diff --git a/.gitea/workflows/build-runner-images.yml b/.gitea/workflows/build-runner-images.yml new file mode 100644 index 0000000..26c9b66 --- /dev/null +++ b/.gitea/workflows/build-runner-images.yml @@ -0,0 +1,82 @@ +name: Build Runner Images + +on: + push: + branches: [main] + paths: + - k8s/infra/forgejo-runner-images/Dockerfile.* + - .gitea/workflows/build-runner-images.yml + pull_request: + branches: [main] + paths: + - k8s/infra/forgejo-runner-images/Dockerfile.* + +env: + REGISTRY: forgejo.riotpiao.com + +jobs: + build: + name: Build and Push Runner Images + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: golang + steps: + - name: Install Node.js and Docker + run: | + apt-get update + apt-get install -y nodejs docker.io + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Get short SHA + id: sha + run: | + SHORT_SHA=$(git rev-parse --short HEAD) + echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT + + - name: Registry login + run: | + echo "${REGISTRY_TOKEN}" | docker login "${REGISTRY}" \ + --username "${REGISTRY_USER}" --password-stdin + env: + REGISTRY_USER: ${{ secrets.FORGEJO_REGISTRY_USER }} + REGISTRY_TOKEN: ${{ secrets.FORGEJO_REGISTRY_TOKEN }} + + - name: Build and push golang image + run: | + IMAGE="${REGISTRY}/rock/forgejo-runner-golang:${{ steps.sha.outputs.short_sha }}" + docker build --no-cache \ + -f k8s/infra/forgejo-runner-images/Dockerfile.golang \ + -t "${IMAGE}" \ + -t "${REGISTRY}/rock/forgejo-runner-golang:latest" \ + . + docker push "${IMAGE}" + docker push "${REGISTRY}/rock/forgejo-runner-golang:latest" + echo "✓ Pushed golang: ${IMAGE}" + + - name: Build and push node image + run: | + IMAGE="${REGISTRY}/rock/forgejo-runner-node:${{ steps.sha.outputs.short_sha }}" + docker build --no-cache \ + -f k8s/infra/forgejo-runner-images/Dockerfile.node \ + -t "${IMAGE}" \ + -t "${REGISTRY}/rock/forgejo-runner-node:latest" \ + . + docker push "${IMAGE}" + docker push "${REGISTRY}/rock/forgejo-runner-node:latest" + echo "✓ Pushed node: ${IMAGE}" + + - name: Build and push rust image + run: | + IMAGE="${REGISTRY}/rock/forgejo-runner-rust:${{ steps.sha.outputs.short_sha }}" + docker build --no-cache \ + -f k8s/infra/forgejo-runner-images/Dockerfile.rust \ + -t "${IMAGE}" \ + -t "${REGISTRY}/rock/forgejo-runner-rust:latest" \ + . + docker push "${IMAGE}" + docker push "${REGISTRY}/rock/forgejo-runner-rust:latest" + echo "✓ Pushed rust: ${IMAGE}" + + - name: Prune unused images + run: docker image prune -a --force 2>&1 | tail -3 || true diff --git a/k8s/infra/forgejo-runner-images/Dockerfile.golang b/k8s/infra/forgejo-runner-images/Dockerfile.golang new file mode 100644 index 0000000..44a8908 --- /dev/null +++ b/k8s/infra/forgejo-runner-images/Dockerfile.golang @@ -0,0 +1,12 @@ +FROM golang:1.26-bookworm + +# Add Node.js precheck script +RUN apt-get update && apt-get install -y --no-install-recommends \ + nodejs npm \ + && rm -rf /var/lib/apt/lists/* + +# Verify installations +RUN node --version && npm --version && go version + +LABEL maintainer="homelab" \ + description="Golang 1.26 + Node.js pre-installed with precheck" diff --git a/k8s/infra/forgejo-runner-images/Dockerfile.node b/k8s/infra/forgejo-runner-images/Dockerfile.node new file mode 100644 index 0000000..025b90a --- /dev/null +++ b/k8s/infra/forgejo-runner-images/Dockerfile.node @@ -0,0 +1,11 @@ +FROM node:22-bookworm + +# Node.js already installed, ensure npm is up to date +RUN apt-get update && apt-get upgrade -y \ + && rm -rf /var/lib/apt/lists/* + +# Verify installations +RUN node --version && npm --version + +LABEL maintainer="homelab" \ + description="Node.js 22 with latest npm" diff --git a/k8s/infra/forgejo-runner-images/Dockerfile.rust b/k8s/infra/forgejo-runner-images/Dockerfile.rust new file mode 100644 index 0000000..a9ba6ea --- /dev/null +++ b/k8s/infra/forgejo-runner-images/Dockerfile.rust @@ -0,0 +1,12 @@ +FROM rust:1-bookworm + +# Add Node.js +RUN apt-get update && apt-get install -y --no-install-recommends \ + nodejs npm \ + && rm -rf /var/lib/apt/lists/* + +# Verify installations +RUN rustc --version && cargo --version && node --version && npm --version + +LABEL maintainer="homelab" \ + description="Rust 1 + Node.js pre-installed" diff --git a/k8s/infra/forgejo-runner/values-node.yaml b/k8s/infra/forgejo-runner/values-node.yaml index e75a0aa..947099b 100644 --- a/k8s/infra/forgejo-runner/values-node.yaml +++ b/k8s/infra/forgejo-runner/values-node.yaml @@ -9,7 +9,7 @@ runner: repository: code.forgejo.org/forgejo/runner tag: "6" name: node-runner - labels: "node:docker://node:22-bookworm" + labels: "node:docker://forgejo.riotpiao.com/rock/forgejo-runner-node:latest" # GC CronJob renders only from the default (golang) values to avoid duplicates gc: diff --git a/k8s/infra/forgejo-runner/values-rust.yaml b/k8s/infra/forgejo-runner/values-rust.yaml index b645cf3..903e066 100644 --- a/k8s/infra/forgejo-runner/values-rust.yaml +++ b/k8s/infra/forgejo-runner/values-rust.yaml @@ -9,7 +9,7 @@ runner: repository: code.forgejo.org/forgejo/runner tag: "6" name: rust-runner - labels: "rust:docker://rust:1-bookworm" + labels: "rust:docker://forgejo.riotpiao.com/rock/forgejo-runner-rust:latest" diff --git a/k8s/infra/forgejo-runner/values.yaml b/k8s/infra/forgejo-runner/values.yaml index adb07b0..683d88c 100644 --- a/k8s/infra/forgejo-runner/values.yaml +++ b/k8s/infra/forgejo-runner/values.yaml @@ -6,7 +6,7 @@ runner: # Label image is what workflow steps run in (NOT the runner daemon image). # golang:1.26-bookworm: Debian, root, apt-get, Go, git. # Install Node.js/docker in workflow steps as needed. - labels: "golang:docker://golang:1.26-bookworm" + labels: "golang:docker://forgejo.riotpiao.com/rock/forgejo-runner-golang:latest" forgejoUrl: http://forgejo-gitea-http.cicd.svc.cluster.local:3000 tokenSecret: runner-token resources: