Skip to content

Commit 1c9b732

Browse files
committed
Issue #3880 - Feature Request: Add release management workflow to Anax
Signed-off-by: Blake Pearson <[email protected]>
1 parent c08acda commit 1c9b732

File tree

4 files changed

+630
-51
lines changed

4 files changed

+630
-51
lines changed

.github/scripts/configure_versions_script.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ ESS_IMAGE_VERSION="${ORIG_ESS_IMAGE_VERSION}-${BUILD_NUMBER}"
1818
# ESS_IMAGE_VERSION="${ORIG_ESS_IMAGE_VERSION}-${UNIQUE_VERSION_HASH}"
1919

2020
# Output configured versions for viewing
21+
echo "***Anax Version, No Build Number: ${ORIG_ANAX_IMAGE_VERSION}"
2122
echo "***Anax Version: ${ANAX_IMAGE_VERSION}"
2223
echo "***CSS Version: ${CSS_IMAGE_VERSION}"
2324
echo "***ESS Version: ${ESS_IMAGE_VERSION}"
2425

2526
# Put script variables into workflow env. variables
26-
echo "VERSION_NO_BUILD_NUMBER=$ORIG_ANAX_IMAGE_VERSION" >> $GITHUB_ENV
27-
echo "ANAX_IMAGE_VERSION=$ANAX_IMAGE_VERSION" >> $GITHUB_ENV
28-
echo "CSS_IMAGE_VERSION=$CSS_IMAGE_VERSION" >> $GITHUB_ENV
29-
echo "ESS_IMAGE_VERSION=$ESS_IMAGE_VERSION" >> $GITHUB_ENV
27+
echo "VERSION_NO_BUILD_NUMBER=$ORIG_ANAX_IMAGE_VERSION" >> "$GITHUB_OUTPUT"
28+
echo "ANAX_IMAGE_VERSION=$ANAX_IMAGE_VERSION" >> "$GITHUB_OUTPUT"
29+
echo "CSS_IMAGE_VERSION=$CSS_IMAGE_VERSION" >> "$GITHUB_OUTPUT"
30+
echo "ESS_IMAGE_VERSION=$ESS_IMAGE_VERSION" >> "$GITHUB_OUTPUT"

.github/scripts/docker_save_script.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
3+
if [[ -z "$ANAX_IMAGE_VERSION" ]]; then
4+
echo "::error file=docker_save_script.sh::Anax Image Version is unset, check the 'Configure Version Variables' step"
5+
exit 1
6+
fi
7+
if [[ -z "$CSS_IMAGE_VERSION" ]]; then
8+
echo "::error file=docker_save_script.sh::CSS Image Version is unset, check the 'Configure Version Variables' step"
9+
exit 1
10+
fi
11+
if [[ -z "$ESS_IMAGE_VERSION" ]]; then
12+
echo "::error file=docker_save_script.sh::ESS Image Version is unset, check the 'Configure Version Variables' step"
13+
exit 1
14+
fi
15+
16+
# Names of the images created for each architecture
17+
if [[ ${arch} == 'amd64' ]]; then
18+
images=('amd64_agbot' 'amd64_anax' 'amd64_anax_k8s' 'amd64_auto-upgrade-cronjob_k8s' 'amd64_cloud-sync-service' 'amd64_edge-sync-service')
19+
elif [[ ${arch} == 'ppc64el' ]]; then
20+
images=('ppc64el_anax' 'ppc64el_anax_k8s' 'ppc64el_auto-upgrade-cronjob_k8s' 'ppc64el_edge-sync-service')
21+
elif [[ ${arch} == 'arm64' ]]; then
22+
images=('arm64_anax' 'arm64_anax_k8s' 'arm64_auto-upgrade-cronjob_k8s' 'arm64_edge-sync-service')
23+
elif [[ ${arch} == 's390x' ]]; then
24+
images=('s390x_anax' 's390x_anax_k8s' 's390x_auto-upgrade-cronjob_k8s' 's390x_edge-sync-service')
25+
fi
26+
27+
# Save those images
28+
for image in "${images[@]}"; do
29+
30+
if [[ ${image} == *"cloud-sync-service"* ]]; then
31+
VERSION=${CSS_IMAGE_VERSION}
32+
elif [[ ${image} == *"edge-sync-service"* ]]; then
33+
VERSION=${ESS_IMAGE_VERSION}
34+
else
35+
VERSION=${ANAX_IMAGE_VERSION}
36+
fi
37+
38+
docker tag ${IMAGE_REPO}/${image}:testing ${IMAGE_REPO}/${image}:${VERSION}
39+
docker save ${IMAGE_REPO}/${image}:${VERSION} | gzip > ${image}.tar.gz
40+
41+
done

