Bash · 3911 bytes Raw Blame History
1 #!/bin/bash
2 # stamp-version.sh - Stamp version from VERSION file into source and config files
3 # Run this before building to ensure version consistency across all files
4
5 set -e
6
7 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8 cd "$SCRIPT_DIR"
9
10 # Read version from VERSION file
11 if [ ! -f VERSION ]; then
12 echo "Error: VERSION file not found" >&2
13 exit 1
14 fi
15
16 VERSION=$(cat VERSION | tr -d '[:space:]')
17
18 if [ -z "$VERSION" ]; then
19 echo "Error: VERSION file is empty" >&2
20 exit 1
21 fi
22
23 echo "Stamping version: $VERSION"
24
25 # Generate version module
26 mkdir -p src/version
27 cat > src/version/version.f90 << EOF
28 ! Auto-generated by stamp-version.sh - DO NOT EDIT MANUALLY
29 module version_info
30 implicit none
31 private
32
33 public :: FORTRESS_VERSION, print_version, print_help
34
35 character(len=*), parameter :: FORTRESS_VERSION = '$VERSION'
36
37 contains
38
39 subroutine print_version()
40 print '(A,A)', 'fortress v', FORTRESS_VERSION
41 print '(A)', ''
42 print '(A)', 'A command-line file explorer written in modern Fortran'
43 print '(A)', 'https://github.com/FortranGoingOnForty/fortress'
44 end subroutine print_version
45
46 subroutine print_help()
47 print '(A)', 'fortress - a dual-pane file explorer with fzf and git integration'
48 print '(A)', ''
49 print '(A)', 'USAGE:'
50 print '(A)', ' fortress [OPTIONS]'
51 print '(A)', ''
52 print '(A)', 'OPTIONS:'
53 print '(A)', ' -h, --help Show this help message'
54 print '(A)', ' -v, --version Show version information'
55 print '(A)', ''
56 print '(A)', 'NAVIGATION:'
57 print '(A)', ' up/down Navigate up/down'
58 print '(A)', ' right Enter directory'
59 print '(A)', ' left Go to parent directory'
60 print '(A)', ' ~ Jump to home directory'
61 print '(A)', ' / Jump to root directory'
62 print '(A)', ' 8 Jump to favorites'
63 print '(A)', ' * Toggle favorite'
64 print '(A)', ' . Toggle hidden files'
65 print '(A)', ' [type chars] Fuzzy jump to file'
66 print '(A)', ''
67 print '(A)', 'FILE OPERATIONS (Alt+key):'
68 print '(A)', ' Alt+n Rename file/directory'
69 print '(A)', ' Alt+v View/open file'
70 print '(A)', ' Alt+m Move mode'
71 print '(A)', ' Alt+y Yank (copy)'
72 print '(A)', ' Alt+x Cut'
73 print '(A)', ' Alt+p Paste'
74 print '(A)', ' Alt+r Remove/delete'
75 print '(A)', ' Alt+s Search with fzf'
76 print '(A)', ' Alt+c CD on exit'
77 print '(A)', ''
78 print '(A)', 'SELECTION:'
79 print '(A)', ' Space Toggle selection'
80 print '(A)', ' Shift+up/down Block select'
81 print '(A)', ' e Exit selection mode'
82 print '(A)', ''
83 print '(A)', 'GIT (Alt+g to toggle git mode):'
84 print '(A)', ' a Stage file/directory'
85 print '(A)', ' u Unstage'
86 print '(A)', ' m Commit'
87 print '(A)', ' d Show diff'
88 print '(A)', ' f Fetch'
89 print '(A)', ' l Pull'
90 print '(A)', ' h Push'
91 print '(A)', ' t Tag'
92 print '(A)', ''
93 print '(A)', 'Ctrl+q to quit'
94 end subroutine print_help
95
96 end module version_info
97 EOF
98 echo " -> src/version/version.f90"
99
100 # Update fpm.toml
101 if [ -f fpm.toml ]; then
102 sed -i "s/^version = .*/version = \"$VERSION\"/" fpm.toml
103 echo " -> fpm.toml"
104 fi
105
106 # Update fortress.spec
107 if [ -f fortress.spec ]; then
108 sed -i "s/^Version:.*/Version: $VERSION/" fortress.spec
109 echo " -> fortress.spec"
110 fi
111
112 echo "Done!"