index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
-rwxr-xr-x | bin/local-build-package | 234 |
diff --git a/bin/local-build-package b/bin/local-build-package deleted file mode 100755 index fca63f2..0000000 --- a/bin/local-build-package +++ /dev/null @@ -1,234 +0,0 @@ -#!/bin/bash - -# 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/i686/pentium4 host without any chroots - -# shellcheck source=../lib/load-configuration -. "${0%/*}/../lib/load-configuration" - -# TODO: remove hard-coded package suffixes - -# shellcheck disable=SC2016 -usage() { - >&2 echo '' - >&2 echo 'test-build-package <repository> <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" | "pentium4"' - >&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.' - >&2 echo ' -t|--tmpdir <dir>:' - >&2 echo ' Specify tmpdir instead of using a random one, usually with -N' - >&2 echo ' -N|--nobuild:' - >&2 echo ' Assume packages have already been built, just upload them.' - >&2 echo ' --signkey:' - >&2 echo ' Use explicit sign key instead of the one from the configuration.' - >&2 echo ' -s|--straw $straw:' - >&2 echo ' Use this straw instead of the preconfigured ones. -- May be' - >&2 echo ' given multiple times to allow using multiple straws.' - >&2 echo '' - >&2 echo 'known straws (separated by and enclosed in ":", sets of straws separated by " "):' - >&2 echo ' :with_build_support:' - >&2 echo ' allow using [build-support]' - [ -z "$1" ] && exit 1 || exit "$1" -} - -eval set -- "$( - getopt -o a:bhnNp:H:D:t:s: \ - --long arch \ - --long bootstrap \ - --long nocheck \ - --long nobuild \ - --long port \ - --long dir \ - --long host \ - --long tmpdir \ - --long signkey \ - --long straw \ - --long help \ - -n "$(basename "$0")" -- "$@" || \ - echo usage -)" - -arch=$(uname -m) -bootstrap=false -nocheck=false -nobuild=false -bootstrap_port=22 -bootstrap_host='' -bootstrap_dir='' -tmp_dir=$(mktemp -d "${work_dir}/tmp.XXXXXX") -signkey="${package_key}" -declare -A straws -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 - ;; - -N|--nobuild) - nobuild=true - ;; - -p|--port) - shift - bootstrap_port="$1" - ;; - -t|--tmpdir) - shift - tmp_dir="$1" - ;; - --signkey) - shift - signkey="$1" - ;; - -s|--straw) - shift - straws["$1"]=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 [ "$arch" != "any" ] && [ "$arch" != "i486" ] && [ "$arch" != "i686" ] && [ "$arch" != "pentium4" ]; then - >&2 echo "Illegal architecture '$arch', epxecting one of 'any', 'i486', 'i686' or 'pentium4'." - 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 - -if ! ${nobuild}; then - # 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 - - if [ "${arch}" == 'any' ]; then - upstream_arch='any' - build_arch=$(pacman-conf Architecture) - else - upstream_arch='x86_64' - build_arch="${arch}" - fi - - repository=$1 - package=$2 - git_revision=$( - git -C "${repo_paths__state}" archive HEAD -- "${repository}-${upstream_arch}/${package}" \ - | tar -Ox \ - | cut -d' ' -f4 - ) - - 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 - - if [[ -z "${straws[:with_build_support:]}" ]]; then - build_command="staging-${build_arch}-build" - else - build_command='staging-with-build-support-'"${build_arch}"'-build' - fi - - parameters="-r ${archbuild_chroots}" - if ${nocheck}; then - parameters='-- -- --nocheck' - fi - - extract_source_directory "${repository}" "${git_revision}" "${mod_git_revision}" "${tmp_dir}" '0' - - rm -f \ - ./*"-${arch}.pkg.tar.xz" ./*"-${arch}.pkg.tar.xz.sig" \ - ./*"-${arch}.pkg.tar.zst" ./*"-${arch}.pkg.tar.zst.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} -else - cd "${tmp_dir}" || exit 1 -fi - -if ${bootstrap}; then - rm -f \ - ./*"-${arch}.pkg.tar.xz.sig" \ - ./*"-${arch}.pkg.tar.zst.sig" - - find . -maxdepth 1 -type f -name "*${arch}.pkg.tar.zst" \ - -execdir gpg --local-user="${signkey}" --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}/"*"-${arch}.pkg.tar.zst" "${tmp_dir}/"*"-${arch}.pkg.tar.zst.sig" "${bootstrap_host}:${bootstrap_dir}/${staging_repo}/." - ssh -o PasswordAuthentication=No -p "${bootstrap_port}" "${bootstrap_host}" bash -l -c "'cd ${bootstrap_dir}/${staging_repo} && repo-add -n bootstrap-${staging_repo}.db.tar.gz *-${arch}.pkg.tar.zst'" -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}" |