test(go.d/collecttest): check flat config forms and, on request, opti… #25123
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| # Ci code for building release artifacts. | |
| name: Go Tests | |
| 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. | |
| concurrency: # This keeps multiple instances of the job from running concurrently for the same ref and event type. | |
| group: go-test-${{ 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@v7 | |
| with: | |
| fetch-depth: 0 | |
| submodules: recursive | |
| - name: Check files | |
| id: check-files | |
| uses: step-security/changed-files@v45 | |
| with: | |
| since_last_remote_commit: ${{ github.event_name != 'pull_request' }} | |
| files: | | |
| **/*.cmake | |
| CMakeLists.txt | |
| .github/workflows/go-tests.yml | |
| packaging/cmake/ | |
| src/go/** | |
| src/health/notifications/alarm-notify/** | |
| src/collectors/cgroups.plugin/cgroup-name/** | |
| src/collectors/ebpf.plugin/ebpfgo.plugin/** | |
| files_ignore: | | |
| **/*.md | |
| src/go/**/metadata.yaml | |
| src/collectors/ebpf.plugin/ebpfgo.plugin/metadata.yaml | |
| packaging/repoconfig/ | |
| - name: List all changed files in pattern | |
| continue-on-error: true | |
| env: | |
| ALL_CHANGED_FILES: ${{ steps.check-files.outputs.all_changed_files }} | |
| run: | | |
| for file in ${ALL_CHANGED_FILES}; do | |
| echo "$file was changed" | |
| done | |
| - name: Check Run | |
| id: check-run | |
| run: | | |
| if [ "${{ steps.check-files.outputs.any_modified }}" == "true" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | |
| echo 'run=true' >> "${GITHUB_OUTPUT}" | |
| else | |
| echo 'run=false' >> "${GITHUB_OUTPUT}" | |
| fi | |
| matrix: | |
| name: Generate Build Matrix | |
| runs-on: ubuntu-latest | |
| outputs: | |
| matrix: ${{ steps.get-version.outputs.matrix }} | |
| build_matrix: ${{ steps.get-version.outputs.build_matrix }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update || true | |
| sudo apt-get install -y python3-packaging | |
| - name: Get Go version and modules | |
| id: get-version | |
| run: .github/scripts/get-go-version.py | |
| tests: | |
| name: Go toolchain tests | |
| runs-on: ubuntu-latest | |
| needs: | |
| - file-check | |
| - matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: ${{ fromJson(needs.matrix.outputs.matrix) }} | |
| steps: | |
| - name: Skip Check | |
| id: skip | |
| if: needs.file-check.outputs.run != 'true' | |
| run: echo "SKIPPED" | |
| - name: Install Go | |
| uses: actions/setup-go@v7 | |
| with: | |
| go-version: ${{ matrix.version }} | |
| - name: Checkout | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| - name: Go mod download | |
| if: needs.file-check.outputs.run == 'true' | |
| run: go mod download | |
| working-directory: ${{ matrix.module }} | |
| - name: Install CGO system dependencies | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y unixodbc-dev | |
| - name: Compile | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| CGO_ENABLED=0 go build -o /tmp/go-test-build ${{ matrix.build_target }} | |
| /tmp/go-test-build --help || true | |
| working-directory: ${{ matrix.module }} | |
| - name: Go fmt | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| go fmt ./... | tee modified-files | |
| [ "$(wc -l modified-files | cut -f 1 -d ' ')" -eq 0 ] || exit 1 | |
| working-directory: ${{ matrix.module }} | |
| # Re-enable after the Go 1.27 go fix source migration is applied and reviewed. | |
| # - name: Go fix | |
| # if: needs.file-check.outputs.run == 'true' | |
| # run: | | |
| # go fix ./... | |
| # git diff --exit-code | |
| # working-directory: ${{ matrix.module }} | |
| - name: Go vet | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| CGO_ENABLED=0 go vet -tests=false ./... | |
| working-directory: ${{ matrix.module }} | |
| - name: Set up gotestfmt | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: GoTestTools/gotestfmt-action@eba2ac97f623e866e7b1b117c99f18b43cd36d18 # v2.3.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| version: v2.2.0 | |
| - name: Go test | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| set -euo pipefail | |
| # The race detector requires CGO; explicitly enable it to avoid go emitting | |
| # non-JSON diagnostics that crash gotestfmt when CGO is disabled upstream. | |
| # Some toolchain output still lacks package metadata, so normalize the stream | |
| # before passing it to gotestfmt. | |
| CGO_ENABLED=1 go test -json ./... -race -count=1 2>&1 \ | |
| | "$GITHUB_WORKSPACE/.github/scripts/normalize-go-test-json.py" \ | |
| | gotestfmt -hide all | |
| working-directory: ${{ matrix.module }} | |
| ebpf-libbpf-tests: | |
| name: Go ebpf libbpf-tagged tests | |
| runs-on: ubuntu-latest | |
| needs: | |
| - file-check | |
| steps: | |
| - name: Skip Check | |
| id: skip | |
| if: needs.file-check.outputs.run != 'true' | |
| run: echo "SKIPPED" | |
| - name: Checkout | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 | |
| with: | |
| submodules: recursive | |
| - name: Install Go | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 | |
| with: | |
| go-version-file: src/collectors/ebpf.plugin/ebpfgo.plugin/go.mod | |
| - name: Install libbpf | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| sudo apt-get update | |
| # libbpf-dev and linux-headers-generic satisfy the libbpf >= 1 + linux/btf.h | |
| # compile-time check in cachestat_libbpf.c, and provide the libbpf the test | |
| # binaries link against. libelf-dev and zlib1g-dev are libbpf's own link | |
| # dependencies, installed explicitly instead of relying on transitive deps. | |
| # BPF skeleton headers (*.skel.h) are generated by `bpftool gen skeleton` from | |
| # compiled BPF objects, which requires a full BPF toolchain not available on | |
| # standard CI runners. NETDATA_CACHESTAT_HAS_SKELETON is intentionally absent | |
| # here; the CO-RE load path is excluded and only the legacy kprobe path is | |
| # compiled and tested. | |
| sudo apt-get install -y libbpf-dev libelf-dev zlib1g-dev linux-headers-generic | |
| - name: Go mod download | |
| if: needs.file-check.outputs.run == 'true' | |
| run: go mod download | |
| working-directory: src/collectors/ebpf.plugin/ebpfgo.plugin | |
| - name: Set up gotestfmt | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: GoTestTools/gotestfmt-action@eba2ac97f623e866e7b1b117c99f18b43cd36d18 # v2.3.0 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| version: v2.2.0 | |
| - name: Go test (libbpf tag) | |
| if: needs.file-check.outputs.run == 'true' | |
| env: | |
| # The libbpfloader package declares no `#cgo LDFLAGS`; the production build | |
| # passes them via CGO_LDFLAGS from CMake (EBPF_GO_CGO_LDFLAGS), pointing at the | |
| # vendored libbpf. Mirror that here without the vendored -L, so the test | |
| # binaries link against the distro libbpf installed above. | |
| CGO_LDFLAGS: -lbpf -lelf -lz | |
| run: | | |
| set -euo pipefail | |
| CGO_ENABLED=1 go test -tags 'netdata_ebpf_libbpf netdata_ebpf_test' -json ./... -race -count=1 2>&1 \ | |
| | "$GITHUB_WORKSPACE/.github/scripts/normalize-go-test-json.py" \ | |
| | gotestfmt -hide all | |
| working-directory: src/collectors/ebpf.plugin/ebpfgo.plugin | |
| build-tests: | |
| name: Go build tests | |
| runs-on: ubuntu-latest | |
| needs: | |
| - file-check | |
| - matrix | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platforms: | |
| - linux/386 | |
| - linux/amd64 | |
| - linux/arm | |
| - linux/arm64 | |
| - linux/ppc64le | |
| - windows/amd64 | |
| include: ${{ fromJson(needs.matrix.outputs.build_matrix) }} | |
| steps: | |
| - name: Skip Check | |
| id: skip | |
| if: needs.file-check.outputs.run != 'true' | |
| run: echo "SKIPPED" | |
| - name: Install Go | |
| uses: actions/setup-go@v7 | |
| with: | |
| go-version: ${{ matrix.version }} | |
| - name: Checkout | |
| if: needs.file-check.outputs.run == 'true' | |
| uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| - name: Set GOOS and GOARCH | |
| run: | | |
| echo "GOOS=$(echo "${{ matrix.platform }}" | cut -f 1 -d '/')" >> "${GITHUB_ENV}" | |
| echo "GOARCH=$(echo "${{ matrix.platform }}" | cut -f 2 -d '/')" >> "${GITHUB_ENV}" | |
| - name: Go mod download | |
| if: needs.file-check.outputs.run == 'true' | |
| run: go mod download | |
| working-directory: ${{ matrix.module }} | |
| - name: Compile | |
| if: needs.file-check.outputs.run == 'true' | |
| run: | | |
| CGO_ENABLED=0 go build -o /tmp/go-test-build ${{ matrix.build_target }} | |
| working-directory: ${{ matrix.module }} |