Deploy VMs
bazel run //infra/forgejo_runner/tf_setup # Create VMs
bazel run //infra/forgejo_runner/ansible # Configure VMs
This is the multi-page printable view of this section. Click here to print.
Describe the Forgejo Actions runner VM and deployment scaffold owned by
infra/forgejo_runner. Its tf_setup and ansible packages are stages of
this owner. The runner role is commented out in the baseline playbook;
the checked-in configuration therefore does not establish a deployed or
registered Actions worker. No live runner state was observed.
Baseline revision: 550d7e79b1f5fdbc2b6017b75178471d6914082f.
Observed: 2026-09-08. Sources:
owner README,
BUILD, and the implementation
links below.
Setup SHALL declare runner1 as Proxmox VM 1200 in the
src_infra_forgejo_runner pool, with eight cores, 16 GiB memory, a 20 GiB
boot disk, and a 300 GiB runner disk on ceph-ec storage. Its hostname and
address SHALL derive from the owner’s DNS declaration.
Source: VM definition.
The baseline deployment playbook SHALL apply the shared host role to the
forgejo_runner inventory group. The specification MUST identify the
commented-out Forgejo runner role as inactive and MUST NOT interpret the
available runner variables as evidence that the worker is installed or
registered.
Sources: deployment playbook and runner variables.
The owner SHALL expose Terraform setup and packaged Ansible entry points
through its al configuration and Vault injection dependencies. The runner
configuration SHALL reference https://git.alwaldend.com, /dev/sdb, and
an environment-supplied FORGEJO_RUNNER_TOKEN rather than a checked-in
registration token.
Sources: setup BUILD, Ansible BUILD, and runner variables.
Define Forgejo Actions runner DNS management through the owner’s tf_setup root,
including canonical declarations, scoped execution, adoption of existing records,
and offline source checks.
The tf_setup root SHALL consume this owner’s canonical dnsconfig.json through
the shared DNS Terraform module, preserving declared record identities and views.
DNS resources SHALL default to disabled before adoption and SHALL remain enabled
by default after authorized adoption. Adoption SHALL bind existing provider records
to the owner’s state without adding, changing, replacing, or deleting DNS records.
Subsequent reconciliation of unchanged declarations SHALL preserve owned and
unrelated records.
//infra/forgejo_runner/tf_setup:dns.plan, :dns.show, and :dns.apply//infra/forgejo_runner/tf_setup:dns wrappersThe DNS wrapper SHALL select src_infra_forgejo_runner through the repository
AL flow and keep secret values in injected variables. Dedicated DNS plan, show,
and apply targets SHALL select dns=1 alone and target module.dns while reusing
the owning setup root and backend. DNS apply SHALL consume only a reviewed saved
plan. Ordinary setup targets SHALL retain their existing tf=setup flow.
Real DNS credentials and Vault policy grants SHALL be prerequisites for
operational Terraform calls. RouterOS DNS credentials SHALL be isolated from
unrelated RouterOS resources. The package SHALL expose a format test that does
not authenticate to Vault or contact DNS providers.
dns=1 and DNS credential injection through the owner AppRolemodule.dnsUse this package’s dns.plan, dns.show, and dns.apply targets for the
scoped DNS adoption workflow.
These targets select dns=1 and target module.dns with the existing
src_infra_forgejo_runner AppRole and setup backend. Plan declared imports,
inspect the saved plan with dns.show, and apply only the reviewed file with
dns.apply. Ordinary setup commands retain their tf=setup flow.
dns_enabled defaults to true after verified adoption. Keep it enabled to
retain existing records; disabling it would propose deletion. The
adoption record
contains the import, follow-up plan, inventory, and DNS verification evidence.
The shared cutover procedure
owns prerequisites and recovery. Scoped DNS checks do not establish VM or runner
service health.