From 9a3255c44047fcea27f6922639585aa5ddae32e6 Mon Sep 17 00:00:00 2001 From: Kunoi Sayami Date: Mon, 1 Nov 2021 23:13:09 +0800 Subject: feat(build): [REBUILD] Enhance AUR dependencies resolve way (#11) * refactor(script): Change the way of retrieve aur dependencies and gpg key * fix(docker): Fix docker not init pacman keys * feat(build): Add a way to reduce rebuild workload Signed-off-by: KunoiSayami --- .gitlab-ci.yml | 13 +++++---- docker/dockerbuild.sh | 8 +++++ docker/dockerfile | 8 ++++- pkgbuild.sh | 50 +++++++++++++++++++++++--------- repo/.gpg_keys/linux-zen-x86-64-v3 | 2 ++ repo/.verified_repos | 5 ++++ repo/.yaydeps/obs-linuxbrowser-bin | 1 + repo/.yaydeps/pam_ssh_agent_auth_patched | 1 + 8 files changed, 69 insertions(+), 19 deletions(-) create mode 100755 repo/.gpg_keys/linux-zen-x86-64-v3 create mode 100644 repo/.verified_repos create mode 100644 repo/.yaydeps/obs-linuxbrowser-bin create mode 100644 repo/.yaydeps/pam_ssh_agent_auth_patched diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index de7e558..7ffba06 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,20 +16,23 @@ build: expire_in: 1 day only: changes: + - .gitlab-ci.yml + - pkgbuild.sh - repo/**/* script: - - pacman --noconfirm --needed -Syu base-devel gnupg git + - echo -e '\n[archlinuxcn]\nServer = https://repo.archlinuxcn.org/$arch\n' >> /etc/pacman.conf + - pacman-key --init + - pacman --noconfirm --needed -Sy archlinuxcn-keyring + - pacman --noconfirm --needed -Su base-devel gnupg git yay - git submodule update --init - useradd -m build - echo 'build ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers #- cp -r ../$CI_PROJECT_TITLE /home/build/ #- cd /home/build/$CI_PROJECT_TITLE - - chown -R build:build ../$CI_PROJECT_TITLE - - su -c "bash -c 'cd repo/pod2man && makepkg -si --noconfirm'" build - - su -c "bash -c 'cd repo/gconf && makepkg -si --noconfirm'" build + - chown -R build:build ../$CI_PROJECT_TITLE - su -c 'echo $GPG_PRIV_KEY | base64 -d | gpg --import' build - - su -c 'BUILD_ONLY='' ./pkgbuild.sh' build + - su -c './pkgbuild.sh' build - rm -rf build/ # only push to master master trigger push diff --git a/docker/dockerbuild.sh b/docker/dockerbuild.sh index 5ae4880..ec933f5 100755 --- a/docker/dockerbuild.sh +++ b/docker/dockerbuild.sh @@ -5,16 +5,23 @@ set -Eeuo pipefail cd /home/build git clone --depth=3 https://github.com/kunoisayami/repos +pushd repos +git submodule update --init +popd + if [ $UID -eq 0 ]; then chown -R build:build repos + echo "$TARGET_HOSTS" | base64 -d >> /etc/hosts else + echo -e "\n[archlinuxcn]\nServer = https://repo.archlinuxcn.org/$$arch\n" | sudo tee -a /etc/pacman.conf echo "$TARGET_HOSTS" | base64 -d | sudo tee -a /etc/hosts >/dev/null fi pushd repos if [ $UID -eq 0 ]; then + su -c "echo $GPG_PRIV_KEY | base64 -d | gpg --import" build pushd repo/pod2man @@ -24,6 +31,7 @@ if [ $UID -eq 0 ]; then su -c 'BUILD_ONLY="" ./pkgbuild.sh' build su -e -c './ci-upload.sh' build + else echo $GPG_PRIV_KEY | base64 -d | gpg --import diff --git a/docker/dockerfile b/docker/dockerfile index 4ae53aa..87fe5d1 100644 --- a/docker/dockerfile +++ b/docker/dockerfile @@ -1,6 +1,12 @@ FROM repobuildbase:latest -RUN pacman --noconfirm --needed -Syu base-devel gnupg git +RUN echo -e "\n[archlinuxcn]\nServer = https://repo.archlinuxcn.org/$$arch\n" >> /etc/pacman.conf + +RUN pacman-key --init + +RUN pacman --noconfirm --needed -Sy archlinuxcn-keyring + +RUN pacman --noconfirm --needed -Su base-devel gnupg git yay RUN useradd -m build diff --git a/pkgbuild.sh b/pkgbuild.sh index c7c3888..3779a57 100755 --- a/pkgbuild.sh +++ b/pkgbuild.sh @@ -7,13 +7,13 @@ set -Eeuo pipefail trap cleanup SIGINT SIGTERM ERR EXIT cleanup() { trap - SIGINT SIGTERM ERR EXIT - unset PACKAGE_NAME + unset SKIP_VERIFIED + unset FOLDER_NAME unset PKGDEST unset SRCDEST unset CONFDEST unset REPO_DEST rm -f "$TMPCONF" - rm -f "$REPO_PENDING" rm -f "$REPO_DIFF" unset TMPCONF unset REPO_PENDING @@ -27,15 +27,14 @@ PKGBUILD_DIRECTORY_BASE="repo" PKGDEST="${PWD}/packages/$ARCH" SRCDEST="${PWD}/build" CONFDEST="${PWD}/makepkg.d/makepkg.$ARCH.conf" -REPO_PENDING="${PWD}/packages/$ARCH/PENDING" REPO_DIFF="${PWD}/packages/$ARCH/DIFF" +SKIP_VERIFIED=0 TMPCONF=$(mktemp -t makepkg.$ARCH.conf.XXXXXXXXXX) || exit 1 cat "${PWD}/makepkg.d/makepkg.base.conf" > "$TMPCONF" cat "$CONFDEST" >> "$TMPCONF" touch "$REPO_DIFF" -touch "$REPO_PENDING" function get_diff_list { git diff --name-only HEAD^ | while read line; do @@ -53,7 +52,10 @@ if [ $# -gt 0 ] && [ "$1" = "--diff" ]; then exit 0 fi -if [ $# -gt 0 ] && [ "$1" = "--all" ] || [ -n "$CI_COMMIT_TITLE" ] && [[ $CI_COMMIT_TITLE =~ "fix(repo)" ]]; then +if [ $# -gt 0 ] && [ "$1" = "--all" ] || [ -n "$CI_COMMIT_TITLE" ] && [[ $CI_COMMIT_TITLE =~ fix\(repo\)|REBUILD ]]; then + if [ -z "${SKIP_SOME+x}" ] || [ -n "$CI_COMMIT_MESSAGE" ] && [[ $CI_COMMIT_MESSAGE =~ \[SKIP\ SOME\] ]]; then + SKIP_VERIFIED=1 + fi ls $PKGBUILD_DIRECTORY_BASE > "$REPO_DIFF" else get_diff_list @@ -61,24 +63,46 @@ fi pushd $PKGBUILD_DIRECTORY_BASE || ( echo "Error, can't switch to pkgbuild directory" && exit 1 ) -while read PACKAGE_NAME ; do - #PACKAGE_NAME=$(printf $folder | sed 's/.$//') - pushd "$PACKAGE_NAME" || continue +while read FOLDER_NAME ; do + if [ ! -d "$FOLDER_NAME" ]; then + continue + fi + pushd "$FOLDER_NAME" || continue + # Check PKGBUILD architecture if ! ( pcregrep -M 'arch=\([^\)]*\)' PKGBUILD | grep -E "$ARCH|any" >/dev/null ); then popd continue fi - SRCPKGDEST=$SRCDEST SRCDEST=$SRCDEST PKGDEST=$PKGDEST MAKEPKG_CONF="$TMPCONF" makepkg --clean -s --asdeps --noconfirm --needed --noprogressbar - echo "$PACKAGE_NAME" >> "$REPO_PENDING" + + if [ $SKIP_VERIFIED -eq 1 ] && grep -Fxq "$FOLDER_NAME" "../.verified_repos"; then + popd + continue + fi + + if [ -r ../.yaydeps/"$FOLDER_NAME" ]; then + while read YAYDEP ; do + if [ -d "../$YAYDEP" ]; then + pushd "../$YAYDEP" + SRCPKGDEST=$SRCDEST SRCDEST=$SRCDEST PKGDEST=$PKGDEST MAKEPKG_CONF="$TMPCONF" makepkg --clean -si --asdeps --noconfirm --needed --noprogressbar + popd + else + yay -S --noconfirm --needed --asdeps "$YAYDEP" + fi + done < ../.yaydeps/"$FOLDER_NAME" + fi + + if [ -r ../.gpg_keys/"$FOLDER_NAME" ]; then + . ../.gpg_keys/"$FOLDER_NAME" + fi + + SRCPKGDEST=$SRCDEST SRCDEST=$SRCDEST PKGDEST=$PKGDEST MAKEPKG_CONF="$TMPCONF" makepkg --clean -s --asdeps --noconfirm --needed --noprogressbar || echo "Skip $FOLDER_NAME" popd done < "$REPO_DIFF" popd if [ -z "${BUILD_ONLY+x}" ]; then - ./repodb.sh < "$REPO_PENDING" -else - echo "Add package to database is skipped" + echo "This option is depreacted, this script isn't process repository database now" fi date +%s > "$PKGDEST/LASTBUILD" diff --git a/repo/.gpg_keys/linux-zen-x86-64-v3 b/repo/.gpg_keys/linux-zen-x86-64-v3 new file mode 100755 index 0000000..f3cd26a --- /dev/null +++ b/repo/.gpg_keys/linux-zen-x86-64-v3 @@ -0,0 +1,2 @@ +#!/bin/bash +gpg --recv-keys --keyserver pgp.mit.edu 3B94A80E50A477C7 \ No newline at end of file diff --git a/repo/.verified_repos b/repo/.verified_repos new file mode 100644 index 0000000..6745e7f --- /dev/null +++ b/repo/.verified_repos @@ -0,0 +1,5 @@ +chisel +telegram-bot-api +r8125-dkms +pam_ssh_agent_auth_patched +mozjpeg \ No newline at end of file diff --git a/repo/.yaydeps/obs-linuxbrowser-bin b/repo/.yaydeps/obs-linuxbrowser-bin new file mode 100644 index 0000000..d1b719d --- /dev/null +++ b/repo/.yaydeps/obs-linuxbrowser-bin @@ -0,0 +1 @@ +gconf \ No newline at end of file diff --git a/repo/.yaydeps/pam_ssh_agent_auth_patched b/repo/.yaydeps/pam_ssh_agent_auth_patched new file mode 100644 index 0000000..b40da9a --- /dev/null +++ b/repo/.yaydeps/pam_ssh_agent_auth_patched @@ -0,0 +1 @@ +pod2man \ No newline at end of file -- cgit v1.3.1