Gå til hovedinnhold

Hostet runner-image

Workflower som bruker runs-on: fremforge, kjører på en flyktig VM, én per commit, som klargjøres fra det hostede runner-imaget. Det er laget for å være på nivå med ubuntu-latest: den samme actions/setup-*-opplevelsen som du bruker på GitHub Actions, de samme ferdigbakte verktøykjedene, de samme skannerne, pluss innebygd Docker for containerbygg.

Arkitektur i to lag

Runner-imaget er oppstartsdisken til VM-en – begge lagene ligger på samme disk og er til stede fra det øyeblikket VM-en starter, uten nedlasting per jobb.

LagHva det inneholderStørrelse
Systemlagetdebian 13 som base + systemverktøy i én versjon (Node 24 LTS, byggeverktøy, skannere, IaC- og sky-CLI-er, nettlesere, databaseklienter, innebygd Docker-daemon)~300 MB
hostedtoolcache-lagetSpråkkjøremiljøer i flere versjoner (Node, Go, Python, .NET, Java, Ruby) + Android SDK + Miniconda3 + R~7 GB

setup-*-actions slås opp i hostedtoolcache uten nedlasting per jobb. RUNNER_TOOL_CACHE og AGENT_TOOLSDIRECTORY peker allerede på /opt/hostedtoolcache.

Versjonsnumrene i tabellene nedenfor viser hvilke major-/minor-linjer som er bakt inn. De nøyaktige versjonene oppdateres fortløpende av den ukentlige gjenoppbyggingen og publiseres automatisk for hver gjenoppbygging – se endringsloggen for gjeldende publiserte verktøysett.

Språk – system

Én nyere versjon på PATH. Bruk disse direkte når workflowen klarer seg med systemstandarden.

SpråkVersjonMerknader
Node.js24.x (LTS)+ npm, pluss pnpm + yarn via corepack. Nyere/eldre serier via actions/setup-node – se nedenfor
Rustrustup stablerustc + cargo
PowerShell7.xpwsh
PHP8.3+ Composer

Språk – flere versjoner via setup-*-actions

Bruk disse actions/setup-*-actionene akkurat som på GitHub-hostede runnere. Versjonen du ber om, slås opp i hostedtoolcache (ingen henting over nettet).

ActionInnbakte versjonerHva den setter opp
actions/setup-node@v426.x, 24.x, 22.xNode.js + npm; aktiver pnpm/yarn med corepack enable
actions/setup-go@v51.27.x, 1.26.xGo-verktøykjede + modulbuffer
actions/setup-python@v53.14, 3.13, 3.12Python + pip
actions/setup-dotnet@v410.0, 8.0.NET SDK (side om side, DOTNET_ROOT satt)
actions/setup-java@v4Temurin 25, 21, 17OpenJDK fra Adoptium
ruby/setup-ruby@v14.0.x, 3.4.x, 3.3.xRuby (ruby-builder)

Trenger du en versjon vi ikke baker inn (f.eks. Node 20.x for et eldre prosjekt), kan actions/setup-node, actions/setup-go, actions/setup-java og actions/setup-dotnet laste ned en versjon som ikke er bakt inn, når jobben kjører (tregere, men det virker – de henter generiske Linux-bygg). actions/setup-python og ruby/setup-ruby kan ikke det: upstream publiserer ingen debian-filer for noen av dem, så en serie som ikke er bakt inn, feiler rett ut i stedet for å falle tilbake. Velg en innbakt serie, eller bruk uv python install <version> (uv er bakt inn) eller en container:-jobb for et engangstilfelle.

Byggeverktøy

Native node-moduler, Python-wheels med C-utvidelser, Go med cgo og Rust-crates med C-avhengigheter bygger rett ut av boksen.

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

Pakkebehandlere og prosjektverktøy