.github/workflows/build-push.yml

Lines changed: 148 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
- master
99
- v2.30
1010
- v2.29
11+
workflow_dispatch:
1112

1213
env:
1314
IMAGE_REPO: ${{ vars.DOCKERHUB_REPO }}
@@ -21,10 +22,15 @@ env:
2122
jobs:
2223

2324
# Migrating workflow causes run number to be reset to 1, offset so our versions don't go back in time.
24-
offset-build-number:
25+
prepare-workflow:
26+
if: github.repository_owner == 'open-horizon'
2527
runs-on: ubuntu-20.04
2628
outputs:
2729
BUILD_NUMBER: ${{ steps.offset.outputs.BUILD_NUMBER }}
30+
ANAX_IMAGE_VERSION: ${{ steps.version.outputs.ANAX_IMAGE_VERSION }}
31+
CSS_IMAGE_VERSION: ${{ steps.version.outputs.CSS_IMAGE_VERSION }}
32+
ESS_IMAGE_VERSION: ${{ steps.version.outputs.ESS_IMAGE_VERSION }}
33+
VERSION_NO_BUILD_NUMBER: ${{ steps.version.outputs.VERSION_NO_BUILD_NUMBER }}
2834
steps:
2935
# Ensure that the repo variables and secrets are set before running any other steps
3036
- name: Check User Set Variables
@@ -75,9 +81,39 @@ jobs:
7581
run: |
7682
echo "BUILD_NUMBER=$(($RUN_NUMBER + $RUN_NUMBER_OFFSET))" >> "$GITHUB_OUTPUT"
7783
84+
# Checkout our Github repo
85+
- name: Checkout Github Repo
86+
uses: actions/checkout@v3
87+
88+
# Configure version variables for later steps, stored in our workflow env. variables
89+
- name: Config Version Variables
90+
id: version
91+
run: |
92+
cd $GITHUB_WORKSPACE
93+
./.github/scripts/configure_versions_script.sh
94+
env:
95+
BUILD_NUMBER: ${{ steps.offset.outputs.BUILD_NUMBER }}
96+
97+
# Prepare files for upload
98+
- name: Prepare Files for Upload
99+
run: |
100+
mkdir $RUNNER_TEMP/files_to_upload
101+
mkdir $RUNNER_TEMP/files_to_tar && cd $RUNNER_TEMP/files_to_tar
102+
cp $GITHUB_WORKSPACE/agent-install/agent-uninstall.sh .
103+
cp $GITHUB_WORKSPACE/agent-install/k8s/* .
104+
tar -czvf $RUNNER_TEMP/files_to_upload/horizon-agent-edge-cluster-files.tar.gz *.*
105+
cp $GITHUB_WORKSPACE/agent-install/agent-install.sh $RUNNER_TEMP/files_to_upload
106+
107+
# Upload files needed for release management that don't change between runs
108+
- name: Upload Anax Agent Files
109+
uses: actions/upload-artifact@v3
110+
with:
111+
name: anax-agent-files-v${{ steps.version.outputs.ANAX_IMAGE_VERSION }}
112+
path: ${{ runner.temp }}/files_to_upload
113+
78114
# Builds on Linux: Deb Packages, RPM Packages, Docker images, and pushes to Dockerhub
79115
linux-build-push:
80-
needs: offset-build-number
116+
needs: prepare-workflow
81117

82118
# The type of runner that the job will run on
83119
runs-on: ubuntu-20.04
@@ -92,11 +128,11 @@ jobs:
92128
env:
93129
arch: ${{ matrix.architecture }}
94130
os: ${{ matrix.platform }}
95-
BUILD_NUMBER: ${{ needs.offset-build-number.outputs.BUILD_NUMBER }}
96-
ANAX_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
97-
CSS_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
98-
ESS_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
99-
VERSION_NO_BUILD_NUMBER: '' # Updated in 'Config Version Variables' step
131+
BUILD_NUMBER: ${{ needs.prepare-workflow.outputs.BUILD_NUMBER }}
132+
ANAX_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.ANAX_IMAGE_VERSION }}
133+
CSS_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.CSS_IMAGE_VERSION }}
134+
ESS_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.ESS_IMAGE_VERSION }}
135+
VERSION_NO_BUILD_NUMBER: ${{ needs.prepare-workflow.outputs.VERSION_NO_BUILD_NUMBER }}
100136
GOPATH: /home/runner/work/anax/anax/go
101137

102138
# Steps represent a sequence of tasks that will be executed as part of the job
@@ -155,12 +191,6 @@ jobs:
155191
run: |
156192
echo "GO_VERSION=$(go version | awk '{print $3}')" >> $GITHUB_OUTPUT
157193
158-
# Configure version variables for later steps, stored in our workflow env. variables
159-
- name: Config Version Variables
160-
run: |
161-
cd ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}
162-
./.github/scripts/configure_versions_script.sh
163-
164194
# Increment version, make translation catalogs, build anax binaries for given ARCH and OS
165195
- name: Build Anax Binaries
166196
run: |
@@ -298,10 +328,91 @@ jobs:
298328
cd ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}
299329
./.github/scripts/docker_push_script.sh
300330
331+
# Save Docker Images
332+
- name: Save Docker Images
333+
if: (matrix.architecture == 'amd64' || matrix.architecture == 'ppc64el' || matrix.architecture == 'arm64' || matrix.architecture == 's390x')
334+
run: |
335+
mkdir -p $RUNNER_TEMP/images_to_upload && cd $RUNNER_TEMP/images_to_upload
336+
${GOPATH}/src/github.com/${GITHUB_REPOSITORY}/.github/scripts/docker_save_script.sh
337+
338+
# Upload Agbot Docker Images
339+
- name: Upload Agbot Docker Images to Artifacts
340+
if: (matrix.architecture == 'amd64')
341+
uses: actions/upload-artifact@v3
342+
with:
343+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_agbot-image-v${{ env.ANAX_IMAGE_VERSION }}
344+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_agbot.tar.gz
345+
346+
# Upload Anax Docker Images
347+
- name: Upload Anax Docker Images to Artifacts
348+
if: (matrix.architecture == 'amd64' || matrix.architecture == 'ppc64el' || matrix.architecture == 'arm64' || matrix.architecture == 's390x')
349+
uses: actions/upload-artifact@v3
350+
with:
351+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_anax-image-v${{ env.ANAX_IMAGE_VERSION }}
352+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_anax.tar.gz
353+
354+
# Upload Anax K8s Docker Images
355+
- name: Upload Anax K8s Docker Images to Artifacts
356+
if: (matrix.architecture == 'amd64' || matrix.architecture == 'ppc64el' || matrix.architecture == 'arm64' || matrix.architecture == 's390x')
357+
uses: actions/upload-artifact@v3
358+
with:
359+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_anax_k8s-image-v${{ env.ANAX_IMAGE_VERSION }}
360+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_anax_k8s.tar.gz
361+
362+
# Upload Anax K8s Cronjob Docker Images
363+
- name: Upload Anax K8s Cronjob Docker Images to Artifacts
364+
if: (matrix.architecture == 'amd64' || matrix.architecture == 'ppc64el' || matrix.architecture == 'arm64' || matrix.architecture == 's390x')
365+
uses: actions/upload-artifact@v3
366+
with:
367+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_auto-upgrade-cronjob_k8s-image-v${{ env.ANAX_IMAGE_VERSION }}
368+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_auto-upgrade-cronjob_k8s.tar.gz
369+
370+
# Upload CSS Docker Images
371+
- name: Upload CSS Docker Images to Artifacts
372+
if: (matrix.architecture == 'amd64')
373+
uses: actions/upload-artifact@v3
374+
with:
375+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_cloud-sync-service-image-v${{ env.CSS_IMAGE_VERSION }}
376+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_cloud-sync-service.tar.gz
377+
378+
# Upload ESS Docker Images
379+
- name: Upload ESS Docker Images to Artifacts
380+
if: (matrix.architecture == 'amd64' || matrix.architecture == 'ppc64el' || matrix.architecture == 'arm64' || matrix.architecture == 's390x')
381+
uses: actions/upload-artifact@v3
382+
with:
383+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}_edge-sync-service-image-v${{ env.ESS_IMAGE_VERSION }}
384+
path: ${{ runner.temp }}/images_to_upload/${{ matrix.architecture }}_edge-sync-service.tar.gz
385+
386+
# Prep to Upload Packages
387+
- name: Prepare to Upload Packages
388+
run: |
389+
mkdir -p $RUNNER_TEMP/rpm_to_upload
390+
if [[ ${arch} == 'amd64' ]]; then \
391+
cp /home/runner/rpmbuild/RPMS/x86_64/*.rpm $RUNNER_TEMP/rpm_to_upload; \
392+
elif [[ ${arch} == 'ppc64el' || ${arch} == 's390x' ]]; then \
393+
cp /home/runner/work/anax/anax/RPMS/*.rpm $RUNNER_TEMP/rpm_to_upload; \
394+
fi
395+
mkdir -p $RUNNER_TEMP/deb_to_upload
396+
cp ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}/pkg/deb/debs/*.deb $RUNNER_TEMP/deb_to_upload
397+
398+
# Upload RPM Packages
399+
- name: Upload RPM Packages to Artifacts
400+
if: (matrix.architecture == 'ppc64el' || matrix.architecture == 'amd64' || matrix.architecture == 's390x')
401+
uses: actions/upload-artifact@v3
402+
with:
403+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}-rpm-package-v${{ env.ANAX_IMAGE_VERSION }}
404+
path: ${{ runner.temp }}/rpm_to_upload/*.rpm
405+
406+
# Upload DEB Packages
407+
- name: Upload DEB Packages to Artifacts
408+
uses: actions/upload-artifact@v3
409+
with:
410+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}-deb-package-v${{ env.ANAX_IMAGE_VERSION }}
411+
path: ${{ runner.temp }}/deb_to_upload/*.deb
301412

302413
# Build our mac packages on a macOS runner
303414
mac-build:
304-
needs: offset-build-number
415+
needs: prepare-workflow
305416

306417
# Do not use any 'xl' version of macos or you will pay (literally)
307418
# When mac silicon runner comes out we can update this runs-on to ${{ (matrix.architecture == 'amd64') && 'macos-12' || 'macSiliconVersion' }}
@@ -315,17 +426,13 @@ jobs:
315426
env:
316427
arch: ${{ matrix.architecture }}
317428
os: ${{ matrix.platform }}
318-
BUILD_NUMBER: ${{ needs.offset-build-number.outputs.BUILD_NUMBER }}
319-
ANAX_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
320-
CSS_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
321-
ESS_IMAGE_VERSION: '' # Updated in 'Config Version Variables' step
322-
VERSION_NO_BUILD_NUMBER: '' # Updated in 'Config Version Variables' step
429+
BUILD_NUMBER: ${{ needs.prepare-workflow.outputs.BUILD_NUMBER }}
430+
ANAX_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.ANAX_IMAGE_VERSION }}
431+
CSS_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.CSS_IMAGE_VERSION }}
432+
ESS_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.ESS_IMAGE_VERSION }}
433+
VERSION_NO_BUILD_NUMBER: ${{ needs.prepare-workflow.outputs.VERSION_NO_BUILD_NUMBER }}
323434
GOPATH: /Users/runner/work/anax/anax/go
324435

325-
# Specify outputs to be used in our push-macos job
326-
outputs:
327-
ANAX_VERSION: ${{ env.ANAX_IMAGE_VERSION }}
328-
329436
steps:
330437
# Checkout our Github repo
331438
- name: Checkout Github Repo
@@ -340,12 +447,6 @@ jobs:
340447
go-version: '1.19'
341448
check-latest: true
342449

343-
# Configure version variables for later steps, stored in our workflow env. variables
344-
- name: Config Version Variables
345-
run: |
346-
cd ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}
347-
./.github/scripts/configure_versions_script.sh
348-
349450
# Configure the certificates for package signing
350451
- name: Configure Certificates
351452
run: |
@@ -399,18 +500,24 @@ jobs:
399500
env:
400501
VERSION: ${{ env.VERSION_NO_BUILD_NUMBER }}
401502

503+
- name: Add Certificate File to Package Directory
504+
run: |
505+
touch ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}/pkg/mac/build/horizon-cli.crt
506+
echo "$MACPKG_HORIZON_CLI_CRT" >> ${GOPATH}/src/github.com/${GITHUB_REPOSITORY}/pkg/mac/build/horizon-cli.crt
507+
env:
508+
MACPKG_HORIZON_CLI_CRT: ${{ secrets.MACPKG_HORIZON_CLI_CRT }}
509+
402510
# Upload created package to artifacts to be used in next job
403511
- name: Upload MacOS Package to Artifacts
404512
uses: actions/upload-artifact@v3
405513
with:
406-
name: macos-${{ matrix.architecture }}-package
407-
path: ${{ env.GOPATH }}/src/github.com/${{ github.repository }}/pkg/mac/build/*.pkg
408-
514+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}-mac-package-v${{ env.ANAX_IMAGE_VERSION }}
515+
path: ${{ env.GOPATH }}/src/github.com/${{ github.repository }}/pkg/mac/build/*
409516

410517
# This will push our built mac packages to Dockerhub
411518
mac-push:
412519
# Specify that we wait for mac-build to run and create the packages
413-
needs: mac-build
520+
needs: [prepare-workflow, mac-build]
414521

415522
runs-on: ubuntu-20.04
416523

@@ -456,22 +563,16 @@ jobs:
456563
password: ${{ secrets.GITHUB_TOKEN }}
457564

458565
# Setup a working directory in the temp folder path
459-
- name: Setup Working Directory and add Certificate File
460-
id: workdir_setup
566+
- name: Setup Working Directory for Mac Package
461567
run: |
462568
mkdir $RUNNER_TEMP/macs
463-
touch $RUNNER_TEMP/macs/horizon-cli.crt
464-
echo "$MACPKG_HORIZON_CLI_CRT" >> $RUNNER_TEMP/macs/horizon-cli.crt
465-
echo "PKG_PATH="${RUNNER_TEMP}/macs"" >> $GITHUB_OUTPUT
466-
env:
467-
MACPKG_HORIZON_CLI_CRT: ${{ secrets.MACPKG_HORIZON_CLI_CRT }}
468569
469570
# Retrieve artifact from previous job
470571
- name: Download our MacOS Package Artifact
471572
uses: actions/download-artifact@v3
472573
with:
473-
name: macos-${{ matrix.architecture }}-package
474-
path: ${{ steps.workdir_setup.outputs.PKG_PATH }}
574+
name: anax-${{ matrix.platform }}-${{ matrix.architecture }}-mac-package-v${{ needs.prepare-workflow.outputs.ANAX_IMAGE_VERSION }}
575+
path: ${{ runner.temp }}/macs
475576

476577
# Push our .crt and .pkg to Dockerhub
477578
- name: Make MacOS Package Tarball and Upload to Dockerhub
@@ -485,10 +586,10 @@ jobs:
485586
486587
# Build docker image with only mac tarball
487588
docker build \
488-
--no-cache \
489-
-t ${IMAGE_REPO}/${{ matrix.architecture }}_anax_macpkg:testing \
490-
-f Dockerfile.macpkg.tarball \
491-
.
589+
--no-cache \
590+
-t ${IMAGE_REPO}/${{ matrix.architecture }}_anax_macpkg:testing \
591+
-f Dockerfile.macpkg.tarball \
592+
.
492593
493594
if [[ "$GITHUB_REF" == 'refs/heads/master' ]]; then
494595
docker push ${IMAGE_REPO}/${{ matrix.architecture }}_anax_macpkg:testing
@@ -499,4 +600,4 @@ jobs:
499600
docker push ${IMAGE_REPO}/${{ matrix.architecture }}_anax_macpkg:testing_${GH_BRANCH}
500601
fi
501602
env:
502-
ANAX_IMAGE_VERSION: ${{ needs.mac-build.outputs.ANAX_VERSION }}
603+
ANAX_IMAGE_VERSION: ${{ needs.prepare-workflow.outputs.ANAX_IMAGE_VERSION }}

0 commit comments

Comments
 (0)