Hoppa till huvudinnehållet

Hostad runner-image

Arbetsflöden som anger runs-on: fremforge körs på en kortlivad VM, en per commit, som provisioneras från den hostade runner-imagen. Den är byggd för paritet med ubuntu-latest: samma actions/setup-*-upplevelse som du är van vid från GitHub Actions, samma förinstallerade verktygskedjor, samma skannrar och dessutom inbyggd Docker för containerbyggen.

Arkitektur i två lager

Runner-imagen är VM:ens startdisk. Båda lagren finns på samma disk och är på plats från det ögonblick VM:en startar, utan någon nedladdning per jobb.

LagerInnehållStorlek
Systemlagerdebian 13 som bas + systemverktyg i en version (Node 24 LTS, byggverktyg, skannrar, IaC- och moln-CLI:er, webbläsare, databasklienter, inbyggd Docker-daemon)~300 MB
hostedtoolcache-lagerSpråkmiljöer i flera versioner (Node, Go, Python, .NET, Java, Ruby) + Android SDK + Miniconda3 + R~7 GB

setup-*-actions hämtar från hostedtoolcache utan nedladdning per jobb. RUNNER_TOOL_CACHE och AGENT_TOOLSDIRECTORY pekar redan på /opt/hostedtoolcache.

Versionsnumren i tabellerna nedan visar vilka major- och minor-serier som är förinstallerade. De exakta versionerna uppdateras löpande av den veckovisa ombyggnaden och publiceras automatiskt vid varje ombyggnad; se ändringsloggen för den aktuella publicerade verktygsuppsättningen.

Språk – system

En aktuell version på PATH. Använd dem direkt när ditt arbetsflöde klarar sig med systemets standardversion.

SpråkVersionKommentar
Node.js24.x (LTS)+ npm, samt pnpm + yarn via corepack. Nyare eller äldre serier via actions/setup-node; se nedan
Rustrustup stablerustc + cargo
PowerShell7.xpwsh
PHP8.3+ Composer

Språk – flera versioner via setup-*-actions

Använd de här actions/setup-*-actions precis som på GitHub-hostade runners. Versionen du ber om hämtas från hostedtoolcache (ingen hämtning över nätverket).

ActionFörinstallerade versionerVad den konfigurerar
actions/setup-node@v426.x, 24.x, 22.xNode.js + npm; aktivera pnpm/yarn med corepack enable
actions/setup-go@v51.27.x, 1.26.xGo-verktygskedja + modulcache
actions/setup-python@v53.14, 3.13, 3.12Python + pip
actions/setup-dotnet@v410.0, 8.0.NET SDK (sida vid sida, DOTNET_ROOT satt)
actions/setup-java@v4Temurin 25, 21, 17OpenJDK från Adoptium
ruby/setup-ruby@v14.0.x, 3.4.x, 3.3.xRuby (ruby-builder)

Om du behöver en version som vi inte har förinstallerat (t.ex. Node 20.x för ett äldre projekt) kan actions/setup-node, actions/setup-go, actions/setup-java och actions/setup-dotnet ladda ned den när jobbet körs (långsammare, men det fungerar: de hämtar generiska Linux-byggen). actions/setup-python och ruby/setup-ruby kan inte det: upstream publicerar ingen debian-variant för någon av dem, så en serie som inte är förinstallerad misslyckas direkt i stället för att falla tillbaka. Välj en förinstallerad serie, eller använd uv python install <version> (uv är förinstallerat) eller ett container:-jobb för ett enstaka fall.

Byggverktyg

Inbyggda Node-moduler, Python-wheels med C-tillägg, Go cgo och Rust-crates med C-beroenden byggs direkt utan extra konfiguration.

build-essential (gcc + make) · clang + lld · cmake · ninja · pkg-config · autoconf · automake · libtool · zstd · linux-headers (via basen)

Pakethanterare och projektverktyg

PakethanterareVersionKommentar
npmmedföljer Node 24
pnpm12.14.0 som standardVia corepack, som redan är aktiverat. Ett projekts packageManager-pin går före; se Versioner av pnpm och Yarn
yarn4.18.1 som standardVia corepack, som redan är aktiverat. Pinna yarn@1.22.22 för Yarn Classic; se Versioner av pnpm och Yarn
pipxdebianInstallerar Python-CLI-verktyg i isolerade venvs
composersenastePHP
cargohanteras av rustupRust
mvn (Maven)3.9.xJVM
gradle9.5.xJVM

Versioner av pnpm och Yarn

