index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
-rwxr-xr-x | bin/local-build-package | 116 |
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}" |