name: Test on: push: branches: [development] pull_request: branches: [development] jobs: vet: runs-on: fedora steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "1.26" - name: Download dependencies run: go mod download - name: gofmt # `gofmt -l` prints the names of unformatted files. An empty # output is the only acceptable result. run: | unformatted=$(gofmt -l cmd internal pkg) if [ -n "$unformatted" ]; then echo "The following files need gofmt:" echo "$unformatted" exit 1 fi - name: go vet run: go vet ./... test: runs-on: fedora needs: vet steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "1.26" - name: Download dependencies run: go mod download - name: Install build tools run: dnf install -y gcc - name: go test -race run: go test -race -count=1 ./... - name: Check coverage threshold run: | go test -coverprofile=coverage.out ./internal/... ./pkg/... go tool cover -func=coverage.out | grep '^total:' | python3 -c "import sys; pct=float(sys.stdin.read().split()[2].rstrip('%')); sys.exit(0 if pct >= 80 else 1)" || (echo "ERROR: coverage < 80%"; exit 1) - name: go test ./examples run: go build ./examples/... build: runs-on: fedora needs: test steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: "1.26" - name: Download dependencies run: go mod download - name: Build run: go build -ldflags="-s -w" -o bin/nuntius ./cmd/server - name: Test run: go test ./... - name: Smoke test run: ./bin/nuntius --version