gen_version.sh 1.2 KB

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