aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/common-obs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/common-obs.sh')
-rw-r--r--scripts/common-obs.sh326
1 files changed, 0 insertions, 326 deletions
diff --git a/scripts/common-obs.sh b/scripts/common-obs.sh
deleted file mode 100644
index 6f96e95..0000000
--- a/scripts/common-obs.sh
+++ /dev/null
@@ -1,326 +0,0 @@
-#!/bin/sh
-# Various common code used in the OBS (opensuse build service) related osmo-ci shell scripts
-. "$(dirname "$0")/common-obs-conflict.sh"
-
-FEEDS_ALL="
- 2021q1
- 2021q4
- 2022q1
- 2022q2
- latest
- next
- nightly
-"
-
-osmo_cmd_require \
- dch \
- dh \
- dpkg-buildpackage \
- gbp \
- git \
- meson \
- mktemp \
- osc \
- patch \
- sed
-
-if [ -z "$PROJ" ]; then
- echo "PROJ environment variable is not set"
- exit 1
-fi
-
-if [ -z "$OBS_SERVER" ]; then
- echo "OBS_SERVER environment variable is not set"
- exit 1
-fi
-
-# Related configuration sections are in .oscrc (OS#5557)
-echo "Using OBS server: $OBS_SERVER"
-shopt -s expand_aliases
-alias osc="osc -A '$OBS_SERVER'"
-
-# Add dependency to all (sub)packages in debian/control and commit the change.
-# $1: path to debian/control file
-# $2: package name (e.g. "libosmocore")
-# $3: dependency package name (e.g. "osmocom-nightly")
-# $4: dependency package version (optional, e.g. "1.0.0.202101151122")
-osmo_obs_add_depend_deb() {
- local d_control="$1"
- local pkgname="$2"
- local depend="$3"
- local dependver="$4"
-
- if [ "$pkgname" = "$depend" ]; then
- echo "NOTE: skipping dependency on itself: $depend"
- return
- fi
-
- if [ -n "$dependver" ]; then
- depend="$depend (= $dependver)"
- fi
-
- # Note: adding the comma at the end should be fine. If there is a Depends: line, it is most likely not empty. It
- # should at least have ${misc:Depends} according to lintian.
- sed "s/^Depends: /Depends: $depend, /g" -i "$d_control"
-
- git -C "$(dirname "$d_control")" commit -m "auto-commit: debian: depend on $depend" .
-}
-
-# Add dependency to all (sub)packages in rpm spec file
-# $1: path to rpm spec file
-# $2: package name (e.g. "libosmocore")
-# $3: dependency package name (e.g. "osmocom-nightly")
-# $4: dependency package version (optional, e.g. "1.0.0.202101151122")
-osmo_obs_add_depend_rpm() {
- local spec="$1"
- local pkgname="$2"
- local depend="$3"
- local dependver="$4"
-
- if [ "$pkgname" = "$depend" ]; then
- echo "NOTE: skipping dependency on itself: $depend"
- return
- fi
-
- if [ -n "$dependver" ]; then
- depend="$depend = $dependver"
- fi
-
- ( while IFS= read -r line; do
- echo "$line"
-
- case "$line" in
- # Main package
- "Name:"*)
- echo "Requires: $depend"
- ;;
- # Subpackages
- "%package"*)
- echo "Requires: $depend"
- ;;
- # Build recipe
- "%build"*)
- if [ -n "$dependver" ]; then
- cat << EOF
-# HACK: don't let rpmlint abort the build when it finds that a library depends
-# on a package with a specific version. The path used here is listed in:
-# https://build.opensuse.org/package/view_file/devel:openSUSE:Factory:rpmlint/rpmlint-mini/rpmlint-mini.config?expand=1
-# Instead of writing to the SOURCES dir, we could upload osmocom-rpmlintrc as
-# additional source for each package. But that's way more effort, not worth it.
-echo "setBadness('shlib-fixed-dependency', 0)" \\
- > "%{_sourcedir}/osmocom-rpmlintrc"
-
-EOF
- fi
- ;;
- esac
- done < "$spec" ) > "$spec.new"
-
- mv "$spec.new" "$spec"
-}
-
-# Copy a project's rpm spec.in file to the osc package dir, set the version/source, depend on the conflicting dummy
-# package and 'osc add' it
-# $1: oscdir (path to checked out OSC package)
-# $2: repodir (path to git repository)
-# $3: package name (e.g. "libosmocore")
-# $4: dependency package name (e.g. "osmocom-nightly")
-# $5: dependency package version (optional, e.g. "1.0.0.202101151122")
-osmo_obs_add_rpm_spec() {
- local oscdir="$1"
- local repodir="$2"
- local name="$3"
- local depend="$4"
- local dependver="$5"
- local spec_in="$(find "$repodir" -name "$name.spec.in")"
- local spec="$oscdir/$name.spec"
- local tarball
- local version
- local epoch
-
- if [ -z "$spec_in" ]; then
- echo "WARNING: RPM spec missing: $name.spec.in"
- return
- fi
-
- cp "$spec_in" "$spec"
-
- osmo_obs_add_depend_rpm "$spec" "$name" "$depend" "$dependver"
-
- # Set version and epoch from "Version: [EPOCH:]VERSION" in .dsc
- version="$(grep "^Version: " "$oscdir"/*.dsc | cut -d: -f2- | xargs)"
- case $version in
- *:*)
- epoch=$(echo "$version" | cut -d : -f 1)
- version=$(echo "$version" | cut -d : -f 2)
- ;;
- esac
- if [ -n "$epoch" ]; then
- sed -i "s/^Version:.*/Version: $version\nEpoch: $epoch/g" "$spec"
- else
- sed -i "s/^Version:.*/Version: $version/g" "$spec"
- fi
-
- # Set source file
- tarball="$(cd "$oscdir" && ls -1 *_*.tar.*)"
- sed -i "s/^Source:.*/Source: $tarball/g" "$spec"
-
- osc add "$spec"
-}
-
-# Get the path to a distribution specific patch, either from osmo-ci.git or from the project repository.
-# $PWD must be the project repository dir.
-# $1: distribution name (e.g. "debian8")
-# $2: project repository (e.g. "osmo-trx", "limesuite")
-osmo_obs_distro_specific_patch() {
- local distro="$1"
- local repo="$2"
- local ret
-
- ret="$OSMO_CI_DIR/obs-patches/$repo/build-for-$distro.patch"
- if [ -f "$ret" ]; then
- echo "$ret"
- return
- fi
-
- ret="debian/patches/build-for-$distro.patch"
- if [ -f "$ret" ]; then
- echo "$ret"
- return
- fi
-}
-
-# Check if checkout or build of a given package should be skipped, based on the
-# PACKAGES environment variable.
-# $1: package name (e.g. "libosmocore")
-osmo_obs_skip_pkg() {
- local pkgname="$1"
-
- if [ -z "$PACKAGES" ]; then
- # Don't skip
- return 1
- fi
-
- for i in "osmocom-$FEED" $PACKAGES; do
- if [ "$i" = "$pkgname" ]; then
- return 1
- fi
- done
-
- # Skip
- return 0
-}
-
-# Copy an already checked out repository dir and apply a distribution specific patch.
-# $PWD must be where all repositories are checked out in subdirs.
-# $1: distribution name (e.g. "debian8")
-# $2: project repository (e.g. "osmo-trx", "limesuite")
-osmo_obs_checkout_copy() {
- local distro="$1"
- local repo="$2"
- local patch
-
- if osmo_obs_skip_pkg "$repo"; then
- return
- fi
-
- echo
- echo "====> Checking out $repo-$distro"
-
- # Verify distro name for consistency
- local distros="
- debian8
- debian10
- "
- local found=0
- local distro_i
- for distro_i in $distros; do
- if [ "$distro_i" = "$distro" ]; then
- found=1
- break
- fi
- done
- if [ "$found" -eq 0 ]; then
- echo "ERROR: invalid distro name: $distro, should be one of: $distros"
- exit 1
- fi
-
- # Copy
- if [ -d "$repo-$distro" ]; then
- rm -rf "$repo-$distro"
- fi
- cp -a "$repo" "$repo-$distro"
- cd "$repo-$distro"
-
- # Commit patch
- patch="$(osmo_obs_distro_specific_patch "$distro" "$repo")"
- if [ -z "$patch" ]; then
- echo "ERROR: no patch found for distro=$distro, repo=$repo"
- exit 1
- fi
- patch -p1 < "$patch"
- git commit -m "auto-commit: apply $patch" debian/
- cd ..
-}
-
-# Run git-version-gen inside Osmocom repositories, so the .tarball-version
-# becomes part of the source repository. Usually this would be done with
-# "make dist", but we use git-buildpackage instead.
-osmo_obs_git_version_gen() {
- if [ -x ./git-version-gen ]; then
- ./git-version-gen . > .tarball-version 2>/dev/null
- fi
-}
-
-# Return a version based on the latest tag and commit (e.g. "1.5.1.93.47cc")
-# or fall back to the last debian version (e.g. "2.2.6"). Run
-# osmo_obs_git_version_gen before. $PWD must be inside a git repository.
-osmo_obs_get_commit_version() {
- local version=""
-
- if [ -e ".tarball-version" ]; then
- version=$(cat .tarball-version)
- # debian doesn't allow '-' in version.
- version=$(echo "$version" | sed 's/-/./g' )
- fi
-
- # deb version
- deb_version=$(head -1 debian/changelog | cut -d ' ' -f 2 | sed 's,(,,' | sed 's,),,')
- if [ -z "$version" ] || [ "$version" = "UNKNOWN" ]; then
- version="$deb_version"
- else
- # add epoch from debian/changelog
- case $deb_version in
- *:*)
- epoch=$(echo "$deb_version" | cut -d : -f 1)
- version=$epoch:$version
- ;;
- esac
- fi
-
- echo -n "$version"
-}
-
-# Verify that $FEED is in $FEEDS and $FEEDS_ALL
-osmo_obs_verify_feed() {
- local i
- local j
-
- for i in $FEEDS; do
- if [ "$i" != "$FEED" ]; then
- continue
- fi
-
- for j in $FEEDS_ALL; do
- if [ "$j" = "$i" ]; then
- return
- fi
- done
-
- echo "feed found in FEEDS but not FEEDS_ALL: $FEED"
- exit 1
- done
-
- echo "unsupported feed: $FEED"
- exit 1
-}