You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.8 KiB
Bash

#!/bin/bash
# I use this script to build and publish deb packages in ppa:mikhailnov/pulseeffects (https://launchpad.net/~mikhailnov/+archive/ubuntu/pulseeffects)
# I publish it to allow other people to use it and make it possible to maintain a new PPA easily in case I stop doing it for some reason
# I think, it can also be used for maintaining packages in mainline Debian (minor modifications required)
pkg_name="duma-ssh-central-auth"
# this allows the script to be ran both from the root of the source tree and from ./debian directory
dir_start="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
if [ "$(basename "${dir_start}")" = 'debian' ]; then
cd ..
fi
debian/rules clean
dir0="$(pwd)"
old_header=$(head -1 ./debian/changelog)
old_format_source=$(cat ./debian/source/format)
tmp_suffix="buildPPA_$(date +%s)_tmp"
for i in xenial bionic focal groovy hirsute
do
old_version="$(cat ./debian/changelog | head -n 1 | awk -F "(" '{print $2}' | awk -F ")" '{print $1}')"
new_version="${old_version}~${i}1"
real_version="$(echo "$old_version" | cut -d'-' -f1)"
sed -i -re "s/${old_version}/${new_version}/g" ./debian/changelog
sed -i -re "1s/unstable/$i/" ./debian/changelog
if grep -q '(git)' ./debian/source/format; then
GIT=1
old_source_format="$(cat ./debian/source/format)"
# TODO: Launchpad PPA does not accept in '3.0 (git)' for some reasons
rm -fv ./debian/source/format
git add .
# dpkg-buildpackage also tries to diff current git vs tarball if it finds it in ../
while read line
do
# TODO: check if target file already exists
mv -v "$line" "${line}.${tmp_suffix}"
done < <(find ../ -maxdepth 1 -name "${pkg_name}_${real_version}.orig.tar*")
fi
# -I to exclude .git; -d to allow building .changes file without build dependencies installed
dpkg-buildpackage -I -S -sa -d
sed -i -re "1s/.*/${old_header}/" ./debian/changelog
[ "$GIT" = 1 ] && git reset
[ -n "$old_source_format" ] && echo "$old_source_format" > ./debian/source/format
# dpkg-buildpackage also tries to diff current git vs tarball if it finds it in ../
while read line
do
new_name="$(echo "$line" | sed -e "s/.${tmp_suffix}$//g")"
# TODO: check if target file already exists
mv -v "$line" "$new_name"
done < <(find ../ -maxdepth 1 -name "*.${tmp_suffix}")
cd ..
# change PPA names to yours, you may leave only one PPA; I upload pulseeffects to 2 different PPAs at the same time
for ppa_name in ppa:mikhailnov/utils
do
# example file name: pulseeffects_4.4.3-1~bionic1_source.changes
if [ -f "${pkg_name}_${new_version}_source.changes" ]
then dput -f "$ppa_name" "${pkg_name}_${new_version}_source.changes"
else echo ".changes file ${pkg_name}_${new_version}_source.changes not found, not uploading anything!"
fi
done
cd "$dir0"
sleep 1
done
debian/rules clean
cd "$dir_start"