summaryrefslogtreecommitdiffstats
path: root/bin/build-snapshot
blob: 5633abd7ee5a873d9b11cb4e3ef8e4d17cfd7759 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/sh
#
# Copyright (c) 2013 Nagios Plugins Development Team
#
# Originally written by Holger Weiss <holger@zedat.fu-berlin.de>.
#
# This file is free software; the Nagios Plugins Development Team gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY, to the extent permitted by law; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

set -e
set -u

export PATH='/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin'

prefix='/home/plugins'
keep_days=2
snapshot_dir="$prefix/web/download/snapshot"
repository="$prefix/repositories/nagios-plugins.git"
branches=${*:-'maint master pu'}
myself=${0##*/}

make_dist()
{
	version=$1

	tools/setup
	./configure
	make dist VERSION="$version"
}

create_snapshot()
{
	branch=$1
	snapshot_dir=$2

	git show-ref --verify --quiet "refs/heads/$branch" \
	    || git checkout --quiet --track "origin/$branch"

	version=$(git describe --abbrev=4 'HEAD' | sed 's/release-//')
	tarball="nagios-plugins-$version.tar.gz"
	symlink="nagios-plugins-$branch.tar.gz"

	if [ ! -e "$snapshot_dir/$tarball" ]
	then
		make_dist "$version"
		cp "$tarball" "$snapshot_dir"
		git reset --quiet --hard
		git clean --quiet --force -d -x
	fi
	cd "$snapshot_dir"
	test -e "$tarball.sha1" || shasum -a 1 -b "$tarball" >"$tarball.sha1"
	ln -s -f "$tarball" "$symlink"
	ln -s -f "$tarball.sha1" "$symlink.sha1"
	cd "$OLDPWD"
}

rm_old_snapshots()
{
	snapshot_dir=$1
	keep_days=$2
	link_targets=$(find "$snapshot_dir" -type l -exec readlink '{}' ';')

	find "$snapshot_dir" -type f -mtime "+$((keep_days - 1))" -print \
	    | while read file
	do
		referenced=0

		for link_target in $link_targets
		do
			if [ "$link_target" = "$file" ]
			then
				referenced=1
				break
			fi
		done
		test $referenced -eq 1 || rm -f "$file"
	done
}

if [ $# -eq 1 ] && [ "x$1" = 'x-h' -o "x$1" = 'x--help' ]
then
	echo "Usage: $myself [branch ...]"
	exit 0
fi

temp_dir=$(mktemp -d "/tmp/$myself.XXXXXX")
log_file="$temp_dir/log"
exec >"$log_file" 3>&2 2>&1
trap 'tail -n 25 "$log_file" >&3; rm -rf "$temp_dir"' EXIT
set -x

src_dir="$temp_dir/src"
git clone --quiet --shared --no-checkout "$repository" "$src_dir"
cd "$src_dir"

for branch in $branches
do
	git show-ref --verify "refs/remotes/origin/$branch" \
	    && create_snapshot "$branch" "$snapshot_dir"
done

cd "$OLDPWD"
rm_old_snapshots "$snapshot_dir" "$keep_days"
trap - EXIT
rm -rf "$temp_dir"