CI Runner образы для Forgejo
Find a file
CaviCode 5748ebde93
All checks were successful
build-runner-images / build (docker) (push) Successful in 23s
build-runner-images / build (deploy) (push) Successful in 25s
build-runner-images / build (dotnet) (push) Successful in 22s
build-runner-images / build (go) (push) Successful in 25s
build-runner-images / build (node) (push) Successful in 21s
build-runner-images / build (rust) (push) Successful in 22s
build-runner-images / build-android (push) Successful in 10m19s
Update Dockerfile.android
2026-08-11 13:18:09 +03:00
.forgejo Патч isGhes() → false: Forgejo не GHES, V4 artifacts endpoints доступны 2026-08-05 20:05:20 +03:00
Dockerfile.android Update Dockerfile.android 2026-08-11 13:18:09 +03:00
Dockerfile.deploy fix(deploy): add nodejs for GitHub actions/download-artifact@v3 2026-06-25 09:49:15 +03:00
Dockerfile.docker feat(docker): add Node.js 22 for Forgejo Actions JS-actions support 2026-06-27 00:53:27 +03:00
Dockerfile.dotnet Добавлены artifact-actions (upload/download), Node.js в runner:dotnet, registry-cache в docker-build-push 2026-08-05 17:57:51 +03:00
Dockerfile.go fix(docker): add docker-cli to runner:go image 2026-06-24 23:46:45 +03:00
Dockerfile.node fix: install Java/Docker/Node from tarballs (not in ALT Linux P11 repos) 2026-06-24 19:56:28 +03:00
Dockerfile.rust refactor: switch runner images to ALT Linux p11/buildpack-deps 2026-06-24 17:52:58 +03:00
README.md Добавлены artifact-actions (upload/download), Node.js в runner:dotnet, registry-cache в docker-build-push 2026-08-05 17:57:51 +03:00

CaviCode CI Runner

Кастомные Docker-образы для Forgejo runner на 192.168.1.40.

Базовый образ catthehacker/ubuntu:act-latest не подходит — Ubuntu archive.ubuntu.com таймаутит через Cloudflare, apt-get не работает. Все образы на базе Alpine 3.20 — apk add работает быстро и надёжно.

Образы

Образ Метка Размер Инструменты
cavicode/runner:deploy deploy ~32MB bash, ssh, rsync, sshpass
cavicode/runner:dotnet dotnet ~1.5GB .NET 8/9/10, Java 21, Node.js, Python, Git, ssh, rsync, sshpass, docker-cli
cavicode/runner:go go ~430MB Go 1.24, Node.js, Python, Git, ssh, rsync, sshpass, docker-cli
cavicode/runner:rust rust ~600MB Rust (stable), rustfmt, clippy, Node.js, Python, Git, ssh, rsync, sshpass, docker-cli
cavicode/runner:node node ~180MB Node.js 22, npm, Python, Git, ssh, rsync, sshpass, docker-cli
cavicode/runner:docker docker ~300MB Docker CLI + buildx, Node.js 22, Git, ssh, rsync, sshpass
cavicode/runner:android android ~5GB .NET 8/9/10, Java 21, Android SDK 36 + NDK 28 + CMake 3.31, Rust + cargo-ndk, Conan 2, Node.js, Python, Git, ssh, rsync, sshpass, docker-cli

Сборка

docker build -t cavicode/runner:deploy   -f Dockerfile.deploy  .
docker build -t cavicode/runner:dotnet   -f Dockerfile.dotnet  .
docker build -t cavicode/runner:go       -f Dockerfile.go      .
docker build -t cavicode/runner:rust     -f Dockerfile.rust    .
docker build -t cavicode/runner:node     -f Dockerfile.node    .
docker build -t cavicode/runner:docker   -f Dockerfile.docker  .
docker build -t cavicode/runner:android  -f Dockerfile.android .

Передача на CI-сервер

docker save cavicode/runner:deploy cavicode/runner:dotnet cavicode/runner:go cavicode/runner:rust cavicode/runner:node cavicode/runner:docker cavicode/runner:android \
  | gzip > /tmp/all-images.tar.gz
