# ---------------------------------------------------------------------------- #
## \file package.yml
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
stages:
- build # build
- test # test build
- package # build package
- install # install package
- rbuild # build on remote (build host)
- rtest # test build on remote (build host)
- rpackage # build package on remote (build host)
- rinstall # install remote package on remote host
- rdeploy # install package from build host to target host
- stest # tests with remote service installed
- xbuild # cross build
- xpackage # cross build package
- xdeploy # install cross-builded package
- xinstall # install cross-compiled binary (reinstall project binary)
- xtest # tests with remote package or binary installed
- rxbuild # remote cross build (for old cross compilers)
- rxpackage # remote cross build package
- rxdeploy # remote install cross-builded package
- rxinstall # remote install cross-compiled binary
variables:
HOST: ubuntu2404
BUILD: Debug
NOCLEAN: 0
CMAKE: cmake .. -DCMAKE_BUILD_TYPE=$BUILD
PROJECT: example
VERSION: 1.0.0
STRIP: strip
RSYNC: >
rsync --checksum --delete -a -i
--exclude=*~
--exclude=build
--exclude=build-*
--exclude=__pycache__
--exclude=.git
--exclude=.svn
URI: example@ip
SSH: vagrant ssh -c
SCP: scp
USERPATH: /vagrant/.vagrant
SCPTARGET: $URI:$USERPATH/
HDIR: ../hosts
BDIR: build
BHOST: $HOST
XCVER: 12
XCDIR: /data
PRIVKEY: $HOME/.ssh/id_rsa
APT: apt-get -y -o APT::Sandbox::User=root
.keychain:
script:
- >
test ! -f $PRIVKEY || test -d /run/lock/.keychain ||
TMPDIR=/run/lock keychain --dir /run/lock --nogui $PRIVKEY
- test ! -f $PRIVKEY || source /run/lock/.keychain/*-sh
build:
stage: build
except:
variables:
- $PROJECT =~ '/^lib/'
script:
- mkdir -p build
- cd build
- $CMAKE
- test $NOCLEAN = 1 || make --no-print-directory clean
- make --no-print-directory -j`nproc`
package:
stage: package
except:
variables:
- $PROJECT =~ '/^lib/'
script:
- export DEBEMAIL=$DEBEMAIL
- export DEBFULLNAME=$DEBFULLNAME
- >
test -n "$DEBEMAIL" ||
export DEBEMAIL=`git config --global --get user.email`
- >
test -n "$DEBFULLNAME" ||
export DEBFULLNAME=`git config --global --get user.name`
- mkdir -p $BDIR/$PROJECT-$VERSION/data
- cd $BDIR/$PROJECT-$VERSION
- dh_make --native --single --yes || true
- rm -f debian/README*
- cat /dev/null >debian/$PROJECT.install
- test ! -d ../../debian-nr || cp -L ../../debian-nr/* debian/
- test ! -d ../../data || cp -L ../../data/* data/
- test ! -d ../../share || cp -a ../../share/* data/
- find .. -maxdepth 1 -type f -executable -exec cp {} data/ \;
- >
test ! -f ../$PROJECT ||
echo "data/$PROJECT /usr/bin/" >>debian/$PROJECT.install
- >
test ! -d ../../share || ls ../../share |
sed "s#\(.*\)#data/\1 /usr/share/$PROJECT/#" >>debian/$PROJECT.install
- SOURCE_DATE_EPOCH=`date +%s` dpkg-buildpackage --no-sign $OPTS
install:
stage: install
script:
- sudo $APT reinstall ./build/${PROJECT}_${VERSION}_amd64.deb
rbuild:
stage: rbuild
script:
- PROPATH=$(basename `readlink -f .`)
- $RSYNC ./ $HDIR/$BHOST/.vagrant/$PROPATH/
- $RSYNC ../makefiles $HDIR/$BHOST/.vagrant/
- cd $HDIR/$BHOST
- >
$SSH "cd $USERPATH/$PROPATH &&
make build BUILD=$BUILD NOCLEAN=$NOCLEAN CMAKE='$CMAKE' &&
(test $BUILD = Debug || $STRIP build/$PROJECT)"
rtest:
stage: rtest
before_script:
- PROPATH=$(basename `readlink -f .`)
- $RSYNC ./ $HDIR/$BHOST/.vagrant/$PROPATH/
- $RSYNC ../makefiles $HDIR/$BHOST/.vagrant/
- cd $HDIR/$BHOST
- $SSH "cd $USERPATH/$PROPATH && build/$PROJECT" &
- sleep 1
- IP=`make --no-print-directory get-ip`
- cd -
rpackage:
stage: rpackage
script:
- PROPATH=$(basename `readlink -f .`)
- $RSYNC ./ $HDIR/$BHOST/.vagrant/$PROPATH/
- $RSYNC ../makefiles $HDIR/$BHOST/.vagrant/
- cd $HDIR/$BHOST
- $SSH "cd $USERPATH/$PROPATH && make package"
rinstall:
stage: rinstall
script:
- PROPATH=$(basename `readlink -f .`)
- cd $HDIR/$BHOST
- >
$SSH "cd $USERPATH/$PROPATH &&
sudo $APT reinstall ./build/${PROJECT}_${VERSION}_amd64.deb"
rdeploy:
stage: rdeploy
script:
- PROPATH=$(basename `readlink -f .`)
- test -n "$XC" || BDIR=.vagrant/$PROPATH/build
- test -n "$XC" || cd $HDIR/$BHOST
- !reference [.keychain, script]
- $SCP $BDIR/${PROJECT}_${VERSION}_*.deb $SCPTARGET
- test -n "$SUDOPASS" || read -s SUDOPASS
- >
$SSH "! systemctl -q is-active $PROJECT ||
echo $SUDOPASS | sudo -S -p \"wait\" systemctl stop $PROJECT"
- >
$SSH "cd $USERPATH && echo $SUDOPASS | sudo -S
$APT reinstall ./${PROJECT}_${VERSION}_*.deb"
stest:
stage: stest
before_script:
- cd $HDIR/$HOST
- IP=`make --no-print-directory get-ip`
- cd -
xbuild:
stage: xbuild
variables:
XC: aarch64-linux-gnu
script:
- mkdir -p build-$XC
- cd build-$XC
- $CMAKE -DXC=$XC -DXCVER=$XCVER -DXCDIR=$XCDIR
- test $NOCLEAN = 1 || make --no-print-directory clean
- make --no-print-directory -j`nproc`
xpackage:
stage: xpackage
extends: package
variables:
XC: aarch64-linux-gnu
before_script:
- BDIR=build-$XC
- test "$XC" != "aarch64-linux-gnu" || ARCH=arm64
- test "$XC" != "arm-linux-gnueabihf" || ARCH=armhf
- CONFIG_SITE=/etc/dpkg-cross/cross-config.$ARCH
- OPTS=-a$ARCH
- export DEB_BUILD_OPTIONS=nocheck
- export XC=$XC
- export XCVER=$XCVER
- export XCDIR=$XCDIR
- export CC=$XC
xdeploy:
stage: xdeploy
extends: rdeploy
variables:
XC: aarch64-linux-gnu
before_script:
- BDIR=build-$XC
xinstall:
stage: xinstall
variables:
XC: aarch64-linux-gnu
script:
- test -n "$BLIST" || BLIST=$PROJECT
- BDIR=build-$XC
- !reference [.keychain, script]
- cd $BDIR
- $SCP $BLIST $SCPTARGET
- test -n "$SUDOPASS" || read -s SUDOPASS
- >
$SSH "cd $USERPATH && echo $SUDOPASS | sudo -S true && echo &&
sudo cp $BLIST /usr/bin/"
xtest:
stage: xtest
before_script:
- cd $HDIR/$HOST
- $SSH "/usr/bin/$PROJECT" &
- sleep 2
- IP=`make --no-print-directory get-ip`
- cd -
rxbuild:
stage: rxbuild
variables:
XC: aarch64-linux-gnu
XCDIR: /vagrant/.vagrant
script:
- PROPATH=$(basename `readlink -f .`)
- $RSYNC ./ $HDIR/$BHOST/.vagrant/$PROPATH/
- $RSYNC ../makefiles $HDIR/$BHOST/.vagrant/
- cd $HDIR/$BHOST
- >
$SSH "cd $USERPATH/$PROPATH &&
make xbuild BUILD=$BUILD NOCLEAN=$NOCLEAN CMAKE='$CMAKE'
XC=$XC XCVER=$XCVER XCDIR=$XCDIR &&
(test $BUILD = Debug || $STRIP build-$XC/$PROJECT)"
rxpackage:
stage: rxpackage
variables:
XC: aarch64-linux-gnu
XCDIR: /vagrant/.vagrant
script:
- PROPATH=$(basename `readlink -f .`)
- $RSYNC ./ $HDIR/$BHOST/.vagrant/$PROPATH/
- $RSYNC ../makefiles $HDIR/$BHOST/.vagrant/
- cd $HDIR/$BHOST
- $SSH "cd $USERPATH/$PROPATH &&
make xpackage XC=$XC XCVER=$XCVER XCDIR=$XCDIR"
rxdeploy:
stage: rxdeploy
extends: rdeploy
variables:
XC: aarch64-linux-gnu
before_script:
- PROPATH=$(basename `readlink -f .`)
- BDIR=$HDIR/$BHOST/.vagrant/$PROPATH/build-$XC
rxinstall:
stage: rxinstall
variables:
XC: aarch64-linux-gnu
script:
- test -n "$BLIST" || BLIST=$PROJECT
- PROPATH=$(basename `readlink -f .`)
- BDIR=$HDIR/$BHOST/.vagrant/$PROPATH/build-$XC
- !reference [.keychain, script]
- cd $BDIR
- $SCP $BLIST $URI:/run/user/1000/
- test -n "$SUDOPASS" || read -s SUDOPASS
- >
$SSH "cd /run/user/1000 && echo $SUDOPASS | sudo -S true && echo &&
sudo mv $BLIST /usr/bin/"