packages/build-package.sh

110 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# dirs
BUILD_DIR="/mnt/build"
SRC_DIR="/mnt/src"
OUT_DIR="/mnt/out"
TMP_DIR="$(mktemp -d -t medzik-aur-XXXX)"
SCRIPT_DIR="$(realpath "$(dirname "$0")"/scripts)"
# load lib
source "${SCRIPT_DIR}/lib/parse-conf.sh"
source "${SCRIPT_DIR}/lib/build/patches.sh"
# change owner of the directories in /mnt to the current user
sudo chown -R $(id -u) /mnt/*
# makepkg flags
MAKEPKG_SYNCDEPS_FLAGS="--syncdeps --noconfirm --nobuild --noextract"
MAKEPKG_BUILD_FLAGS="--rmdeps --clean --skippgpcheck --nocheck --config /etc/makepkg.${BUILD_ARCH}.conf"
MAKEFLAGS="-j$(nproc)"
echo "[i] Creating /etc/buildtime..."
echo $(date +"%s") | sudo tee /etc/buildtime
cd "${SRC_DIR}"
# directory where temporary files with package names for the build will be created
PACKAGES_TO_BUILD_DIR="${TMP_DIR}/tobuilt"
mkdir -p "${PACKAGES_TO_BUILD_DIR}"
run-build() {
pkgname="${1}"
pkgdir="${SRC_DIR}/packages/${pkgname}"
echo "::group::[i] Building '${pkgname}'"
if [ ! -f "${pkgdir}/PKGBUILD" ]
then
eval "$(parse-conf ${pkgdir})"
aur_name="${AUR_NAME}"
git clone "https://aur.archlinux.org/${aur_name}.git" "${BUILD_DIR}/${pkgname}"
EXIT_CODE="${?}"
if (( ${EXIT_CODE} ))
then
echo "${pkgname} | exit code: ${EXIT_CODE}"
echo "${pkgname} | exit code: ${EXIT_CODE}" >> "${SRC_DIR}/fail_built.txt"
return ${EXIT_CODE}
fi
else
mkdir "${BUILD_DIR}/${pkgname}"
cp -r "${pkgdir}"/* "${BUILD_DIR}/${pkgname}/"
fi
cd "${BUILD_DIR}/${pkgname}"
# run custom patches
echo "[i] Running custom patches..."
patches
echo "[i] Installing dependencies..."
for (( i=0; i<15; i++ ))
do
sudo pacman -Sy
makepkg ${MAKEPKG_SYNCDEPS_FLAGS}
EXIT_CODE="${?}"
if ! (( ${EXIT_CODE} ))
then
break
else
sleep 2
echo "==> Sychronizing dependencies... (attempt $i)"
fi
done
SOURCE_DATE_EPOCH=$(cat /etc/buildtime) BUILDDIR="${BUILD_DIR}/makepkg" PKGDEST="${OUT_DIR}" makepkg ${MAKEPKG_BUILD_FLAGS}
EXIT_CODE="${?}"
if (( ${EXIT_CODE} ))
then
echo "${pkgname} | exit code: ${EXIT_CODE}"
echo "${pkgname} | exit code: ${EXIT_CODE}" >> "${SRC_DIR}/fail_built.txt"
return ${EXIT_CODE}
fi
echo "::endgroup::"
}
# check which packages to build
while IFS= read -r pkg
do
run-build "${pkg}"
done < "${SRC_DIR}/built_packages.txt"
if [ -f "${SRC_DIR}/fail_built.txt" ]
then
printf "\n\nFailed to build:\n"
cat --number "${SRC_DIR}/fail_built.txt"
exit 1
fi