aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKunoi Sayami <[email protected]>2021-11-01 23:13:09 +0800
committerGitHub <[email protected]>2021-11-01 23:13:09 +0800
commit9a3255c44047fcea27f6922639585aa5ddae32e6 (patch)
treeb1bff8073139f5a2643e4643ebb8fb7b7ed2ae0c
parent1e6b0bcbde4cc242269997065e8ddab26ca5dbc6 (diff)
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 <[email protected]>
-rw-r--r--.gitlab-ci.yml13
-rwxr-xr-xdocker/dockerbuild.sh8
-rw-r--r--docker/dockerfile8
-rwxr-xr-xpkgbuild.sh50
-rwxr-xr-xrepo/.gpg_keys/linux-zen-x86-64-v32
-rw-r--r--repo/.verified_repos5
-rw-r--r--repo/.yaydeps/obs-linuxbrowser-bin1
-rw-r--r--repo/.yaydeps/pam_ssh_agent_auth_patched1
8 files changed, 69 insertions, 19 deletions
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