aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/osmocom-nightly-packages.sh
blob: b9a56a30475178d94b99deea2e0848f67dbb0c47 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
#!/bin/bash
# Generate source packages and upload them to OBS, for the nightly or next feed.
# New packages are always uploaded, even if the source does not change. Only
# packages of the same build date (DT) can be installed together.
# Environment variables:
# * PROJ: the OBS namespace to upload to (e.g. "network:osmocom:nightly")
# * FEED: controls the source branch that is used:
#   * "nightly": use "master" branch (default)
#   * "next": use "next" branch if it exists, otherwise use "master" branch
# * PACKAGES: set to a space-separated list of packages to skip all others
. "$(dirname "$0")/common.sh"
. "$(dirname "$0")/common-obs.sh"

# Values for FEED env var. Adjust FEEDS_ALL in common-obs when changing.
FEEDS="
  next
  nightly
"

set -e
set -x

DT=$(date +%Y%m%d%H%M)
OSMO_OBS_CONFLICT_PKGVER="$OSMO_OBS_CONFLICT_PKGVER.$DT"
TOP=$(pwd)/$(mktemp -d nightly-3g_XXXXXX)
FEED="${FEED:-nightly}"

### OBS build
prepare() {
  # clean up the whole space
  mkdir -p "$REPO/osc/"
  cd "$REPO/osc"
  osc co "$PROJ"

  cd "$REPO"
  osmo_obs_prepare_conflict
}

get_last_tag() {
  project="$1"
  if [ "$project" = "limesuite" ]; then
    ver_regexp="^v[0-9]*.[0-9]*.[0-9]*$"
  else
    ver_regexp="^[0-9]*.[0-9]*.[0-9]*$"
  fi
  VER=$(git -C "${REPO}/${project}" tag -l --sort=v:refname | grep "$ver_regexp" | tail -n 1)
  echo "${VER}"
}

### common
checkout() {
  local name=$1
  local url=$2
  local branch=$3

  if osmo_obs_skip_pkg "$name"; then
    return
  fi

  if [ -z "$url" ]; then
    url="$(osmo_git_clone_url "$name")"
  fi

  cd "$REPO"

  if [ -n "$branch" ] ; then
    osmo_git_clone_date "$url" -b "$branch"
  else
    osmo_git_clone_date "$url"
  fi

  if [ "$FEED" = "next" ] && git -C "$name" show-branch remotes/origin/next >/dev/null 2>&1; then
    git -C "$name" checkout next
  fi

  cd -
}

# Generate a source package and upload it to OBS
# $1: package name (e.g. "libosmocore")
# $2: update debian dir, unless set to "no_commit":
#     * add dependency on osmocom-$FEED package
#     * add new version to changelog (e.g. "1.5.1.96.c96d7.202104281354")
# $3: arguments to pass to "gbp buildpackage"
build() {
  local name=$1
  local changelog=$2
  local gitbpargs=$3
  local repodir=$REPO/$name
  local oscdir=$REPO/osc/$PROJ/$name
  local dependver="$OSMO_OBS_CONFLICT_PKGVER"

  if osmo_obs_skip_pkg "$name"; then
    return
  fi

  if [ -d "$oscdir" ] ; then
    # remove earlier version
    cd "$oscdir"
    osc rm -- * || true
  else
    # new package
    mkdir -p "$oscdir/"
    cd "$REPO/osc/$PROJ/"
    osc add "$name"
  fi

  cd "$repodir"

  if [ "$changelog" != "no_commit" ] ; then
    osmo_obs_git_version_gen
    # Add date to increase version even if commit did not change (OS#5135)
    VER="$(osmo_obs_get_commit_version).$DT"
    osmo_obs_add_depend_deb "./debian/control" "$name" "osmocom-$FEED" "$dependver"
    dch -b -v "$VER" -m "Snapshot build"
    git commit -m "$VER snapshot" debian/
  fi

  mkdir -p "$DATA/$name"
  if [ "$name" = "open5gs" ]; then
    # we cannot control the output directory of the generated source :(
    dpkg-buildpackage -S -uc -us -d
    mv "../$name"*.tar* "../$name"*.dsc "$DATA/$name/"
  elif [ -f .tarball-version ]; then
    gbp buildpackage -S -uc -us -d --git-ignore-branch "--git-export-dir=$DATA/$name" \
		     --git-ignore-new $gitbpargs \
		     --git-postexport='cp $GBP_GIT_DIR/../.tarball-version $GBP_TMP_DIR/'
  else
    gbp buildpackage -S -uc -us -d --git-ignore-branch "--git-export-dir=$DATA/$name" \
		     --git-ignore-new $gitbpargs
  fi

  mv "$DATA/$name/"*.tar* "$DATA/$name/"*.dsc "$oscdir/"

  cd "$oscdir"
  osc add -- *.tar* *.dsc
  osmo_obs_add_rpm_spec "$oscdir" "$repodir" "$name" "osmocom-$FEED" "$dependver"
  osc ci -m "Snapshot $name $DT" --noservice
}

