[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