name: Test on: push: pull_request: workflow_dispatch: permissions: contents: read concurrency: group: test-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test: runs-on: ubuntu-latest timeout-minutes: 10 steps: - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 with: persist-credentials: false - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: go-version-file: go.mod cache: false # Standard-library-only module. - name: Check formatting run: test -z "$(gofmt -l $(git ls-files '*.go'))" - run: go vet ./... - name: Unit, regression, and stress tests with race detection run: go test -race -count=1 -timeout=3m ./... - name: Repeated lifecycle and stress tests run: go test -race -run 'Test(Stress|StartDoesNotReplaceProcessor|ConcurrentOverridesMerge|TimedOutShutdown)' -count=5 -timeout=3m . - name: Compile supported deployment targets run: | GOOS=freebsd GOARCH=amd64 go build ./... GOOS=js GOARCH=wasm go build ./... GOOS=windows GOARCH=amd64 go build ./... fuzz: runs-on: ubuntu-latest timeout-minutes: 5 strategy: fail-fast: false matrix: include: - package: ./sanitizer target: FuzzSanitize - package: ./sanitizer target: FuzzSerializerJSON - package: ./formatter target: FuzzFormatJSON - package: ./formatter target: FuzzFormatTextPolicy - package: ./compat target: FuzzParseFormat steps: - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 with: persist-credentials: false - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6 with: go-version-file: go.mod cache: false - name: Bounded fuzzing run: go test '${{ matrix.package }}' -run '^$' -fuzz '^${{ matrix.target }}$' -fuzztime=15s -parallel=2 -timeout=2m