Browse Source
- Create scripts/get-git-hash.sh for consistent git hash logic - Update build scripts to use new centralized git hash function - Add comprehensive documentation and usage examples - Ensure branch-aware hash retrieval across all build types Provides single source of truth for git hash retrieval, preventing inconsistencies when builds use wrong branch's commit hash.get-get-hash
5 changed files with 139 additions and 7 deletions
@ -0,0 +1,105 @@ |
|||
#!/bin/bash |
|||
# TimeSafari Git Hash Retrieval Script |
|||
# Author: Matthew Raymer |
|||
# Description: Retrieves the current git commit hash for the active branch |
|||
# |
|||
# This script ensures that the correct git hash is retrieved regardless of |
|||
# the current branch or git state. It handles edge cases like detached HEAD |
|||
# and provides fallbacks for when git is not available. |
|||
# |
|||
# ARCHITECTURAL BENEFITS: |
|||
# - Centralized Logic: Single source of truth for git hash retrieval across all build scripts |
|||
# - Consistent Behavior: Ensures all builds use the same git hash logic and format |
|||
# - Maintainability: Changes to git hash logic only need to be made in one place |
|||
# - Robust Error Handling: Handles edge cases that could cause build failures |
|||
# - Branch-Aware: Explicitly uses current branch, preventing default branch fallback issues |
|||
# |
|||
# USAGE PATTERNS: |
|||
# # Direct usage |
|||
# ./scripts/get-git-hash.sh |
|||
# |
|||
# # In build scripts (recommended) |
|||
# VITE_GIT_HASH=$(./scripts/get-git-hash.sh) npm run build |
|||
# |
|||
# # In shell scripts |
|||
# git_hash=$(./scripts/get-git-hash.sh) |
|||
# echo "Current commit: $git_hash" |
|||
# |
|||
# # In package.json scripts |
|||
# "build:capacitor": "VITE_GIT_HASH=$(./scripts/get-git-hash.sh) vite build --mode capacitor --config vite.config.capacitor.mts" |
|||
# |
|||
# OUTPUT: |
|||
# - Git commit hash (7 characters) if available (e.g., "bf08e57c") |
|||
# - "unknown" if git is not available or no repository found |
|||
# |
|||
# EXIT CODES: |
|||
# 0 - Success (hash retrieved or "unknown" returned) |
|||
# 1 - Error (should not occur in normal operation) |
|||
# |
|||
# EDGE CASES HANDLED: |
|||
# - Detached HEAD state: Falls back to HEAD commit |
|||
# - No git repository: Returns "unknown" |
|||
# - Git not installed: Returns "unknown" |
|||
# - No commits: Returns "unknown" |
|||
# - Branch detection failure: Falls back to HEAD commit |
|||
# |
|||
# INTEGRATION POINTS: |
|||
# - scripts/common.sh: Primary usage via get_git_hash() function |
|||
# - package.json: Direct usage in build:capacitor script |
|||
# - Build scripts: Used by build-web.sh, build-electron.sh, etc. |
|||
# - Docker builds: Ensures consistent git hashes in containerized builds |
|||
# |
|||
# VALUE PROPOSITION: |
|||
# This script was created to solve git hash inconsistencies across different |
|||
# build environments and branch states. It provides a reliable, consistent |
|||
# interface for git hash retrieval that works regardless of the current |
|||
# git state or environment. This prevents issues like: |
|||
# - Builds using wrong branch's commit hash |
|||
# - Inconsistent versioning across different build types |
|||
# - Build failures due to git state issues |
|||
# - Manual git hash management in multiple scripts |
|||
# |
|||
# MAINTENANCE: |
|||
# - Update this script if git hash retrieval logic needs to change |
|||
# - All build scripts automatically benefit from improvements |
|||
# - Test with various git states (detached HEAD, different branches, etc.) |
|||
# - Ensure compatibility with CI/CD environments |
|||
|
|||
set -euo pipefail |
|||
|
|||
# Function to get git hash for versioning |
|||
get_git_hash() { |
|||
# Check if git is available |
|||
if ! command -v git &> /dev/null; then |
|||
echo "unknown" |
|||
return 0 |
|||
fi |
|||
|
|||
# Check if we're in a git repository |
|||
if ! git rev-parse --git-dir &> /dev/null; then |
|||
echo "unknown" |
|||
return 0 |
|||
fi |
|||
|
|||
# Get the current branch name |
|||
local current_branch |
|||
current_branch=$(git branch --show-current 2>/dev/null || git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "") |
|||
|
|||
# If we're in a detached HEAD state or no branch, use HEAD |
|||
if [ -z "$current_branch" ] || [ "$current_branch" = "HEAD" ]; then |
|||
git log -1 --pretty=format:%h 2>/dev/null || echo "unknown" |
|||
else |
|||
# Use the current branch explicitly |
|||
git log -1 --pretty=format:%h "$current_branch" 2>/dev/null || echo "unknown" |
|||
fi |
|||
} |
|||
|
|||
# Main execution |
|||
main() { |
|||
local git_hash |
|||
git_hash=$(get_git_hash) |
|||
echo "$git_hash" |
|||
} |
|||
|
|||
# Run main function |
|||
main "$@" |
Loading…
Reference in new issue