Opennet Firmware
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
10set -eu
11
12# get config file name
13FILE="$(basename "$0")"
14CFG="${FILE%.*}.cfg"
15
16# get current script dir
17HOME="$(dirname $(readlink -f "$0"))"
18OPENWRT_CONFIG="${HOME}/../../../openwrt/.config"
19
20# read variables
21. "$HOME/$CFG"
22
23# retrieve commands
24action="${1:-help}"
25
26
27get_snapshot_name() {
28 grep "^CONFIG_VERSION_NUMBER=" "$OPENWRT_CONFIG" | cut -f 2 -d '"'
29}
30
31
32get_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
38build_platform() {
39 local platform="$1"
40 local snapshot_name
41 snapshot_name=$(get_snapshot_name)
42 [ -z "$snapshot_name" ] && return 1
43
44 # prepare export directory
45 local dest_dir="$HOME/$EXPORT_DIR/$snapshot_name"
46 mkdir -p "$dest_dir"
47
48 # copy all platform builds to export directory
49 local src_dir="$HOME/$BIN_DIR"
50 rsync $RSYNC_OPTIONS "$src_dir/" "$dest_dir/"
51
52 # set version number in export directories
53 get_commit_info > "$dest_dir/__${snapshot_name}__"
54
55 # allow retrieval of "latest" version by clients
56 # URL: https://downloads.opennet-initiative.de/openwrt/stable/latest/version.txt
57 echo "$snapshot_name" >"$dest_dir/version.txt"
58
59 # generate a map between devices and upgrade firmware download paths
60 "$HOME/$BUILD_DIR/opennet/tools/device-upgrade-mapper.sh" generate \
61 >"$dest_dir/device-upgrade-map.csv"
62
63 # Update the (probably outdated) timestamp of the unrelated parent directory.
64 # (the "get_commit_info" line above is not sufficient - since the file may exist before)
65 touch "$dest_dir"
66
67 # generate latest link
68 rm -f "$HOME/$EXPORT_DIR/$LATEST_LINK"
69 (cd "$HOME/$EXPORT_DIR" && ln -s "$snapshot_name" "$LATEST_LINK")
70}
71
72
73export_doc() {
74 local snapshot_name
75 snapshot_name=$(get_snapshot_name)
76 [ -z "$snapshot_name" ] && return 1
77 local dest_dir="$HOME/$EXPORT_DIR/$snapshot_name/doc"
78 mkdir -p "$dest_dir"
79 local src_dir="$HOME/$DOC_DIR"
80 echo "Copying documentation: $src_dir -> $dest_dir"
81 rsync $RSYNC_OPTIONS "$src_dir/" "$dest_dir/"
82}
83
84
85purge_old_exports() {
86 local keep_builds="$1"
87 cd "$HOME/$EXPORT_DIR"
88 # "uniq -u" entfernt doppelte Zeilen - also verbleiben nur die alten Dateien
89 (
90 ls -t | head -n "$keep_builds"
91 ls
92 ) | sort | uniq -u | xargs --delimiter '\n' --no-run-if-empty rm -r
93}
94
95
96# process commands
97case "$action" in
98 help|--help)
99 echo "Usage: $(basename "$0")"
100 echo " [<platform>] - export build"
101 echo " --doc - generate documentation"
102 echo " --purge <keep-number-of-dirs> - purge old exports"
103 exit 0
104 ;;
105 doc|--doc)
106 export_doc
107 ;;
108 purge|--purge)
109 keep_builds=${2:-}
110 [ -z "$keep_builds" ] && echo >&2 "No number of non-purgeable builds given" && exit 2
111 echo "$keep_builds" | grep -q "[^0-9]" && echo >&2 "Number of non-purgeable builds contains non-digits: '$keep_builds'" && exit 3
112 [ "$keep_builds" -lt 1 ] && echo >&2 "Number of non-purgeable builds is too low: '$keep_builds'" && exit 4
113 purge_old_exports "$keep_builds"
114 ;;
115 *)
116 build_platform "$action"
117 ;;
118esac
119
120exit 0
set eu on function print_services services log for dir in etc on services d var on services volatile d
Definition: services:13