feat: implement automatic, atomic, and push-based repository synchronization

- Switched from systemd path monitoring to a custom wrapper script `mxos-trigger-dist-repo.sh` spawned by the Koji signing spooler.
- Wrapper script runs Koji `dist-repo` synchronously and triggers the `mxos-repo-sync.sh` script to perform an atomic rsync of packages to the Caddy server.
- Excluded reposerver from distro-sync to work around VM disk space constraints.
- Configured Koji tag `mxos0` to cancel older pending/running `distRepo` tasks when a new one is triggered.
- Verified successful repository generation, synchronization, and DNF resolution.

Co-developed-by: Gemini AI <renich+gemini@woralelandia.com>
Signed-off-by: Rénich Bon Ćirić <renich@woralelandia.com>
This commit is contained in:
Rénich Bon Ćirić 2026-06-16 23:57:02 -06:00
commit 38a0669db8
Signed by: renich
GPG key ID: AB2A9F49384FE324
11 changed files with 191 additions and 54 deletions

View file

@ -50,59 +50,59 @@
changed_when: "'Target created' in koji_bootstrap_add_target_result.stdout"
failed_when: "koji_bootstrap_add_target_result.rc != 0 and 'already exists' not in koji_bootstrap_add_target_result.stderr"
- name: Add CentOS Stream 10 BaseOS external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-baseos
{{ centos_stream_10_baseos_url }}
register: koji_bootstrap_add_baseos_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_baseos_repo_result.stdout"
failed_when: "koji_bootstrap_add_baseos_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_baseos_repo_result.stderr"
- name: Configure external repositories
block:
- name: Ensure external repositories exist globally
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo {{ item.name }} {{ item.url }}
loop:
- { name: "centos-stream-10-baseos", url: "{{ centos_stream_10_baseos_url }}" }
- { name: "centos-stream-10-appstream", url: "{{ centos_stream_10_appstream_url }}" }
- { name: "centos-stream-10-epel", url: "https://mirror.facebook.net/fedora/epel/10/Everything/x86_64/" }
- { name: "centos-stream-10-crb", url: "https://mirror.stream.centos.org/10-stream/CRB/x86_64/os/" }
register: koji_add_ext_repo_global
changed_when: "'External repository created' in koji_add_ext_repo_global.stdout"
failed_when: "koji_add_ext_repo_global.rc != 0 and 'already exists' not in koji_add_ext_repo_global.stderr"
- name: Update CentOS Stream 10 BaseOS external repository URL
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo --url={{ centos_stream_10_baseos_url }} centos-stream-10-baseos
changed_when: false
- name: Ensure external repositories are associated with tag
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build {{ item.name }}
loop:
- { name: "centos-stream-10-baseos" }
- { name: "centos-stream-10-appstream" }
- { name: "centos-stream-10-epel" }
- { name: "centos-stream-10-crb" }
register: koji_add_ext_repo_tag
changed_when: "'Added external repo' in koji_add_ext_repo_tag.stdout"
failed_when: "koji_add_ext_repo_tag.rc != 0 and 'already associated' not in koji_add_ext_repo_tag.stderr"
- name: Add CentOS Stream 10 AppStream external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-appstream
{{ centos_stream_10_appstream_url }}
register: koji_bootstrap_add_appstream_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_appstream_repo_result.stdout"
failed_when: "koji_bootstrap_add_appstream_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_appstream_repo_result.stderr"
- name: Ensure external repository URLs are updated
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo --url={{ item.url }} {{ item.name }}
loop:
- { name: "centos-stream-10-baseos", url: "{{ centos_stream_10_baseos_url }}" }
- { name: "centos-stream-10-appstream", url: "{{ centos_stream_10_appstream_url }}" }
- { name: "centos-stream-10-epel", url: "https://mirror.facebook.net/fedora/epel/10/Everything/x86_64/" }
- { name: "centos-stream-10-crb", url: "https://mirror.stream.centos.org/10-stream/CRB/x86_64/os/" }
changed_when: false
- name: Update CentOS Stream 10 AppStream external repository URL
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo --url={{ centos_stream_10_appstream_url }} centos-stream-10-appstream
changed_when: false
- name: Add CentOS Stream 10 EPEL external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-epel
https://mirror.facebook.net/fedora/epel/10/Everything/x86_64/
register: koji_bootstrap_add_epel_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_epel_repo_result.stdout"
failed_when: "koji_bootstrap_add_epel_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_epel_repo_result.stderr"
- name: Add CentOS Stream 10 CRB external repository
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
add-external-repo -t {{ koji_build_tag }}-build centos-stream-10-crb
https://mirror.stream.centos.org/10-stream/CRB/x86_64/os/
register: koji_bootstrap_add_crb_repo_result
changed_when: "'External repository created' in koji_bootstrap_add_crb_repo_result.stdout"
failed_when: "koji_bootstrap_add_crb_repo_result.rc != 0 and 'already exists' not in koji_bootstrap_add_crb_repo_result.stderr"
- name: Ensure external repository merge modes and priorities are set to bare
ansible.builtin.command: >
sudo -u {{ koji_admin_user }} koji
--config={{ koji_hub_admin_user_koji_dir }}/config
edit-external-repo -t {{ koji_build_tag }}-build -m bare -p {{ item.priority }} {{ item.name }}
loop:
- { name: "centos-stream-10-baseos", priority: 25 }
- { name: "centos-stream-10-appstream", priority: 30 }
- { name: "centos-stream-10-epel", priority: 15 }
- { name: "centos-stream-10-crb", priority: 20 }
changed_when: false
- name: Download repomd.xml from CentOS Stream 10 build repo
ansible.builtin.get_url: