Opennet Firmware
 Alle Dateien Funktionen Variablen Gruppen Seiten
export-build.sh
gehe zur Dokumentation dieser Datei
1 #!/bin/bash
2 
3 #
4 # Opennet trac-bitten-slave Scripts
5 # Mathias Mahnke, created 2014/05/05
6 # Opennet Admin Group <admin@opennet-initiative.de>
7 #
8 
9 # stop on error and unset variables
10 set -eu
11 
12 # get config file name
13 FILE="$(basename "$0")"
14 CFG="${FILE%.*}.cfg"
15 
16 # get current script dir
17 HOME="$(dirname $(readlink -f "$0"))"
18 OPENWRT_CONFIG="${HOME}/../../../openwrt/.config"
19 
20 # read variables
21 . "$HOME/$CFG"
22 
23 # retrieve commands
24 action="${1:-help}"
25 
26 
27 get_snapshot_name() {
28  grep "^CONFIG_VERSION_NUMBER=" "$OPENWRT_CONFIG" | cut -f 2 -d '"'
29 }
30 
31 
32 get_commit_info() {
33  # kurze Uebersicht aller commits des aktuellen Builds inkl. eines Commit-Zaehlers
34  git log --oneline | sed -n '1!G;h;$p' | nl | tac
35 }
36 
37 
38 build_platform() {
39  local platform="$1"
40  local snapshot_name=$(get_snapshot_name)
41  [ -z "$snapshot_name" ] && return 1
42 
43  # prepare export directory
44  local dest_dir="$HOME/$EXPORT_DIR/$snapshot_name"
45  local dest_platform_dir="$dest_dir/$platform"
46  mkdir -p "$dest_platform_dir"
47  # workaround for broken directory or file mode?
48  find "$dest_platform_dir" -perm 655 -print0 | xargs -0 --no-run-if-empty chmod 755
49 
50  # copy build to export directory
51  local src_dir="$HOME/$BIN_DIR/$platform"
52  rsync $RSYNC_OPTIONS "$src_dir/" "$dest_platform_dir/"
53 
54  # set version number in export directories
55  get_commit_info > "$dest_dir/__${snapshot_name}__"
56  get_commit_info > "$dest_platform_dir/__${snapshot_name}__"
57 
58  # generate latest link
59  rm -f "$HOME/$EXPORT_DIR/$LATEST_LINK"
60  (cd "$HOME/$EXPORT_DIR" && ln -s "$snapshot_name" "$LATEST_LINK")
61 }
62 
63 
64 export_doc() {
65  local snapshot_name=$(get_snapshot_name)
66  [ -z "$snapshot_name" ] && return 1
67  local dest_dir="$HOME/$EXPORT_DIR/$snapshot_name/doc"
68  mkdir -p "$dest_dir"
69  local src_dir="$HOME/$DOC_DIR"
70  echo "Copying documentation: $src_dir -> $dest_dir"
71  rsync $RSYNC_OPTIONS "$src_dir/" "$dest_dir/"
72 }
73 
74 
75 purge_old_exports() {
76  local keep_builds="$1"
77  cd "$HOME/$EXPORT_DIR"
78  # "uniq -u" entfernt doppelte Zeilen - also verbleiben nur die alten Dateien
79  (
80  ls -t | head -n "$keep_builds"
81  ls
82  ) | sort | uniq -u | xargs --delimiter '\n' --no-run-if-empty rm -r
83 }
84 
85 
86 # process commands
87 case "$action" in
88  help|--help)
89  echo "Usage: $(basename "$0")"
90  echo " [<platform>] - export build"
91  echo " --doc - generate documentation"
92  echo " --purge <keep-number-of-dirs> - purge old exports"
93  exit 0
94  ;;
95  doc|--doc)
96  export_doc
97  ;;
98  purge|--purge)
99  keep_builds=${2:-}
100  [ -z "$keep_builds" ] && echo >&2 "No number of non-purgeable builds given" && exit 2
101  echo "$keep_builds" | grep -q "[^0-9]" && echo >&2 "Number of non-purgeable builds contains non-digits: '$keep_builds'" && exit 3
102  [ "$keep_builds" -lt 1 ] && echo >&2 "Number of non-purgeable builds is too low: '$keep_builds'" && exit 4
103  purge_old_exports "$keep_builds"
104  ;;
105  *)
106  build_platform "$action"
107  ;;
108 esac
109 
110 exit 0
set eu on function print_services services log for dir in etc on services d var on services volatile d
Definition: services:13