Skip to content

v3.1.0-dev.4

v3.1.0-dev.4 #74

Workflow file for this run

name: Build & Release ACS
env:
BASE_JS_VERSION: v3.0.0
BASE_PHP_VERSION: v3.0.0
BUILD_PHP_VERSION: v3.0.0
on:
release:
types: [ published ]
jobs:
build-base-js:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
strategy:
matrix:
type: [ "js-build", "js-run" ]
steps:
- name: Check if build required
id: check
run: |
docker manifest inspect ghcr.io/amrc-factoryplus/acs-base-${{ matrix.type }}:${{ env.BASE_JS_VERSION }} || echo "needs-build=true" >> $GITHUB_OUTPUT
- name: Checkout
if: steps.check.outputs.needs-build == 'true'
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
if: steps.check.outputs.needs-build == 'true'
id: prepare
with:
service-name: acs-base
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
id: build-and-push
if: steps.check.outputs.needs-build == 'true'
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./acs-base-images/Dockerfile.${{ matrix.type }}
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}-${{ matrix.type }}:${{ env.BASE_JS_VERSION }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: ./.github/actions/cleanup
id: cleanup
if: steps.check.outputs.needs-build == 'true'
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}-${{ matrix.type }}
digest: ${{ steps.build-and-push.outputs.digest }}
build-base-pg-build:
runs-on: ubuntu-latest
needs: build-base-js
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
steps:
- name: Check if build required
id: check
run: |
docker manifest inspect ghcr.io/amrc-factoryplus/acs-base-pg-build:${{ env.BASE_JS_VERSION }} || echo "needs-build=true" >> $GITHUB_OUTPUT
- name: Checkout
if: steps.check.outputs.needs-build == 'true'
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
if: steps.check.outputs.needs-build == 'true'
with:
service-name: acs-base
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
id: build-and-push
if: steps.check.outputs.needs-build == 'true'
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64
file: ./acs-base-images/Dockerfile.pg-build
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}-pg-build:${{ env.BASE_JS_VERSION }}
build-args: |
version=${{ env.BASE_JS_VERSION }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: ./.github/actions/cleanup
id: cleanup
if: steps.check.outputs.needs-build == 'true'
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}-pg-build
digest: ${{ steps.build-and-push.outputs.digest }}
build-base-pg-run:
runs-on: ubuntu-latest
needs: build-base-pg-build
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
steps:
- name: Check if build required
id: check
run: |
docker manifest inspect ghcr.io/amrc-factoryplus/acs-base-pg-run:${{ env.BASE_JS_VERSION }} || echo "needs-build=true" >> $GITHUB_OUTPUT
- name: Checkout
if: steps.check.outputs.needs-build == 'true'
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
if: steps.check.outputs.needs-build == 'true'
id: prepare
with:
service-name: acs-base
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
if: steps.check.outputs.needs-build == 'true'
id: build-and-push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64
file: ./acs-base-images/Dockerfile.pg-run
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}-pg-run:${{ env.BASE_JS_VERSION }}
build-args: |
version=${{ env.BASE_JS_VERSION }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: ./.github/actions/cleanup
if: steps.check.outputs.needs-build == 'true'
id: cleanup
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}-pg-run
digest: ${{ steps.build-and-push.outputs.digest }}
build-x86-js:
needs: [ build-base-js ]
runs-on: ubuntu-latest
strategy:
matrix:
service: [ 'acs-admin', 'acs-cluster-manager', 'acs-cmdesc', 'acs-edge-monitor', 'acs-edge-sync', 'acs-git',
'acs-identity', 'acs-krb-keys-operator', 'acs-krb-utils', 'acs-service-setup', 'acs-visualiser',
'influxdb-sparkplug-ingester', 'acs-activity-monitor']
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: ${{ matrix.service }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
uses: docker/build-push-action@v5
id: build-and-push
with:
context: ./${{ steps.prepare.outputs.service-name }}
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}:${{ steps.prepare.outputs.version }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
revision=${{ steps.prepare.outputs.version }} (${{ github.sha }})
base_version=${{ env.BASE_JS_VERSION }}
- uses: ./.github/actions/cleanup
id: cleanup
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}
digest: ${{ steps.build-and-push.outputs.digest }}
build-arm-js:
needs: [ build-base-js ]
runs-on: ubuntu-latest
strategy:
matrix:
service: [ 'acs-edge' ]
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: ${{ matrix.service }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
uses: docker/build-push-action@v5
id: build-and-push
with:
context: ./${{ steps.prepare.outputs.service-name }}
platforms: linux/amd64,linux/arm64
push: true
build-args: |
revision=${{ steps.prepare.outputs.version }} (${{ github.sha }})
base_version=${{ env.BASE_JS_VERSION }}
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}:${{ steps.prepare.outputs.version }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: ./.github/actions/cleanup
id: cleanup
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}
digest: ${{ steps.build-and-push.outputs.digest }}
build-x86-pg:
needs: [ build-base-pg-run ]
runs-on: ubuntu-latest
strategy:
matrix:
service: [ 'acs-auth', 'acs-directory', 'acs-configdb' ]
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: ${{ matrix.service }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Build
uses: docker/build-push-action@v5
id: build-and-push
with:
context: ./${{ steps.prepare.outputs.service-name }}
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}:${{ steps.prepare.outputs.version }}
labels: ${{ steps.prepare.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
revision=${{ steps.prepare.outputs.version }} (${{ github.sha }})
base_version=${{ env.BASE_JS_VERSION }}
- uses: ./.github/actions/cleanup
id: cleanup
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}
digest: ${{ steps.build-and-push.outputs.digest }}
build-manager:
name: Build Manager
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: acs-manager
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check Backend Builder
id: check-backend-builder
run: |
docker manifest inspect ghcr.io/amrc-factoryplus/acs-manager:backend-build-${{ env.BUILD_PHP_VERSION}} || echo "needs-build=true" >> $GITHUB_OUTPUT
- name: Build Backend Builder
id: build-backend-builder
if: steps.check-backend-builder.outputs.needs-build == 'true'
uses: docker/build-push-action@v4
with:
context: ./acs-manager
file: ./acs-manager/.docker/Dockerfiles/Dockerfile.backend-build
push: true
tags: ghcr.io/amrc-factoryplus/acs-manager:backend-build-${{ env.BUILD_PHP_VERSION}}
- name: Check Backend Base
id: check-backend-base
run: |
docker manifest inspect ghcr.io/amrc-factoryplus/acs-manager:prod-base-${{ env.BASE_PHP_VERSION}} || echo "needs-build=true" >> $GITHUB_OUTPUT
- name: Build Backend Base
id: build-backend-base
if: steps.check-backend-base.outputs.needs-build == 'true'
uses: docker/build-push-action@v4
with:
context: ./acs-manager
file: ./acs-manager/.docker/Dockerfiles/Dockerfile.backend-base
push: true
tags: ghcr.io/amrc-factoryplus/acs-manager:prod-base-${{ env.BASE_PHP_VERSION}}
- name: Build Backend
id: build-backend
uses: docker/build-push-action@v4
with:
context: ./acs-manager
file: ./acs-manager/.docker/Dockerfiles/Dockerfile
load: true
tags: ghcr.io/amrc-factoryplus/acs-manager:${{ steps.prepare.outputs.version }}-backend
labels: ${{ steps.prepare.outputs.labels }}
outputs: type=docker,dest=/tmp/image.tar
build-args: |
base_version=${{ env.BASE_PHP_VERSION }}
build_version=${{ env.BUILD_PHP_VERSION }}
- name: Upload Backend
uses: actions/upload-artifact@v2
with:
name: ${{ steps.prepare.outputs.version }}-backend
path: /tmp/image.tar
- name: Build & Push Frontend
id: build-and-push-frontend
uses: docker/build-push-action@v4
with:
context: ./acs-manager
push: true
file: ./acs-manager/.docker/Dockerfiles/Dockerfile
target: production-frontend
tags: ghcr.io/amrc-factoryplus/acs-manager:${{ steps.prepare.outputs.version }}-frontend
labels: ${{ steps.prepare.outputs.labels }}
push-manager:
name: Push Backend
runs-on: ubuntu-latest
needs: build-manager
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: acs-manager
token: ${{ secrets.GITHUB_TOKEN }}
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: ${{ steps.prepare.outputs.version }}-backend
path: /tmp
- name: Load and push image
run: |
docker load --input /tmp/image.tar
docker image ls -a
docker push ghcr.io/amrc-factoryplus/acs-manager:${{ steps.prepare.outputs.version }}-backend
build-mqtt:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v3
- uses: ./.github/actions/prepare
id: prepare
with:
service-name: acs-mqtt
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: '19'
distribution: 'temurin'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Extract POM version
run: |
cd hivemq-krb
ver="$(mvn -q help:evaluate -Dexpression=project.version -DforceStdout)"
echo "krb_zipfile=hivemq-auth-krb-${ver}-distribution.zip" >>"$GITHUB_ENV"
- name: Build with Maven
run: |
cd hivemq-krb
mvn -B package
cp "target/${krb_zipfile}" "../${{ steps.prepare.outputs.service-name }}"
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v5
with:
context: ./${{ steps.prepare.outputs.service-name }}
push: true
tags: ghcr.io/amrc-factoryplus/${{ steps.prepare.outputs.service-name }}:${{ steps.prepare.outputs.version }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
krb_zipfile=${{ env.krb_zipfile }}
cache-from: type=gha
cache-to: type=gha,mode=max
- uses: ./.github/actions/cleanup
id: cleanup
with:
version: ${{ steps.prepare.outputs.version }}
service-name: ${{ steps.prepare.outputs.service-name }}
digest: ${{ steps.build-and-push.outputs.digest }}
build-helm-chart:
if: github.event_name == 'release'
needs: [ 'build-x86-js', 'build-arm-js', 'build-x86-pg', 'push-manager', 'build-mqtt' ]
runs-on: ubuntu-latest
steps:
- name: Install Helm
run: |
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- name: Checkout code
uses: actions/checkout@v3
with:
ref: ${{ github.event.release.tag_name }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Package Helm chart
run: |
TAG="${{ github.event.release.tag_name }}"
VERSION="${TAG#v}"
helm package -u -d deploy/build --version="$VERSION" --app-version="$VERSION" deploy
echo "VERSION=$VERSION"
echo "VERSION=$VERSION" >> $GITHUB_ENV
- uses: actions/upload-artifact@v3
with:
name: new-release
path: deploy/build/amrc-connectivity-stack-${{ env.VERSION }}.tgz
# This job checks out the release branch, adds the new release to the /builds folder, builds the index and commits
# the changes, which triggers Github to release it as a new pages repo
release-helm-chart:
if: github.event_name == 'release'
needs: build-helm-chart
runs-on: ubuntu-latest
steps:
- name: Install Helm
run: |
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- name: Checkout code
uses: actions/checkout@v3
with:
ref: release
- name: add-new-release
uses: actions/download-artifact@v3
with:
name: new-release
path: build
- name: Build index
run: |
cd build
helm repo index --url https://amrc-factoryplus.github.io/amrc-connectivity-stack/build .
- name: commit
uses: stefanzweifel/git-auto-commit-action@v4
id: auto_commit_action
with:
commit_message: Release ${{ github.event.release.tag_name }}
commit_user_name: GitHub Action
commit_user_email: actions@github.com
branch: release
create_branch: true
push_options: '--force'