Skip to content

Commit 0ce0123

Browse files
Automated Kolla dependencies updates
1 parent aae4d8d commit 0ce0123

File tree

2 files changed

+139
-232
lines changed

2 files changed

+139
-232
lines changed
Lines changed: 47 additions & 232 deletions
Original file line numberDiff line numberDiff line change
@@ -1,254 +1,69 @@
1-
---
2-
name: Build OFED packages
1+
name: Update dependencies
2+
33
on:
4+
# Allow manual executions
45
workflow_dispatch:
5-
inputs:
6-
rocky9:
7-
description: Build Rocky Linux 9
8-
type: boolean
9-
default: true
10-
secrets:
11-
KAYOBE_VAULT_PASSWORD:
12-
required: true
13-
CLOUDS_YAML:
14-
required: true
15-
OS_APPLICATION_CREDENTIAL_ID:
16-
required: true
17-
OS_APPLICATION_CREDENTIAL_SECRET:
18-
required: true
196

20-
env:
21-
ANSIBLE_FORCE_COLOR: True
22-
KAYOBE_ENVIRONMENT: ci-builder
23-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
247
jobs:
25-
overcloud-ofed-packages:
26-
name: Build OFED packages
27-
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
28-
runs-on: arc-skc-host-image-builder-runner
29-
permissions: {}
8+
propose_github_release_updates:
9+
runs-on: ubuntu-22.04
10+
strategy:
11+
matrix:
12+
include:
13+
- key: kolla
14+
repo_path: ${{ github.workspace }}/src/kolla
15+
path: ${{ github.workspace }}/src/kayobe-config/etc/kayobe/stackhpc.yml
16+
repository: stackhpc/kolla
17+
version_jsonpath: stackhpc_kolla_source_version
18+
19+
- key: kolla-ansible
20+
repo_path: ${{ github.workspace }}/src/kolla-ansible
21+
path: ${{ github.workspace }}/src/kayobe-config/etc/kayobe/stackhpc.yml
22+
repository: stackhpc/kolla-ansible
23+
version_jsonpath: stackhpc_kolla_ansible_source_version
24+
25+
- key: kayobe
26+
repo_path: ${{ github.workspace }}/src/kayobe
27+
path: ${{ github.workspace }}/src/kayobe-config/requirements.txt
28+
repository: stackhpc/kayobe
29+
name: ${{ matrix.key }}
3030
steps:
31-
- name: Install Package
32-
uses: ConorMacBride/install-package@main
33-
with:
34-
apt: git unzip nodejs python3-pip python3-venv openssh-server openssh-client jq
35-
36-
- name: Start the SSH service
37-
run: |
38-
sudo /etc/init.d/ssh start
39-
4031
- name: Checkout
4132
uses: actions/checkout@v4
42-
with:
43-
path: src/kayobe-config
33+
path: ${{ github.workspace }}/src/kayobe-config
4434

