ci: green the pipeline — tests match 4.x schema, build-iso hits DinD, lint clean
Three things are broken on origin/main as of 6114cb2, all found in one
red CI run:
- build-iso workflow couldn't reach docker. forgejo-runner's config
sets `docker_host: tcp://docker-in-docker:2375` but that env doesn't
propagate into job containers on `runs-on: ubuntu-latest`, and the
default job image has no docker CLI. Fix: pin `DOCKER_HOST` on the
job and apt-install `docker.io` before invoking `iso/build.sh`.
- Two tests asserted on the pre-4.x archinstall schema:
`creds["root_password"]` (now `!root-password`) and
`cfg["disk_config"]["device"]` / `cfg["users"]` (users moved to
creds; disk_config is now a full `default_layout` dict). Rewrote
the tests to reflect 4.x reality and monkeypatched `build_disk_config`
since its real body imports archinstall, which isn't on CI.
- Ruff flagged one line of `PROGRESS_PHASES` at 107 chars — collapsed
the column alignment. `ruff format` pulled in a couple of cosmetic
expansions in spawn_archinstall and the tests that had been drifting.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9d8fd34043
commit
a777efd4c0
4 changed files with 51 additions and 28 deletions
|
|
@ -16,9 +16,20 @@ jobs:
|
||||||
build-iso:
|
build-iso:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
|
env:
|
||||||
|
# forgejo-runner's DinD sidecar is reachable over TCP on the
|
||||||
|
# `forgejo-runner_default` docker network. The default runner image
|
||||||
|
# for `ubuntu-latest` doesn't propagate the runner's docker_host
|
||||||
|
# config into the job env, so we pin it explicitly here.
|
||||||
|
DOCKER_HOST: tcp://docker-in-docker:2375
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install docker CLI
|
||||||
|
run: |
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y --no-install-recommends docker.io
|
||||||
|
|
||||||
- name: Build ISO
|
- name: Build ISO
|
||||||
run: ./iso/build.sh
|
run: ./iso/build.sh
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,13 @@ def test_validate_step1_collects_all_errors():
|
||||||
assert len(errors) == 5
|
assert len(errors) == 5
|
||||||
|
|
||||||
|
|
||||||
def test_build_archinstall_config_uses_selected_locale():
|
def test_build_archinstall_config_uses_selected_locale(monkeypatch):
|
||||||
|
# build_disk_config imports archinstall lazily; archinstall isn't
|
||||||
|
# installed in CI (only runs on the live ISO), so stub it out.
|
||||||
|
import app as app_module
|
||||||
|
|
||||||
|
monkeypatch.setattr(app_module, "build_disk_config", lambda d: {"stubbed_device": d})
|
||||||
|
|
||||||
cfg = build_archinstall_config(
|
cfg = build_archinstall_config(
|
||||||
{
|
{
|
||||||
"hostname": "h",
|
"hostname": "h",
|
||||||
|
|
@ -47,15 +53,24 @@ def test_build_archinstall_config_uses_selected_locale():
|
||||||
"boot_drive": "/dev/sda",
|
"boot_drive": "/dev/sda",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
assert cfg["disk_config"]["device"] == "/dev/sda"
|
assert cfg["disk_config"] == {"stubbed_device": "/dev/sda"}
|
||||||
assert cfg["hostname"] == "h"
|
assert cfg["hostname"] == "h"
|
||||||
assert cfg["users"][0]["username"] == "u"
|
|
||||||
assert cfg["locale_config"]["locale"] == "pl_PL.UTF-8"
|
assert cfg["locale_config"]["locale"] == "pl_PL.UTF-8"
|
||||||
|
# Users moved out of config into creds once we adopted archinstall 4.x's
|
||||||
|
# `!password` sentinel; config only carries a gpasswd in custom_commands
|
||||||
|
# so the user lands in the docker group after docker is pacstrapped.
|
||||||
|
assert "users" not in cfg
|
||||||
|
assert any("gpasswd -a u docker" in c for c in cfg["custom_commands"])
|
||||||
|
|
||||||
|
|
||||||
def test_build_archinstall_creds_reuses_password_for_root_and_user():
|
def test_build_archinstall_creds_uses_archinstall_sentinel_keys():
|
||||||
creds = build_archinstall_creds(
|
creds = build_archinstall_creds({"username": "u", "password": "pw12345678"})
|
||||||
{"username": "u", "password": "pw12345678"}
|
assert creds["!root-password"] == "pw12345678"
|
||||||
)
|
assert creds["users"] == [
|
||||||
assert creds["root_password"] == "pw12345678"
|
{
|
||||||
assert creds["users"] == [{"username": "u", "password": "pw12345678"}]
|
"username": "u",
|
||||||
|
"!password": "pw12345678",
|
||||||
|
"sudo": True,
|
||||||
|
"groups": [],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -62,12 +62,7 @@ def test_parse_lsblk_drops_loop_and_rom(monkeypatch):
|
||||||
import drives
|
import drives
|
||||||
|
|
||||||
monkeypatch.setattr(drives, "get_drive_health", lambda _: 10)
|
monkeypatch.setattr(drives, "get_drive_health", lambda _: 10)
|
||||||
output = (
|
output = "loop0 2.5G loop\nsr0 1024M rom\nsda 500G disk\nnvme0n1 1T disk\n"
|
||||||
"loop0 2.5G loop\n"
|
|
||||||
"sr0 1024M rom\n"
|
|
||||||
"sda 500G disk\n"
|
|
||||||
"nvme0n1 1T disk\n"
|
|
||||||
)
|
|
||||||
devices = parse_lsblk_output(output)
|
devices = parse_lsblk_output(output)
|
||||||
names = [d["name"] for d in devices]
|
names = [d["name"] for d in devices]
|
||||||
assert names == ["/dev/nvme0n1", "/dev/sda"]
|
assert names == ["/dev/nvme0n1", "/dev/sda"]
|
||||||
|
|
|
||||||
|
|
@ -189,8 +189,10 @@ def spawn_archinstall(config_path, creds_path, log_path):
|
||||||
return subprocess.Popen(
|
return subprocess.Popen(
|
||||||
[
|
[
|
||||||
"archinstall",
|
"archinstall",
|
||||||
"--config", str(config_path),
|
"--config",
|
||||||
"--creds", str(creds_path),
|
str(config_path),
|
||||||
|
"--creds",
|
||||||
|
str(creds_path),
|
||||||
"--silent",
|
"--silent",
|
||||||
],
|
],
|
||||||
stdout=log_fh,
|
stdout=log_fh,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue