Bug 1912 Update GPG Signing
[osm/devops.git] / tools / gen-repo.sh
1 #!/bin/bash
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 #
15
16 function usage() {
17 echo -e "usage: $0 [OPTIONS] BUILD"
18 echo -e " OPTIONS"
19 echo -e " -p <passphrase file>: gpg passphrase file"
20 echo -e " -i <incoming repo> "
21 echo -e " -o <outgoing repo> "
22 echo -e " -k <gpg key> "
23 echo -e " -j <jfrog cli> "
24 echo -e " -d <base dir> "
25 echo -e " -b <build> "
26 echo -e " -r <release dir> "
27 echo -e " -h <rsync user@host> "
28 echo -e " -R <rsync options> "
29 echo -e " -P <public key file> "
30 echo -e " -c <changelogfile> "
31 echo -e " -m <MDG repos> "
32 exit 1
33 }
34
35 function FATAL() {
36 echo -e $1
37 exit 1
38 }
39
40 function dump_vars() {
41 echo "incoming repo: $IN_REPO"
42 echo "outgoing repo: $OUT_REPO"
43 echo "GPGKEY: $GPGKEY"
44 echo "JFROG_CLI: $JFROG_CLI"
45 echo "REPO_BASE: $REPO_BASE"
46 echo "RELEASE_DIR: $RELEASE_DIR"
47 echo "BUILD: $BUILD"
48 echo "RSYNC_USER_HOST $RSYNC_USER_HOST"
49 echo "RSYNC_OPTIONS $RSYNC_OPTIONS"
50 echo "PUBLIC_KEY_FILE $PUBLIC_KEY_FILE"
51 echo "BUILD: $BUILD"
52 echo "BUILD_NUMBER: $BUILD_NUMBER"
53 }
54
55 MDG_REPOS="RO osmclient openvim SO UI IM devops MON N2VC NBI common POL PLA LW-UI NG-UI"
56 IN_REPO="unstable"
57 OUT_REPO="stable"
58 GPGKEY=71C0472C
59 JFROG_CLI=~/jfrog
60 REPO_BASE=repo
61 RELEASE_DIR=ReleaseTWO
62 RSYNC_USER_HOST=osmusers@osm-download.etsi.org
63 CURR_DIR=$(pwd)
64 PUBLIC_KEY_FILE=~/OSM\ ETSI\ Release\ Key.gpg
65 CHANGE_LOG_FILE=
66
67 while getopts ":p:i:o:k:j::d:b:r:h:R:P:c:m:" o; do
68 case "${o}" in
69 p)
70 PASSPHRASE_FILE=${OPTARG}
71 ;;
72 i)
73 IN_REPO=${OPTARG}
74 ;;
75 o)
76 OUT_REPO=${OPTARG}
77 ;;
78 k)
79 GPGKEY=${OPTARG}
80 ;;
81 j)
82 JFROG_CLI=${OPTARG}
83 ;;
84 d)
85 BASE_DIR=${OPTARG}
86 ;;
87 b)
88 BUILD=${OPTARG}
89 ;;
90 r)
91 RELEASE_DIR=${OPTARG}
92 ;;
93 h)
94 RSYNC_USER_HOST=${OPTARG}
95 ;;
96 R)
97 RSYNC_OPTIONS=${OPTARG}
98 ;;
99 P)
100 PUBLIC_KEY_FILE=${OPTARG}
101 ;;
102 c)
103 CHANGE_LOG_FILE=${OPTARG}
104 ;;
105 m)
106 MDG_REPOS=${OPTARG}
107 ;;
108 *)
109 usage
110 exit 1
111 ;;
112 esac
113 done
114
115 BASE_DIR=$REPO_BASE/osm/debian/$RELEASE_DIR
116
117 [ -z "$BUILD" ] && FATAL "missing option: -b <build>"
118
119 BUILD_NUMBER=$(echo "$BUILD" | sed -e 's/.*:: //g')
120
121 dump_vars
122
123 [ -x $JFROG_CLI ] || FATAL "jfrog cli not found. Please install https://www.jfrog.com/getcli/ and use option '-j <jfrog cli location>'"
124
125 $JFROG_CLI rt download --build "$BUILD" osm-release || FATAL "Failed to download"
126
127
128 [ $PASSPHRASE_FILE ] && GPG_PASSPHRASE="--pinentry-mode=loopback --passphrase \"$(cat $PASSPHRASE_FILE)\""
129
130 mkdir -p $BASE_DIR/dists
131
132 cp -R $BUILD_NUMBER/dists/$IN_REPO $BASE_DIR/dists/$OUT_REPO
133 cp -R $BUILD_NUMBER/pool $BASE_DIR/
134
135 echo "copy changelog from $BUILD_NUMBER/changelog to $BASE_DIR/"
136 cp -R $BUILD_NUMBER/changelog $BASE_DIR/
137
138 cd $BASE_DIR
139
140 for i in $MDG_REPOS; do
141
142 # gpg sign the packages
143 dpkg-sig -g "$GPG_PASSPHRASE" -k $GPGKEY --sign builder pool/$i/*.deb
144
145 # mkdir -p dists/stable/$i/binary-amd64/
146 apt-ftparchive packages pool/$i > dists/$OUT_REPO/$i/binary-amd64/Packages
147 rm -f dists/$OUT_REPO/$i/binary-amd64/Packages.gz
148 gzip -9fk dists/$OUT_REPO/$i/binary-amd64/Packages
149 done
150
151 # Generate the root Release
152 # pushd dists/
153 apt-ftparchive release dists/$OUT_REPO > dists/$OUT_REPO/Release
154 #gzip -9fk dists/$OUT_REPO/Release
155
156 rm -f dists/$OUT_REPO/InRelease
157 eval gpg $GPG_PASSPHRASE --default-key $GPGKEY --clearsign -o dists/$OUT_REPO/InRelease dists/$OUT_REPO/Release
158
159 rm -f dists/$OUT_REPO/Release.gpg
160 eval gpg $GPG_PASSPHRASE --default-key $GPGKEY -abs -o dists/$OUT_REPO/Release.gpg dists/$OUT_REPO/Release
161
162 echo "performing rsync of repo $RELEASE_DIR/dist/$OUT_REPO to osm-download.etsi.org:/repos/"
163 cd $CURR_DIR/$REPO_BASE
164
165 # copy over the public key file
166 [ "$PUBLIC_KEY_FILE" ] && cp "$PUBLIC_KEY_FILE" osm/debian/$RELEASE_DIR
167
168 # copy over the changelog file
169 [ "$CHANGE_LOG_FILE" ] && cp "$CHANGE_LOG_FILE" osm/debian/$RELEASE_DIR
170
171 IM_BASE="osm/debian/$RELEASE_DIR/pool/IM/osm-imdocs_"
172 if ls "$IM_BASE"* 1> /dev/null 2>&1; then
173 IM_TMP_DIR=$(mktemp -d)
174 dpkg -x "$IM_BASE"* $IM_TMP_DIR
175 mkdir osm/debian/$RELEASE_DIR/docs
176 cp -R $IM_TMP_DIR/usr/share/osm-im osm/debian/$RELEASE_DIR/docs
177 fi
178
179 rsync -avR $RSYNC_OPTIONS osm/debian/$RELEASE_DIR rsync://$RSYNC_USER_HOST/repos