4535
- name: Determine OpenStack release
4636
id: openstack_release
4737
run: |
4838
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' src/kayobe-config/.gitreview)
4939
echo "openstack_release=${BRANCH}" | sed -E "s,(stable|unmaintained)/,," >> $GITHUB_OUTPUT
5040
51-
- name: Clone StackHPC Kayobe repository
41+
- name: Checkout the dependency repo
5242
uses: actions/checkout@v4
5343
with:
54-
repository: stackhpc/kayobe
55-
ref: refs/heads/stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
56-
path: src/kayobe
57-
58-
- name: Install Kayobe
59-
run: |
60-
mkdir -p venvs &&
61-
pushd venvs &&
62-
python3 -m venv kayobe &&
63-
source kayobe/bin/activate &&
64-
pip install -U pip &&
65-
pip install ../src/kayobe
66-
67-
- name: Install terraform
68-
uses: hashicorp/setup-terraform@v2
69-
70-
- name: Initialise terraform
71-
run: terraform init
72-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
73-
74-
- name: Generate SSH keypair
75-
run: ssh-keygen -f id_rsa -N ''
76-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
77-
78-
- name: Generate clouds.yaml
79-
run: |
80-
cat << EOF > clouds.yaml
81-
${{ secrets.CLOUDS_YAML }}
82-
EOF
83-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
84-
85-
- name: Output image tag
86-
id: image_tag
87-
run: |
88-
echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT
89-
90-
# Use the image override if set, otherwise use overcloud-os_distribution-os_release-tag
91-
- name: Output image name
92-
id: image_name
93-
run: |
94-
echo image_name=overcloud-rocky-9-${{ steps.image_tag.outputs.image_tag }} >> $GITHUB_OUTPUT
95-
96-
- name: Generate terraform.tfvars
97-
run: |
98-
cat << EOF > terraform.tfvars
99-
ssh_public_key = "id_rsa.pub"
100-
ssh_username = "cloud-user"
101-
aio_vm_name = "skc-ofed-builder"
102-
aio_vm_image = "${{ env.VM_IMAGE }}"
103-
aio_vm_flavor = "en1.medium"
104-
aio_vm_network = "stackhpc-ci"
105-
aio_vm_subnet = "stackhpc-ci"
106-
aio_vm_interface = "ens3"
107-
EOF
108-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
109-
env:
110-
VM_IMAGE: ${{ steps.image_name.outputs.image_name }}
111-
112-
- name: Terraform Plan
113-
run: terraform plan
114-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
115-
env:
116-
OS_CLOUD: "openstack"
117-
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
118-
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
119-
120-
- name: Terraform Apply
121-
run: |
122-
for attempt in $(seq 5); do
123-
if terraform apply -auto-approve; then
124-
echo "Created infrastructure on attempt $attempt"
125-
exit 0
126-
fi
127-
echo "Failed to create infrastructure on attempt $attempt"
128-
sleep 10
129-
terraform destroy -auto-approve
130-
sleep 60
131-
done
132-
echo "Failed to create infrastructure after $attempt attempts"
133-
exit 1
134-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
135-
env:
136-
OS_CLOUD: "openstack"
137-
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
138-
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
139-
140-
- name: Get Terraform outputs
141-
id: tf_outputs
142-
run: |
143-
terraform output -json
144-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
145-
146-
- name: Write Terraform outputs
147-
run: |
148-
cat << EOF > src/kayobe-config/etc/kayobe/environments/ci-builder/tf-outputs.yml
149-
${{ steps.tf_outputs.outputs.stdout }}
150-
EOF
44+
repository: ${{ matrix.repository }}
45+
ref: stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
46+
path: ${{ matrix.repo_path }}
15147

152-
- name: Write Terraform network config
48+
- name: Get latest tag
49+
id: latest_tag
15350
run: |
154-
cat << EOF > src/kayobe-config/etc/kayobe/environments/ci-builder/tf-network-allocation.yml
155-
---
156-
aio_ips:
157-
builder: "{{ access_ip_v4.value }}"
158-
EOF
51+
TAG=$(git describe --tags --abbrev=0 --match stackhpc/\*)
52+
echo latest_tag=${TAG} >> $GITHUB_OUTPUT
53+
working-directory: ${{ matrix.repo_path }}
15954

160-
- name: Write Terraform network interface config
161-
run: |
162-
mkdir -p src/kayobe-config/etc/kayobe/environments/$KAYOBE_ENVIRONMENT/inventory/group_vars/seed
163-
rm -f src/kayobe-config/etc/kayobe/environments/$KAYOBE_ENVIRONMENT/inventory/group_vars/seed/network-interfaces
164-
cat << EOF > src/kayobe-config/etc/kayobe/environments/$KAYOBE_ENVIRONMENT/inventory/group_vars/seed/network-interfaces
165-
admin_interface: "{{ access_interface.value }}"
166-
aio_interface: "{{ access_interface.value }}"
167-
EOF
168-
169-
- name: Manage SSH keys
170-
run: |
171-
mkdir -p ~/.ssh
172-
touch ~/.ssh/authorized_keys
173-
cat src/kayobe-config/terraform/aio/id_rsa.pub >> ~/.ssh/authorized_keys
174-
cp src/kayobe-config/terraform/aio/id_rsa* ~/.ssh/
175-
176-
- name: Bootstrap the control host
177-
run: |
178-
source venvs/kayobe/bin/activate &&
179-
source src/kayobe-config/kayobe-env --environment ci-builder &&
180-
kayobe control host bootstrap
181-
182-
- name: Run growroot playbook
183-
run: |
184-
source venvs/kayobe/bin/activate &&
185-
source src/kayobe-config/kayobe-env --environment ci-builder &&
186-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/growroot.yml
187-
env:
188-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
189-
190-
- name: Configure the seed host (Builder VM)
191-
run: |
192-
source venvs/kayobe/bin/activate &&
193-
source src/kayobe-config/kayobe-env --environment ci-builder &&
194-
kayobe seed host configure --skip-tags network,docker
195-
env:
196-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
197-
198-
- name: Run a distro-sync
199-
run: |
200-
source venvs/kayobe/bin/activate &&
201-
source src/kayobe-config/kayobe-env --environment ci-builder &&
202-
kayobe seed host command run --become --command "dnf distro-sync --refresh"
203-
env:
204-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
205-
206-
- name: Reset BLS entries on the seed host
207-
run: |
208-
source venvs/kayobe/bin/activate &&
209-
source src/kayobe-config/kayobe-env --environment ci-builder &&
210-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/reset-bls-entries.yml \
211-
-e "reset_bls_host=ofed-builder"
212-
env:
213-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
214-
215-
- name: Disable noexec in /var/tmp
216-
run: |
217-
source venvs/kayobe/bin/activate &&
218-
source src/kayobe-config/kayobe-env --environment ci-builder &&
219-
kayobe seed host command run --become --command "sed -i 's/noexec,//g' /etc/fstab"
220-
env:
221-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
222-
223-
- name: Reboot to apply the kernel update
224-
run: |
225-
source venvs/kayobe/bin/activate &&
226-
source src/kayobe-config/kayobe-env --environment ci-builder &&
227-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/reboot.yml
228-
env:
229-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
230-
231-
- name: Run OFED builder playbook
232-
run: |
233-
source venvs/kayobe/bin/activate &&
234-
source src/kayobe-config/kayobe-env --environment ci-builder &&
235-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/build-ofed-rocky.yml
236-
env:
237-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
55+
- name: Update dependency key (kolla)
56+
uses: azimuth-cloud/github-actions/config-update@master
57+
with:
58+
path: ${{ matrix.path }}
59+
updates: |
60+
${{ matrix.version_jsonpath }}=${{ steps.latest_tag.outputs.latest_tag }}
61+
if: contains(matrix.key, 'kolla')
23862

