Skip to content

move static

move static #1015

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
- 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@v4
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@v4
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@v4
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@v4
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