PakkebehandlerVersjonMerknader
npmfølger med Node 24
pnpm12.14.0 som standardVia corepack, som allerede er slått på. En packageManager-pin i prosjektet vinner; se pnpm- og Yarn-versjoner
yarn4.18.1 som standardVia corepack, som allerede er slått på. Pin yarn@1.22.22 for Yarn Classic; se pnpm- og Yarn-versjoner
pipxdebianInstallerer Python-CLI-verktøy i isolerte venv-er
composernyestePHP
cargoadministrert av rustupRust
mvn (Maven)3.9.xJVM
gradle9.5.xJVM

pnpm- og Yarn-versjoner

pnpm og yarn kjører via corepack, som er slått på på runneren. Hvilken versjon en jobb får, avhenger av om prosjektet har pinnet en:

  • Ingen pin: jobben får pnpm 12.14.0 og Yarn 4.18.1. Begge ligger på runneren, så det trengs ingen nedlasting. Fram til 2026-10-21 fikk en jobb uten pin det som var npms latest da jobben kjørte, og for Yarn var det Yarn Classic 1.22.
  • Pinnet: sett packageManager i package.json, for eksempel "packageManager": "pnpm@11.28.6" eller "packageManager": "yarn@1.22.22", så kjører corepack nøyaktig den versjonen. pnpm 12.14.0 og 11.28.6 ligger allerede på runneren; alle andre versjoner lastes ned når jobben starter.

Det er ved å pinne packageManager at du velger. Det holder også den lokale maskinen din og CI på samme versjon. Når vi flytter standardene til en nyere utgivelse, kunngjøres endringen i endringsloggen.

IaC

VerktøyMerknader
tofu (OpenTofu)MPL-2.0-lisensiert direkte erstatning for Terraform. Ekte Terraform er BUSL-lisensiert og ikke bakt inn; bruk hashicorp/setup-terraform hvis du trenger nettopp Terraform.
bicepAzure
pulumiPå tvers av skyer
ansible (ansible-core)Via pipx
sam (AWS SAM CLI)Serverless

Sky-CLI-er

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

Containere og Kubernetes

VerktøyMerknader
docker (CLI + innebygd daemon)Docker kjører direkte på VM-en (ingen sidecar, ingen omvei via DOCKER_HOST) – se Containerbygg nedenfor
kanikoOCI-imagebygger uten daemon og uten root
skopeoKopiering / inspeksjon av imager mellom registre
kubectl
helm
kustomize
kindLokale k8s-klynger – fungerer med den innebygde Docker-daemonen i de fleste tilfeller; legg til etiketten dind-privileged hvis du støter på operasjoner som krever utvidede rettigheter (KVM-nesting, rå /dev for nestede gjester)
teaCLI for Forgejo / Gitea

Sikkerhet og forsyningskjede

Ferdig bakt inn, slik at skanning etter secrets, CVE-er, SBOM og SAST ikke legger til oppsettstid.

SkannerFanger
gitleaksSecrets i commits
trivyCVE-er i OS og språk + feilkonfigurasjon i IaC
osv-scannerSårbarheter fra OSV-databasen
cosignSignering og verifisering av containerimager
syftGenerering av SBOM (CycloneDX / SPDX)
opengrepSAST (Semgrep-kompatibel fork). Ferdig bakt inn med språkmappene fra GitLab sast-rules under /opt/sast-rules/: csharp, go, java, javascript, python og scala. Reglene er MIT, bortsett fra go, som er Apache-2.0 (avledet fra gosec). Bare disse mappene følger med. Send de du trenger, til --config; roten av /opt/sast-rules er ikke et regelsett
scorecardOSSF-scorecard for forsyningskjeden
checkovIaC-sikkerhet (Terraform, CFN, k8s)
cfn-lintLint for CloudFormation

Lintere

shellcheck · shfmt · yamllint · actionlint (linter Forgejo Actions-workflowene du skriver på frem.sh) · hadolint (Dockerfile)

Nettlesere og e2e

For hodeløse nettlesertester:

  • Chromium + chromedriver (debian-pakket, matchende versjoner)
  • Firefox ESR + geckodriver
  • Selenium Server (jar på /opt/selenium-server.jar)

