123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751 |
- ---
- # Handle building docker images both for CI checks and for eleases.
- #
- # The case of releaases is unfortunately rather complicated, as Docker
- # tooling does not have great support for handling of multiarch images
- # published to multiple registries. As a result, we have to build the
- # images, export the cache, and then _rebuild_ the images using the exported
- # cache but with different output parameters for buildx. We also need to
- # do the second build step as a separate job for each registry so that a
- # failure to publish one place won’t break publishing elsewhere.
- name: Docker
- on:
- push:
- branches:
- - master
- pull_request: null
- workflow_dispatch:
- inputs:
- version:
- description: Version Tag
- default: nightly
- required: true
- env:
- DISABLE_TELEMETRY: 1
- concurrency:
- group: docker-${{ github.ref }}-${{ github.event_name }}
- cancel-in-progress: true
- jobs:
- file-check: # Check what files changed if we’re being run in a PR or on a push.
- name: Check Modified Files
- runs-on: ubuntu-latest
- outputs:
- run: ${{ steps.check-run.outputs.run }}
- skip-go: ${{ steps.check-go.outputs.skip-go }}
- steps:
- - name: Checkout
- id: checkout
- if: github.event_name != 'workflow_dispatch'
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Check source files
- id: check-source-files
- if: github.event_name != 'workflow_dispatch'
- uses: tj-actions/changed-files@v45
- with:
- since_last_remote_commit: ${{ github.event_name != 'pull_request' }}
- files: |
- **/*.c
- **/*.cc
- **/*.h
- **/*.hh
- **/*.in
- **/*.patch
- src/aclk/aclk-schemas/
- src/ml/dlib/
- src/fluent-bit/
- src/web/server/h2o/libh2o/
- files_ignore: |
- netdata.spec.in
- **/*.md
- - name: Check build system files
- id: check-build-files
- if: github.event_name != 'workflow_dispatch'
- uses: tj-actions/changed-files@v45
- with:
- since_last_remote_commit: ${{ github.event_name != 'pull_request' }}
- files: |
- .dockerignore
- CMakeLists.txt
- netdata-installer.sh
- .github/workflows/docker.yml
- .github/scripts/docker-test.sh
- .github/scripts/gen-docker-tags.py
- .github/scripts/gen-docker-imagetool-args.py
- packaging/cmake/
- packaging/docker/
- packaging/installer/
- packaging/runtime-check.sh
- packaging/*.version
- packaging/*.checksums
- files_ignore: |
- **/*.md
- packaging/repoconfig/
- - name: List all changed files in pattern
- continue-on-error: true
- if: github.event_name != 'workflow_dispatch'
- env:
- CHANGED_SOURCE_FILES: ${{ steps.check-source-files.outputs.all_changed_files }}
- CHANGED_BUILD_FILES: ${{ steps.check-build-files.outputs.all_changed_files }}
- run: |
- for file in ${CHANGED_SOURCE_FILES} ${CHANGED_BUILD_FILES} ; do
- echo "$file was changed"
- done
- - name: Check Run
- id: check-run
- run: |
- if [ "${{ steps.check-source-files.outputs.any_modified }}" == "true" ] || [ "${{ steps.check-build-files.outputs.any_modified }}" == "true" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
- echo 'run=true' >> "${GITHUB_OUTPUT}"
- else
- echo 'run=false' >> "${GITHUB_OUTPUT}"
- fi
- - name: Check Go
- id: check-go
- env:
- OTHER_CHANGED_FILES: ${{ steps.check-source-files.outputs.other_changed_files }}
- run: |
- if [ '${{ github.event_name }}' == 'pull_request' ]; then
- if echo "${OTHER_CHANGED_FILES}" | grep -q '.*/(.*\.go|go\.mod|go\.sum)$' || [ "${{ steps.check-build-files.outputs.any_modified }}" == "true" ]; then
- echo 'skip-go=' >> "${GITHUB_OUTPUT}"
- else
- echo 'skip-go=--disable-go' >> "${GITHUB_OUTPUT}"
- fi
- else
- echo 'skip-go=' >> "${GITHUB_OUTPUT}"
- fi
- build-images:
- name: Build Docker Images
- needs:
- - file-check
- runs-on: ubuntu-latest
- strategy:
- matrix:
- platform:
- - linux/amd64
- - linux/i386
- - linux/arm/v7
- - linux/arm64
- - linux/ppc64le
- # Fail fast on releases, but run everything to completion on other triggers.
- fail-fast: ${{ github.event_name == 'workflow_dispatch' }}
- steps:
- - name: Skip Check
- id: skip
- if: needs.file-check.outputs.run != 'true'
- run: echo "SKIPPED"
- - name: Checkout
- id: checkout
- if: needs.file-check.outputs.run == 'true'
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Generate Artifact Name
- id: artifact-name
- if: github.repository == 'netdata/netdata' && needs.file-check.outputs.run == 'true' && github.event_name == 'workflow_dispatch'
- run: echo "platform=$(echo ${{ matrix.platform }} | tr '/' '-' | cut -f 2- -d '-')" >> "${GITHUB_OUTPUT}"
- - name: Mark image as official
- id: env
- if: github.repository == 'netdata/netdata' && needs.file-check.outputs.run == 'true' && github.event_name == 'workflow_dispatch'
- run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
- - name: Setup QEMU
- id: qemu
- if: matrix.platform != 'linux/i386' && matrix.platform != 'linux/amd64' && needs.file-check.outputs.run == 'true'
- uses: docker/setup-qemu-action@v3
- - name: Setup Buildx
- id: prepare
- if: needs.file-check.outputs.run == 'true'
- uses: docker/setup-buildx-action@v3
- - name: Build Image
- id: build
- if: needs.file-check.outputs.run == 'true'
- uses: docker/build-push-action@v6
- with:
- platforms: ${{ matrix.platform }}
- tags: netdata/netdata:test
- load: true
- cache-to: type=local,dest=/tmp/build-cache,mode=max
- build-args: |
- OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
- EXTRA_INSTALL_OPTS=${{ needs.file-check.outputs.skip-go }}
- - name: Test Image
- id: test
- if: needs.file-check.outputs.run == 'true' && matrix.platform == 'linux/amd64'
- run: .github/scripts/docker-test.sh
- - name: Upload Cache
- id: upload-cache
- if: github.repository == 'netdata/netdata' && needs.file-check.outputs.run == 'true' && github.event_name == 'workflow_dispatch'
- uses: actions/upload-artifact@v4.4.2
- with:
- name: cache-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/build-cache/*
- retention-days: 1
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Docker build failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Building or testing Docker image for ${{ matrix.platform }} failed.
- Checkout: ${{ steps.checkout.outcome }}
- Determine artifact name: ${{ steps.artifact-name.outcome }}
- Setup environment: ${{ steps.env.outcome }}
- Setup QEMU: ${{ steps.qemu.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Build image: ${{ steps.build.outcome }}
- Test image: ${{ steps.test.outcome }}
- Upload build cache: ${{ steps.upload-cache.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.event_name != 'pull_request'
- && github.repository == 'netdata/netdata'
- && needs.file-check.outputs.run == 'true'
- }}
- gen-tags:
- name: Generate Docker Tags
- runs-on: ubuntu-latest
- if: github.event_name == 'workflow_dispatch'
- outputs:
- tags: ${{ steps.tag.outputs.tags }}
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- - name: Generate Tags
- id: tag
- run: |
- if [ ${{ github.event_name }} = 'workflow_dispatch' ]; then
- echo "tags=$(.github/scripts/gen-docker-tags.py ${{ github.event_name }} ${{ github.event.inputs.version }})" >> "${GITHUB_OUTPUT}"
- else
- echo "tags=$(.github/scripts/gen-docker-tags.py ${{ github.event_name }} '')" >> "${GITHUB_OUTPUT}"
- fi
- build-images-docker-hub:
- name: Push Images to Docker Hub
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images
- - gen-tags
- strategy:
- matrix:
- platform:
- - linux/amd64
- - linux/i386
- - linux/arm/v7
- - linux/arm64
- - linux/ppc64le
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Generate Artifact Name
- id: artifact-name
- run: echo "platform=$(echo ${{ matrix.platform }} | tr '/' '-' | cut -f 2- -d '-')" >> "${GITHUB_OUTPUT}"
- - name: Download Cache
- id: fetch-cache
- uses: actions/download-artifact@v4
- with:
- name: cache-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/build-cache
- - name: Mark image as official
- id: env
- if: github.repository == 'netdata/netdata'
- run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
- - name: Setup QEMU
- id: qemu
- if: matrix.platform != 'linux/i386' && matrix.platform != 'linux/amd64'
- uses: docker/setup-qemu-action@v3
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKER_HUB_USERNAME }}
- password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- - name: Build Image
- id: build
- uses: docker/build-push-action@v6
- with:
- platforms: ${{ matrix.platform }}
- cache-from: type=local,src=/tmp/build-cache
- outputs: type=image,name=netdata/netdata,push-by-digest=true,name-canonical=true,push=true
- build-args: OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
- - name: Export Digest
- id: export-digest
- if: github.repository == 'netdata/netdata'
- run: |
- mkdir -p /tmp/digests
- digest="${{ steps.build.outputs.digest }}"
- touch "/tmp/digests/${digest#sha256:}"
- - name: Upload digest
- id: upload-digest
- if: github.repository == 'netdata/netdata'
- uses: actions/upload-artifact@v4.4.2
- with:
- name: docker-digests-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/digests/*
- if-no-files-found: error
- retention-days: 1
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Docker Hub upload failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Creating or uploading Docker image for ${{ matrix.platform }} on Docker Hub failed.
- Checkout: ${{ steps.checkout.outcome }}
- Determine artifact name: ${{ steps.artifact-name.outcome }}
- Fetch build cache: ${{ steps.fetch-cache.outcome }}
- Setup environment: ${{ steps.env.outcome }}
- Setup QEMU: ${{ steps.qemu.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Build image: ${{ steps.build.outcome }}
- Export digest: ${{ steps.export-digest.outcome }}
- Upload digest: ${{ steps.upload-digest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- publish-docker-hub:
- name: Consolidate and tag images for DockerHub
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images-docker-hub
- - gen-tags
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- - name: Download digests
- id: fetch-digests
- uses: actions/download-artifact@v4
- with:
- path: /tmp/digests
- pattern: docker-digests-*
- merge-multiple: true
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- username: ${{ secrets.DOCKER_HUB_USERNAME }}
- password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- - name: Create and Push Manifest
- id: manifest
- if: github.repository == 'netdata/netdata'
- run: docker buildx imagetools create $(.github/scripts/gen-docker-imagetool-args.py /tmp/digests '' "${{ needs.gen-tags.outputs.tags }}")
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Publishing Docker images to Docker Hub failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Publishing Docker images to Docker Hub failed.
- Checkout: ${{ steps.checkout.outcome }}
- Download digests: ${{ steps.fetch-digests.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Create and push manifest: ${{ steps.manifest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- build-images-quay:
- name: Push Images to Quay.io
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images
- - gen-tags
- strategy:
- matrix:
- platform:
- - linux/amd64
- - linux/i386
- - linux/arm/v7
- - linux/arm64
- - linux/ppc64le
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Generate Artifact Name
- id: artifact-name
- run: echo "platform=$(echo ${{ matrix.platform }} | tr '/' '-' | cut -f 2- -d '-')" >> "${GITHUB_OUTPUT}"
- - name: Download Cache
- id: fetch-cache
- uses: actions/download-artifact@v4
- with:
- name: cache-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/build-cache
- - name: Mark image as official
- id: env
- if: github.repository == 'netdata/netdata'
- run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
- - name: Setup QEMU
- id: qemu
- if: matrix.platform != 'linux/i386' && matrix.platform != 'linux/amd64'
- uses: docker/setup-qemu-action@v3
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- registry: quay.io
- username: ${{ secrets.NETDATABOT_QUAY_USERNAME }}
- password: ${{ secrets.NETDATABOT_QUAY_TOKEN }}
- - name: Build Image
- id: build
- uses: docker/build-push-action@v6
- with:
- platforms: ${{ matrix.platform }}
- cache-from: type=local,src=/tmp/build-cache
- build-args: OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
- outputs: type=image,name=quay.io/netdata/netdata,push-by-digest=true,name-canonical=true,push=true
- - name: Export Digest
- id: export-digest
- if: github.repository == 'netdata/netdata'
- run: |
- mkdir -p /tmp/digests
- digest="${{ steps.build.outputs.digest }}"
- touch "/tmp/digests/${digest#sha256:}"
- - name: Upload digest
- id: upload-digest
- if: github.repository == 'netdata/netdata'
- uses: actions/upload-artifact@v4.4.2
- with:
- name: quay-digests-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/digests/*
- if-no-files-found: error
- retention-days: 1
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Quay.io upload failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Creating or uploading Docker image for ${{ matrix.platform }} on Quay.io failed.
- Checkout: ${{ steps.checkout.outcome }}
- Determine artifact name: ${{ steps.artifact-name.outcome }}
- Fetch build cache: ${{ steps.fetch-cache.outcome }}
- Setup environment: ${{ steps.env.outcome }}
- Setup QEMU: ${{ steps.qemu.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Build image: ${{ steps.build.outcome }}
- Export digest: ${{ steps.export-digest.outcome }}
- Upload digest: ${{ steps.upload-digest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- publish-quay:
- name: Consolidate and tag images for Quay.io
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images-quay
- - gen-tags
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- - name: Download digests
- id: fetch-digests
- uses: actions/download-artifact@v4
- with:
- path: /tmp/digests
- pattern: quay-digests-*
- merge-multiple: true
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- registry: quay.io
- username: ${{ secrets.NETDATABOT_QUAY_USERNAME }}
- password: ${{ secrets.NETDATABOT_QUAY_TOKEN }}
- - name: Create and Push Manifest
- id: manifest
- if: github.repository == 'netdata/netdata'
- run: docker buildx imagetools create $(.github/scripts/gen-docker-imagetool-args.py /tmp/digests 'quay.io' "${{ needs.gen-tags.outputs.tags }}")
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Publishing Docker images on Quay.io failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Publishing Docker images on Quay.io failed.
- Checkout: ${{ steps.checkout.outcome }}
- Download digests: ${{ steps.fetch-digests.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Create and push manifest: ${{ steps.manifest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- build-images-ghcr:
- name: Push Images to GHCR
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images
- - gen-tags
- strategy:
- matrix:
- platform:
- - linux/amd64
- - linux/i386
- - linux/arm/v7
- - linux/arm64
- - linux/ppc64le
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- submodules: recursive
- - name: Generate Artifact Name
- id: artifact-name
- run: echo "platform=$(echo ${{ matrix.platform }} | tr '/' '-' | cut -f 2- -d '-')" >> "${GITHUB_OUTPUT}"
- - name: Download Cache
- id: fetch-cache
- uses: actions/download-artifact@v4
- with:
- name: cache-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/build-cache
- - name: Mark image as official
- id: env
- if: github.repository == 'netdata/netdata'
- run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
- - name: Setup QEMU
- id: qemu
- if: matrix.platform != 'linux/i386' && matrix.platform != 'linux/amd64'
- uses: docker/setup-qemu-action@v3
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.repository_owner }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Build Image
- id: build
- uses: docker/build-push-action@v6
- with:
- platforms: ${{ matrix.platform }}
- cache-from: type=local,src=/tmp/build-cache
- build-args: OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
- outputs: type=image,name=ghcr.io/netdata/netdata,push-by-digest=true,name-canonical=true,push=true
- - name: Export Digest
- id: export-digest
- if: github.repository == 'netdata/netdata'
- run: |
- mkdir -p /tmp/digests
- digest="${{ steps.build.outputs.digest }}"
- touch "/tmp/digests/${digest#sha256:}"
- - name: Upload digest
- id: upload-digest
- if: github.repository == 'netdata/netdata'
- uses: actions/upload-artifact@v4.4.2
- with:
- name: ghcr-digests-${{ steps.artifact-name.outputs.platform }}
- path: /tmp/digests/*
- if-no-files-found: error
- retention-days: 1
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'GHCR upload failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Creating or uploading Docker image for ${{ matrix.platform }} on GHCR failed.
- Checkout: ${{ steps.checkout.outcome }}
- Determine artifact name: ${{ steps.artifact-name.outcome }}
- Fetch build cache: ${{ steps.fetch-cache.outcome }}
- Setup environment: ${{ steps.env.outcome }}
- Setup QEMU: ${{ steps.qemu.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Build image: ${{ steps.build.outcome }}
- Export digest: ${{ steps.export-digest.outcome }}
- Upload digest: ${{ steps.upload-digest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- publish-ghcr:
- name: Consolidate and tag images for GHCR
- if: github.event_name == 'workflow_dispatch'
- needs:
- - build-images-ghcr
- - gen-tags
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- - name: Download digests
- id: fetch-digests
- uses: actions/download-artifact@v4
- with:
- path: /tmp/digests
- pattern: ghcr-digests-*
- merge-multiple: true
- - name: Setup Buildx
- id: prepare
- uses: docker/setup-buildx-action@v3
- - name: Registry Login
- id: login
- if: github.repository == 'netdata/netdata'
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.repository_owner }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Create and Push Manifest
- id: manifest
- if: github.repository == 'netdata/netdata'
- run: docker buildx imagetools create $(.github/scripts/gen-docker-imagetool-args.py /tmp/digests 'ghcr.io' "${{ needs.gen-tags.outputs.tags }}")
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: 'Publishing Docker images on GHCR failed:'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Publishing Docker images on GHCR failed.
- Checkout: ${{ steps.checkout.outcome }}
- Download digests: ${{ steps.fetch-digests.outcome }}
- Setup buildx: ${{ steps.prepare.outcome }}
- Login to registry: ${{ steps.login.outcome }}
- Create and push manifest: ${{ steps.manifest.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.repository == 'netdata/netdata'
- }}
- trigger-subsequent-workflows:
- if: github.event_name == 'workflow_dispatch'
- name: Trigger subsquent workflows for newly added versions
- needs:
- - publish-docker-hub
- - gen-tags
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- id: checkout
- uses: actions/checkout@v4
- with:
- submodules: recursive
- - name: Trigger Helmchart PR
- if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != 'nightly' && github.repository == 'netdata/netdata'
- id: trigger-helmchart
- uses: benc-uk/workflow-dispatch@v1
- with:
- token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
- repo: netdata/helmchart
- workflow: Agent Version PR
- ref: refs/heads/master
- inputs: '{"agent_version": "v${{ inputs.version }}"}'
- - name: Trigger MSI build
- if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != 'nightly' && github.repository == 'netdata/netdata'
- id: trigger-msi
- uses: benc-uk/workflow-dispatch@v1
- with:
- token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
- repo: netdata/msi-installer
- workflow: Build
- ref: refs/heads/master
- inputs: '{"tag": "stable", "pwd": "${{ secrets.MSI_CODE_SIGNING_PASSWORD }}"}'
- - name: Failure Notification
- uses: rtCamp/action-slack-notify@v2
- env:
- SLACK_COLOR: 'danger'
- SLACK_FOOTER: ''
- SLACK_ICON_EMOJI: ':github-actions:'
- SLACK_TITLE: ':'
- SLACK_USERNAME: 'GitHub Actions'
- SLACK_MESSAGE: |-
- ${{ github.repository }}: Version cascade failed
- Checkout: ${{ steps.checkout.outcome }}
- Trigger Helmchart PR: ${{ steps.trigger-helmchart.outcome }}
- Trigger MSI build: ${{ steps.trigger-msi.outcome }}
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
- if: >-
- ${{
- failure()
- && github.event_name != 'pull_request'
- && startsWith(github.ref, 'refs/heads/master')
- && github.repository == 'netdata/netdata'
- }}
|