aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/osmocom-latest-packages.sh
blob: 31fc877263e575f3463afcbb99e81ac060f97d89 (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
#!/bin/sh
# Generate source packages and upload them to OBS, for the latest feed.
# New packages are only uploaded if the source changed.
# Environment variables:
# * PROJ: the OBS namespace to upload to (e.g. "network:osmocom:latest")
# * FEED:
#   * "latest": use latest tagged release (default)
#   * other (e.g. "2021q1"): use last commit of branch of same name, exit with
#     error if it does not exist
# * PACKAGES: set to a space-separated list of packages to skip all others
. "$(dirname "$0")/common.sh"
. "$(dirname "$0")/common-obs.sh"

FEEDS="
  2021q1
  latest
"

set -e
set -x

DT=$(date +%Y%m%d%H%M)
TOP=$(pwd)
DEBSRCDIR="$TOP/debsrc"
FEED="${FEED:-latest}"

### OBS build
prepare() {
  # start with a checkout of the project
  if [ -d $PROJ ]; then
    (cd $PROJ && osc up)
  else
    osc co $PROJ
  fi
  [ -d "$DEBSRCDIR" ] && rm -rf "$DEBSRCDIR"
  mkdir "$DEBSRCDIR"

  cd "$TOP"

  local conflict_args="osmocom-nightly osmocom-next"
  local i
  for i in $FEEDS; do
    if [ "$i" != "$FEED" ]; then
      conflict_args="$conflict_args osmocom-$i"
    fi
  done
  osmo_obs_prepare_conflict "osmocom-$FEED" $conflict_args
}

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

checkout() {
  project=$1
  url=$2
  gitbpargs=""

  if osmo_obs_skip_pkg "$project"; then
    return
  fi

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

  echo
  echo "====> Checking out $project"
  cd "$TOP"
  [ -d "$project" ] || osmo_git_clone_date "$url" "$project"
  cd "$project"
  git fetch

  if [ "$FEED" = "latest" ]; then
    VER=$(get_last_tag "$project")
    git checkout -f -B "$VER" "refs/tags/$VER"
  else
    git checkout -f -B "$FEED" "origin/$FEED"
  fi

  if [ "$project" = "open5gs" ]; then
      meson subprojects download freeDiameter
  fi
}

# Generate a source package and upload it to OBS
# $1: package name (e.g. "libosmocore")
# $2: arguments to pass to "gbp buildpackage"
build() {
  project=$1
  gitbpargs="$2"
  output="$DEBSRCDIR/$project"

  if osmo_obs_skip_pkg "$project"; then
    return
  fi

  echo
  echo "====> Building $project"
  cd "$TOP/$project"

  osmo_obs_git_version_gen

  if [ "$FEED" = "latest" ]; then
    debian_branch=$(get_last_tag "$project")
  else
    debian_branch="$FEED"
    # Set new debian changelog version with commit appended. This version will
    # become part of resulting filenames, and will change if commits have been
    # added to the feed's branch.
    VER="$(osmo_obs_get_commit_version)"
    dch -b -v "$VER" -m "Snapshot build"
    git commit -m "$VER snapshot" debian/
  fi

  osmo_obs_add_depend_deb "./debian/control" "$project" "osmocom-$FEED"

  if [ "$project" = "open5gs" ]; then
    # we cannot control the output directory of the generated source :(
    dpkg-buildpackage -S -uc -us -d
    mkdir -p "$output"
    mv "../$name"*.tar* "../$name"*.dsc "$output"
  elif [ -x ./git-version-gen ]; then
    gbp buildpackage -S -uc -us -d --git-ignore-branch "--git-export-dir=$output" \
		     "--git-debian-branch=$debian_branch" --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=$output" \
		     "--git-debian-branch=$debian_branch" --git-ignore-new $gitbpargs
  fi

  if [ ! -d "$TOP/$PROJ/$project" ] ; then
    # creating a new package is different from using old ones
    mkdir "$TOP/$PROJ/$project"
    mv "$output/"*.dsc "$TOP/$PROJ/$project/"
    mv "$output/"*.tar* "$TOP/$PROJ/$project/"
    cd "$TOP/$PROJ"
    osc add "$project"
  else
    cd "$TOP/$PROJ/$project"

    # update OBS only if the filename doesn't match
    file=$(cd "$output/" ; ls ./*.dsc)
    if [ ! -e "$file" ] ; then
      osc rm ./* || true
      mv "$output/"*.dsc .
      mv "$output/"*.tar* .
      osc add ./*
    fi
  fi

  osmo_obs_add_rpm_spec "$TOP/$PROJ/$project" "$TOP/$project" "$project" "osmocom-$FEED"

  cd "$TOP"
}

# add those once they have tagged any versions that include the 'debian' sub-dir:
#rtl-sdr
#osmo-fl2k

build_osmocom() {
  prepare

  # NOTE: when adding a repository that is not in gerrit, adjust osmo_git_clone_url()
  checkout limesuite https://github.com/myriadrf/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 simtrace2
  checkout libosmo-dsp
  checkout osmo-sysmon
  checkout osmo-remsim
  checkout open5gs https://github.com/open5gs/open5gs
  checkout neocon https://github.com/laf0rge/neocon
  checkout osmo-uecups
  checkout osmo-e1d
  checkout osmo-smlc
  checkout osmo-cbc
  checkout osmo-gbproxy

  cd "$TOP"
  osmo_obs_checkout_copy debian8 osmo-gsm-manuals

  build osmocom-$FEED
  build limesuite --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-sip-connector
  build osmo-bts
  build osmo-pcu
  build osmo-hlr
  build osmo-mgw
  build osmo-msc
  build osmo-bsc
  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

  cd "$TOP/$PROJ"
  osc ci -m "$FEED versions of $DT" --noservice
}

osmo_obs_verify_feed
build_osmocom