Microsoft Edge er ikke bakt inn – Chromium bruker den samme Blink-motoren; til testing i CI er Chromium likeverdig.

Databaseklienter

postgresql-client · default-mysql-client · sqlite3. De fullstendige databaseserverne kommer via services:-blokker (en Docker-pull fra Docker Hub, gjennom organisasjonens avhengighetsproxy når den har sin egen Docker Hub-legitimasjon; se Docker Hub-imager).

Mobil og datavitenskap (bakt inn siden 2026-06-06)

VerktøyHva som er forhåndsinstallertLegg til per jobb
Android SDKcmdline-tools (latest) + platforms;android-34 + build-tools;34.0.0 + platform-tools på ANDROID_HOME=/usr/local/lib/android/sdkFlere API-nivåer / NDK / emulatorer via android-actions/setup-android@v3 (gjenbruker det som er forhåndsinstallert, ingen ny nedlasting)
R (CRAN)r-base + r-base-dev (debian CRAN-repo, for tiden 4.3.x) på /opt/hostedtoolcache/R/4.3/x64CRAN-pakker 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 og vitenskapelig stack 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

Hva som fortsatt IKKE er bakt inn

Virkelig smale eller tunge verktøy som de fleste workflower ikke trenger. Installer dem per jobb:

VerktøyInstallasjonMerknader
iOS / XcodeBare macOS – støttes ikke (fremforge-runnere er Linux)Eget punkt på veikartet for runner-nivåer
Juliajulia-actions/setup-julia@v2~150 MB installasjon per jobb
Swiftswift-actions/setup-swift@v2Swift-verktøykjede for Linux
Haskell / GHChaskell-actions/setup@v2
Monoapt-get install mono-completeBare eldre .NET Framework – .NET 8/10 er bakt inn
Nettleseren Microsoft EdgeTrengs ikke – Chromium er samme motor
Lua / Crystal / Nim / Elixirsetup-*-action eller apt per jobb

Containerbygg

Innebygd Docker (standard)

VM-en leveres med Docker-daemonen installert og kjørende på verten. docker-CLI-en snakker med den over den vanlige lokale socketen – ingen Docker-in-Docker, ingen sidecar, ingen omvei via DOCKER_HOST. De fleste workflower for GitHub-hostede runnere virker uendret – docker build, docker compose, docker pull, flertrinnsbygg, BuildKit-funksjoner.

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

kaniko

For rene imagebygg er kaniko uten daemon (raskere kaldstart når du ikke trenger hele Docker-daemonen) og har bedre oppførsel for lagbuffer mot eksterne registre.

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

Docker med utvidede rettigheter (KVM-nesting)

Hvis arbeidslasten trenger ekstra capabilities utover det standard Docker-brukeren får (f.eks. kind med KVM-nesting, testcontainers-funksjoner som krever capabilities for å opprette navnerom, /dev-tilgang for nestede gjester), legger du etiketten til i runs-on:

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

fremforge sender disse til en VM-variant med nestet virtualisering slått på, med den samme isolasjonen med én VM per commit som standardrunnerne.

Slik får vi plass til dekningen på ~7 GB når GitHub-hostede bruker ~50 GB

