Skip to content

test(go.d/collecttest): check flat config forms and, on request, opti… #25123

test(go.d/collecttest): check flat config forms and, on request, opti…

test(go.d/collecttest): check flat config forms and, on request, opti… #25123

Workflow file for this run

---
# 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 }}