Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/bin/local-build-package
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2019-01-27 14:10:35 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2019-01-27 14:10:35 +0100
commit666a393a5771f1361ca58002feaba47fc170c4e5 (patch)
tree417de004e2adb1f92272ba71ec582e19eaa271fd /bin/local-build-package
parent64a860d1769bc269ffa6d239b274fab7402d91ec (diff)
joined the bootstrap and local build script to one script
Diffstat (limited to 'bin/local-build-package')
-rwxr-xr-xbin/local-build-package116
1 files changed, 100 insertions, 16 deletions
diff --git a/bin/local-build-package b/bin/local-build-package
index 1c43bc9..8b02293 100755
--- a/bin/local-build-package
+++ b/bin/local-build-package
@@ -13,19 +13,63 @@ usage() {
>&2 echo ''
>&2 echo 'possible options:'
>&2 echo ' -h|--help: Show this help and exit.'
+ >&2 echo ' -a|--arch "i486" | "i686"'
+ >&2 echo ' Build locally for this architecture.'
+ >&2 echo ' -b|--bootstrap'
+ >&2 echo ' Publishes signed package to the bootstrap directory.'
+ >&2 echo ' -H|--host <user>@<host>: host and user for bootstrapping'
+ >&2 echo ' -D|--dir <dir>: bootstrapping directory'
+ >&2 echo ' $arch and $repo are attached to this path.'
+ >&2 echo ' -p|--port <SSH port>: the SSH port for bootstrapping.'
+ >&2 echo ' -n|--nocheck:'
+ >&2 echo ' Normally execute all checks and do all tests.'
+ >&2 echo ' This switches off check() and all integrity checks.'
[ -z "$1" ] && exit 1 || exit $1
}
eval set -- "$(
- getopt -o hn:t:x \
+ getopt -o a:bhnp:H:D: \
+ --long arch \
+ --long bootstrap \
+ --long nocheck \
+ --long port \
+ --long dir \
+ --long host \
--long help \
-n "$(basename "$0")" -- "$@" || \
echo usage
)"
+bootstrap=false
+nocheck=false
+bootstrap_port=22
+bootstrap_host=''
+bootstrap_dir=''
while true
do
case "$1" in
+ -a|--arch)
+ shift
+ arch="$1"
+ ;;
+ -b|--bootstrap)
+ bootstrap=true
+ ;;
+ -H|--host)
+ shift
+ bootstrap_host="$1"
+ ;;
+ -D|--dir)
+ shift
+ bootstrap_dir="$1"
+ ;;
+ -n|--nocheck)
+ nocheck=true
+ ;;
+ -p|--port)
+ shift
+ bootstrap_port="$1"
+ ;;
-h|--help)
usage 0
;;
@@ -46,6 +90,17 @@ if [ $# -ne 2 ]; then
usage
fi
+if ${bootstrap}; then
+ if [ -z "${bootstrap_host}" ]; then
+ >&2 echo '-b option requires a bootstrapping host to be set with -H'
+ usage
+ fi
+ if [ -z "${bootstrap_dir}" ]; then
+ >&2 echo '-b option requires a bootstrapping directory to be set with -d'
+ usage
+ fi
+fi
+
# Update git repositories (official packages, community packages and the repository of package customizations).
for repo_name in ${repo_names}; do
@@ -56,27 +111,30 @@ done
repository=$1
package=$2
case $repository in
- core)
- repo_path='../work/repos/packages'
- ;;
- extra)
- repo_path='../work/repos/packages'
- ;;
- community)
- repo_path='../work/repos/community'
- ;;
- *)
- >&2 echo 'Repository is either "core" or "community"'
- usage
+ core)
+ repo_path='../work/repos/packages'
+ ;;
+ extra)
+ repo_path='../work/repos/packages'
+ ;;
+ community)
+ repo_path='../work/repos/community'
+ ;;
+ *)
+ >&2 echo 'Repository is either "core" or "community"'
+ usage
esac
git_revision=$(cd ${repo_path}; git rev-parse HEAD)
mod_git_revision=$(cd ${repo_paths__archlinux32}; git stash create)
if [ -z $mod_git_revision ]; then
- mod_git_revision=$(cd ${repo_paths__archlinux32}; git rev-parse HEAD)
+ mod_git_revision=$(cd ${repo_paths__archlinux32}; git rev-parse HEAD)
fi
-build_command='staging-i686-build'
+build_command="staging-${arch}-build"
parameters=''
+if ${nocheck}; then
+ parameters='-- -- --nocheck'
+fi
git_repo=$(find_repository_with_commit "${git_revision}")
find_pkgbuilds "${package}" "${repository}" "${git_repo}" "${git_revision}" "${mod_git_revision}"
@@ -88,8 +146,34 @@ rm -f *".pkg.tar.xz" *".pkg.tar.xz.sig"
cd "${tmp_dir}"
-makepkg --skippgpcheck --verifysource
+makepkg_parameters=''
+if ${nocehck}; then
+ makepkg_parameters='--skippgpcheck'
+fi
+makepkg ${makepkg_parameters} --verifysource
"${build_command}" ${parameters}
+if ${bootstrap}; then
+ find . -maxdepth 1 -type f -name '*.pkg.tar.xz' \
+ -execdir gpg --local-user="${package_key}" --detach-sign '{}' \;
+
+ case "$repository" in
+ core|extra)
+ staging_repo="staging"
+ ;;
+ community)
+ staging_repo="community-staging"
+ ;;
+ *)
+ staging_repo="staging"
+ ;;
+ esac
+
+ scp -P ${bootstrap_port} -rC "${tmp_dir}/"*.pkg.tar.{xz,xz.sig} ${bootstrap_host}:${bootstrap_dir}/${staging_repo}/.
+ ssh -p ${bootstrap_port} ${bootstrap_host} bash -l -c "'cd ${bootstrap_dir}/${staging_repo} && repo-add -n bootstrap-${staging_repo}.db.tar.gz *.pkg.tar.xz'"
+fi
+
+# do not delete build reports, why might actually to want to have a look for things
+# like checksums, logfiles, etc.
#recursively_umount_and_rm "${tmp_dir}"