Merge pull request #38 from daimor/master #100
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: CI | |
on: | |
push: | |
branches: | |
- master | |
repository_dispatch: | |
types: | |
- release | |
env: | |
orgname: intersystemsdc | |
name: | | |
iris-community | |
irishealth-community | |
iris-ml-community | |
irishealth-ml-community | |
latest: 2023.2.0.227.0 | |
version: | | |
2022.1.2.574.0 | |
preview: 2023.2.0.221.0 | |
jobs: | |
version: | |
runs-on: ubuntu-latest | |
outputs: | |
name: ${{ steps.set-matrix.outputs.name }} | |
version: ${{ steps.set-matrix.outputs.version }} | |
steps: | |
- id: set-matrix | |
run: | | |
echo name=`jq -Rsc 'split("\n") | map(select(length > 0))' <<< $'${{ env.name }}' ` >> $GITHUB_OUTPUT | |
echo version=`jq -Rsc 'split("\n") | map(select(length > 0))' <<< $'${{ env.latest }}\n${{ env.version }}\n${{ env.preview }}' ` >> $GITHUB_OUTPUT | |
build: | |
needs: | |
- version | |
strategy: | |
fail-fast: false | |
matrix: | |
name: ${{ fromJSON(needs.version.outputs.name ) }} | |
version: ${{ fromJSON(needs.version.outputs.version ) }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: set variables | |
id: vars | |
run: | | |
echo "base=containers.intersystems.com/intersystems/${{ matrix.name }}:${{ matrix.version }}" >> $GITHUB_OUTPUT | |
echo "basearm=containers.intersystems.com/intersystems/${{ matrix.name }}-arm64:${{ matrix.version }}" >> $GITHUB_OUTPUT | |
image=${{ env.orgname }}/${{ matrix.name }} | |
[ '${{ secrets.DOCKER_ORGNAME }}' != '' ] && image=${{ secrets.DOCKER_ORGNAME }}/${{ matrix.name }} | |
version=${{ matrix.version }}-zpm | |
echo "image=$image" >> $GITHUB_OUTPUT | |
echo "version=$version" >> $GITHUB_OUTPUT | |
tags=" -t $image:$version" | |
[ '${{ matrix.version }}' == '${{ env.latest }}' ] && tags+=" -t $image:latest" | |
[ '${{ matrix.version }}' == '${{ env.preview }}' ] && tags+=" -t $image:preview" | |
echo "tags=$tags" >> $GITHUB_OUTPUT | |
tagsarm=" -t $image-arm64:$version" | |
[ '${{ matrix.version }}' == '${{ env.latest }}' ] && tagsarm+=" -t $image-arm64:latest" | |
[ '${{ matrix.version }}' == '${{ env.preview }}' ] && tagsarm+=" -t $image-arm64:preview" | |
echo "tagsarm=$tagsarm" >> $GITHUB_OUTPUT | |
- uses: actions/checkout@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
platforms: linux/amd64,linux/arm64 | |
- name: pull docker image | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 30 | |
max_attempts: 3 | |
retry_on: timeout | |
command: | | |
docker pull ${{ steps.vars.outputs.base }} | |
- name: pull arm64 docker image | |
id: pullarm | |
continue-on-error: true | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 30 | |
max_attempts: 3 | |
retry_on: timeout | |
command: | | |
docker pull ${{ steps.vars.outputs.basearm }} | |
- name: build x86 docker image | |
id: build | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 10 | |
max_attempts: 3 | |
retry_on: timeout | |
command: | | |
docker build --build-arg IMAGE=${{ steps.vars.outputs.base }} --build-arg IMAGEARM=${{ steps.vars.outputs.basearm }} ${{ steps.vars.outputs.tags }} --platform linux/amd64 --target x86 . | |
- name: docker login | |
id: login | |
continue-on-error: true | |
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
- name: push to docker hub | |
id: push | |
if: steps.login.outcome == 'success' | |
run: | | |
tags="${{ steps.vars.outputs.tags }}";tags=${tags// -t / } | |
echo $tags | xargs -n1 sh -c 'docker push $0' | |
- name: build arm64 docker image | |
id: buildarm | |
if: steps.pullarm.outcome == 'success' | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 10 | |
max_attempts: 3 | |
retry_on: timeout | |
command: | | |
docker buildx build --load --build-arg IMAGE=${{ steps.vars.outputs.base }} --build-arg IMAGEARM=${{ steps.vars.outputs.basearm }} ${{ steps.vars.outputs.tagsarm }} --platform linux/arm64 --target arm . | |
- name: push arm64 to docker hub | |
id: pusharm | |
if: steps.buildarm.outcome == 'success' | |
run: | | |
tags="${{ steps.vars.outputs.tagsarm }}";tags=${tags// -t / } | |
echo $tags | xargs -n1 sh -c 'docker push $0' | |
- name: update manifest | |
if: steps.push.outcome == 'success' && steps.pusharm.outcome == 'success' | |
run: | | |
tags="${{ steps.vars.outputs.tagsarm }}";tags=${tags// -t / } | |
echo $tags | xargs -n1 bash -c 'docker manifest rm ${1//-arm64/} || true' - $1 | |
echo $tags | xargs -n1 bash -c 'docker manifest inspect ${1//-arm64/}' - $1 | |
echo $tags | xargs -n1 bash -c 'docker manifest create ${1//-arm64/} ${1//-arm64/} $1 --amend' - $1 | |
echo $tags | xargs -n1 bash -c 'docker manifest push ${1//-arm64/}' - $1 | |
echo $tags | xargs -n1 bash -c 'docker manifest inspect ${1//-arm64/}' - $1 |