Skip to content

Commit f53a8f2

Browse files
authored
Merge pull request #325 from stackhpc/fix-nightly
Fix nightly package repo syncs
2 parents 4d797cd + e28c3ca commit f53a8f2

File tree

6 files changed

+228
-18
lines changed

6 files changed

+228
-18
lines changed

.github/workflows/package-sync-nightly.yml

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,52 @@ on:
77
env:
88
ANSIBLE_FORCE_COLOR: True
99
jobs:
10+
sync-matrix-build:
11+
name: Build package matrix of package repo sync jobs
12+
runs-on: arc-release-train-runner
13+
outputs:
14+
matrix: ${{ steps.matrix-build.outputs.matrix }}
15+
steps:
16+
17+
- name: Checkout
18+
uses: actions/checkout@v4
19+
20+
- name: Install dependencies
21+
run: |
22+
sudo apt update
23+
sudo apt install wget
24+
25+
- name: Install YQ
26+
uses: dcarbone/[email protected]
27+
28+
- name: Create sync matrix
29+
id: matrix-build
30+
# Use YQ to make a list of all unique sync groups, and format as a GH
31+
# actions matrix
32+
run: |
33+
groups=$(yq -o=json -I=0 \
34+
'([.rpm_package_repos[] | .sync_group | select(.) ]) + ([.deb_package_repos[] | .sync_group | select(.) ]) | unique' \
35+
ansible/inventory/group_vars/all/package-repos)
36+
echo -n "matrix={\"sync_group\": " >> $GITHUB_OUTPUT
37+
echo -n $groups >> $GITHUB_OUTPUT
38+
echo "}" >> $GITHUB_OUTPUT
39+
40+
- name: Print sync matrix
41+
run: |
42+
echo "Package sync matrix:"
43+
echo -n "${{ steps.matrix-build.outputs.matrix }}"
44+
1045
sync-matrix-run:
1146
name: Sync
47+
needs:
48+
- sync-matrix-build
1249
strategy:
13-
matrix:
14-
filter: ['rocky','(centos|rhel|epel|^docker|opensearch|grafana|rabbitmq|^treasuredata|elasticsearch)', 'jammy', 'focal', 'ubuntu_cloud_archive']
50+
matrix: ${{ fromJson(needs.sync-matrix-build.outputs.matrix) }}
1551
max-parallel: 1
1652
fail-fast: False
1753
uses: stackhpc/stackhpc-release-train/.github/workflows/package-sync.yml@main
1854
with:
1955
sync_ark: True
2056
sync_test: False
21-
filter: ${{ matrix.filter }}
57+
package_sync_group: ${{ matrix.sync_group }}
2258
secrets: inherit

.github/workflows/package-sync.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ on:
1111
description: Sync package repositories in Test Pulp
1212
type: boolean
1313
required: true
14-
filter:
15-
description: Space-separated list of regular expressions matching short_name of repositories to sync
14+
package_sync_group:
15+
description: String matching sync_group of repositories to sync
1616
type: string
17-
required: true
17+
required: false
18+
default: ""
1819
workflow_dispatch:
1920
inputs:
2021
sync_ark:
@@ -62,11 +63,13 @@ jobs:
6263
ansible/dev-pulp-repo-sync.yml \
6364
ansible/dev-pulp-repo-publication-cleanup.yml \
6465
ansible/dev-pulp-repo-publish.yml \
66+
-e package_sync_group="'$PACKAGE_SYNC_GROUP'" \
6567
-e deb_package_repo_filter="'$FILTER'" \
6668
-e rpm_package_repo_filter="'$FILTER'"
6769
retry_wait_seconds: 3600
6870
env:
6971
FILTER: ${{ inputs.filter }}
72+
PACKAGE_SYNC_GROUP: ${{ inputs.package_sync_group }}
7073

7174
package-sync-test:
7275
name: Sync package repositories in test
@@ -95,8 +98,10 @@ jobs:
9598
ansible/test-pulp-repo-sync.yml \
9699
ansible/test-pulp-repo-publication-cleanup.yml \
97100
ansible/test-pulp-repo-publish.yml \
101+
-e package_sync_group="'$PACKAGE_SYNC_GROUP'" \
98102
-e deb_package_repo_filter="'$FILTER'" \
99103
-e rpm_package_repo_filter="'$FILTER'"
100104
retry_wait_seconds: 3600
101105
env:
102106
FILTER: ${{ inputs.filter }}
107+
PACKAGE_SYNC_GROUP: ${{ inputs.package_sync_group }}

ansible/filter_plugins/filters.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,27 @@
1515
import re
1616

1717

18-
def select_repos(repos, filter_string):
19-
"""Select repositories that match a filter string.
18+
def select_repos(repos, filter_string, package_sync_group):
19+
"""Select repositories that match a filter string and package sync group.
2020
2121
The filter string is a whitespace-separated list of regular expressions
2222
matching repository short names.
23+
24+
The package sync group is a string matching a repository sync group.
2325
"""
24-
if not filter_string:
25-
return repos
26-
regexes = filter_string.split()
27-
patterns = re.compile(r"|".join(regexes).join('()'))
28-
return [repo for repo in repos
29-
if "short_name" in repo and re.search(patterns, repo["short_name"])]
26+
if filter_string:
27+
regexes = filter_string.split()
28+
patterns = re.compile(r"|".join(regexes).join('()'))
29+
filtered_repos = [repo for repo in repos
30+
if "short_name" in repo and re.search(patterns, repo["short_name"])]
31+
else:
32+
filtered_repos = repos
33+
34+
if package_sync_group:
35+
return [repo for repo in filtered_repos
36+
if "sync_group" in repo and repo["sync_group"] == package_sync_group]
37+
else:
38+
return filtered_repos
3039

3140

3241
def select_images(images, filter_string):

0 commit comments

Comments
 (0)