239-
- name: Run OFED upload playbook
63+
- name: Update dependency key (kayobe)
24064
run: |
241-
source venvs/kayobe/bin/activate &&
242-
source src/kayobe-config/kayobe-env --environment ci-builder &&
243-
kayobe playbook run src/kayobe-config/etc/kayobe/ansible/push-ofed.yml
244-
env:
245-
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
246-
247-
- name: Destroy
248-
run: terraform destroy -auto-approve
249-
working-directory: ${{ github.workspace }}/src/kayobe-config/terraform/aio
65+
REPLACE=$(sed -i "s/@stackhpc\/.*$/$TAG/g" $REQUIREMENTS)
66+
if: contains(matrix.key, 'kayobe')
25067
env:
251-
OS_CLOUD: openstack
252-
OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }}
253-
OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }}
254-
if: always()
68+
TAG: ${{ steps.latest_tag.outputs.latest_tag }}
69+
REQUIREMENTS: ${{ matrix.path }}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: Update dependencies
2+
3+
on:
4+
# Allow manual executions
5+
workflow_dispatch:
6+
# Run nightly
7+
schedule:
8+
- cron: '0 0 * * *'
9+
10+
jobs:
11+
propose_github_release_updates:
12+
runs-on: ubuntu-22.04
13+
strategy:
14+
matrix:
15+
include:
16+
- key: kolla
17+
repo_path: ${{ github.workspace }}/src/kolla
18+
path: ${{ github.workspace }}/src/kayobe-config/etc/kayobe/stackhpc.yml
19+
repository: stackhpc/kolla
20+
version_jsonpath: stackhpc_kolla_source_version
21+
22+
- key: kolla-ansible
23+
repo_path: ${{ github.workspace }}/src/kolla-ansible
24+
path: ${{ github.workspace }}/src/kayobe-config/etc/kayobe/stackhpc.yml
25+
repository: stackhpc/kolla-ansible
26+
version_jsonpath: stackhpc_kolla_ansible_source_version
27+
28+
- key: kayobe
29+
repo_path: ${{ github.workspace }}/src/kayobe
30+
path: ${{ github.workspace }}/src/kayobe-config/requirements.txt
31+
repository: stackhpc/kayobe
32+
permissions:
33+
contents: write
34+
pull-requests: write
35+
name: ${{ matrix.key }}
36+
steps:
37+
- name: Checkout
38+
uses: actions/checkout@v4
39+
path: ${{ github.workspace }}/src/kayobe-config
40+
41+
- name: Determine OpenStack release
42+
id: openstack_release
43+
run: |
44+
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' src/kayobe-config/.gitreview)
45+
echo "openstack_release=${BRANCH}" | sed -E "s,(stable|unmaintained)/,," >> $GITHUB_OUTPUT
46+
47+
- name: Checkout the dependency repo
48+
uses: actions/checkout@v4
49+
with:
50+
repository: ${{ matrix.repository }}
51+
ref: stackhpc/${{ steps.openstack_release.outputs.openstack_release }}
52+
path: ${{ matrix.repo_path }}
53+
54+
- name: Get latest tag
55+
id: latest_tag
56+
run: |
57+
TAG=$(git describe --tags --abbrev=0 --match stackhpc/\*)
58+
echo latest_tag=${TAG} >> $GITHUB_OUTPUT
59+
working-directory: ${{ matrix.repo_path }}
60+
61+
- name: Update dependency key (kolla)
62+
uses: azimuth-cloud/github-actions/config-update@master
63+
with:
64+
path: ${{ matrix.path }}
65+
updates: |
66+
${{ matrix.version_jsonpath }}=${{ steps.latest_tag.outputs.latest_tag }}
67+
if: contains(matrix.key, 'kolla')
68+
69+
- name: Update dependency key (kayobe)
70+
run: |
71+
REPLACE=$(sed -i "s/@stackhpc\/.*$/$TAG/g" $REQUIREMENTS)
72+
if: contains(matrix.key, 'kayobe')
73+
env:
74+
TAG: ${{ steps.latest_tag.outputs.latest_tag }}
75+
REQUIREMENTS: ${{ matrix.path }}
76+
77+
- name: Propose changes via PR if required
78+
uses: peter-evans/create-pull-request@v7
79+
with:
80+
token: ${{ secrets.STACKHPC_RELEASE_TRAIN_TOKEN }}
81+
path: ${{ github.workspace }}/src/kayobe-config
82+
commit-message: >-
83+
Bump ${{ matrix.key }} to ${{ steps.next.outputs.version }}
84+
branch: update-dependency/${{ matrix.key }}
85+
delete-branch: true
86+
title: >-
87+
Bump ${{ matrix.key }} to ${{ steps.next.outputs.version }}
88+
body: >
89+
This PR was created automatically to update
90+
${{ matrix.key }} to ${{ steps.next.outputs.version }}.
91+
labels: |
92+
stackhpc-ci

0 commit comments

Comments
 (0)