List tests in the given Go packages.
$ go install github.com/crazy-max/gotestlist/cmd/gotestlist@latest
$ gotestlist .
gotestlist TestTests /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
$ gotestlist ./...
gotestlist TestTests /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
main TestDirs /home/crazy/src/github.com/crazy-max/gotestlist/cmd/gotestlist/gotestlist_test.go
$ gotestlist github.com/crazy-max/gotestlist
gotestlist TestTests /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
$ gotestlist github.com/crazy-max/gotestlist/...
gotestlist TestTests /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
main TestDirs /home/crazy/src/github.com/crazy-max/gotestlist/cmd/gotestlist/gotestlist_test.go
$ gotestlist github.com/crazy-max/gotestlist github.com/crazy-max/gotestlist/cmd/gotestlist
gotestlist TestTests /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
main TestDirs /home/crazy/src/github.com/crazy-max/gotestlist/cmd/gotestlist/gotestlist_test.go
$ gotestlist -f json ./... | jq
[
{
"name": "TestTests",
"benchmark": false,
"fuzz": false,
"suite": "",
"file": "/home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go",
"pkg": "gotestlist"
},
{
"name": "TestDirs",
"benchmark": false,
"fuzz": false,
"suite": "",
"file": "/home/crazy/src/github.com/crazy-max/gotestlist/cmd/gotestlist/gotestlist_test.go",
"pkg": "main"
}
]
$ gotestlist -f "Pkg: {{.Pkg}} | TestName: {{.Name}} | File: {{.File}}" ./...
Pkg: gotestlist | TestName: TestTests | File: /home/crazy/src/github.com/crazy-max/gotestlist/gotestlist_test.go
Pkg: main | TestName: TestDirs | File: /home/crazy/src/github.com/crazy-max/gotestlist/cmd/gotestlist/gotestlist_test.go
$ gotestlist -d 1 ./...
["TestDirs|TestTests"]
$ gotestlist -d 2 ./...
["TestDirs","TestTests"]
-d
flag dynamically distributes the tests based on the given matrix size and
number of tests found. This JSON output can then be used as matrix input
in a GitHub Action workflow:
name: test
on:
push:
env:
GO_VERSION: 1.23
jobs:
test-prepare:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.tests.outputs.matrix }}
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
-
name: Install gotestlist
run:
go install github.com/crazy-max/gotestlist/cmd/gotestlist@latest
-
name: Create matrix
id: tests
run: |
matrix="$(gotestlist -d 4 ./...)"
echo "matrix=$matrix" >> $GITHUB_OUTPUT
test:
runs-on: ubuntu-latest
needs:
- test-prepare
strategy:
fail-fast: false
test: ${{ fromJson(needs.test-prepare.outputs.matrix) }}
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
-
name: Test
run: |
go test -run=(${{ matrix.test }})/ -coverprofile=coverage.txt -covermode=atomic ./...
-
name: Upload coverage
uses: codecov/codecov-action@v5
with:
files: ./coverage.txt
This is useful if you have a lot of tests, and you want to distribute them to reduce build time.
Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a Paypal donation to ensure this journey continues indefinitely!
Thanks again for your support, it is much appreciated! 🙏
MIT. See LICENSE
for more details.