Helps you find smelly go.mod files based on a list of relevant packages you
would like to be up to date.
# example modsniffer config
preferredGoVersion: "1.20"
relevantPackages:
- name: "k8s.io/api"
preferredVersion: "0.27.0"Based on the difference between the preferredVersion in the config file and
the actual version used in the checked go.mod file, modsniffer calculates an
overall score for the "outdatedness" of the project in question.
# example output for a project, using the above config
github.com/some/repo
» Go Version
└─ actual: 1.19.0
└─ preferred: 1.20.0
└─ Score: 10
» k8s.io/api
└─ actual: 0.23.17
└─ preferred: 0.27.0
└─ Score: 40
Final Score: 50
This can be helpful if you're maintaining a lot of Go projects with similar dependencies and want to triage the worst of them.
Put the above config in a file called .modsniffer.yaml and place it in your
$HOME directory (this is the default config location, you can set a custom one
using the --config flag). Add dependencies you want to check for. Then run
modsniffer like this:
go run main.go ./../path/to/project/The file path that you pass as an argument should point to a local directory
containing a go.mod file.
modsniffer will eventually support checking remote repositories via https
or ssh as well, but this is not yet implemented (see To-Dos below).
For everything else, see the help:
go run main.go --helpThis tool is work in progress. Still to do:
- Remove
--verboseflag and replace with proper output formatting (e.g.json,yaml,tsv,pretty) - Add unit test cases
- Implement support for remote repositories (prefixed with
https://andssh:///git@) - Get newest version of a checked package or Go version from upstream, e.g.
pkg.go.dev, only compare against a
desiredVersionif one is specified - How to handle logging properly in a CLI tool?
- Implement GitHub actions for automated tests, linting and versioned releases
- Recursive mode (sniff all
go.modfiles in all subdirectories). This would help if you need an overview of~/dev/go-projects. - Batch mode (give
modsniffera list of repositories and get a ranked scoring result). - Support mutliple scoring algorithms.