Gosha: Go SHA256 Hash Generator for Packages
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.
π Key Features
- π¦ 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.
π₯ Installation
Install the package and CLI tool using go get
:
go get -u github.com/draganm/gosha
π Usage
CLI Interface
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
--include-testfiles
: Include test files in the hash generation.
- Environment variable:
INCLUDE_TESTFILES
Examples:
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>
Programmatic Interface
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...
π₯ Contributing
Contributions are welcome! Feel free to submit issues for bug reports, feature requests, or even pull requests.
π License
This project is licensed under the MIT License.