Fix rules actions execution order #926
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: diyHue CI Build | |
on: | |
push: | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
name: Build Docker Image | |
strategy: | |
matrix: | |
include: | |
- arch: linux/amd64 | |
arch_friendly: amd64 | |
- arch: linux/arm/v7 | |
arch_friendly: armv7 | |
- arch: linux/arm64 | |
arch_friendly: arm64 | |
- arch: linux/arm/v6 | |
arch_friendly: armv6 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Enable qemu | |
run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- uses: satackey/[email protected] | |
continue-on-error: true | |
with: | |
key: diyhue-cache-ci-${{ matrix.arch }}-{hash} | |
restore-keys: | | |
diyhue-cache-ci-${{ matrix.arch }}- | |
- name: Build docker image | |
run: | | |
docker build -t diyhue/diyhue:ci -f ./.build/Dockerfile --platform=${{ matrix.arch }} --build-arg TARGETPLATFORM=${{ matrix.arch }} . | |
- name: Save tarball | |
run: | | |
docker save --output output.tar diyhue/diyhue:ci | |
- name: Upload Artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ci-${{ matrix.arch_friendly }}-${{ github.run_number }}.tar | |
path: output.tar | |
test: | |
needs: [build] | |
runs-on: ubuntu-latest | |
name: Test Image | |
strategy: | |
matrix: | |
arch: [amd64, armv7, arm64, armv6] | |
steps: | |
- name: Enable qemu | |
run: | | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
- name: Download container artifact | |
uses: actions/download-artifact@v2 | |
with: | |
name: ci-${{ matrix.arch }}-${{ github.run_number }}.tar | |
- name: Import image | |
run: | | |
docker load --input output.tar | |
- name: Run docker image | |
if: success() | |
run: | | |
docker run -d --name diyhue --network=host -v /mnt/hue-emulator/export:/opt/hue-emulator/export -e MAC=b8:27:eb:d4:dc:11 -e IP=192.168.1.123 -e DECONZ=192.168.1.111 -e IP_RANGE=5,6 -e DEBUG=true diyhue/diyhue:ci | |
sleep 15 | |
docker logs diyhue | |
- name: Cleanup | |
run: | | |
docker kill diyhue | |
docker rm diyhue | |
publish: | |
needs: [build, test] | |
name: Publish Image | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: [amd64, armv7, arm64, armv6] | |
registry: [registry.hub.docker.com, ghcr.io/diyhue] | |
steps: | |
- name: Set Docker Repository | |
run: | | |
if [ ${GITHUB_REPOSITORY} == "diyhue/diyHue" ]; then | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
export DOCKER_REPO="diyhue/core" | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/diyhue/core" | |
fi | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/$GITHUB_REPOSITORY" | |
fi | |
echo "DOCKER_REPO=${DOCKER_REPO}" >> $GITHUB_ENV | |
echo Repository set as: ${DOCKER_REPO} | |
- name: Docker login | |
run: | | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
else | |
echo "${{ secrets.CR_PAT }}" | docker login ${{ matrix.registry }} -u "${{ secrets.CR_USER }}" --password-stdin | |
fi | |
- name: Download container artifact | |
uses: actions/download-artifact@v2 | |
with: | |
name: ci-${{ matrix.arch }}-${{ github.run_number }}.tar | |
- name: Import image | |
run: | | |
docker load --input output.tar | |
- name: Push Image | |
run: | | |
docker tag diyhue/diyhue:ci ${DOCKER_REPO}:${{ matrix.arch }}-${{ github.run_number }} | |
docker push ${DOCKER_REPO}:${{ matrix.arch }}-${{ github.run_number }} | |
echo ${DOCKER_REPO}:${{ matrix.arch }}-${{ github.run_number }} published | |
tag_build: | |
needs: [build, test, publish] | |
name: Tag Images | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: [amd64, armv7, arm64, armv6] | |
registry: [registry.hub.docker.com, ghcr.io/diyhue] | |
steps: | |
- name: Set Docker Repository | |
run: | | |
if [ ${GITHUB_REPOSITORY} == "diyhue/diyHue" ]; then | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
export DOCKER_REPO="diyhue/core" | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/diyhue/core" | |
fi | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/$GITHUB_REPOSITORY" | |
fi | |
echo "DOCKER_REPO=${DOCKER_REPO}" >> $GITHUB_ENV | |
echo Repository set as: ${DOCKER_REPO} | |
- name: Enable Experimental Docker Features | |
run: | | |
export DOCKER_CLI_EXPERIMENTAL="enabled" | |
echo "DOCKER_CLI_EXPERIMENTAL=${DOCKER_CLI_EXPERIMENTAL}" >> $GITHUB_ENV | |
- name: Docker login | |
run: | | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
else | |
echo "${{ secrets.CR_PAT }}" | docker login ${{ matrix.registry }} -u "${{ secrets.CR_USER }}" --password-stdin | |
fi | |
- name: Download container artifact | |
uses: actions/download-artifact@v2 | |
with: | |
name: ci-${{ matrix.arch }}-${{ github.run_number }}.tar | |
- name: Import image | |
run: | | |
docker load --input output.tar | |
- name: Deploy Commit ID | |
if: ${{ github.sha != '' }} | |
run: | | |
docker tag diyhue/diyhue:ci ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/}-$GITHUB_SHA | |
docker push ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/}-$GITHUB_SHA | |
echo ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/}-$GITHUB_SHA published | |
- name: Deploy Latest | |
if: ${{ github.ref == 'refs/heads/master' }} | |
run: | | |
docker tag diyhue/diyhue:ci ${DOCKER_REPO}:${{ matrix.arch }}-latest | |
docker push ${DOCKER_REPO}:${{ matrix.arch }}-latest | |
echo ${DOCKER_REPO}:${{ matrix.arch }}-latest published | |
- name: Deploy Branch | |
if: ${{ startsWith(github.ref, 'refs/heads/') }} | |
run: | | |
docker tag diyhue/diyhue:ci ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} | |
docker push ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} | |
echo ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} published | |
- name: Deploy Tag | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: | | |
docker tag diyhue/diyhue:ci ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} | |
docker push ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} | |
echo ${DOCKER_REPO}:${{ matrix.arch }}-${GITHUB_REF##*/} published | |
tag_build_manifest: | |
needs: [build, test, publish] | |
name: Tag Images (Manifest) | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
registry: [registry.hub.docker.com, ghcr.io/diyhue] | |
steps: | |
- name: Set Docker Repository | |
run: | | |
if [ ${GITHUB_REPOSITORY} == "diyhue/diyHue" ]; then | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
export DOCKER_REPO="diyhue/core" | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/diyhue/core" | |
fi | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/$GITHUB_REPOSITORY" | |
fi | |
echo "DOCKER_REPO=${DOCKER_REPO}" >> $GITHUB_ENV | |
echo Repository set as: ${DOCKER_REPO} | |
- name: Enable Experimental Docker Features | |
run: | | |
export DOCKER_CLI_EXPERIMENTAL="enabled" | |
echo "DOCKER_CLI_EXPERIMENTAL=${DOCKER_CLI_EXPERIMENTAL}" >> $GITHUB_ENV | |
- name: Docker login | |
run: | | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
else | |
echo "${{ secrets.CR_PAT }}" | docker login ${{ matrix.registry }} -u "${{ secrets.CR_USER }}" --password-stdin | |
fi | |
- name: Deploy Commit ID | |
if: ${{ github.sha != '' }} | |
run: | | |
docker manifest create \ | |
${DOCKER_REPO}:${GITHUB_REF##*/}-$GITHUB_SHA \ | |
${DOCKER_REPO}:amd64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv7-${{ github.run_number }} \ | |
${DOCKER_REPO}:arm64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv6-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/}-$GITHUB_SHA ${DOCKER_REPO}:armv6-${{ github.run_number }} --arch arm --variant v6 | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/}-$GITHUB_SHA ${DOCKER_REPO}:armv7-${{ github.run_number }} --arch arm --variant v7 | |
docker manifest push ${DOCKER_REPO}:${GITHUB_REF##*/}-$GITHUB_SHA | |
echo ${DOCKER_REPO}:$GITHUB_SHA published | |
- name: Deploy Run Number | |
if: ${{ github.sha != '' }} | |
run: | | |
docker manifest create \ | |
${DOCKER_REPO}:$GITHUB_RUN_NUMBER \ | |
${DOCKER_REPO}:amd64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv7-${{ github.run_number }} \ | |
${DOCKER_REPO}:arm64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv6-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:$GITHUB_RUN_NUMBER ${DOCKER_REPO}:armv6-${{ github.run_number }} --arch arm --variant v6 | |
docker manifest annotate ${DOCKER_REPO}:$GITHUB_RUN_NUMBER ${DOCKER_REPO}:armv7-${{ github.run_number }} --arch arm --variant v7 | |
docker manifest push ${DOCKER_REPO}:$GITHUB_RUN_NUMBER | |
echo ${DOCKER_REPO}:$GITHUB_RUN_NUMBER published | |
- name: Deploy Latest | |
if: ${{ github.ref == 'refs/heads/master' }} | |
run: | | |
docker manifest create \ | |
${DOCKER_REPO}:latest \ | |
${DOCKER_REPO}:amd64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv7-${{ github.run_number }} \ | |
${DOCKER_REPO}:arm64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv6-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:latest ${DOCKER_REPO}:armv6-${{ github.run_number }} --arch arm --variant v6 | |
docker manifest annotate ${DOCKER_REPO}:latest ${DOCKER_REPO}:armv7-${{ github.run_number }} --arch arm --variant v7 | |
docker manifest push ${DOCKER_REPO}:latest | |
echo ${DOCKER_REPO}:latest published | |
- name: Deploy Branch | |
if: ${{ startsWith(github.ref, 'refs/heads/') }} | |
run: | | |
docker manifest create \ | |
${DOCKER_REPO}:${GITHUB_REF##*/} \ | |
${DOCKER_REPO}:amd64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv7-${{ github.run_number }} \ | |
${DOCKER_REPO}:arm64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv6-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/} ${DOCKER_REPO}:armv6-${{ github.run_number }} --arch arm --variant v6 | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/} ${DOCKER_REPO}:armv7-${{ github.run_number }} --arch arm --variant v7 | |
docker manifest push ${DOCKER_REPO}:${GITHUB_REF##*/} | |
echo ${DOCKER_REPO}:${GITHUB_REF##*/} published | |
- name: Deploy Tag | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: | | |
docker manifest create \ | |
${DOCKER_REPO}:${GITHUB_REF##*/} \ | |
${DOCKER_REPO}:amd64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv7-${{ github.run_number }} \ | |
${DOCKER_REPO}:arm64-${{ github.run_number }} \ | |
${DOCKER_REPO}:armv6-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/} ${DOCKER_REPO}:armv6-${{ github.run_number }} --arch arm --variant v6l | |
docker manifest annotate ${DOCKER_REPO}:${GITHUB_REF##*/} ${DOCKER_REPO}:armv7-${{ github.run_number }} --arch arm --variant v7l | |
docker manifest push ${DOCKER_REPO}:${GITHUB_REF##*/} | |
echo ${DOCKER_REPO}:${GITHUB_REF##*/} published | |
retag_arch: | |
needs: [build, test, publish, tag_build, tag_build_manifest] | |
name: Tag images to correct architecture | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
registry: [registry.hub.docker.com, ghcr.io/diyhue] | |
include: | |
- version: v7l | |
arch_friendly: armv7 | |
- version: v6l | |
arch_friendly: armv6 | |
steps: | |
- name: Set Docker Repository | |
run: | | |
if [ ${GITHUB_REPOSITORY} == "diyhue/diyHue" ]; then | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
export DOCKER_REPO="diyhue/core" | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/diyhue/core" | |
fi | |
else | |
export DOCKER_REPO="${{ matrix.registry }}/$GITHUB_REPOSITORY" | |
fi | |
echo "DOCKER_REPO=${DOCKER_REPO}" >> $GITHUB_ENV | |
echo Repository set as: ${DOCKER_REPO} | |
- name: Enable Experimental Docker Features | |
run: | | |
export DOCKER_CLI_EXPERIMENTAL="enabled" | |
echo "DOCKER_CLI_EXPERIMENTAL=${DOCKER_CLI_EXPERIMENTAL}" >> $GITHUB_ENV | |
- name: Docker login | |
run: | | |
if [ ${{ matrix.registry }} == "registry.hub.docker.com" ]; then | |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} | |
else | |
echo "${{ secrets.CR_PAT }}" | docker login ${{ matrix.registry }} -u "${{ secrets.CR_USER }}" --password-stdin | |
fi | |
- name: Commit ID | |
if: ${{ github.sha != '' }} | |
run: | | |
docker manifest create ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/}-$GITHUB_SHA ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/}-$GITHUB_SHA | |
docker manifest annotate ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/}-$GITHUB_SHA ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/}-$GITHUB_SHA --arch arm --variant ${{ matrix.version }} | |
docker manifest push ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/}-$GITHUB_SHA | |
- name: Run ID | |
run: | | |
docker manifest create ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${{ github.run_number }} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${{ github.run_number }} | |
docker manifest annotate ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${{ github.run_number }} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${{ github.run_number }} --arch arm --variant ${{ matrix.version }} | |
docker manifest push ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${{ github.run_number }} | |
- name: Latest | |
if: ${{ github.ref == 'refs/heads/master' }} | |
run: | | |
docker manifest create ${DOCKER_REPO}:${{ matrix.arch_friendly }}-latest ${DOCKER_REPO}:${{ matrix.arch_friendly }}-latest | |
docker manifest annotate ${DOCKER_REPO}:${{ matrix.arch_friendly }}-latest ${DOCKER_REPO}:${{ matrix.arch_friendly }}-latest --arch arm --variant ${{ matrix.version }} | |
docker manifest push ${DOCKER_REPO}:${{ matrix.arch_friendly }}-latest | |
- name: Branch | |
if: ${{ startsWith(github.ref, 'refs/heads/') }} | |
run: | | |
docker manifest create ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} | |
docker manifest annotate ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} --arch arm --variant ${{ matrix.version }} | |
docker manifest push ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} | |
- name: Tag | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: | | |
docker manifest create ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} | |
docker manifest annotate ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} --arch arm --variant ${{ matrix.version }} | |
docker manifest push ${DOCKER_REPO}:${{ matrix.arch_friendly }}-${GITHUB_REF##*/} | |
cleanup_failed: | |
needs: [build, test] | |
if: failure() | |
name: Delete failed artifacts | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
arch: [amd64, armv7, arm64, armv6] | |
steps: | |
- uses: geekyeggo/delete-artifact@v1 | |
with: | |
name: ci-${{ matrix.arch }}-${{ github.run_number }}.tar |