refactor: rootless Docker, fix auto-merge, molecule platform matrix

Three major improvements:

1. Rootless Docker refactor: Removes docker/binary modes, unifies to
   rootless Docker with per-runner system users. Each runner gets its
   own rootless Docker daemon, systemd user service, and isolated
   environment. Simplifies CLI (removes --mode option), Ansible role
   (single code path), and molecule scenarios (removes binary scenario).

2. Auto-merge fix: Fixes status check context mismatch in branch
   protection (was requiring "lint", "unit-tests", "molecule-tests" but
   actual contexts are "CI / quality", "CI / molecule-tests*"). Adds
   retry/wait logic to auto_merge.py that polls commit statuses for up
   to 15 minutes before attempting merge, eliminating the chicken-and-egg
   problem where auto-merge would fail because CI hadn't completed yet.

3. Molecule platform matrix: Adds OS platform matrix to CI — all 6
   scenarios now run on all 4 supported OSes (ubuntu-2204, ubuntu-2404,
   debian-12, archlinux) = 24 test pairs distributed across 3 parallel
   runners. Updates distribute_molecule.py to distribute (scenario,
   platform) pairs. Updates Makefile with molecule-all target for
   local multi-platform testing.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Emil Simeonov
2026-06-20 21:02:52 +02:00
co-authored by Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent 0c6c735000
commit 55c2746569
71 changed files with 2444 additions and 1277 deletions
@@ -1,12 +0,0 @@
---
- name: Converge
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "molecule-test-runner"
runner_mode: "binary"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -1,39 +0,0 @@
---
driver:
name: docker
platforms:
- name: ${MOLECULE_PLATFORM_NAME:-ubuntu-2204}
image: ${MOLECULE_PLATFORM_IMAGE:-ubuntu:22.04}
command: ${MOLECULE_PLATFORM_COMMAND:-sleep infinity}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
pre_build_image: false
provisioner:
name: ansible
playbooks:
converge: converge.yml
prepare: ../common/prepare.yml
env:
ANSIBLE_ROLES_PATH: "../../.."
scenario:
test_sequence:
- dependency
- cleanup
- destroy
- syntax
- create
- prepare
- converge
- idempotence
- side_effect
- verify
- cleanup
- destroy
verifier:
name: ansible
@@ -1,72 +0,0 @@
---
- name: Verify
hosts: all
become: true
vars:
runner_name: "molecule-test-runner"
pre_tasks:
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
- name: Override runner mode for binary scenario
ansible.builtin.set_fact:
runner_mode: "binary"
tasks:
- name: Check gitea_runner binary exists
ansible.builtin.stat:
path: "{{ gitea_runner_binary_path }}"
register: gitea_runner_stat
- name: Assert gitea_runner binary exists
ansible.builtin.assert:
that:
- gitea_runner_stat.stat.exists
fail_msg: "gitea_runner binary is missing at {{ gitea_runner_binary_path }}"
- name: Check Docker is installed
ansible.builtin.command: docker --version
changed_when: false
- name: Check systemd template unit exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: service_stat
- name: Assert template unit exists
ansible.builtin.assert:
that:
- service_stat.stat.exists
fail_msg: "Systemd template unit is missing"
- name: Check instance data directory exists
ansible.builtin.stat:
path: "{{ gitea_runner_data_dir }}"
register: data_dir_stat
- name: Assert instance data directory exists
ansible.builtin.assert:
that:
- data_dir_stat.stat.exists
fail_msg: "Instance data directory is missing"
- name: Check prune timer exists
ansible.builtin.stat:
path: /etc/systemd/system/docker-prune.timer
register: timer_stat
- name: Assert prune timer exists
ansible.builtin.assert:
that:
- timer_stat.stat.exists
fail_msg: "Docker prune timer is missing"
- name: Check config file exists
ansible.builtin.stat:
path: "{{ gitea_runner_config_dir }}/config.yaml"
register: config_stat
- name: Assert config file exists
ansible.builtin.assert:
that:
- config_stat.stat.exists
fail_msg: "Config file is missing"
@@ -19,16 +19,3 @@
community.general.pacman:
update_cache: true
when: ansible_facts['os_family'] == 'Archlinux'
- name: Ensure /etc/docker directory exists
ansible.builtin.file:
path: /etc/docker
state: directory
mode: "0755"
- name: Configure Docker daemon for vfs storage driver (DinD)
ansible.builtin.copy:
dest: /etc/docker/daemon.json
content: |
{"storage-driver": "vfs"}
mode: "0644"
@@ -9,42 +9,39 @@
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Check Docker is installed
ansible.builtin.command: docker --version
changed_when: false
- name: Check runner user exists
ansible.builtin.user:
name: "{{ gitea_runner_service_user }}"
register: user_info
check_mode: true
- name: Check runner image was pulled
ansible.builtin.command: docker images gitea/runner --format '{{ '{{' }} .Repository {{ '}}' }}:{{ '{{' }} .Tag {{ '}}' }}'
register: image_list
changed_when: false
- name: Assert runner image exists locally
- name: Assert runner user exists
ansible.builtin.assert:
that:
- "'gitea/runner' in image_list.stdout"
fail_msg: "Runner Docker image was not pulled"
- user_info.state == "present"
fail_msg: "Runner system user was not created"
- name: Check prune timer exists
- name: Check runner binary exists
ansible.builtin.stat:
path: /etc/systemd/system/docker-prune.timer
register: timer_stat
path: "{{ gitea_runner_binary_path }}"
register: binary_stat
- name: Assert prune timer exists
- name: Assert runner binary exists
ansible.builtin.assert:
that:
- timer_stat.stat.exists
fail_msg: "Docker prune timer is missing"
- binary_stat.stat.exists
fail_msg: "Gitea runner binary is missing"
- name: Check systemd template unit exists
- name: Check systemd user service exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
path: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_stat
- name: Assert template unit exists
- name: Assert user service exists
ansible.builtin.assert:
that:
- service_stat.stat.exists
fail_msg: "Systemd template unit is missing"
fail_msg: "Systemd user service is missing"
- name: Check instance data directory exists
ansible.builtin.stat:
@@ -57,9 +54,9 @@
- data_dir_stat.stat.exists
fail_msg: "Instance data directory is missing"
- name: Check config file exists in data directory
- name: Check config file exists in config directory
ansible.builtin.stat:
path: "{{ gitea_runner_data_dir }}/config.yaml"
path: "{{ gitea_runner_config_dir }}/config.yaml"
register: config_stat
- name: Assert config file exists
@@ -67,3 +64,14 @@
that:
- config_stat.stat.exists
fail_msg: "Config file is missing"
- name: Check prune timer exists
ansible.builtin.stat:
path: "{{ gitea_runner_home }}/.config/systemd/user/docker-prune.timer"
register: timer_stat
- name: Assert prune timer exists
ansible.builtin.assert:
that:
- timer_stat.stat.exists
fail_msg: "Docker prune timer is missing"
@@ -4,12 +4,18 @@
become: true
vars:
runner_name: "deregister-test-runner"
pre_tasks:
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Ensure fake .runner file exists
ansible.builtin.copy:
dest: "/var/lib/gitea-runner/{{ runner_name }}/.runner"
dest: "{{ gitea_runner_data_dir }}/.runner"
content: |
{"id": 1, "uuid": "test-uuid-1234", "name": "{{ runner_name }}", "address": "http://localhost:3000"}
owner: "{{ gitea_runner_service_user }}"
group: "{{ gitea_runner_service_user }}"
mode: "0644"
- name: Deregister runner
@@ -19,7 +25,6 @@
runner_name: "deregister-test-runner"
registration_token: "fake-token-for-testing"
gitea_url: "http://localhost:3000"
runner_mode: "docker"
skip_runner_registration: false
tasks:
- name: Include deregistration tasks
@@ -9,7 +9,7 @@
tasks:
- name: Check registration file was removed
ansible.builtin.stat:
path: "/var/lib/gitea-runner/deregister-test-runner/.runner"
path: "{{ gitea_runner_data_dir }}/.runner"
register: runner_file_stat
- name: Assert registration file no longer exists
@@ -18,13 +18,13 @@
- not runner_file_stat.stat.exists
fail_msg: "Registration file (.runner) was not removed by deregistration"
- name: Check systemd template still exists
- name: Check systemd user service still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
path: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_stat
- name: Assert systemd template still exists after deregister
- name: Assert user service still exists after deregister
ansible.builtin.assert:
that:
- service_stat.stat.exists
fail_msg: "Systemd template unit was incorrectly removed"
fail_msg: "Systemd user service was incorrectly removed"
@@ -5,24 +5,17 @@
vars:
runner_name: "lifecycle-test-runner"
pre_tasks:
- name: Check if systemd is available
ansible.builtin.stat:
path: /run/systemd/system
register: systemd_available
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Stop gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner-docker@{{ runner_name }}"
state: stopped
daemon_reload: true
when: systemd_available.stat.exists
- name: Stop gitea-runner user service
ansible.builtin.command: "sudo -u {{ gitea_runner_service_user }} systemctl --user stop gitea-runner"
changed_when: true
- name: Disable gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner-docker@{{ runner_name }}"
enabled: false
daemon_reload: true
when: systemd_available.stat.exists
- name: Disable gitea-runner user service
ansible.builtin.command: "sudo -u {{ gitea_runner_service_user }} systemctl --user disable gitea-runner"
changed_when: true
- name: Re-enable and start runner
hosts: all
@@ -30,21 +23,14 @@
vars:
runner_name: "lifecycle-test-runner"
pre_tasks:
- name: Check if systemd is available
ansible.builtin.stat:
path: /run/systemd/system
register: systemd_available
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Enable gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner-docker@{{ runner_name }}"
enabled: true
daemon_reload: true
when: systemd_available.stat.exists
- name: Enable gitea-runner user service
ansible.builtin.command: "sudo -u {{ gitea_runner_service_user }} systemctl --user enable gitea-runner"
changed_when: true
- name: Start gitea-runner systemd instance
ansible.builtin.systemd:
name: "gitea-runner-docker@{{ runner_name }}"
state: started
daemon_reload: true
when: systemd_available.stat.exists
- name: Start gitea-runner user service
ansible.builtin.command: "sudo -u {{ gitea_runner_service_user }} systemctl --user start gitea-runner"
changed_when: true
@@ -9,38 +9,20 @@
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Check systemd template unit exists
- name: Check systemd user service exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: template_stat
path: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_stat
- name: Assert template unit exists
- name: Assert user service exists
ansible.builtin.assert:
that:
- template_stat.stat.exists
fail_msg: "Systemd template unit is missing"
- name: Check if systemd is available
ansible.builtin.stat:
path: /run/systemd/system
register: systemd_available
- name: Check instance is enabled
ansible.builtin.systemd:
name: "gitea-runner-{{ runner_mode | default('docker') }}@lifecycle-test-runner"
register: service_status
when: systemd_available.stat.exists
- name: Assert instance is enabled
ansible.builtin.assert:
that:
- service_status.status.LoadState == 'loaded'
fail_msg: "Systemd instance is not loaded"
when: systemd_available.stat.exists
- service_stat.stat.exists
fail_msg: "Systemd user service is missing"
- name: Check instance data directory exists after lifecycle
ansible.builtin.stat:
path: "{{ gitea_runner_base_data_dir }}/{{ runner_name }}"
path: "{{ gitea_runner_data_dir }}"
register: data_dir_stat
- name: Assert instance data directory exists
@@ -6,7 +6,6 @@
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "molecule-runner-a"
runner_mode: "binary"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -18,7 +17,6 @@
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "molecule-runner-b"
runner_mode: "binary"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -6,24 +6,32 @@
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
- name: Override runner mode for multi-instance scenario
ansible.builtin.set_fact:
runner_mode: "binary"
tasks:
- name: Check systemd template unit exists
- name: Check first runner user exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-{{ runner_mode | default('docker') }}@.service"
register: template_stat
path: "{{ gitea_runner_base_home }}/grm-molecule-runner-a"
register: home_a_stat
- name: Assert template unit exists
- name: Assert first runner user home exists
ansible.builtin.assert:
that:
- template_stat.stat.exists
fail_msg: "Systemd template unit is missing"
- home_a_stat.stat.exists
fail_msg: "First runner user home is missing"
- name: Check second runner user exists
ansible.builtin.stat:
path: "{{ gitea_runner_base_home }}/grm-molecule-runner-b"
register: home_b_stat
- name: Assert second runner user home exists
ansible.builtin.assert:
that:
- home_b_stat.stat.exists
fail_msg: "Second runner user home is missing"
- name: Check first instance data directory exists
ansible.builtin.stat:
path: "/var/lib/gitea-runner/molecule-runner-a"
path: "{{ gitea_runner_base_data_dir }}/molecule-runner-a"
register: data_a_stat
- name: Assert first instance data directory exists
@@ -34,7 +42,7 @@
- name: Check second instance data directory exists
ansible.builtin.stat:
path: "/var/lib/gitea-runner/molecule-runner-b"
path: "{{ gitea_runner_base_data_dir }}/molecule-runner-b"
register: data_b_stat
- name: Assert second instance data directory exists
@@ -45,7 +53,7 @@
- name: Check first instance config exists
ansible.builtin.stat:
path: "/etc/gitea-runner/molecule-runner-a/config.yaml"
path: "{{ gitea_runner_base_config_dir }}/molecule-runner-a/config.yaml"
register: config_a_stat
- name: Assert first instance config exists
@@ -56,7 +64,7 @@
- name: Check second instance config exists
ansible.builtin.stat:
path: "/etc/gitea-runner/molecule-runner-b/config.yaml"
path: "{{ gitea_runner_base_config_dir }}/molecule-runner-b/config.yaml"
register: config_b_stat
- name: Assert second instance config exists
@@ -1,23 +1,11 @@
---
- name: Converge Docker mode
- name: Converge
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "template-docker-runner"
skip_runner_registration: true
roles:
- role: gitea-runner
- name: Converge Binary mode
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "template-binary-runner"
runner_mode: "binary"
runner_name: "template-test-runner"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -2,65 +2,42 @@
- name: Verify
hosts: all
become: true
vars:
runner_name: "template-test-runner"
pre_tasks:
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Check Docker mode systemd template exists
- name: Check systemd user service exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_template_stat
path: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_stat
- name: Assert Docker mode systemd template exists
- name: Assert user service exists
ansible.builtin.assert:
that:
- docker_template_stat.stat.exists
fail_msg: "Docker systemd template is missing"
- service_stat.stat.exists
fail_msg: "Systemd user service is missing"
- name: Read rendered Docker systemd template
- name: Read rendered user service template
ansible.builtin.slurp:
src: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_template
src: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_template
- name: Assert Docker mode template contains expected directives
- name: Assert user service template contains expected directives
ansible.builtin.assert:
that:
- "'Type=oneshot' in docker_template.content | b64decode"
- "'RemainAfterExit=yes' in docker_template.content | b64decode"
- "'Requires=docker.service' in docker_template.content | b64decode"
- "'docker run -d' in docker_template.content | b64decode"
- "'ExecStop=/usr/bin/docker stop' in docker_template.content | b64decode"
- "'Restart=on-failure' in docker_template.content | b64decode"
fail_msg: "Docker systemd template is missing expected directives"
- name: Check Binary mode systemd template exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_template_stat
- name: Assert Binary mode systemd template exists
ansible.builtin.assert:
that:
- binary_template_stat.stat.exists
fail_msg: "Binary systemd template is missing"
- name: Read rendered Binary systemd template
ansible.builtin.slurp:
src: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_template
- name: Assert Binary mode template contains expected directives
ansible.builtin.assert:
that:
- "'Type=simple' in binary_template.content | b64decode"
- "'ExecStart={{ gitea_runner_binary_path }}' in binary_template.content | b64decode"
- "'Restart=on-failure' in binary_template.content | b64decode"
fail_msg: "Binary systemd template is missing expected directives"
- "'Type=simple' in service_template.content | b64decode"
- "'ExecStart={{ gitea_runner_binary_path }}' in service_template.content | b64decode"
- "'Restart=on-failure' in service_template.content | b64decode"
- "'DOCKER_HOST=unix:///run/user' in service_template.content | b64decode"
- "'XDG_RUNTIME_DIR=/run/user' in service_template.content | b64decode"
fail_msg: "User service template is missing expected directives"
- name: Read rendered prune service template
ansible.builtin.slurp:
src: "/etc/systemd/system/docker-prune.service"
src: "{{ gitea_runner_home }}/.config/systemd/user/docker-prune.service"
register: prune_service
- name: Assert prune service contains expected directives
@@ -69,17 +46,16 @@
- "'Type=oneshot' in prune_service.content | b64decode"
- "'docker system prune' in prune_service.content | b64decode"
- "'docker volume prune' in prune_service.content | b64decode"
- "'label=gitea-runner=true' in prune_service.content | b64decode"
fail_msg: "Prune service template is missing expected directives"
- name: Read rendered prune timer template
ansible.builtin.slurp:
src: "/etc/systemd/system/docker-prune.timer"
src: "{{ gitea_runner_home }}/.config/systemd/user/docker-prune.timer"
register: prune_timer
- name: Assert prune timer contains expected directives
ansible.builtin.assert:
that:
- "'OnCalendar=daily' in prune_timer.content | b64decode"
- "'OnCalendar={{ gitea_runner_prune_schedule }}' in prune_timer.content | b64decode"
- "'Persistent=true' in prune_timer.content | b64decode"
fail_msg: "Prune timer template is missing expected directives"
@@ -1,23 +1,11 @@
---
- name: Converge Docker mode
- name: Converge
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "update-docker-runner"
skip_runner_registration: true
roles:
- role: gitea-runner
- name: Converge Binary mode
hosts: all
become: true
vars:
gitea_url: "http://localhost:3000"
registration_token: "fake-token-for-testing"
runner_name: "update-binary-runner"
runner_mode: "binary"
runner_name: "update-test-runner"
skip_runner_registration: true
roles:
- role: gitea-runner
@@ -1,24 +1,11 @@
---
- name: Update Docker mode runner
- name: Update runner
hosts: all
become: true
vars:
runner_name: "update-docker-runner"
runner_mode: "docker"
runner_name: "update-test-runner"
tasks:
- name: Include Docker update tasks
- name: Include update tasks
ansible.builtin.include_role:
name: gitea-runner
tasks_from: docker_update.yml
- name: Update Binary mode runner
hosts: all
become: true
vars:
runner_name: "update-binary-runner"
runner_mode: "binary"
tasks:
- name: Include binary update tasks
ansible.builtin.include_role:
name: gitea-runner
tasks_from: binary_update.yml
tasks_from: update_runner.yml
@@ -2,23 +2,14 @@
- name: Verify
hosts: all
become: true
vars:
runner_name: "update-test-runner"
pre_tasks:
- name: Load role defaults
ansible.builtin.include_vars:
dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults"
tasks:
- name: Check Docker runner image still exists after update
ansible.builtin.command: docker images gitea/runner --format '{{ '{{' }} .Repository {{ '}}' }}:{{ '{{' }} .Tag {{ '}}' }}'
register: image_list
changed_when: false
- name: Assert runner image exists after update
ansible.builtin.assert:
that:
- "'gitea/runner' in image_list.stdout"
fail_msg: "Runner Docker image missing after update"
- name: Check binary runner executable still exists after update
- name: Check runner binary still exists after update
ansible.builtin.stat:
path: "{{ gitea_runner_binary_path }}"
register: binary_stat
@@ -27,48 +18,26 @@
ansible.builtin.assert:
that:
- binary_stat.stat.exists
fail_msg: "Binary runner executable missing after update"
fail_msg: "Runner binary missing after update"
- name: Check Docker mode systemd template still exists
- name: Check systemd user service still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-docker@.service"
register: docker_service_stat
path: "{{ gitea_runner_home }}/.config/systemd/user/gitea-runner.service"
register: service_stat
- name: Assert Docker mode systemd template still exists after update
- name: Assert user service exists after update
ansible.builtin.assert:
that:
- docker_service_stat.stat.exists
fail_msg: "Docker mode systemd template missing after update"
- service_stat.stat.exists
fail_msg: "Systemd user service missing after update"
- name: Check Binary mode systemd template still exists
- name: Check instance data directory still exists
ansible.builtin.stat:
path: "/etc/systemd/system/gitea-runner-binary@.service"
register: binary_service_stat
path: "{{ gitea_runner_data_dir }}"
register: data_stat
- name: Assert Binary mode systemd template still exists after update
- name: Assert data directory exists after update
ansible.builtin.assert:
that:
- binary_service_stat.stat.exists
fail_msg: "Binary mode systemd template missing after update"
- name: Check Docker mode data directory still exists
ansible.builtin.stat:
path: "/var/lib/gitea-runner/update-docker-runner"
register: docker_data_stat
- name: Assert Docker mode data directory exists after update
ansible.builtin.assert:
that:
- docker_data_stat.stat.exists
fail_msg: "Docker runner data directory missing after update"
- name: Check Binary mode data directory still exists
ansible.builtin.stat:
path: "/var/lib/gitea-runner/update-binary-runner"
register: binary_data_stat
- name: Assert Binary mode data directory exists after update
ansible.builtin.assert:
that:
- binary_data_stat.stat.exists
fail_msg: "Binary runner data directory missing after update"
- data_stat.stat.exists
fail_msg: "Runner data directory missing after update"