scp /tmp/all-images.tar.gz root@192.168.1.40:/tmp/
ssh root@192.168.1.40 "docker load < /tmp/all-images.tar.gz"

Конфигурация runner

Метки в /data/config.yml контейнера forgejo-runner:

labels:
  - "docker:docker://catthehacker/ubuntu:act-latest"
  - "deploy:docker://cavicode/runner:deploy"
  - "dotnet:docker://cavicode/runner:dotnet"
  - "go:docker://cavicode/runner:go"
  - "rust:docker://cavicode/runner:rust"
  - "node:docker://cavicode/runner:node"
  - "docker:docker://cavicode/runner:docker"
  - "android:docker://cavicode/runner:android"

После изменения конфига: docker restart forgejo-runner

Actions

Кастомные Forgejo Actions в .forgejo/actions/:

  • Composite-actions (bash, без внешних зависимостей): checkout, docker-login, docker-setup-buildx, docker-build-push, setup-go, setup-node, ssh.
  • Node20-actions (форк forgejo/upload-artifact/download-artifact, pre-built bundle, без npm-зависимостей): upload-artifact, download-artifact. Требуют Node.js в runner-образе (есть в runner:node, runner:docker, runner:dotnet).
Action Заменяет Описание
checkout actions/checkout@v4 Клонирование репозитория через переданный токен, без сети github.com
docker-login docker/login-action docker login в registry через --password-stdin
docker-setup-buildx docker/setup-buildx-action Создаёт/использует buildx-билдер cavicode-builder
docker-build-push docker/build-push-action docker buildx build с тегами, build-args, кэшем и push
setup-go actions/setup-go@v5 Установка Go SDK из go.dev
setup-node actions/setup-node@v4 Установка Node.js из nodejs.org
ssh appleboy/ssh-action SSH-деплой: ключ или пароль (sshpass), set -euo pipefail по умолчанию. Использовать с cavicode/runner:deploy
upload-artifact forgejo/upload-artifact@v4 Загрузка артефакта (zip) для передачи между jobs. Node20-action, pre-built bundle
download-artifact forgejo/download-artifact@v4 Скачивание ранее загруженного артефакта. Node20-action, pre-built bundle

Важно: composite-actions не имеют доступа к контексту secrets вызывающего репозитория (ограничение Forgejo/GitHub Actions). Поэтому checkout требует обязательный input token: ${{ secrets.GITHUB_TOKEN }} — передавайте его явно из каждого workflow через with:. То же касается любых секретов для других actions (docker-login, ssh) — они должны прокидываться через with:, а не читаться из secrets внутри action.yml.

Подключение из другого репозитория (пример для ssh):

- uses: https://git.cavicode.tech/CaviCode/CaviCode-Runner/.forgejo/actions/ssh@main
  with:
    host: ${{ secrets.SSH_HOST }}
    username: ${{ secrets.SSH_USER }}
    key: ${{ secrets.SSH_PRIVATE_KEY }}
    port: ${{ secrets.SSH_PORT }}
    script: |
      echo "deploy"

Использование в workflow

Образы публикуются в git.cavicode.tech/cavicode/runner:*. Runner pull-ит их автоматически.

jobs:
  build-dotnet:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:dotnet

  build-go:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:go

  build-rust:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:rust

  build-node:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:node

  build-docker:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:docker

  build-android:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:android

  deploy:
    runs-on: docker
    container: git.cavicode.tech/cavicode/runner:deploy

CI

Workflow .forgejo/workflows/build-images.yml автоматически собирает и передаёт образы на сервер при изменении Dockerfile.*. Использует alpine:3.20 как контейнер для сборки (не зависит от самих образов — нет замкнутого круга).

Требуемые Secrets:

  • DEPLOY_HOST — SSH-хост сервера (192.168.1.40)
  • DEPLOY_USER — SSH-пользователь (root)
  • DEPLOY_PASSWORD — SSH-пароль