pnpm och yarn körs via corepack, som är aktiverat på runnern. Vilken version ett jobb får beror på om projektet pinnar en:

  • Ingen pin: jobbet får pnpm 12.14.0 och Yarn 4.18.1. Båda finns på runnern, så ingen nedladdning behövs. Fram till 2026-10-21 fick ett jobb utan pin den version som var npm:s latest när jobbet kördes, vilket för Yarn var Yarn Classic 1.22.
  • Med pin: ange packageManager i din package.json, till exempel "packageManager": "pnpm@11.28.6" eller "packageManager": "yarn@1.22.22", så kör corepack exakt den versionen. pnpm 12.14.0 och 11.28.6 finns redan på runnern; alla andra versioner laddas ned när jobbet startar.

Det är genom att pinna packageManager som du väljer. Det håller också din lokala dator och CI på samma version. När vi flyttar standardversionerna till en nyare release meddelas ändringen i ändringsloggen.

IaC

VerktygKommentar
tofu (OpenTofu)MPL-2.0-licensierad ersättare för Terraform. Riktiga Terraform är BUSL-licensierat och inte förinstallerat; använd hashicorp/setup-terraform om du specifikt behöver Terraform.
bicepAzure
pulumiFlera moln
ansible (ansible-core)Via pipx
sam (AWS SAM CLI)Serverless

Moln-CLI:er

MolnCLIKommentar
AWSaws v2, sam
Google Cloudgcloud, gsutil, bq
Azureaz
T Cloud Public (OTC)tofu + providern opentelekomcloudEller pip install otc-cli per jobb

Containrar och Kubernetes

VerktygKommentar
docker (CLI + inbyggd daemon)Docker körs direkt på VM:en (ingen sidecar, ingen omdirigering via DOCKER_HOST); se Containerbyggen nedan
kanikoDaemonlös OCI-imagebyggare utan root
skopeoKopiera och inspektera images mellan registries
kubectl
helm
kustomize
kindLokala k8s-kluster. Fungerar med den inbyggda Docker-daemonen i de flesta fall; lägg till etiketten dind-privileged om du stöter på operationer som begränsas av capabilities (KVM-nästling, rå /dev för nästlade gäster)
teaCLI för Forgejo / Gitea

Säkerhet och leveranskedja

Förinstallerade, så att skanningar efter secrets, CVE:er, SBOM och SAST inte kostar någon konfigurationstid.

SkannerHittar
gitleaksSecrets i commits
trivyCVE:er i OS och språk + felkonfigurationer i IaC
osv-scannerSårbarheter i OSV-databasen
cosignSignering och verifiering av container-images
syftGenerering av SBOM (CycloneDX / SPDX)
opengrepSAST (Semgrep-kompatibel fork). Förinstallerad med GitLab sast-rules språkmappar under /opt/sast-rules/: csharp, go, java, javascript, python och scala. Reglerna är MIT-licensierade, utom go, som är Apache-2.0 (härledd från gosec). Endast de mapparna medföljer. Ange de du behöver med --config; roten /opt/sast-rules är ingen regeluppsättning
scorecardOSSF:s scorecard för leveranskedjan
checkovIaC-säkerhet (Terraform, CFN, k8s)
cfn-lintLint för CloudFormation

Linters

shellcheck · shfmt · yamllint · actionlint (lintar de Forgejo Actions-arbetsflöden du skriver på frem.sh) · hadolint (Dockerfile)

Webbläsare och e2e

För webbläsartester utan grafiskt gränssnitt:

  • Chromium + chromedriver (debian-paketerade, med matchande versioner)
  • Firefox ESR + geckodriver
  • Selenium Server (jar-fil på /opt/selenium-server.jar)

Microsoft Edge är inte förinstallerat. Chromium använder samma Blink-motor, så för tester i CI är Chromium likvärdigt.

Databasklienter

postgresql-client · default-mysql-client · sqlite3. De fullständiga databasservrarna får du via services:-block (en Docker pull från Docker Hub, via organisationens beroendeproxy när den har en egen inloggning till Docker Hub; se Images från Docker Hub).

Mobil och datavetenskap (förinstallerat sedan 2026-06-06)