post() {
  cd "$REPO/osc/$PROJ/"
  osc status
}

checkout_limesuite() {
  if osmo_obs_skip_pkg "limesuite"; then
    return
  fi

  cd "$REPO"
  git clone https://github.com/myriadrf/LimeSuite limesuite
  TAG="$(get_last_tag limesuite)"
  cd limesuite
  git checkout "$TAG"
}

checkout_open5gs() {
  if osmo_obs_skip_pkg "open5gs"; then
    return
  fi

  cd "$REPO"
  git clone https://github.com/open5gs/open5gs
  cd open5gs
  meson subprojects download freeDiameter
}

build_osmocom() {
  DATA=$TOP/data
  REPO=$TOP/repo

  # rather than including a dangerous 'rm -rf *' here, lets delegate to the user:
  if [ -n "$(ls $TOP)" ]; then
    echo "ERROR: I need to run in an empty directory."
    exit 1
  fi

  prepare

  # NOTE: when adding a repository that is not in gerrit, adjust osmo_git_clone_url()
  checkout_limesuite
  checkout osmo-gsm-manuals
  checkout libosmocore
  checkout libosmo-sccp
  checkout libosmo-abis
  checkout libosmo-netif
  checkout libsmpp34
  checkout libasn1c
  checkout libgtpnl
  checkout libusrp
  checkout osmo-iuh
  checkout osmo-ggsn
  checkout osmo-sgsn
  checkout osmo-pcap
  checkout osmo-trx
  checkout osmo-sip-connector
  checkout osmo-bts
  checkout osmo-pcu
  checkout osmo-hlr
  checkout osmo-mgw
  checkout osmo-msc
  checkout osmo-bsc
  checkout python/osmo-python-tests
  checkout rtl-sdr
  checkout osmo-fl2k
  checkout simtrace2
  checkout libosmo-dsp
  checkout osmo-sysmon
  checkout osmo-remsim
  checkout_open5gs
  checkout neocon https://github.com/laf0rge/neocon
  checkout osmo-uecups
  checkout osmo-e1d
  checkout osmo-smlc
  checkout osmo-cbc
  checkout osmo-gbproxy

  cd "$REPO"
  osmo_obs_checkout_copy debian8 osmo-gsm-manuals
  osmo_obs_checkout_copy debian8 osmo-trx

  build osmocom-$FEED no_commit
  build limesuite no_commit --git-upstream-tree="$(get_last_tag limesuite)"
  build osmo-gsm-manuals
  build osmo-gsm-manuals-debian8
  build libosmocore
  build libosmo-sccp
  build libosmo-abis
  build libosmo-netif
  build libsmpp34
  build libasn1c
  build libgtpnl
  build libusrp
  build osmo-iuh
  build osmo-ggsn
  build osmo-sgsn
  build osmo-pcap
  build osmo-trx
  build osmo-trx-debian8
  build osmo-sip-connector
  build osmo-bts
  build osmo-pcu
  build osmo-hlr
  build osmo-mgw
  build osmo-msc
  build osmo-bsc
  build osmo-python-tests
  build rtl-sdr
  build osmo-fl2k
  build simtrace2
  build libosmo-dsp
  build osmo-sysmon
  build osmo-remsim
  build open5gs
  build neocon
  build osmo-uecups
  build osmo-e1d
  build osmo-smlc
  build osmo-cbc
  build osmo-gbproxy

  post
}

osmo_obs_verify_feed
build_osmocom