Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 88 additions & 41 deletions .github/workflows/stackhpc-container-image-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,83 @@ on:
type: boolean
required: false
default: false
distro:
description: Container image OS distribution
type: choice
centos-stream-8:
description: Build CentOS Stream 8 images?
type: boolean
required: false
default: true
ubuntu-focal:
description: Build Ubuntu Focal 20.04 images?
type: boolean
required: false
default: centos
options:
- centos
- ubuntu
default: true
push:
description: Whether to push images
type: boolean
required: false
default: true

env:
ANSIBLE_FORCE_COLOR: True
jobs:
generate-tag:
name: Generate container image tag
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
runs-on: [self-hosted, stackhpc-kayobe-config-kolla-builder]
permissions: {}
outputs:
kolla_tag: ${{ steps.kolla_tag.outputs.kolla_tag }}
matrix: ${{ steps.set-matrix.outputs.matrix }}
openstack_release: ${{ steps.openstack_release.outputs.openstack_release }}
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Determine OpenStack release
id: openstack_release
run: |
BRANCH=$(awk -F'=' '/defaultbranch/ {print $2}' .gitreview)
echo "openstack_release=${BRANCH}" | sed "s|stable/||" >> $GITHUB_OUTPUT

# Generate a tag to apply to all built container images.
# Without this, each kayobe * container image build command would use a different tag.
- name: Generate container image tag
id: kolla_tag
run: |
echo "kolla_tag=$(date +${{ steps.openstack_release.outputs.openstack_release }}-%Y%m%dT%H%M%S)" >> $GITHUB_OUTPUT

# Dynamically define job matrix.
# We need a separate matrix entry for each distribution, when the relevant input is true.
# https://stackoverflow.com/questions/65384420/how-do-i-make-a-github-action-matrix-element-conditional
- name: Generate build matrix
id: set-matrix
run: |
comma=""
echo -n "matrix={\"distro\": [" >> $GITHUB_OUTPUT
if [[ ${{ inputs.centos-stream-8 }} == 'true' ]]; then
echo -n "$comma\"centos\"" >> $GITHUB_OUTPUT
comma=", "
fi
if [[ ${{ inputs.ubuntu-focal }} == 'true' ]]; then
echo -n "$comma\"ubuntu\"" >> $GITHUB_OUTPUT
comma=", "
fi
echo "]}" >> $GITHUB_OUTPUT

- name: Display container image tag
run: |
echo "${{ steps.kolla_tag.outputs.kolla_tag }}"

container-image-build:
name: Build Kolla container images
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
runs-on: [self-hosted, stackhpc-kayobe-config-kolla-builder]
timeout-minutes: 720
permissions: {}
strategy:
matrix: ${{ fromJson(needs.generate-tag.outputs.matrix) }}
needs:
- generate-tag
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -44,7 +104,7 @@ jobs:
uses: actions/checkout@v3
with:
repository: stackhpc/kayobe
ref: refs/heads/stackhpc/xena
ref: refs/heads/stackhpc/${{ needs.generate-tag.outputs.openstack_release }}
path: src/kayobe

# FIXME: Failed in kolla-ansible : Ensure the latest version of pip is installed
Expand Down Expand Up @@ -100,57 +160,43 @@ jobs:

- name: Build and push kolla overcloud images
run: |
args="${{ github.event.inputs.regexes }}"
args="$args -e kolla_base_distro=${{ matrix.distro }}"
args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
if ${{ inputs.push }} == 'true'; then
args="$args --push"
fi
source venvs/kayobe/bin/activate &&
source src/kayobe-config/kayobe-env --environment ci-builder &&
kayobe overcloud container image build ${{ github.event.inputs.regexes }} --push -e kolla_base_distro=${{ inputs.distro }}
kayobe overcloud container image build $args
env:
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
if: github.event.inputs.overcloud == 'true'

- name: Display the overcloud container image tag
run: |
echo "$(cat ~/kolla_tag)"
if: github.event.inputs.overcloud == 'true'

- name: Get built overcloud container images
run: |
sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > overcloud-container-images
if: github.event.inputs.overcloud == 'true'

- name: Upload overcloud-container-images artifact
uses: actions/upload-artifact@v3
with:
name: Overcloud container images
path: overcloud-container-images
retention-days: 7
if: github.event.inputs.overcloud == 'true'

- name: Build and push kolla seed images
run: |
args="kolla_base_distro=${{ matrix.distro }}"
args="$args -e kolla_tag=${{ needs.generate-tag.outputs.kolla_tag }}"
if ${{ inputs.push }} == 'true'; then
args="$args --push"
fi
source venvs/kayobe/bin/activate &&
source src/kayobe-config/kayobe-env --environment ci-builder &&
kayobe seed container image build --push -e kolla_base_distro=${{ inputs.distro }}
kayobe seed container image build $args
env:
KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }}
if: github.event.inputs.seed == 'true'

- name: Display the seed container image tag
run: |
echo "$(cat ~/kolla_tag)"
if: github.event.inputs.seed == 'true'

- name: Get built seed container images
- name: Get built container images
run: |
sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/*:$(cat ~/kolla_tag)" > seed-container-images
if: github.event.inputs.seed == 'true'
sudo docker image ls --filter "reference=ark.stackhpc.com/stackhpc-dev/${{ matrix.distro }}-*:${{ needs.generate-tag.outputs.kolla_tag }}" > ${{ matrix.distro }}-container-images

- name: Upload seed-container-images artifact
- name: Upload container images artifact
uses: actions/upload-artifact@v3
with:
name: Seed container images
path: seed-container-images
name: ${{ matrix.distro }} container images
path: ${{ matrix.distro }}-container-images
retention-days: 7
if: github.event.inputs.seed == 'true'

- name: Prune local Kolla container images over 1 week old
run: |
Expand All @@ -160,8 +206,9 @@ jobs:
name: Trigger container image repository sync
needs:
- container-image-build
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
if: github.repository == 'stackhpc/stackhpc-kayobe-config' && inputs.push
runs-on: ubuntu-latest
permissions: {}
steps:
# NOTE(mgoddard): Trigger another CI workflow in the
# stackhpc-release-train repository.
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/stackhpc-promote.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ jobs:
name: Trigger package repository promotion
if: github.repository == 'stackhpc/stackhpc-kayobe-config'
runs-on: ubuntu-latest
permissions: {}
steps:
# NOTE(mgoddard): Trigger another CI workflow in the
# stackhpc-release-train repository.
Expand Down
5 changes: 1 addition & 4 deletions doc/source/contributor/environments/ci-builder.rst
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,7 @@ At this point you are ready to build and push some container images.
kayobe seed container image build --push
kayobe overcloud container image build --push

The container images are tagged as |current_release|-<datetime>. This Kayobe
configuration includes a hook that writes the tag to ``~/kolla_tag``, since
it is not always simple to determine which tag was last applied to built
images.
The container images are tagged as |current_release|-<datetime>.

To use the new images, edit
``~/src/kayobe-config/etc/kayobe/kolla.yml`` to set the above
Expand Down
19 changes: 0 additions & 19 deletions etc/kayobe/ansible/write-kolla-tag.yml

This file was deleted.

This file was deleted.

This file was deleted.