diff options
author | Austin S. Hemmelgarn <austin@netdata.cloud> | 2023-07-11 10:08:23 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-11 10:08:23 -0400 |
commit | a4b568f9047c7ab86d5d0c1e3813bd31b5befc06 (patch) | |
tree | 56991a0df67203ef90c189d99afa3f147f2091b9 /.github | |
parent | 7fba677e7806567ac78f95c8a1b57015e7676492 (diff) |
Attempt to more aggressively skip CI jobs on PRs if those jobs are irrelevant to the PR. (#15341)
* Skip checks workflow cleanly for non-code PRs.
* Skip build workflow for PRs that it is not relevant on.
* Skip docker CI workflow on PRs when it’s not relevant.
* Skip packaging workflow on PRs that it is not relevant for.
* Fix actionlint errors.
* Fix typos.
Diffstat (limited to '.github')
-rw-r--r-- | .github/workflows/build-dummy.yml | 141 | ||||
-rw-r--r-- | .github/workflows/build.yml | 26 | ||||
-rw-r--r-- | .github/workflows/checks-dummy.yml | 42 | ||||
-rw-r--r-- | .github/workflows/checks.yml | 36 | ||||
-rw-r--r-- | .github/workflows/docker-dummy.yml | 51 | ||||
-rw-r--r-- | .github/workflows/docker.yml | 24 | ||||
-rw-r--r-- | .github/workflows/packaging-dummy.yml | 81 | ||||
-rw-r--r-- | .github/workflows/packaging.yml | 23 |
8 files changed, 421 insertions, 3 deletions
diff --git a/.github/workflows/build-dummy.yml b/.github/workflows/build-dummy.yml new file mode 100644 index 0000000000..50f3d90a00 --- /dev/null +++ b/.github/workflows/build-dummy.yml @@ -0,0 +1,141 @@ +--- +# Ci code for building release artifacts. +# +# This workflow exists so we can require these checks to pass, but skip +# them on PRs that have nothing to do with the source code. +name: Build +on: + pull_request: # PR checks only validate the build and generate artifacts for testing. + paths-ignore: # This MUST be kept in-sync with the paths-ignore key for the build-dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.in' + - 'configure.ac' + - 'netdata-installer.sh' + - '**/Makefile*' + - 'Makefile*' + - '.github/workflows/build.yml' + - '.github/scripts/build-static.sh' + - '.github/scripts/get-static-cache-key.sh' + - '.github/scripts/gen-matrix-build.py' + - '.github/scripts/run-updater-check.sh' + - 'build/**' + - 'packaging/makeself/**' + - 'packaging/installer/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' + - '!**.md' +concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type. + group: build-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true +jobs: + build-dist: # Build the distribution tarball and store it as an artifact. + name: Build Distribution Tarball + runs-on: ubuntu-latest + steps: + - run: echo 'NOT REQUIRED' + + build-static: # Build the static binary archives, and store them as artifacts. + name: Build Static + runs-on: ubuntu-latest + strategy: + matrix: + arch: + - x86_64 + - armv7l + - aarch64 + - ppc64le + steps: + - run: echo 'NOT REQUIRED' + + matrix: # Generate the shared build matrix for our build tests. + name: Prepare Build Matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v3 + - name: Prepare tools + id: prepare + run: | + sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml + - name: Read build matrix + id: set-matrix + run: | + matrix="$(.github/scripts/gen-matrix-build.py)" + echo "Generated matrix: ${matrix}" + echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}" + + prepare-test-images: # Prepare the test environments for our build checks. This also checks dependency handling code for each tested environment. + name: Prepare Test Environments + runs-on: ubuntu-latest + needs: + - matrix + env: + RETRY_DELAY: 300 + strategy: + # Unlike the actual build tests, this completes _very_ fast (average of about 3 minutes for each job), so we + # just run everything in parallel instead lof limiting job concurrency. + fail-fast: false + matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} + steps: + - run: echo 'NOT REQUIRED' + + source-build: # Test various source build arrangements. + name: Test Source Build + runs-on: ubuntu-latest + needs: + - matrix + - prepare-test-images + strategy: + fail-fast: false + max-parallel: 8 + matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} + steps: + - run: echo 'NOT REQUIRED' + + updater-check: # Test the generated dist archive using the updater code. + name: Test Generated Distfile and Updater Code + runs-on: ubuntu-latest + needs: + - build-dist + - matrix + - prepare-test-images + strategy: + fail-fast: false + max-parallel: 8 + matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} + steps: + - run: echo 'NOT REQUIRED' + + prepare-upload: # Consolidate the artifacts for uploading or releasing. + name: Prepare Artifacts + runs-on: ubuntu-latest + needs: + - build-dist + - build-static + steps: + - run: echo 'NOT REQUIRED' + + artifact-verification-dist: # Verify the regular installer works with the consolidated artifacts. + name: Test Consolidated Artifacts (Source) + runs-on: ubuntu-latest + needs: + - prepare-upload + steps: + - run: echo 'NOT REQUIRED' + + artifact-verification-static: # Verify the static installer works with the consolidated artifacts. + name: Test Consolidated Artifacts (Static) + runs-on: ubuntu-latest + needs: + - prepare-upload + steps: + - run: echo 'NOT REQUIRED' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da828f51e5..114eb2c53f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,31 @@ on: push: # Master branch checks only validate the build and generate artifacts for testing. branches: - master - pull_request: null # PR checks only validate the build and generate artifacts for testing. + pull_request: # PR checks only validate the build and generate artifacts for testing. + paths: # This MUST be kept in-sync with the paths-ignore key for the build-dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.in' + - 'configure.ac' + - 'netdata-installer.sh' + - '**/Makefile*' + - 'Makefile*' + - '.github/workflows/build.yml' + - '.github/scripts/build-static.sh' + - '.github/scripts/get-static-cache-key.sh' + - '.github/scripts/gen-matrix-build.py' + - '.github/scripts/run-updater-check.sh' + - 'build/**' + - 'packaging/makeself/**' + - 'packaging/installer/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' + - '!**.md' workflow_dispatch: # Dispatch runs build and validate, then push to the appropriate storage location. inputs: type: diff --git a/.github/workflows/checks-dummy.yml b/.github/workflows/checks-dummy.yml new file mode 100644 index 0000000000..369d70ff91 --- /dev/null +++ b/.github/workflows/checks-dummy.yml @@ -0,0 +1,42 @@ +--- +name: Checks +on: + pull_request: + paths-ignore: # This MUST be kept in sync with the paths key for the checks.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.in' + - 'configure.ac' + - '**/Makefile*' + - 'Makefile*' + - '.gitignore' + - '.github/workflows/checks.yml' + - 'build/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' +env: + DISABLE_TELEMETRY: 1 +concurrency: + group: checks-${{ github.ref }} + cancel-in-progress: true +jobs: + libressl-checks: + name: LibreSSL + runs-on: ubuntu-latest + steps: + - run: "echo 'NOT REQUIRED'" + clang-checks: + name: Clang + runs-on: ubuntu-latest + steps: + - run: "echo 'NOT REQUIRED'" + gitignore-check: + name: .gitignore + runs-on: ubuntu-latest + steps: + - run: "echo 'NOT REQUIRED'" diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 799f8d991a..4c892ffce8 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -2,9 +2,43 @@ name: Checks on: push: + paths: + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.in' + - 'configure.ac' + - '**/Makefile*' + - 'Makefile*' + - '.gitignore' + - '.github/workflows/checks.yml' + - 'build/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' branches: - master - pull_request: null + pull_request: + paths: # This MUST be kept in-sync with the paths-ignore key for the checks-dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.in' + - 'configure.ac' + - '**/Makefile*' + - 'Makefile*' + - '.gitignore' + - '.github/workflows/checks.yml' + - 'build/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' env: DISABLE_TELEMETRY: 1 concurrency: diff --git a/.github/workflows/docker-dummy.yml b/.github/workflows/docker-dummy.yml new file mode 100644 index 0000000000..64131dac56 --- /dev/null +++ b/.github/workflows/docker-dummy.yml @@ -0,0 +1,51 @@ +--- +name: Docker +on: + pull_request: + paths-ignore: # This MUST be kept in-sync with the paths key for the dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.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' + - '!**.md' +env: + DISABLE_TELEMETRY: 1 +concurrency: + group: docker-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true +jobs: + docker-test: + name: Docker Runtime Test + runs-on: ubuntu-latest + steps: + - run: echo 'NOT REQUIRED' + + docker-ci: + name: Docker Alt Arch Builds + needs: docker-test + runs-on: ubuntu-latest + strategy: + matrix: + platforms: + - linux/i386 + - linux/arm/v7 + - linux/arm64 + - linux/ppc64le + steps: + - run: echo 'NOT REQUIRED' diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5eec3df740..aad83ced57 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,7 +4,29 @@ on: push: branches: - master - pull_request: null + pull_request: + paths: # This MUST be kept in-sync with the paths-ignore key for the docker-dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - '!netdata.spec.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' + - '!**.md' workflow_dispatch: inputs: version: diff --git a/.github/workflows/packaging-dummy.yml b/.github/workflows/packaging-dummy.yml new file mode 100644 index 0000000000..e0b28f2dc9 --- /dev/null +++ b/.github/workflows/packaging-dummy.yml @@ -0,0 +1,81 @@ +--- +# Handles building of binary packages for the agent. +# +# This workflow exists so that we can make these required checks but +# still skip running them on PRs where they are not relevant. +name: Packages +on: + pull_request: + types: + - opened + - reopened + - labeled + - synchronize + paths-ignore: # This MUST be kept in-sync with the paths key for the packaging.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - 'netdata.spec.in' + - 'configure.ac' + - '**/Makefile*' + - 'Makefile*' + - '.github/workflows/packaging.yml' + - '.github/scripts/gen-matrix-packaging.py' + - '.github/scripts/pkg-test.sh' + - 'build/**' + - 'packaging/*.sh' + - 'packaging/*.checksums' + - 'packaging/*.version' + - 'contrib/debian/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' + - '!**.md' +env: + DISABLE_TELEMETRY: 1 + REPO_PREFIX: netdata/netdata +concurrency: + group: packages-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true +jobs: + matrix: + name: Prepare Build Matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v3 + - name: Prepare tools + id: prepare + run: | + sudo apt-get update && sudo apt-get install -y python3-ruamel.yaml + - name: Read build matrix + id: set-matrix + run: | + if [ "${{ github.event_name }}" = "pull_request" ] && \ + [ "${{ !contains(github.event.pull_request.labels.*.name, 'run-ci/packaging') }}" = "true" ]; then + matrix="$(.github/scripts/gen-matrix-packaging.py 1)" + else + matrix="$(.github/scripts/gen-matrix-packaging.py 0)" + fi + echo "Generated matrix: ${matrix}" + echo "matrix=${matrix}" >> "${GITHUB_OUTPUT}" + + build: + name: Build + runs-on: ubuntu-latest + env: + DOCKER_CLI_EXPERIMENTAL: enabled + needs: + - matrix + strategy: + matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} + fail-fast: false + max-parallel: 8 + steps: + - run: echo 'NOT REQUIRED' diff --git a/.github/workflows/packaging.yml b/.github/workflows/packaging.yml index a8d5028476..7e8c7e527a 100644 --- a/.github/workflows/packaging.yml +++ b/.github/workflows/packaging.yml @@ -8,6 +8,29 @@ on: - reopened - labeled - synchronize + paths: # This MUST be kept in-sync with the paths-ignore key for the packaging-dummy.yml workflow. + - '**.c' + - '**.cc' + - '**.h' + - '**.hh' + - '**.in' + - 'netdata.spec.in' + - 'configure.ac' + - '**/Makefile*' + - 'Makefile*' + - '.github/workflows/packaging.yml' + - '.github/scripts/gen-matrix-packaging.py' + - '.github/scripts/pkg-test.sh' + - 'build/**' + - 'packaging/*.sh' + - 'packaging/*.checksums' + - 'packaging/*.version' + - 'contrib/debian/**' + - 'aclk/aclk-schemas/' + - 'ml/dlib/' + - 'mqtt_websockets' + - 'web/server/h2o/libh2o' + - '!**.md' branches: - master push: |