From e7ddf2f485020cc3220e3bb045211c7c6b5881a9 Mon Sep 17 00:00:00 2001 From: buanet Date: Wed, 4 Aug 2021 22:39:06 +0200 Subject: [PATCH] add github actions --- .github/workflows/docker_build_beta_image.yml | 128 +++++++++++++++++ .github/workflows/docker_build_dev_image.yml | 122 ++++++++++++++++ .github/workflows/docker_build_main_image.yml | 130 ++++++++++++++++++ manifest_ghcr.yml | 19 +++ 4 files changed, 399 insertions(+) create mode 100644 .github/workflows/docker_build_beta_image.yml create mode 100644 .github/workflows/docker_build_dev_image.yml create mode 100644 .github/workflows/docker_build_main_image.yml create mode 100644 manifest_ghcr.yml diff --git a/.github/workflows/docker_build_beta_image.yml b/.github/workflows/docker_build_beta_image.yml new file mode 100644 index 00000000..243d8ce7 --- /dev/null +++ b/.github/workflows/docker_build_beta_image.yml @@ -0,0 +1,128 @@ +# Github action to build Docker image from beta branch (tag: beta) + +name: Build Docker image from beta + +on: + pull_request: + branches: + - beta + types: + - closed + +jobs: + bulid_beta: + runs-on: ubuntu-latest + steps: + - name: Checkout (beta) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'beta' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:${{ env.version }}-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest.yml > manifest_beta.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/beta/g" ./manifest_ghcr.yml > manifest_ghcr_beta.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_beta.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/docker_build_dev_image.yml b/.github/workflows/docker_build_dev_image.yml new file mode 100644 index 00000000..1b69bd64 --- /dev/null +++ b/.github/workflows/docker_build_dev_image.yml @@ -0,0 +1,122 @@ +# Github action to build Docker image from dev branch (tag: testing) + +name: Build Docker image from dev + +on: + push: + branches: + - dev + +jobs: + bulid_dev: + runs-on: ubuntu-latest + steps: + - name: Checkout repo (dev) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'dev' + + - name: Get and write version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION-devbuild/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:dev-amd64, + ghcr.io/buanet/iobroker:dev-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:dev-arm32v7, + ghcr.io/buanet/iobroker:dev-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:dev-arm64v8, + ghcr.io/buanet/iobroker:dev-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest.yml > manifest_dev.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_dev.yaml + sed -e "s/\${VERSION}/dev/g" -e "s/\${DOCKERTAG}/dev/g" ./manifest_ghcr.yml > manifest_ghcr_dev.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_dev.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/.github/workflows/docker_build_main_image.yml b/.github/workflows/docker_build_main_image.yml new file mode 100644 index 00000000..75876a1f --- /dev/null +++ b/.github/workflows/docker_build_main_image.yml @@ -0,0 +1,130 @@ +# Github action to build Docker image from main branch (tag: latest) + +name: Build Docker image from main + +on: + release: + types: + - published + +jobs: + bulid_latest: + runs-on: ubuntu-latest + steps: + - name: Checkout (main) + uses: actions/checkout@v2.3.4 + with: + repository: 'buanet/ioBroker.docker' + ref: 'main' + + - name: Get and wirte version and date + id: version + run: | + VERSION="$(cat .VERSION)" + MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')" + DATI="$(date --rfc-3339=seconds | sed 's/ /T/')" + echo "This is the Version: $VERSION" + echo "version=$VERSION" >> $GITHUB_ENV + echo "This is the Major Version: $MAJORVERSION" + echo "majorversion=$MAJORVERSION" >> $GITHUB_ENV + echo "This is the Buildnumber/Timestamp: $DATI" + echo "dati=$DATI" >> $GITHUB_ENV + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./amd64/Dockerfile > ./amd64/Dockerfile.tmp + mv -f ./amd64/Dockerfile.tmp ./amd64/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm32v7/Dockerfile > ./arm32v7/Dockerfile.tmp + mv -f ./arm32v7/Dockerfile.tmp ./arm32v7/Dockerfile + sed -e "s/\${VERSION}/$VERSION/" -e "s/\${DATI}/$DATI/" ./arm64v8/Dockerfile > ./arm64v8/Dockerfile.tmp + mv -f ./arm64v8/Dockerfile.tmp ./arm64v8/Dockerfile + + - name: Set up manifest tool + run: | + wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool + chmod +x manifest-tool + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1.3.0 + + - name: Login to DockerHub + uses: docker/login-action@v1.10.0 + with: + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ secrets.PACKAGES_USER }} + password: ${{ secrets.PACKAGES_PASS }} + + - name: Build Docker image (amd64) + uses: docker/build-push-action@v2.6.1 + with: + context: ./amd64 + file: ./amd64/Dockerfile + push: true + platforms: linux/amd64 + tags: | + buanet/iobroker:${{ env.version }}-amd64, + ghcr.io/buanet/iobroker:${{ env.version }}-amd64 + + - name: Build Docker image (armv32v7) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm32v7 + file: ./arm32v7/Dockerfile + push: true + platforms: linux/arm/v7 + tags: | + buanet/iobroker:${{ env.version }}-arm32v7, + ghcr.io/buanet/iobroker:${{ env.version }}-arm32v7 + + - name: Build Docker image (arm64v8) + uses: docker/build-push-action@v2.6.1 + with: + context: ./arm64v8 + file: ./arm64v8/Dockerfile + push: true + platforms: linux/arm64 + tags: | + buanet/iobroker:${{ env.version }}-arm64v8, + ghcr.io/buanet/iobroker:${{ env.version }}-arm64v8 + + - name: Create and push manifests + run: | + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/latest/g" ./manifest.yml > manifest_latest.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_latest.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.majorversion }}/g" ./manifest.yml > manifest_latestmajor.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_latestmajor.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest.yml > manifest_version.yaml + ./manifest-tool --username ${{ secrets.DOCKER_USER }} --password ${{ secrets.DOCKER_PASS }} push from-spec manifest_version.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/latest/g" ./manifest_ghcr.yml > manifest_ghcr_latest.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_latest.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.majorversion }}/g" ./manifest_ghcr.yml > manifest_ghcr_latestmajor.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_latestmajor.yaml + sed -e "s/\${VERSION}/${{ env.version }}/g" -e "s/\${DOCKERTAG}/${{ env.version }}/g" ./manifest_ghcr.yml > manifest_ghcr_version.yaml + ./manifest-tool --username ${{ secrets.PACKAGES_USER }} --password ${{ secrets.PACKAGES_PASS }} push from-spec manifest_ghcr_version.yaml + + - name: Delete untagged images from GitHub packages + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.PACKAGES_PASS }} + script: | + const response = await github.request("GET /users/${{ env.OWNER }}/packages/container/${{ env.PACKAGE_NAME }}/versions", + { per_page: ${{ env.PER_PAGE }} + }); + for(version of response.data) { + if (version.metadata.container.tags.length == 0) { + console.log("delete " + version.id) + const deleteResponse = await github.request("DELETE /user/packages/container/${{ env.PACKAGE_NAME }}/versions/" + version.id, { }); + console.log("status " + deleteResponse.status) + } + } + env: + OWNER: buanet + PACKAGE_NAME: iobroker + PER_PAGE: 100 diff --git a/manifest_ghcr.yml b/manifest_ghcr.yml new file mode 100644 index 00000000..3e3f8f94 --- /dev/null +++ b/manifest_ghcr.yml @@ -0,0 +1,19 @@ +image: ghcr.io/buanet/iobroker:${DOCKERTAG} +manifests: + - + image: ghcr.io/buanet/iobroker:${VERSION}-amd64 + platform: + architecture: amd64 + os: linux + - + image: ghcr.io/buanet/iobroker:${VERSION}-arm64v8 + platform: + architecture: arm64 + variant: v8 + os: linux + - + image: ghcr.io/buanet/iobroker:${VERSION}-arm32v7 + platform: + architecture: arm + variant: v7 + os: linux