Build & Release ACS #142
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-sync | |
- acs-git | |
- acs-identity | |
- acs-krb-keys-operator | |
- acs-krb-utils | |
- acs-monitor | |
- acs-service-setup | |
- acs-visualiser | |
- edge-helm-charts | |
- historian-sparkplug | |
- historian-uns | |
- uns-ingester-sparkplug | |
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: | | |
tag=${{ steps.prepare.outputs.version }} | |
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 | |
- edge-bacnet | |
- edge-modbus | |
- edge-test | |
- edge-tplink-smartplug | |
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-configdb | |
- acs-directory | |
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@v4 | |
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@v4 | |
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' |