[git-buildpackage] Usage inside pipelines / branches

Denny Fuchs linuxmail at 4lin.net
Tue Jun 7 13:43:28 CEST 2022


Hello,

I used GBP a while without any issues as the structure was pretty 
simple, which means, we had only the master branch and one Debian version.

Now we switched our procedure and working only on a develop branch and 
merge from develop into main/master branch. That was the first part, 
were I run into trouble .. as not all changes where inside the Debian 
packages.
The next problem was, that we want to create Debian packages for 
different version, like Stretch / Buster / ....

Because of the debian/changelog and also some Debian files inside 
debian/ I had always merge conflics ...

So I started to create for every Debian version a own branch, starting 
from the latest master and added all debian/ files

So we have have 4 branches:
-> master
    - For building releases / packages
    - Does not contain any Debian files
-> develop
   - Develoment. All changes were merged later to master
   - Does not contain any Debian files
-> debian/stretch
   - Does contain Debian files
-> debian/buster
   - Does contain Debian files

Everything is done via Gitlab pipelines and using custom "helper" 
script, which holds most commands and has a switch for snapshots and 
releases ...

This script .. works from the build view fine .. but we saw .. that 
often merges / changes are not included ...

Below is the helper script .. which was extended / changed very often ...

But it seems .. I'm doing it more or less wrong ..  and tried so many 
things ... :-)

* What I expecting (example for Debian Stretch)
   - Clone the master branch (done via Gitlab)
   - Checkout debian/stretch
   - Merge **all** changes from origin/master into the debian/branch and 
**overwrite all**, as only debian/ files are maintained inside the branch
   - Build packages either for release (and than start a new version 
number, or snapshot)


I tried first git merge .. but the changes from merges like feature/foo 
-> develop -> master was not included
So switched to rebase .. with -Xtheirs origin/master .. and saw .. that 
again the latest merge from develop -> master was not there ..

I tried from the console .. like:

git clone git at foo:/project
cd project
git checkout debian/stretch
git rebase -Xtheirs origin/master
git pull
gbp import-ref -uHEAD
....

and also .. my changes (in this case gitlab/build_script.sh) is not on 
the branch debian/stretch/

So, here comes the point .. where I think .. I'm doing it all wrong :-)

I have no idea .. how to to get it working right .. to create Debian 
packages for different versions and always include all changes from 
master ...

I know .. it is maybe a Git usage problem .. than a GBP .. But I think 
.. the origin problem is to use GBP on the correct way and I hope, that 
someone can help me :-)



================================================
#!/bin/bash -x

GIT_VERSION=$(git describe --tags)
echo "Git version is $GIT_VERSION"

case $1 in

   snapshot)
     echo "Prepare Git repo for ${DEBIAN_VERSION} snapshot"

     git checkout debian/${DEBIAN_VERSION}
     git pull origin debian/${DEBIAN_VERSION}
     #git merge -s ours origin/master
     git rebase -Xtheirs origin/master
     gbp import-ref -uHEAD
     mk-build-deps --install --remove --tool="$TOOL_ARGS" debian/control
     DEB_VERSION=$(dpkg-parsechangelog --count 1 -S version   | awk -F 
'+' '{print $1}')
     gbp buildpackage --git-upstream-tag='v%(version)s' 
--git-upstream-branch="$CI_COMMIT_REF_NAME"  --git-ignore-branch 
--git-upstream-tree=BRANCH --git-ignore-new --build=all -us -uc 
-rfakeroot --lintian-opts profile debian
     gbp tag --debian-tag='v%(version)s' --ignore-new --retag
     git pull --no-edit
     gbp dch --commit --snapshot --since=HEAD
     gbp push --debian-branch=debian/${DEBIAN_VERSION} 
git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git
     git push --follow-tags git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git
     ;;

   release)
     echo "Prepare Git repo for ${DEBIAN_VERSION} release"
     git checkout debian/${DEBIAN_VERSION}
     CHANGELOG_VERSION=$(dpkg-parsechangelog --count 1 -S version   | 
awk -F '+' '{print $1}' | cut -d'~' -f1)
     TYPE=${2:-2}

     function increment_version() {
       local VERSION="$1"
       local PLACE="$2"

       IFS='.' read -r -a a <<<"$VERSION"
       ((a[PLACE]++))
       echo "${a[0]}.${a[1]}.${a[2]}"
     }

     export DEB_VERSION="$(increment_version $CHANGELOG_VERSION $TYPE)"
     echo "New version is"  $DEB_VERSION
     git checkout debian/${DEBIAN_VERSION}
     git pull origin debian/${DEBIAN_VERSION}
     git rebase -Xtheirs origin/master
     gbp import-ref -uHEAD
     mk-build-deps --install --remove --tool="$TOOL_ARGS" debian/control
     gbp buildpackage --git-upstream-tag='v%(version)s' 
--git-upstream-branch=master  --git-ignore-branch 
--git-upstream-tree=BRANCH --git-ignore-new --build=all -us -uc 
-rfakeroot --lintian-opts profile debian
     gbp tag --debian-tag="debian/${DEBIAN_VERSION}/%(version)s" --retag
     git pull --no-edit
     gbp push --debian-branch=debian/${DEBIAN_VERSION} 
git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git
     gbp dch -R -N $DEB_VERSION --spawn-editor=never --commit
     git push --follow-tags git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git
     ;;
esac

=========================================


cu denny


More information about the git-buildpackage mailing list