Commit | Line | Data |
---|---|---|
b94830d9 MW |
1 | #! /bin/sh -e |
2 | ### | |
3 | ### Build a Debian package on an sbuild server. | |
4 | ### | |
5 | ### (c) 2016 Mark Wooding | |
6 | ### | |
7 | ||
8 | ###----- Licensing notice --------------------------------------------------- | |
9 | ### | |
10 | ### This program is free software; you can redistribute it and/or modify | |
11 | ### it under the terms of the GNU General Public License as published by | |
12 | ### the Free Software Foundation; either version 2 of the License, or | |
13 | ### (at your option) any later version. | |
14 | ### | |
15 | ### This program is distributed in the hope that it will be useful, | |
16 | ### but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | ### GNU General Public License for more details. | |
19 | ### | |
20 | ### You should have received a copy of the GNU General Public License | |
21 | ### along with this program; if not, write to the Free Software Foundation, | |
22 | ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
23 | ||
24 | ###-------------------------------------------------------------------------- | |
25 | ### Some utilities. | |
26 | ||
27 | prog=${0##*/} | |
28 | ||
29 | fail () { echo >&2 "$prog: $*"; exit 1; } | |
30 | usage () { echo "usage: $prog [-ain] [-k KEYID] [-t TARGET] HOST"; } | |
31 | fail_usage () { usage >&2; exit 1; } | |
32 | ||
33 | ###-------------------------------------------------------------------------- | |
34 | ### Parse options. | |
35 | ||
abfec703 | 36 | bogusp=nil noactp=nil signp=nil |
6cf97414 MW |
37 | unset buildopts pkgs |
38 | while getopts "haik:np:t:" opt; do | |
b94830d9 MW |
39 | case $opt in |
40 | h) | |
41 | usage | |
42 | cat <<EOF | |
43 | ||
44 | Options: | |
45 | -h Show this help text. | |
46 | -a Build only architecture-dependent packages. | |
47 | -i Build only architecture-neutral packages. | |
48 | -k KEYID Sign the result using KEYID. | |
49 | -n Don't actually do the build. | |
6cf97414 | 50 | -p DIR Upload additional packages from DIR. |
b94830d9 MW |
51 | -t TARGET Build in TARGET build environment. |
52 | EOF | |
53 | exit 0 | |
54 | ;; | |
55 | a) buildopts="${buildopts+$buildopts }-a" ;; | |
56 | i) buildopts="${buildopts+$buildopts }-i" ;; | |
8c67a535 | 57 | k) signp=t keyid=$OPTARG ;; |
b94830d9 | 58 | n) buildopts="${buildopts+$buildopts }-n" noactp=t ;; |
6cf97414 | 59 | p) pkgs=$OPTARG ;; |
b94830d9 MW |
60 | t) buildopts="${buildopts+$buildopts }-t$OPTARG" ;; |
61 | *) bogusp=t ;; | |
62 | esac | |
63 | done | |
64 | shift $(( $OPTIND - 1 )) | |
65 | case $# in | |
66 | 1) host=$1 ;; | |
67 | *) bogusp=t ;; | |
68 | esac | |
69 | case $bogusp in t) fail_usage ;; esac | |
8c67a535 | 70 | case $noactp in t) signp=nil ;; esac |
6cf97414 | 71 | case ${pkgs-/hack} in /*) ;; *) pkgs=$(pwd)/$pkgs ;; esac |
b94830d9 MW |
72 | |
73 | ###-------------------------------------------------------------------------- | |
74 | ### Main program. | |
75 | ||
76 | ## Figure out the package name and version number. | |
77 | unset pkg ver | |
78 | while read tag value; do | |
79 | case $tag in | |
80 | Source:) pkg=$value ;; | |
81 | Version:) ver=$value ;; | |
82 | esac | |
83 | done <<EOF | |
84 | $(dpkg-parsechangelog) | |
85 | EOF | |
86 | case ${pkg+t} in t) ;; *) fail "can't figure out the package name" ;; esac | |
87 | case ${ver+t} in t) ;; *) fail "can't figure out the package version" ;; esac | |
88 | ||
8c67a535 MW |
89 | ## Build a Debian source package. Don't sign anything yet. That will happen |
90 | ## at the end, all in one go. | |
2a5c4333 | 91 | dpkg-buildpackage -S -uc -us -d |
8c67a535 | 92 | cd .. |
b94830d9 MW |
93 | dsc=${pkg}_${ver}.dsc |
94 | [ -f "$dsc" ] || fail "where is my \`.dsc' file?" | |
95 | ||
97720cf5 MW |
96 | ## Actually do the build. Get a build directory assigned by the server, |
97 | ## upload the sources, run the build, and collect the results. | |
b94830d9 MW |
98 | builddir=$(ssh "$host" mdw-sbuild-server dir "$pkg/$ver") |
99 | dcmd rsync -a "$dsc" "$host:$builddir/" | |
6cf97414 | 100 | case ${pkgs+t} in t) rsync -a "$pkgs/" "$host:$builddir/pkgs/" ;; esac |
b94830d9 MW |
101 | set +e; ssh "$host" mdw-sbuild-server $buildopts build "$builddir" |
102 | rc=$?; set -e | |
103 | rsync -a "$host:$builddir/" ./ | |
104 | case $rc in 0) ;; *) exit $rc ;; esac | |
97720cf5 | 105 | |
bcd2df0a MW |
106 | ## Merge the change files together, and maybe sign the result. |
107 | chchch=${pkg}_${ver}_source.changes | |
108 | for i in "${pkg}_${ver}"_*.changes; do | |
109 | case " $chchch " in *" $i "*) ;; *) chchch="$chchch $i" ;; esac | |
110 | done | |
111 | mergechanges -f $chchch | |
112 | rm $chchch | |
abfec703 | 113 | case $signp in |
bcd2df0a | 114 | t) debsign -k"$keyid" "${pkg}_${ver}_multi.changes" ;; |
b94830d9 | 115 | esac |