CI: custom runner-base image, Node 22, pip caching
- infra/Dockerfile.runner-base: new Ubuntu 24.04 image with Python 3.12 and Node 22 LTS pre-installed, tagged py3.12-node22. Eliminates the ~3-4 min deadsnakes PPA install that ran on every test job. - infra/runner-compose.yml: update ubuntu-latest label to use runner-base:py3.12-node22 instead of node:20-bullseye. - .forgejo/workflows/ci.yml: remove Python 3.12 install steps (now in base image), add actions/cache for pip keyed on pyproject.toml hash, bump node-version 20 → 22. - Dockerfile: bump frontend build stage node:20-alpine → node:22-alpine. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -45,7 +45,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/setup-node@v6
|
- uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "22"
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
cache-dependency-path: frontend/package-lock.json
|
cache-dependency-path: frontend/package-lock.json
|
||||||
|
|
||||||
@@ -75,16 +75,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
# The act runner base image ships Ubuntu 22.04 with Python 3.10.
|
# Python 3.12 is pre-installed in the runner-base image (py3.12-node22).
|
||||||
# Our package requires 3.12, so install it from the deadsnakes PPA.
|
- name: Cache pip wheels
|
||||||
- name: Install Python 3.12
|
uses: actions/cache@v3
|
||||||
run: |
|
with:
|
||||||
apt-get update -qq
|
path: ~/.cache/pip
|
||||||
apt-get install -y -qq software-properties-common
|
key: pip-${{ hashFiles('pyproject.toml') }}
|
||||||
add-apt-repository -y ppa:deadsnakes/ppa
|
restore-keys: pip-
|
||||||
apt-get update -qq
|
|
||||||
apt-get install -y -qq python3.12 python3.12-dev python3.12-venv python3-pip git
|
|
||||||
python3.12 -m ensurepip --upgrade
|
|
||||||
|
|
||||||
- name: Create virtual environment
|
- name: Create virtual environment
|
||||||
run: python3.12 -m venv /opt/venv
|
run: python3.12 -m venv /opt/venv
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# Stage 1: Build Vue frontend
|
# Stage 1: Build Vue frontend
|
||||||
FROM node:20-alpine AS build-frontend
|
FROM node:22-alpine AS build-frontend
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
COPY frontend/package.json frontend/package-lock.json* ./
|
COPY frontend/package.json frontend/package-lock.json* ./
|
||||||
RUN npm install -g npm@latest --quiet && npm install
|
RUN npm install -g npm@latest --quiet && npm install
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Runner base image for Forgejo act_runner job containers.
|
||||||
|
# Pre-installs Python 3.12 and Node 20 so the test job skips the
|
||||||
|
# ~3-4 minute deadsnakes PPA install on every run.
|
||||||
|
#
|
||||||
|
# Build and push (one-time setup, re-run if this file changes):
|
||||||
|
# docker build -f infra/Dockerfile.runner-base \
|
||||||
|
# -t git.fabledsword.com/bvandeusen/runner-base:py3.12-node22 .
|
||||||
|
# docker push git.fabledsword.com/bvandeusen/runner-base:py3.12-node22
|
||||||
|
#
|
||||||
|
# Then redeploy the act_runner stack in Portainer to pick up the new label.
|
||||||
|
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Python 3.12 ships in Ubuntu 24.04 main repos — no PPA needed.
|
||||||
|
RUN apt-get update -qq && \
|
||||||
|
apt-get install -y -qq \
|
||||||
|
python3.12 python3.12-dev python3.12-venv python3-pip \
|
||||||
|
git curl ca-certificates gnupg && \
|
||||||
|
# Node 22 LTS via NodeSource
|
||||||
|
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
|
||||||
|
apt-get install -y -qq nodejs && \
|
||||||
|
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
@@ -13,7 +13,7 @@ services:
|
|||||||
- GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_TOKEN}
|
- GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_TOKEN}
|
||||||
- GITEA_RUNNER_NAME=swarm-runner
|
- GITEA_RUNNER_NAME=swarm-runner
|
||||||
# Maps the runs-on: ubuntu-latest label used in workflow files to a Docker image.
|
# Maps the runs-on: ubuntu-latest label used in workflow files to a Docker image.
|
||||||
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://node:20-bullseye
|
- GITEA_RUNNER_LABELS=ubuntu-latest:docker://git.fabledsword.com/bvandeusen/runner-base:py3.12-node22
|
||||||
- CONFIG_FILE=/config/config.yml
|
- CONFIG_FILE=/config/config.yml
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|||||||
Reference in New Issue
Block a user