#!/bin/sh # build one package to test if modifications are ok (before opening a pull # request in https://github.com/archlinux32/packages) # package is built directly on a i486/i586/i686 host without any chroots # shellcheck source=../lib/load-configuration . "${0%/*}/../lib/load-configuration" # shellcheck disable=SC2016 usage() { >&2 echo '' >&2 echo 'test-build-package : build package for testing' >&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 @: host and user for bootstrapping' >&2 echo ' -D|--dir : bootstrapping directory' >&2 echo ' $arch and $repo are attached to this path.' >&2 echo ' -p|--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 a:bhnp:H:D: \ --long arch \ --long bootstrap \ --long nocheck \ --long port \ --long dir \ --long host \ --long help \ -n "$(basename "$0")" -- "$@" || \ echo usage )" arch=$(uname -m) 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 ;; --) shift break ;; *) >&2 echo 'Whoops, forgot to implement option "'"$1"'" internally.' exit 42 ;; esac shift done if [ $# -ne 2 ]; then >&2 echo 'Too few or too many arguments. Expecting exactly a repository and a package name of the package to test.' 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 eval repo_path='"${repo_paths__'"${repo_name}"'}"' git -C "${repo_path}" pull 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 esac git_revision=$(git -C "${repo_path}" rev-parse HEAD) mod_git_revision=$(git -C "${repo_paths__archlinux32}" stash create) if [ -z "${mod_git_revision}" ]; then mod_git_revision=$(git -C "${repo_paths__archlinux32}" rev-parse HEAD) fi 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}" tmp_dir=$(mktemp -d "${work_dir}/tmp.XXXXXX") extract_source_directory "${git_repo}" "${git_revision}" "${mod_git_revision}" "${tmp_dir}" rm -f ./*".pkg.tar.xz" ./*".pkg.tar.xz.sig" cd "${tmp_dir}" || exit 1 makepkg_parameters='' if ${nocheck}; then makepkg_parameters='--skippgpcheck' fi makepkg ${makepkg_parameters} --verifysource # shellcheck disable=SC2086 "${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 "${tmp_dir}/"*.pkg.tar.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}"