Gosha
is a versatile Go package and accompanying CLI tool designed to generate SHA256 hashes for Go packages and their dependencies. This becomes invaluable for integrity checks in CI/CD pipelines, automated workflows, or even managing monorepos.
- 📦 Package Hashing: Generate SHA256 hashes for any Go package.
- 🛠️ CLI & Library Support: Both command-line and programmatic interfaces are available.
- ⚙️ Fine-grained Control: Optionally include standard library and test files in the hash generation.
- 🚀 Use-cases:
- Efficiently manage monorepo builds by rebuilding only when a service source code has changed.
- Use the generated SHA as a tag for Docker images, ensuring Kubernetes Deployments are updated only when necessary.
Install the package and CLI tool using go get
:
go get -u github.com/draganm/gosha
Use the following command syntax:
gosha [OPTIONS] [PACKAGE_PATH]
Options:
--include-stdlib
: Include Go's standard libraries in the hash generation.- Environment variable:
INCLUDE_STDLIB
- Environment variable:
--include-testfiles
: Include test files in the hash generation.- Environment variable:
INCLUDE_TESTFILES
- Environment variable:
To generate a SHA256 hash for the package in the current directory:
gosha
To include standard libraries for a specific package:
gosha --include-stdlib <path to your main package>
To use Gosha programmatically, import the gosha
package and call the CalculatePackageSHA()
function.
import "github.com/draganm/gosha/gosha"
finalSHA, err := gosha.CalculatePackageSHA("<path to your main package>", false, false)
if err != nil {
fmt.Println("Error:", err)
return
}
// Use the finalSHA as needed...
Contributions are welcome! Feel free to submit issues for bug reports, feature requests, or even pull requests.
This project is licensed under the MIT License.