From 7e6d22c7dc6fbdff8abb9a3e622f10456f7fe75b Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:00:53 +0700 Subject: [PATCH 01/14] fix: add runner user alias for GARM compatibility (ISD-5726) GARM expects a 'runner' user with /home/runner/actions-runner path. This adds a runner user as an alias to ubuntu (same UID/GID, same home directory) so GARM can boot runners from images produced by this charm without breaking existing GitHub runner charm deployments. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../templates/cloud-init.sh.j2 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 index 2b4ebcfa..2a38cd05 100644 --- a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 +++ b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 @@ -162,6 +162,14 @@ function configure_system_users() { /usr/sbin/groupadd -f microk8s /usr/sbin/groupadd -f docker /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo ubuntu + + # Create runner user as alias to ubuntu for GARM compatibility. + # GARM expects a runner user with /home/runner/actions-runner path. + echo "Configuring runner user alias for GARM compatibility" + UBUNTU_UID=$(/usr/bin/id -u ubuntu) + UBUNTU_GID=$(/usr/bin/id -g ubuntu) + /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true + /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true } From f7ba88da4f406e7d742ed817156119e7820d82ee Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:02:40 +0700 Subject: [PATCH 02/14] chore: bump version to 0.14.1 and update changelog for ISD-5726 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/pyproject.toml | 2 +- docs/changelog.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/pyproject.toml b/app/pyproject.toml index 01406142..9499d32f 100644 --- a/app/pyproject.toml +++ b/app/pyproject.toml @@ -3,7 +3,7 @@ [project] name = "github-runner-image-builder" -version = "0.14.0" +version = "0.14.1" authors = [ { name = "Canonical IS DevOps", email = "is-devops-team@canonical.com" }, ] diff --git a/docs/changelog.md b/docs/changelog.md index a4584878..42731d0c 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,9 @@ +## [#TBD Fix GARM image incompatibility] + +- Add `runner` user as an alias to the `ubuntu` user (same UID/GID, same home directory) so GARM can boot runners from images produced by this charm. + ## [#221 Add resource recommendation for charm deployment](https://github.com/canonical/github-runner-image-builder-operator/pull/221) From 7decb6734a823cd99019689268398737def0b15c Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:06:39 +0700 Subject: [PATCH 03/14] update changelog --- docs/changelog.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/changelog.md b/docs/changelog.md index a2eedad8..d594e70e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,8 +1,9 @@ -## [#TBD Fix GARM image incompatibility] +## [#223 Fix GARM image incompatibility](https://github.com/canonical/github-runner-image-builder-operator/pull/223) (2026-05-27) - Add `runner` user as an alias to the `ubuntu` user (same UID/GID, same home directory) so GARM can boot runners from images produced by this charm. + ## [#222 Add PPA for .NET backport during image building](https://github.com/canonical/github-runner-image-builder-operator/pull/222) (2026-05-22) - Add .NET PPA in image building. This allows wider range of .NET version to be installed. @@ -10,6 +11,7 @@ ## [#221 Add resource recommendation for charm deployment](https://github.com/canonical/github-runner-image-builder-operator/pull/221) + - Add 2 vCPUs, 8 GiB RAM, and 20 GiB disk OpenStack flavor recommendation. From a9fdb205522783c49e20955c2b1c8f12be60fb40 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:08:35 +0700 Subject: [PATCH 04/14] test: update cloud-init snapshot for runner user alias (ISD-5726) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/tests/unit/test_openstack_builder.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/tests/unit/test_openstack_builder.py b/app/tests/unit/test_openstack_builder.py index 26205fa3..d5869cb1 100644 --- a/app/tests/unit/test_openstack_builder.py +++ b/app/tests/unit/test_openstack_builder.py @@ -878,6 +878,14 @@ def test__generate_cloud_init_script( /usr/sbin/groupadd -f microk8s /usr/sbin/groupadd -f docker /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo ubuntu + + # Create runner user as alias to ubuntu for GARM compatibility. + # GARM expects a runner user with /home/runner/actions-runner path. + echo "Configuring runner user alias for GARM compatibility" + UBUNTU_UID=$(/usr/bin/id -u ubuntu) + UBUNTU_GID=$(/usr/bin/id -g ubuntu) + /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true + /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true }} From a5c21f21c50dadab1cec61893f6e9a0b75d77a37 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:11:52 +0700 Subject: [PATCH 05/14] docs: add inline comments explaining useradd flags for runner alias Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/src/github_runner_image_builder/templates/cloud-init.sh.j2 | 3 +++ app/tests/unit/test_openstack_builder.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 index 15886f3c..0b0747d0 100644 --- a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 +++ b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 @@ -172,6 +172,9 @@ function configure_system_users() { echo "Configuring runner user alias for GARM compatibility" UBUNTU_UID=$(/usr/bin/id -u ubuntu) UBUNTU_GID=$(/usr/bin/id -g ubuntu) + # --uid/--gid: share ubuntu's UID/GID so both users have identical file permissions. + # --no-create-home: skip creating /home/runner; runner's home is set to /home/ubuntu instead. + # 2>/dev/null || true: ignore errors (e.g. runner user already exists) without failing the script. /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true } diff --git a/app/tests/unit/test_openstack_builder.py b/app/tests/unit/test_openstack_builder.py index d5869cb1..2c7e7bed 100644 --- a/app/tests/unit/test_openstack_builder.py +++ b/app/tests/unit/test_openstack_builder.py @@ -884,6 +884,9 @@ def test__generate_cloud_init_script( echo "Configuring runner user alias for GARM compatibility" UBUNTU_UID=$(/usr/bin/id -u ubuntu) UBUNTU_GID=$(/usr/bin/id -g ubuntu) + # --uid/--gid: share ubuntu's UID/GID so both users have identical file permissions. + # --no-create-home: skip creating /home/runner; runner's home is set to /home/ubuntu instead. + # 2>/dev/null || true: ignore errors (e.g. runner user already exists) without failing the script. /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true }} From 1eb55fb291e65412343a25afb271e422b8d57273 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 16:41:15 +0700 Subject: [PATCH 06/14] fix: add --non-unique flag and /home/runner symlink for GARM compatibility - Add --non-unique to useradd so the duplicate UID is accepted instead of silently failing - Add symlink /home/runner -> /home/ubuntu so GARM's hardcoded /home/runner/actions-runner path resolves correctly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../github_runner_image_builder/templates/cloud-init.sh.j2 | 5 ++++- app/tests/unit/test_openstack_builder.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 index 0b0747d0..9b963db6 100644 --- a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 +++ b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 @@ -172,11 +172,14 @@ function configure_system_users() { echo "Configuring runner user alias for GARM compatibility" UBUNTU_UID=$(/usr/bin/id -u ubuntu) UBUNTU_GID=$(/usr/bin/id -g ubuntu) + # --non-unique: allow reusing ubuntu's UID (duplicate UIDs are rejected by default). # --uid/--gid: share ubuntu's UID/GID so both users have identical file permissions. # --no-create-home: skip creating /home/runner; runner's home is set to /home/ubuntu instead. # 2>/dev/null || true: ignore errors (e.g. runner user already exists) without failing the script. - /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true + /usr/sbin/useradd --non-unique --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true + # Symlink /home/runner -> /home/ubuntu so GARM's hardcoded /home/runner/actions-runner path resolves correctly. + /usr/bin/ln -sfn /home/ubuntu /home/runner } diff --git a/app/tests/unit/test_openstack_builder.py b/app/tests/unit/test_openstack_builder.py index 2c7e7bed..d2044627 100644 --- a/app/tests/unit/test_openstack_builder.py +++ b/app/tests/unit/test_openstack_builder.py @@ -884,11 +884,14 @@ def test__generate_cloud_init_script( echo "Configuring runner user alias for GARM compatibility" UBUNTU_UID=$(/usr/bin/id -u ubuntu) UBUNTU_GID=$(/usr/bin/id -g ubuntu) + # --non-unique: allow reusing ubuntu's UID (duplicate UIDs are rejected by default). # --uid/--gid: share ubuntu's UID/GID so both users have identical file permissions. # --no-create-home: skip creating /home/runner; runner's home is set to /home/ubuntu instead. # 2>/dev/null || true: ignore errors (e.g. runner user already exists) without failing the script. - /usr/sbin/useradd --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true + /usr/sbin/useradd --non-unique --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true + # Symlink /home/runner -> /home/ubuntu so GARM's hardcoded /home/runner/actions-runner path resolves correctly. + /usr/bin/ln -sfn /home/ubuntu /home/runner }} From 09571ddbbac486d749ebd2b70e0cdf51a2965748 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Wed, 27 May 2026 17:22:42 +0700 Subject: [PATCH 07/14] fix: robustly create /home/runner symlink for GARM compatibility Use rmdir guard + ln -sfnT to handle all cases: - No /home/runner: symlink created directly - /home/runner is a symlink: -f replaces it, -T prevents acting as dir target - /home/runner is an empty directory: rmdir removes it, then symlink created - /home/runner is a non-empty directory: rmdir fails silently, ln -sfnT then fails loudly (correct - something unexpected occupies that path) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../github_runner_image_builder/templates/cloud-init.sh.j2 | 7 ++++++- app/tests/unit/test_openstack_builder.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 index 9b963db6..f27f3e86 100644 --- a/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 +++ b/app/src/github_runner_image_builder/templates/cloud-init.sh.j2 @@ -179,7 +179,12 @@ function configure_system_users() { /usr/sbin/useradd --non-unique --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true # Symlink /home/runner -> /home/ubuntu so GARM's hardcoded /home/runner/actions-runner path resolves correctly. - /usr/bin/ln -sfn /home/ubuntu /home/runner + # If /home/runner exists as a plain directory (not a symlink), remove it first; otherwise ln -sfnT would + # create the symlink inside the directory instead of replacing it. + # -T: treat destination as a file path, never as a directory target (prevents ln from creating the + # symlink inside /home/runner if it exists as a directory after rmdir fails). + [ -d /home/runner ] && ! [ -L /home/runner ] && rmdir /home/runner 2>/dev/null || true + /usr/bin/ln -sfnT /home/ubuntu /home/runner } diff --git a/app/tests/unit/test_openstack_builder.py b/app/tests/unit/test_openstack_builder.py index d2044627..3647bf2f 100644 --- a/app/tests/unit/test_openstack_builder.py +++ b/app/tests/unit/test_openstack_builder.py @@ -891,7 +891,12 @@ def test__generate_cloud_init_script( /usr/sbin/useradd --non-unique --uid "$UBUNTU_UID" --gid "$UBUNTU_GID" --no-create-home --home-dir /home/ubuntu runner 2>/dev/null || true /usr/sbin/usermod --append --groups docker,microk8s,lxd,sudo runner 2>/dev/null || true # Symlink /home/runner -> /home/ubuntu so GARM's hardcoded /home/runner/actions-runner path resolves correctly. - /usr/bin/ln -sfn /home/ubuntu /home/runner + # If /home/runner exists as a plain directory (not a symlink), remove it first; otherwise ln -sfnT would + # create the symlink inside the directory instead of replacing it. + # -T: treat destination as a file path, never as a directory target (prevents ln from creating the + # symlink inside /home/runner if it exists as a directory after rmdir fails). + [ -d /home/runner ] && ! [ -L /home/runner ] && rmdir /home/runner 2>/dev/null || true + /usr/bin/ln -sfnT /home/ubuntu /home/runner }} From a67328b873a3f2d54fac788a6cda4cb4b0f1b251 Mon Sep 17 00:00:00 2001 From: yhaliaw Date: Fri, 29 May 2026 14:51:53 +0800 Subject: [PATCH 08/14] TMP: Remove cleanup of image to build a test image --- .github/workflows/integration_test_app.yaml | 6 ++++-- app/tests/integration/conftest.py | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/integration_test_app.yaml b/.github/workflows/integration_test_app.yaml index c81933f3..7b9abb03 100644 --- a/.github/workflows/integration_test_app.yaml +++ b/.github/workflows/integration_test_app.yaml @@ -14,8 +14,10 @@ jobs: strategy: fail-fast: false matrix: - image: [focal, jammy, noble, resolute] - arch: [amd64, arm64, s390x, ppc64le] + image: [noble] + arch: [arm64] + # image: [focal, jammy, noble, resolute] + # arch: [amd64, arm64, s390x, ppc64le] exclude: - image: focal arch: ppc64le diff --git a/app/tests/integration/conftest.py b/app/tests/integration/conftest.py index 36ffebcc..0262cef3 100644 --- a/app/tests/integration/conftest.py +++ b/app/tests/integration/conftest.py @@ -152,10 +152,11 @@ def openstack_connection_fixture( with openstack.connect(cloud_name) as conn: yield conn - images = conn.list_images() - for image in images: - if str(image.name).startswith(test_id): - conn.delete_image(image) + # TMP: remove cleanup + # images = conn.list_images() + # for image in images: + # if str(image.name).startswith(test_id): + # conn.delete_image(image) @pytest.fixture(scope="module", name="dockerhub_mirror") From d96359f10cc1d55b0edcea9f224e160b7b87df1a Mon Sep 17 00:00:00 2001 From: yhaliaw Date: Fri, 29 May 2026 15:29:04 +0800 Subject: [PATCH 09/14] Revert "TMP: Remove cleanup of image to build a test image" This reverts commit a67328b873a3f2d54fac788a6cda4cb4b0f1b251. --- .github/workflows/integration_test_app.yaml | 6 ++---- app/tests/integration/conftest.py | 9 ++++----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.github/workflows/integration_test_app.yaml b/.github/workflows/integration_test_app.yaml index 7b9abb03..c81933f3 100644 --- a/.github/workflows/integration_test_app.yaml +++ b/.github/workflows/integration_test_app.yaml @@ -14,10 +14,8 @@ jobs: strategy: fail-fast: false matrix: - image: [noble] - arch: [arm64] - # image: [focal, jammy, noble, resolute] - # arch: [amd64, arm64, s390x, ppc64le] + image: [focal, jammy, noble, resolute] + arch: [amd64, arm64, s390x, ppc64le] exclude: - image: focal arch: ppc64le diff --git a/app/tests/integration/conftest.py b/app/tests/integration/conftest.py index 0262cef3..36ffebcc 100644 --- a/app/tests/integration/conftest.py +++ b/app/tests/integration/conftest.py @@ -152,11 +152,10 @@ def openstack_connection_fixture( with openstack.connect(cloud_name) as conn: yield conn - # TMP: remove cleanup - # images = conn.list_images() - # for image in images: - # if str(image.name).startswith(test_id): - # conn.delete_image(image) + images = conn.list_images() + for image in images: + if str(image.name).startswith(test_id): + conn.delete_image(image) @pytest.fixture(scope="module", name="dockerhub_mirror") From 22d922520a0c661fef9ed9e668d81b1052cde7dd Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Fri, 29 May 2026 20:13:00 +0700 Subject: [PATCH 10/14] remove cleanup --- .github/workflows/integration_test_app.yaml | 6 ++++-- app/tests/integration/conftest.py | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/integration_test_app.yaml b/.github/workflows/integration_test_app.yaml index c81933f3..7b9abb03 100644 --- a/.github/workflows/integration_test_app.yaml +++ b/.github/workflows/integration_test_app.yaml @@ -14,8 +14,10 @@ jobs: strategy: fail-fast: false matrix: - image: [focal, jammy, noble, resolute] - arch: [amd64, arm64, s390x, ppc64le] + image: [noble] + arch: [arm64] + # image: [focal, jammy, noble, resolute] + # arch: [amd64, arm64, s390x, ppc64le] exclude: - image: focal arch: ppc64le diff --git a/app/tests/integration/conftest.py b/app/tests/integration/conftest.py index 36ffebcc..c5bf881d 100644 --- a/app/tests/integration/conftest.py +++ b/app/tests/integration/conftest.py @@ -152,10 +152,10 @@ def openstack_connection_fixture( with openstack.connect(cloud_name) as conn: yield conn - images = conn.list_images() - for image in images: - if str(image.name).startswith(test_id): - conn.delete_image(image) + # images = conn.list_images() + # for image in images: + # if str(image.name).startswith(test_id): + # conn.delete_image(image) @pytest.fixture(scope="module", name="dockerhub_mirror") From 42570c01bd60f613bc56f5c92d3d542c6652c53d Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Tue, 2 Jun 2026 10:21:02 +0700 Subject: [PATCH 11/14] fix: run cloud-init clean before snapshot to ensure fresh cloud-init on boot Without cleaning cloud-init state before snapshotting the builder VM, cloud-init skips execution on subsequent boots because it finds existing state files in /var/lib/cloud/. This prevents GARM from injecting and running the JIT runner bootstrap script via user-data. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- app/src/github_runner_image_builder/openstack_builder.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/github_runner_image_builder/openstack_builder.py b/app/src/github_runner_image_builder/openstack_builder.py index 36cc7f63..815323bb 100644 --- a/app/src/github_runner_image_builder/openstack_builder.py +++ b/app/src/github_runner_image_builder/openstack_builder.py @@ -344,6 +344,8 @@ def run( script_secrets=image_config.script_config.script_secrets, ssh_conn=ssh_conn, ) + logger.info("Cleaning cloud-init state before snapshot.") + ssh_conn.run("sudo cloud-init clean", timeout=EXTERNAL_SCRIPT_GENERAL_TIMEOUT) _shutoff_server(conn=conn, server=builder) image = store.create_snapshot( cloud_name=cloud_config.cloud_name, From 9d253c7d1a70cbaaa6bf2cec985e3ecc7e2cf7f9 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Tue, 2 Jun 2026 14:21:05 +0700 Subject: [PATCH 12/14] add flags --- app/src/github_runner_image_builder/openstack_builder.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/github_runner_image_builder/openstack_builder.py b/app/src/github_runner_image_builder/openstack_builder.py index 815323bb..1fc35ec6 100644 --- a/app/src/github_runner_image_builder/openstack_builder.py +++ b/app/src/github_runner_image_builder/openstack_builder.py @@ -345,7 +345,10 @@ def run( ssh_conn=ssh_conn, ) logger.info("Cleaning cloud-init state before snapshot.") - ssh_conn.run("sudo cloud-init clean", timeout=EXTERNAL_SCRIPT_GENERAL_TIMEOUT) + ssh_conn.run( + "sudo cloud-init clean --logs --machine-id --seed", + timeout=EXTERNAL_SCRIPT_GENERAL_TIMEOUT, + ) _shutoff_server(conn=conn, server=builder) image = store.create_snapshot( cloud_name=cloud_config.cloud_name, From 7d3db77f0253a787feaa0dfae09e23ef34ca25f1 Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Tue, 2 Jun 2026 15:25:21 +0700 Subject: [PATCH 13/14] enable build --- .github/workflows/integration_test_app.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integration_test_app.yaml b/.github/workflows/integration_test_app.yaml index 7b9abb03..4182b5a9 100644 --- a/.github/workflows/integration_test_app.yaml +++ b/.github/workflows/integration_test_app.yaml @@ -14,10 +14,8 @@ jobs: strategy: fail-fast: false matrix: - image: [noble] - arch: [arm64] - # image: [focal, jammy, noble, resolute] - # arch: [amd64, arm64, s390x, ppc64le] + image: [focal, jammy, noble, resolute] + arch: [amd64, arm64, s390x, ppc64le] exclude: - image: focal arch: ppc64le @@ -40,7 +38,7 @@ jobs: - uses: canonical/setup-lxd@v0.1.3 - uses: actions/setup-python@v6 with: - python-version: '3.14' + python-version: "3.14" - name: Install tox run: | sudo apt-get update From 6797aaa405cd5732ba9140b655f6de43609b409b Mon Sep 17 00:00:00 2001 From: florentianayuwono Date: Tue, 2 Jun 2026 16:27:49 +0700 Subject: [PATCH 14/14] add flag --- app/src/github_runner_image_builder/openstack_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/github_runner_image_builder/openstack_builder.py b/app/src/github_runner_image_builder/openstack_builder.py index 1fc35ec6..ff04cf16 100644 --- a/app/src/github_runner_image_builder/openstack_builder.py +++ b/app/src/github_runner_image_builder/openstack_builder.py @@ -346,7 +346,7 @@ def run( ) logger.info("Cleaning cloud-init state before snapshot.") ssh_conn.run( - "sudo cloud-init clean --logs --machine-id --seed", + "sudo cloud-init clean --logs --machine-id --seed --configs all", timeout=EXTERNAL_SCRIPT_GENERAL_TIMEOUT, ) _shutoff_server(conn=conn, server=builder)