#!/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 # * 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" # Values for FEED env var. Adjust FEEDS_ALL in common-obs when changing. FEEDS=" 2021q1 2021q4 2022q1 2022q2 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 if [ -z "$branch" ]; then case "$FEED" in nightly|next) ;; *) branch="$FEED" ;; # e.g. 2021q1 esac 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 checkout osmo-hnodeb checkout osmo-hnbgw checkout osmo-bsc-nat cd "$REPO" build osmocom-$FEED no_commit build limesuite no_commit --git-upstream-tree="$(get_last_tag limesuite)" build osmo-gsm-manuals 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 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 build osmo-hnodeb build osmo-hnbgw build osmo-bsc-nat post } osmo_obs_verify_feed build_osmocom