gen_version.sh 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. #!/bin/sh
  2. # gen_version.sh -- write OpenPuck/git_version.h with build provenance for the WebUSB panel:
  3. # - semantic version (when OPK_BUILD_VERSION is set, or HEAD has a semver tag),
  4. # - git short hash,
  5. # - dirty flag.
  6. # Run this BEFORE `arduino-cli compile` (it's a no-op to re-run). The generated header is git-ignored, so
  7. # generating it never itself marks the tree dirty.
  8. set -e
  9. cd "$(dirname "$0")"
  10. HASH=$(git rev-parse --short=8 HEAD 2>/dev/null || echo unknown)
  11. VERSION="${OPK_BUILD_VERSION:-}"
  12. if [ -z "$VERSION" ]; then
  13. VERSION="$(
  14. git tag --points-at HEAD 2>/dev/null \
  15. | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' \
  16. | sort -V \
  17. | tail -n1 || true
  18. )"
  19. fi
  20. # Dirty = any tracked change OR untracked file (porcelain is empty only on a clean tree). git_version.h is
  21. # git-ignored so it doesn't count.
  22. if [ -z "$(git status --porcelain 2>/dev/null)" ]; then DIRTY=0; else DIRTY=1; fi
  23. cat > OpenPuck/git_version.h <<EOF
  24. // AUTO-GENERATED by gen_version.sh -- do not edit, do not commit (git-ignored).
  25. #pragma once
  26. #define OPK_BUILD_VERSION "$VERSION"
  27. #define OPK_GIT_HASH "$HASH"
  28. #define OPK_GIT_DIRTY $DIRTY
  29. EOF
  30. echo "OpenPuck/git_version.h: version=${VERSION:-none} hash=$HASH dirty=$DIRTY"