summaryrefslogtreecommitdiffstats
path: root/.github/workflows/docker.yml
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 02:57:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 02:57:58 +0000
commitbe1c7e50e1e8809ea56f2c9d472eccd8ffd73a97 (patch)
tree9754ff1ca740f6346cf8483ec915d4054bc5da2d /.github/workflows/docker.yml
parentInitial commit. (diff)
downloadnetdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.tar.xz
netdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.zip
Adding upstream version 1.44.3.upstream/1.44.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '.github/workflows/docker.yml')
-rw-r--r--.github/workflows/docker.yml413
1 files changed, 413 insertions, 0 deletions
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
new file mode 100644
index 00000000..b7fe0a86
--- /dev/null
+++ b/.github/workflows/docker.yml
@@ -0,0 +1,413 @@
+---
+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 }}
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ submodules: recursive
+ - name: Check files
+ id: file-check
+ uses: tj-actions/changed-files@v40
+ with:
+ since_last_remote_commit: ${{ github.event_name != 'pull_request' }}
+ files: |
+ **.c
+ **.cc
+ **.h
+ **.hh
+ **.in
+ .dockerignore
+ configure.ac
+ netdata-installer.sh
+ **/Makefile*
+ Makefile*
+ .github/workflows/docker.yml
+ .github/scripts/docker-test.sh
+ build/**
+ packaging/docker/**
+ packaging/installer/**
+ aclk/aclk-schemas/
+ ml/dlib/
+ mqtt_websockets
+ web/server/h2o/libh2o
+ files_ignore: |
+ netdata.spec.in
+ **.md
+ - name: Check Run
+ id: check-run
+ run: |
+ if [ "${{ steps.file-check.outputs.any_modified }}" == "true" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
+ echo 'run=true' >> "${GITHUB_OUTPUT}"
+ else
+ echo 'run=false' >> "${GITHUB_OUTPUT}"
+ fi
+
+ docker-test:
+ name: Docker Runtime Test
+ needs:
+ - file-check
+ runs-on: ubuntu-latest
+ 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:
+ submodules: recursive
+ - name: Setup Buildx
+ id: prepare
+ if: needs.file-check.outputs.run == 'true'
+ uses: docker/setup-buildx-action@v3
+ - name: Test Build
+ id: build
+ if: needs.file-check.outputs.run == 'true'
+ uses: docker/build-push-action@v5
+ with:
+ load: true
+ push: false
+ tags: netdata/netdata:test
+ - name: Test Image
+ id: test
+ if: needs.file-check.outputs.run == 'true'
+ run: .github/scripts/docker-test.sh
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Docker runtime testing failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Building or testing Docker image for linux/amd64 failed.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Setup buildx: ${{ steps.prepare.outcome }}
+ Build image: ${{ steps.build.outcome }}
+ Test image: ${{ steps.test.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.repository == 'netdata/netdata'
+ && needs.file-check.outputs.run == 'true'
+ }}
+
+ docker-ci:
+ if: github.event_name != 'workflow_dispatch'
+ name: Docker Alt Arch Builds
+ needs:
+ - docker-test
+ - file-check
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ platforms:
+ - linux/i386
+ - linux/arm/v7
+ - linux/arm64
+ - linux/ppc64le
+ 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:
+ submodules: recursive
+ - name: Setup QEMU
+ id: qemu
+ if: matrix.platforms != 'linux/i386' && needs.file-check.outputs.run == 'true'
+ uses: docker/setup-qemu-action@v3
+ - name: Setup Buildx
+ id: buildx
+ if: needs.file-check.outputs.run == 'true'
+ uses: docker/setup-buildx-action@v3
+ - name: Build
+ id: build
+ if: needs.file-check.outputs.run == 'true'
+ uses: docker/build-push-action@v5
+ with:
+ platforms: ${{ matrix.platforms }}
+ load: false
+ push: false
+ tags: netdata/netdata:test
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Docker build testing failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Building Docker image for ${{ matrix.platforms }} failed.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup buildx: ${{ steps.buildx.outcome }}
+ Build image: ${{ steps.build.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.repository == 'netdata/netdata'
+ && needs.file-check.outputs.run == 'true'
+ }}
+
+ normalize-tag: # Fix the release tag if needed
+ name: Normalize Release Tag
+ runs-on: ubuntu-latest
+ if: github.event_name == 'workflow_dispatch'
+ outputs:
+ tag: ${{ steps.tag.outputs.tag }}
+ steps:
+ - name: Normalize Tag
+ id: tag
+ run: |
+ if echo ${{ github.event.inputs.version }} | grep -qE '^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$'; then
+ echo "tag=v${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
+ else
+ echo "tag=${{ github.event.inputs.version }}" >> "${GITHUB_OUTPUT}"
+ fi
+
+ docker-publish:
+ if: github.event_name == 'workflow_dispatch'
+ name: Docker Build and Publish
+ needs:
+ - docker-test
+ - normalize-tag
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ - name: Determine which tags to use
+ id: release-tags
+ if: github.event.inputs.version != 'nightly'
+ run: |
+ echo "tags=netdata/netdata:latest,netdata/netdata:stable,ghcr.io/netdata/netdata:latest,ghcr.io/netdata/netdata:stable,quay.io/netdata/netdata:latest,quay.io/netdata/netdata:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '')" \
+ >> "${GITHUB_ENV}"
+ - name: Determine which tags to use
+ id: nightly-tags
+ if: github.event.inputs.version == 'nightly'
+ run: |
+ echo "tags=netdata/netdata:latest,netdata/netdata:edge,ghcr.io/netdata/netdata:latest,ghcr.io/netdata/netdata:edge,quay.io/netdata/netdata:latest,quay.io/netdata/netdata:edge" >> "${GITHUB_ENV}"
+ - name: Mark image as official
+ id: env
+ if: github.repository == 'netdata/netdata'
+ run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
+ - name: Setup QEMU
+ id: qemu
+ uses: docker/setup-qemu-action@v3
+ - name: Setup Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Docker Hub Login
+ id: docker-hub-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKER_HUB_USERNAME }}
+ password: ${{ secrets.DOCKER_HUB_PASSWORD }}
+ - name: GitHub Container Registry Login
+ id: ghcr-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Quay.io Login
+ id: quay-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: Docker Build
+ id: build
+ uses: docker/build-push-action@v5
+ with:
+ platforms: linux/amd64,linux/i386,linux/arm/v7,linux/arm64,linux/ppc64le
+ push: ${{ github.repository == 'netdata/netdata' }}
+ tags: ${{ env.tags }}
+ build-args: OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
+ - 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 }}: Failed to build or publish Docker images.
+ CHeckout: ${{ steps.checkout.outcome }}
+ Generate release tags: ${{ steps.release-tags.outcome }}
+ Generate nightly tags: ${{ steps.nightly-tags.outcome }}
+ Setup environment: ${{ steps.env.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup buildx: ${{ steps.buildx.outcome }}
+ Login to DockerHub: ${{ steps.docker-hub-login.outcome }}
+ Login to GHCR: ${{ steps.ghcr-login.outcome }}
+ Login to Quay: ${{ steps.quay-login.outcome }}
+ Build and publish images: ${{ steps.build.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.repository == 'netdata/netdata'
+ }}
+ - name: Trigger Helmchart PR
+ if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != 'nightly' && github.repository == 'netdata/netdata'
+ 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": "${{ needs.normalize-tag.outputs.tag }}"}'
+ - name: Trigger MSI build
+ if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != 'nightly' && github.repository == 'netdata/netdata'
+ uses: benc-uk/workflow-dispatch@v1
+ with:
+ token: ${{ secrets.NETDATABOT_GITHUB_TOKEN }}
+ repo: netdata/msi-installer
+ workflow: Build
+ ref: refs/heads/master
+ inputs: '{"tag": "${{ needs.normalize-tag.outputs.tag }}", "pwd": "${{ secrets.MSI_CODE_SIGNING_PASSWORD }}"}'
+
+ docker-dbg-publish:
+ if: github.event_name == 'workflow_dispatch'
+ name: Docker Build and Publish (Debugging Image)
+ needs:
+ - docker-test
+ - normalize-tag
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ id: checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ - name: Determine which tags to use
+ id: release-tags
+ if: github.event.inputs.version != 'nightly'
+ run: |
+ echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:stable,ghcr.io/netdata/netdata-debug:latest,ghcr.io/netdata/netdata-debug:stable,quay.io/netdata/netdata-debug:latest,quay.io/netdata/netdata-debug:stable,$(.github/scripts/gen-docker-tags.py ${{ needs.normalize-tag.outputs.tag }} '-debug')" \
+ >> "${GITHUB_ENV}"
+ - name: Determine which tags to use
+ id: nightly-tags
+ if: github.event.inputs.version == 'nightly'
+ run: |
+ echo "tags=netdata/netdata-debug:latest,netdata/netdata-debug:edge,ghcr.io/netdata/netdata-debug:latest,ghcr.io/netdata/netdata-debug:edge,quay.io/netdata/netdata-debug:latest,quay.io/netdata/netdata-debug:edge" >> "${GITHUB_ENV}"
+ - name: Mark image as official
+ id: env
+ if: github.repository == 'netdata/netdata'
+ run: echo "OFFICIAL_IMAGE=true" >> "${GITHUB_ENV}"
+ - name: Setup QEMU
+ id: qemu
+ uses: docker/setup-qemu-action@v3
+ - name: Setup Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Docker Hub Login
+ id: docker-hub-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKER_HUB_USERNAME }}
+ password: ${{ secrets.DOCKER_HUB_PASSWORD }}
+ - name: GitHub Container Registry Login
+ id: ghcr-login
+ if: github.repository == 'netdata/netdata'
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Quay.io Login
+ id: quay-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: Docker Build
+ id: build
+ uses: docker/build-push-action@v5
+ with:
+ platforms: linux/amd64,linux/i386,linux/arm/v7,linux/arm64,linux/ppc64le
+ push: ${{ github.repository == 'netdata/netdata' }}
+ tags: ${{ env.tags }}
+ build-args: |
+ OFFICIAL_IMAGE=${{ env.OFFICIAL_IMAGE }}
+ DEBUG_BUILD=1
+ - name: Failure Notification
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: 'danger'
+ SLACK_FOOTER: ''
+ SLACK_ICON_EMOJI: ':github-actions:'
+ SLACK_TITLE: 'Docker Debug Build failed:'
+ SLACK_USERNAME: 'GitHub Actions'
+ SLACK_MESSAGE: |-
+ ${{ github.repository }}: Failed to build or publish Docker debug images.
+ Checkout: ${{ steps.checkout.outcome }}
+ Generate release tags: ${{ steps.release-tags.outcome }}
+ Generate nightly tags: ${{ steps.nightly-tags.outcome }}
+ Setup environment: ${{ steps.env.outcome }}
+ Setup QEMU: ${{ steps.qemu.outcome }}
+ Setup buildx: ${{ steps.buildx.outcome }}
+ Login to DockerHub: ${{ steps.docker-hub-login.outcome }}
+ Login to GHCR: ${{ steps.ghcr-login.outcome }}
+ Login to Quay: ${{ steps.quay-login.outcome }}
+ Build and publish images: ${{ steps.build.outcome }}
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ if: >-
+ ${{
+ failure()
+ && github.event_name != 'pull_request'
+ && startsWith(github.ref, 'refs/heads/master')
+ && github.repository == 'netdata/netdata'
+ }}