VerktygFörinstalleratLägg till per jobb
Android SDKcmdline-tools (latest) + platforms;android-34 + build-tools;34.0.0 + platform-tools på ANDROID_HOME=/usr/local/lib/android/sdkFler API-nivåer / NDK / emulatorer via android-actions/setup-android@v3 (återanvänder det som redan är installerat, ingen ny nedladdning)
R (CRAN)r-base + r-base-dev (debians CRAN-repo, för närvarande 4.3.x) på /opt/hostedtoolcache/R/4.3/x64CRAN-paket via Rscript -e 'install.packages(...)' eller r-lib/actions/setup-r-dependencies@v2
Miniconda3conda + python 3.11 på CONDA=/opt/hostedtoolcache/Miniconda3/latest/x64Miljöer och vetenskapliga paket via conda-incubator/setup-miniconda@v3 med environment-file:
# Android example
- uses: android-actions/setup-android@v3
- run: ./gradlew assembleDebug

# R example
- uses: r-lib/actions/setup-r@v2
- uses: r-lib/actions/setup-r-dependencies@v2
- run: Rscript -e 'testthat::test_local()'

# Miniconda example
- uses: conda-incubator/setup-miniconda@v3
  with:
    environment-file: env.yml
- shell: bash -el {0}
  run: pytest

Det här är fortfarande INTE förinstallerat

Verkligt smala eller tunga verktyg som de flesta arbetsflöden inte behöver. Installera dem per jobb:

VerktygInstallationKommentar
iOS / XcodeEndast macOS, stöds inte (fremforges runners är Linux)Separat punkt i färdplanen för runner-nivåer
Juliajulia-actions/setup-julia@v2~150 MB installation per jobb
Swiftswift-actions/setup-swift@v2Swift-verktygskedja för Linux
Haskell / GHChaskell-actions/setup@v2
Monoapt-get install mono-completeEndast äldre .NET Framework; .NET 8/10 är förinstallerade
Webbläsaren Microsoft EdgeBehövs inte, Chromium har samma motor
Lua / Crystal / Nim / Elixirsetup-*-action eller apt per jobb

Containerbyggen

Inbyggd Docker (standard)

VM:en levereras med Docker-daemonen installerad och igång på värden. Din docker-CLI pratar med den via den vanliga lokala socketen: ingen Docker-in-Docker, ingen sidecar, ingen omdirigering via DOCKER_HOST. De flesta arbetsflöden från GitHub-hostade runners fungerar oförändrade: docker build, docker compose, docker pull, byggen i flera steg och BuildKit-funktioner.

- run: docker build -t myapp:${{ github.sha }} .
- run: docker compose up -d
- run: docker pull postgres:16

kaniko

För rena imagebyggen är kaniko daemonlös (snabbare kallstart när du inte behöver hela Docker-daemonen) och hanterar lagercache mot fjärr-registries bättre.

- run: |
    /usr/local/bin/kaniko \
      --context=$GITHUB_WORKSPACE \
      --dockerfile=Dockerfile \
      --destination=registry.example.com/$GITHUB_REPOSITORY:$GITHUB_SHA

Privilegierad Docker (KVM-nästling)

Om din arbetslast behöver fler capabilities än standardanvändaren i Docker har (t.ex. kind med KVM-nästling, testcontainers-funktioner som kräver rätt att skapa namespaces, åtkomst till /dev för nästlade gäster), lägg till etiketten i runs-on:

jobs:
  integration:
    runs-on: [fremforge, dind-privileged]
    steps:
      - run: docker run --privileged kindest/node:v1.31.0 ...

fremforge skickar de här jobben till en VM-typ med nästlad virtualisering påslagen, med samma isolering med en VM per commit som standardrunnerna.

Så får vi plats med allt på ~7 GB när GitHub-hostade är ~50 GB

GitHub-hostade ubuntu-latest-images är stora eftersom de förinstallerar:

  1. Flera versioner per språk: vi förinstallerar de 3 senaste serierna med stöd för Node, Python, Java och Ruby, och 2 för Go och .NET (~3 GB totalt för alla 6 språkfamiljer). Tabellerna ovan underhålls för hand och anger serien, inte patchversionen. De exakta patchversioner som är förinstallerade just nu, genererade från runner-imagens egna byggargument vid varje ändring, finns i den genererade listan över verktygsuppsättningen. Om de två någon gång säger olika är det den genererade listan som stämmer. En serie som inte är förinstallerad kan INTE laddas ned per jobb för Python eller Ruby (se kommentaren ovan), så välj bland de förinstallerade.
  2. Android SDK + NDK (~10 GB på GitHub-hostade): vi förinstallerar kärn-SDK:n (cmdline-tools + platform 34 + build-tools 34.0.0 + platform-tools, ~3 GB). Fler API-nivåer, NDK och systemimages för emulatorn installeras per jobb via setup-android (som återanvänder det som redan är installerat).
  3. Förhämtade Docker-images för servicecontainrar (postgres, mysql, mongo, redis, mssql, ~5 GB): inte förinstallerade. En docker pull hämtar dem från Docker Hub eller via organisationens beroendeproxy (se paketcacher).
  4. Webbläsaren Microsoft Edge: inte förinstallerad (Chromium har samma motor när det gäller tester i CI).
  5. Mono / Julia / Swift / Haskell / Lua / Crystal / Nim / Elixir: inte förinstallerade (smala, installera per jobb).
  6. Äldre GCC-versioner, utfasade verktygskedjor: vi levererar en aktuell uppsättning.

Det här förlorar du inte jämfört med GitHub-hostade runners för typiska arbetsflöden:

  • Alla vanliga språk (Node, Python, Go, Java, .NET, Ruby, Rust, PHP, PowerShell)
  • Mobil (Android SDK) och datavetenskap (Miniconda + R), förinstallerade sedan 2026-06-06
  • Alla stora moln-CLI:er (AWS, Azure, GCP)
  • Alla vanliga skannrar (Trivy, Gitleaks, OSV, Cosign, Syft, OpenGrep, Scorecard, Checkov)
  • Båda de stora webbläsarna + Selenium
  • Docker (inbyggt, privilegierat via etikett)
  • Alla vanliga GitHub Actions (actions/checkout, actions/setup-*, actions/upload-artifact osv.)

Om ditt team behöver något som vi inte förinstallerar, kontakta supporten. Verktyg som Renovate bevakar kommer med i nästa veckovisa ombyggnad.

Imagestorlek, kallstart och ombyggnadstakt

  • Veckovis ombyggnad: varje måndag kl. 06:00 UTC. Renovate föreslår versionsuppdateringar löpande; måndagens ombyggnad tar med allt som har mergats under veckan.
  • Trivy-spärr vid bygget: CVE:er med HIGH eller CRITICAL får bygget att misslyckas direkt. Vi levererar aldrig en image med kända, opatchade fynd av typen HIGH/CRITICAL.
  • Nedladdningar låsta med sha256: varje binär som hämtas vid bygget verifieras mot en låst sha256. Renovate uppdaterar versionen och hashen i samma PR. Bygget misslyckas tydligt om hashen avviker, vilket är skyddsnätet för leveranskedjan.
  • Kallstart för VM: ~25 s (ECS-provisionering + start från den förinstallerade imagen). VM:ar i en varm pool (förprovisionerade och vilande) kortar väntan till ~5 s när poolen har kapacitet.
  • Publicering av manifest: varje ombyggnad publicerar de upplösta verktygsversionerna, imagens digest, en sammanfattning från Trivy och en CycloneDX-SBOM i ändringsloggen.

Exempel på arbetsflöde

Ett minimalt arbetsflöde som ”använder allt”:

name: ci

on:
  push:
    branches: [main]
  workflow_dispatch: {}

jobs:
  build-test-scan:
    runs-on: fremforge
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: '24'           # resolves from hostedtoolcache, ~1 s
      - run: npm ci && npm test

      - uses: actions/setup-python@v5
        with:
          python-version: '3.13'
      - run: pip install -r requirements.txt && pytest

      - name: SAST + secrets
        run: |
          gitleaks detect --no-banner --redact
          # one --config per language folder; /opt/sast-rules itself is not a rule set
          opengrep scan --config=/opt/sast-rules/python --config=/opt/sast-rules/javascript .

      - name: SBOM
        run: syft scan dir:. -o cyclonedx-json > sbom.json

      - name: Container build
        run: docker build -t myapp:${{ github.sha }} .

Licenser och meddelanden om tredjepartsprogramvara

Imagen innehåller tredjepartsprogramvara under egna licenser, bland annat opengrep (LGPL-2.1, med ett erbjudande om källkod), Node.js och SAST-reglerna. Meddelandena, erkännandet för sårbarhetsdata och var du hittar källkoden finns på Meddelanden om tredjepartsprogramvara i runner-imagen. I ett jobb ligger licensfilerna under /usr/share/licenses/ och /usr/share/doc/<package>/copyright.

Rapportera problem med runner-imagen

Om ett verktyg du väntade dig saknas, eller om du stöter på problem i VM:ens körmiljö (resursgränser, nätverk, capabilities), kontakta support@frem.sh. Vi svarar samma arbetsdag på regressioner i de hostade runnerna.