GitHub-hostede ubuntu-latest-imager er store fordi de baker inn:

  1. Flere versjoner per språk – vi baker inn de 3 nyeste støttede seriene for Node, Python, Java og Ruby, og 2 for Go og .NET (~3 GB totalt for alle 6 språkfamiliene). Tabellene over vedlikeholdes for hånd og oppgir serien, ikke patchen. For de nøyaktige patch-versjonene som er bakt inn nå – generert fra byggeargumentene til runner-imaget ved hver endring – se den genererte listen over verktøysettet. Hvis de to noen gang er uenige, er det den genererte listen som har rett. En serie som ikke er bakt inn, kan IKKE lastes ned per jobb for Python eller Ruby (se merknaden nedenfor), så velg blant de innbakte.
  2. Android SDK + NDK (~10 GB på GitHub-hostede) – vi baker inn kjerne-SDK-en (cmdline-tools + platform 34 + build-tools 34.0.0 + platform-tools, ~3 GB). Flere API-nivåer, NDK og systemimager for emulatoren installeres per jobb via setup-android (gjenbruker det som er forhåndsinstallert).
  3. Forhåndshentede Docker-imager for tjenestecontainere (postgres, mysql, mongo, redis, mssql ~5 GB) – ikke bakt inn. En docker pull henter dem fra Docker Hub eller gjennom organisasjonens avhengighetsproxy (se pakkebuffere).
  4. Nettleseren Microsoft Edge – ikke bakt inn (Chromium er samme motor når det gjelder testing i CI).
  5. Mono / Julia / Swift / Haskell / Lua / Crystal / Nim / Elixir – ikke bakt inn (smalt, installer per jobb).
  6. Eldre GCC-versjoner, utfasede verktøykjeder – vi leverer ett gjeldende sett.

Dette mister du ikke sammenlignet med GitHub-hostede runnere for vanlige workflower:

  • Alle vanlige språk (Node, Python, Go, Java, .NET, Ruby, Rust, PHP, PowerShell)
  • Mobil (Android SDK) og datavitenskap (Miniconda + R), bakt inn siden 2026-06-06
  • Alle store sky-CLI-er (AWS, Azure, GCP)
  • Alle vanlige skannere (Trivy, Gitleaks, OSV, Cosign, Syft, OpenGrep, Scorecard, Checkov)
  • Begge de store nettleserne + Selenium
  • Docker (innebygd, med utvidede rettigheter via etikett)
  • Alle standard GitHub Actions (actions/checkout, actions/setup-*, actions/upload-artifact osv.)

Hvis teamet ditt trenger noe vi ikke baker inn, kontakt support – verktøy som Renovate følger, rulles inn i neste ukentlige gjenoppbygging.

Image-størrelse, kaldstart, gjenoppbyggingsfrekvens

  • Ukentlig gjenoppbygging: hver mandag kl. 06:00 UTC. Renovate foreslår versjonsoppdateringer fortløpende; gjenoppbyggingen på mandag tar med alt som er merget den uken.
  • Trivy-sperre ved bygging: HIGH- og CRITICAL-CVE-er får bygget til å feile. Vi leverer aldri et image med kjente, upatchede HIGH/CRITICAL-funn.
  • Nedlastinger pinnet med sha256: hver binærfil som hentes under byggingen, verifiseres mot en pinnet sha256. Renovate oppdaterer versjonen og hashen i samme PR. Bygget feiler tydelig hvis hashen avviker, og det er sikkerhetsnettet for forsyningskjeden.
  • Kaldstart for VM: ~25 s (ECS-klargjøring + oppstart fra innbakt image). VM-er i varm pool (forhåndsklargjort og ledige) korter ventetiden ned til ~5 s når poolen har kapasitet.
  • Publisering av manifest: hver gjenoppbygging publiserer de faktiske verktøyversjonene, image-digesten, Trivy-sammendraget og CycloneDX-SBOM-en i endringsloggen.

Eksempel på workflow

En minimal workflow som «bruker alt»:

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 }} .

Lisenser og tredjepartsmerknader

Imaget inneholder tredjepartsprogramvare under egne lisenser, blant annet opengrep (LGPL-2.1, med tilbud om kildekode), Node.js og SAST-reglene. Merknadene, krediteringen for data om sårbarhetsvarsler og hvor du får kildekoden, står på Tredjepartsmerknader for runner-imaget. Inne i en jobb ligger lisensfilene under /usr/share/licenses/ og /usr/share/doc/<package>/copyright.

Rapportere problemer med runner-imaget

Hvis et verktøy du forventet, ikke er tilgjengelig, eller du støter på et problem med VM-kjøretiden (ressursgrenser, nettverk, capabilities), kontakter du support@frem.sh. Vi svarer samme virkedag på regresjoner i de hostede runnerne.