diff --git a/README.md b/README.md index 5a6bdc1..f31080d 100644 --- a/README.md +++ b/README.md @@ -70,10 +70,20 @@ The provider embeds build metadata (`version`, `commit`, `date`) in the binary. - `./terraform-provider-dynu --version` - `./terraform-provider-dynu version` -Build a stamped binary with standard Go `-ldflags`: +Primary build method (recommended): ```bash -VERSION=${VERSION:-v0.2.0} +./build.sh v0.2.0 +``` + +`build.sh` takes exactly one argument (the version string), then derives commit and date automatically: +- `COMMIT=$(git rev-parse --short HEAD)` +- `DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)` + +Manual equivalent (same stamped build command used by `build.sh`): + +```bash +VERSION=v0.2.0 COMMIT=$(git rev-parse --short HEAD) DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..ca5c9a2 --- /dev/null +++ b/build.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: ./build.sh " +} + +if [[ $# -ne 1 ]]; then + usage + exit 1 +fi + +if [[ ! -f "README.md" || ! -f "go.mod" || ! -f "main.go" ]]; then + echo "Error: run this script from the repository root (terraform-dynu-provider)." + exit 1 +fi + +if ! command -v git >/dev/null 2>&1; then + echo "Error: git is required but was not found in PATH." + exit 1 +fi + +if ! command -v go >/dev/null 2>&1; then + echo "Error: go is required but was not found in PATH." + exit 1 +fi + +VERSION="$1" +COMMIT="$(git rev-parse --short HEAD)" +DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" +OUTPUT="terraform-provider-dynu" + +echo "Building terraform-provider-dynu with metadata:" +echo " version: ${VERSION}" +echo " commit: ${COMMIT}" +echo " date: ${DATE}" +echo " output: ${OUTPUT}" + +go build -o "${OUTPUT}" \ + -ldflags="-X main.version=${VERSION} -X main.commit=${COMMIT} -X main.date=${DATE}" + +echo "Build complete: ${OUTPUT}"