diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b8b3f29..2a423bf 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -11,21 +11,8 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - run: docker build -t gmonbuildenv -f Dockerfile.buildenv . - - name: Build gmon - run: | - docker run --rm -v ${{ github.workspace }}:/src \ - -e GOFLAGS="-buildvcs=false" \ - -e BPF_CLANG="clang" \ - -e BPF_CFLAGS="-O2 -g -Wall -Werror" \ - gmonbuildenv \ - script/build.sh - - name: Format gmon - run: | - docker run --rm -v ${{ github.workspace }}:/src \ - -e GOFLAGS="-buildvcs=false" \ - gmonbuildenv \ - script/format.sh + - name: Build & Format + run: ./gmon.sh format - name: Check changes run: | if ! git diff --quiet || ! git diff --staged --quiet; then @@ -35,7 +22,4 @@ jobs: git diff --staged exit 1 fi - - run: docker build -t gmone2e -f Dockerfile.e2e . - - name: Run e2e tests - run: | - docker run --rm --privileged -v ${{ github.workspace }}/bin/gmon:/usr/bin/gmon -v /sys/kernel/debug:/sys/kernel/debug:ro gmone2e + - run: ./gmon.sh test diff --git a/Dockerfile.buildenv b/Dockerfile.buildenv deleted file mode 100644 index dce8896..0000000 --- a/Dockerfile.buildenv +++ /dev/null @@ -1,25 +0,0 @@ -FROM golang:1.22 -RUN if [ "$(uname -m)" != "x86_64" ]; then \ - echo "Unsupported CPU architecture! gmon supports only x86_64." >&2; \ - exit 1; \ - fi -RUN if [ "$(uname -r | cut -d'-' -f1)" \< "6.2.0" ]; then \ - echo "Unsupported kernel version! gmon supports kernel versions at least 6.2.0." >&2; \ - exit 1; \ - fi -RUN apt-get update && apt-get install -y \ - bcc \ - curl \ - llvm \ - clang \ - libbpf-dev \ - clang-format \ - build-essential \ - linux-headers-generic && \ - curl -L -o /tmp/bpftool.tar.gz https://github.com/libbpf/bpftool/releases/download/v7.3.0/bpftool-v7.3.0-amd64.tar.gz && \ - tar -xzf /tmp/bpftool.tar.gz -C /usr/bin/ && rm /tmp/bpftool.tar.gz && \ - chmod +x /usr/bin/bpftool && \ - go install honnef.co/go/tools/cmd/staticcheck@latest -WORKDIR /src -COPY ./go.mod ./go.mod -RUN go mod download diff --git a/Dockerfile.e2e b/Dockerfile.e2e deleted file mode 100644 index 30d35ad..0000000 --- a/Dockerfile.e2e +++ /dev/null @@ -1,7 +0,0 @@ -FROM gmonbuildenv:latest -WORKDIR /src/fixture -COPY ./fixture . -RUN go mod tidy && go build && install fixture /usr/bin/ -WORKDIR /src -COPY . . -CMD ["go", "test", "-v", "./..."] diff --git a/Makefile b/Makefile deleted file mode 100644 index 06afa98..0000000 --- a/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -.PHONY: all format test build - -all: format build - -format: - docker build -t gmonbuildenv -f Dockerfile.buildenv . - docker run --rm -v $(shell pwd):/src \ - -e GOFLAGS="-buildvcs=false" \ - gmonbuildenv \ - script/format.sh - -build: - docker build -t gmonbuildenv -f Dockerfile.buildenv . - docker run --rm -v $(shell pwd):/src \ - -e GOFLAGS="-buildvcs=false" \ - -e BPF_CLANG="clang" \ - -e BPF_CFLAGS="-O2 -g -Wall -Werror" \ - gmonbuildenv \ - script/build.sh - -test: - docker build -t gmonbuildenv -f Dockerfile.buildenv . - docker build -t gmone2e -f Dockerfile.e2e . - docker run --rm --privileged \ - -v ./bin/gmon:/usr/bin/gmon \ - -v /sys/kernel/debug:/sys/kernel/debug:ro \ - gmone2e diff --git a/README.md b/README.md index b0c900c..a0024bb 100644 --- a/README.md +++ b/README.md @@ -69,16 +69,8 @@ gmon_goroutine_uptime_count{stack_0="runtime.goexit",stack_1="main.main.gowrap1" Follow [the Docker installation guide](https://docs.docker.com/engine/install/#supported-platforms) to build and run tests. -Build - -```bash -make -# Ensure that the binary is created -./bin/gmon -help -``` - -Test - ```bash -make test +./gmon.sh build +./gmon.sh install +./gmon.sh test ``` diff --git a/gmon.sh b/gmon.sh new file mode 100755 index 0000000..3bf750c --- /dev/null +++ b/gmon.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +set -e -x + +arch=$(uname -m) +if [ "$arch" != "x86_64" ]; then + echo "Unsupported architecture: $arch" + exit 1 +fi + +if [ "$1" = "build" ] || [ "$1" = "install" ] || [ "$1" = "test" ] || [ "$1" = "format" ]; then + echo "Running $1 on $arch" +else + echo "Unsupported command: $1" + exit 1 +fi + +image_buildenv=gmon-buildenv-$arch +dockerfile_buildenv=$(mktemp) +cat > "$dockerfile_buildenv" < ./ebpf/c/vmlinux.h && \ + go generate -x ./... && \ + GOFLAGS="-buildvcs=false" CGO_ENABLED=0 go build -o /usr/src/bin/gmon' +if [ "$1" = "build" ]; then + exit 0 +fi + +if [ "$1" = "install" ]; then + sudo install ./bin/gmon /usr/bin/ + exit 0 +fi + +if [ "$1" = "format" ]; then + docker run --platform linux/$arch -i \ + -v $(pwd):/usr/src \ + --rm $image_buildenv bash -c '\ + go mod tidy && \ + go vet ./... && \ + find . -type f \( -name '*.[ch]' -and -not -name 'vmlinux.h' \) -exec clang-format -i {} \;' + exit 0 +fi + +if [ "$1" = "test" ]; then + image_e2e=gmon-e2e-$arch + dockerfile_e2e=$(mktemp) + cat > "$dockerfile_e2e" < ./ebpf/c/vmlinux.h -go generate -x ./... -CGO_ENABLED=0 go build -o /src/bin/gmon diff --git a/script/format.sh b/script/format.sh deleted file mode 100755 index f721330..0000000 --- a/script/format.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -xue - -go mod tidy -go vet ./... -staticcheck ./... -find . -type f \( -name '*.[ch]' -and -not -name 'vmlinux.h' \) -exec clang-format -i {} \;