84 lines
3.5 KiB
Docker
84 lines
3.5 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# custom-gitea-runner — self-owned Gitea Actions runner
|
|
# All dependencies installed at build time; no runtime apt-get.
|
|
|
|
ARG UBUNTU_VERSION=22.04
|
|
FROM ubuntu:${UBUNTU_VERSION}
|
|
|
|
ARG ACT_RUNNER_VERSION=0.2.11
|
|
ARG NODE_MAJOR=20
|
|
ARG BUILD_DATE
|
|
ARG VCS_REF
|
|
ARG VERSION=dev
|
|
|
|
LABEL org.opencontainers.image.title="custom-gitea-runner" \
|
|
org.opencontainers.image.description="Self-owned Gitea Actions runner with bundled tooling" \
|
|
org.opencontainers.image.version="${VERSION}" \
|
|
org.opencontainers.image.created="${BUILD_DATE}" \
|
|
org.opencontainers.image.revision="${VCS_REF}"
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
IMAGE_VERSION="${VERSION}" \
|
|
GIT_REVISION="${VCS_REF}" \
|
|
RUNNER_CONFIG_PATH=/config/runner.yaml \
|
|
RUNNER_WORKDIR=/work
|
|
|
|
# ─── Base packages ────────────────────────────────────────────────────────────
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
bash \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
gnupg \
|
|
jq \
|
|
tini \
|
|
tzdata \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# ─── Node.js (NodeSource — Ubuntu 22.04 default is 12.x, too old) ─────────────
|
|
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - \
|
|
&& apt-get install -y --no-install-recommends nodejs \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# ─── Docker CLI ───────────────────────────────────────────────────────────────
|
|
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
|
|
| gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
|
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
|
|
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
|
|
> /etc/apt/sources.list.d/docker.list \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends docker-ce-cli \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# ─── act_runner binary (pinned) ───────────────────────────────────────────────
|
|
# To update: bump ACT_RUNNER_VERSION in the build command or here.
|
|
# Releases: https://gitea.com/gitea/act_runner/releases
|
|
RUN ARCH=$(dpkg --print-architecture) \
|
|
&& curl -fsSL \
|
|
"https://gitea.com/gitea/act_runner/releases/download/v${ACT_RUNNER_VERSION}/act_runner-${ACT_RUNNER_VERSION}-linux-${ARCH}" \
|
|
-o /usr/local/bin/act_runner \
|
|
&& chmod +x /usr/local/bin/act_runner
|
|
|
|
# ─── Runtime directories and scripts ─────────────────────────────────────────
|
|
RUN mkdir -p /config /work /config/trusted-ca
|
|
|
|
COPY docker/runner/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
|
COPY docker/runner/healthcheck.sh /usr/local/bin/healthcheck.sh
|
|
COPY docker/runner/smoke-test.sh /usr/local/bin/smoke-test.sh
|
|
|
|
RUN chmod +x \
|
|
/usr/local/bin/docker-entrypoint.sh \
|
|
/usr/local/bin/healthcheck.sh \
|
|
/usr/local/bin/smoke-test.sh
|
|
|
|
VOLUME ["/config", "/work"]
|
|
|
|
HEALTHCHECK \
|
|
--interval=30s \
|
|
--timeout=10s \
|
|
--start-period=60s \
|
|
--retries=3 \
|
|
CMD ["/usr/local/bin/healthcheck.sh"]
|
|
|
|
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
|