diff options
Diffstat (limited to 'utils')
| -rwxr-xr-x | utils/aur/aur-check-update.py (renamed from utils/aur-check-update.py) | 0 | ||||
| -rwxr-xr-x | utils/aur/check-aur.py (renamed from utils/check-aur.py) | 0 | ||||
| -rwxr-xr-x | utils/ci-upload.sh | 38 | ||||
| -rwxr-xr-x | utils/deploy.sh | 18 | ||||
| -rwxr-xr-x | utils/pkgbuild.sh | 152 | ||||
| -rwxr-xr-x | utils/repodb.sh | 34 |
6 files changed, 242 insertions, 0 deletions
diff --git a/utils/aur-check-update.py b/utils/aur/aur-check-update.py index 3188aea..3188aea 100755 --- a/utils/aur-check-update.py +++ b/utils/aur/aur-check-update.py diff --git a/utils/check-aur.py b/utils/aur/check-aur.py index 6749f69..6749f69 100755 --- a/utils/check-aur.py +++ b/utils/aur/check-aur.py diff --git a/utils/ci-upload.sh b/utils/ci-upload.sh new file mode 100755 index 0000000..69f19cd --- /dev/null +++ b/utils/ci-upload.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# end up when failed +set -Eeuo pipefail + +# clean up when exit +trap cleanup SIGINT SIGTERM ERR EXIT +cleanup() { + trap - SIGINT SIGTERM ERR EXIT + unset ARCH + unset PKGDEST +} + +ARCH=$(uname -m) +PKGDEST="${PWD}/packages/$ARCH" + +if [ $(find $PKGDEST -name \*.pkg\* | wc -l) -eq 0 ]; then + echo -e "\033[0;31mCould not find any packaged packages, skip upload\033[0m" + exit 0 +fi + +curl -d "token=$UPLOAD_TOKEN&action=REQUIRE_CLEAN&arch=$ARCH" -fsSL "$REMOTE_PATH" + +pushd $PKGDEST + +for file in *.pkg*; do + echo "Start upload package $file size: $(ls -lh $file | awk '{print $5}')..." + curl -F "file=@$file" -F "token=$UPLOAD_TOKEN" -F "arch=$ARCH" -fsSL "$REMOTE_PATH" + #echo "Stop upload package $file" +done + +popd + +curl -d "token=$UPLOAD_TOKEN&action=UPLOADED&arch=$ARCH" -fsSL "$REMOTE_PATH" + +if [ -r .fail ]; then + exit 2; +fi diff --git a/utils/deploy.sh b/utils/deploy.sh new file mode 100755 index 0000000..462cfdf --- /dev/null +++ b/utils/deploy.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# end up when failed +set -Eeuo pipefail + +if [ $# -eq 0 ]; then + echo 'Should provide least one argument' + exit 1 +fi + +if [ -z ${SSH_CLIENT+x} ]; then + ADDITIONAL_PARAM="--partial" +else + ADDITIONAL_PARAM="-Pv" +fi + +/usr/bin/date +%s > "packages/LASTSYNC" +/usr/bin/rsync $ADDITIONAL_PARAM -r -c --update --links --delete --exclude=.gitignore "packages/" $1:/var/www/repo/ diff --git a/utils/pkgbuild.sh b/utils/pkgbuild.sh new file mode 100755 index 0000000..86965dd --- /dev/null +++ b/utils/pkgbuild.sh @@ -0,0 +1,152 @@ +#!/bin/bash + +# end up when failed +set -Eeuo pipefail + +# clean up when exit +trap cleanup SIGINT SIGTERM ERR EXIT +cleanup() { + trap - SIGINT SIGTERM ERR EXIT + unset SIGNING_ARG + unset UNSUCCESSFUL + unset SKIP_VERIFIED + unset FOLDER_NAME + unset PKGDEST + unset SRCDEST + unset CONFDEST + unset REPO_DEST + rm -f "$TMPCONF" + if ! { [ $# -gt 0 ] && [ "$1" = "--diff" ]; }; then + rm -f "$REPO_DIFF" + fi + unset TMPCONF + unset REPO_PENDING + unset REPO_DIFF + unset PKGBUILD_DIRECTORY_BASE + unset ARCH +} + +function hook { + if [ -r ../.hook/"$1" ]; then + echo "Running $1 Hook script" + . ../.hook/"$1" + fi +} + +ARCH=$(uname -m) +PKGBUILD_DIRECTORY_BASE="repo" +PKGDEST="${PWD}/packages/$ARCH" +SRCDEST="${PWD}/build" +CONFDEST="${PWD}/makepkg.d/makepkg.$ARCH.conf" +REPO_DIFF="${PWD}/packages/$ARCH/DIFF" +SKIP_VERIFIED=1 +UNSUCCESSFUL=0 +SIGNING_ARG="" + +TMPCONF=$(mktemp -t makepkg.$ARCH.conf.XXXXXXXXXX) || exit 1 +cat "${PWD}/makepkg.d/makepkg.base.conf" > "$TMPCONF" +cat "$CONFDEST" >> "$TMPCONF" + +touch "$REPO_DIFF" + +function get_diff_list { + git diff --name-only HEAD^ | while read line; do + if [[ $line =~ $PKGBUILD_DIRECTORY_BASE/\..+ ]] && [ "$line" != "$PKGBUILD_DIRECTORY_BASE/.verified_repos" ]; then + echo "$line" | cut -d'/' -f3 >> "$REPO_DIFF" + elif [[ $line =~ $PKGBUILD_DIRECTORY_BASE ]]; then + echo "$line" | cut -d'/' -f2 >> "$REPO_DIFF" + fi + done + cp "$REPO_DIFF" "${REPO_DIFF}_tmp" + sort -u "${REPO_DIFF}_tmp" > "$REPO_DIFF" + rm -f "${REPO_DIFF}_tmp" +} + +if [ $# -gt 0 ] && [ "$1" = "--diff" ]; then + get_diff_list + exit 0 +fi + +if [ "$EUID" -eq 0 ] ; then + echo "\033[0;32mPlease run this script as non-root\033[0m" + exit 3 +fi + +if [ $# -gt 0 ] && [ "$1" = "--all" ] || [ -n "$CI_COMMIT_TITLE" ] && [[ $CI_COMMIT_TITLE =~ fix\(repo\)|REBUILD ]]; then + if [ -z "${FORCE_ALL+x}" ] || [ -n "$CI_COMMIT_TITLE" ] && [[ $CI_COMMIT_TITLE =~ REBUILD(\ |_)ALL ]]; then + SKIP_VERIFIED=0 + fi + ls $PKGBUILD_DIRECTORY_BASE > "$REPO_DIFF" +else + get_diff_list +fi + +if [ -n "$CI_DEFAULT_BRANCH" ] && [ -n "$CI_DEFAULT_BRANCH" ] && [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then + SIGNING_ARG="-s" +else + echo -e "\033[0;32mSkip signing package\033[0m" +fi + +pushd $PKGBUILD_DIRECTORY_BASE || ( echo -e "\033[0;31mError, can't switch to pkgbuild directory\033[0m" && exit 1 ) + +while read -r FOLDER_NAME ; do + if [ ! -d "$FOLDER_NAME" ]; then + echo -e "\033[0;32mSkip folder $FOLDER_NAME\033[0m" + continue + fi + echo -e "\033[0;32mProcessing $FOLDER_NAME\033[0m" + pushd "$FOLDER_NAME" || { echo -e "\033[1;33mWarning, can't chdir to $FOLDER_NAME, skipped\033[0m"; continue; } + + # hook must run before other checker + hook "$FOLDER_NAME" + + # Check PKGBUILD architecture + if ! ( pcregrep -M 'arch=\([^\)]*\)' PKGBUILD | grep -E "$ARCH|any" >/dev/null ); then + echo -e "\033[0;32mSkip folder $FOLDER_NAME (Architecture not match)\033[0m" + popd + continue + fi + + if [ -n "$CI_COMMIT_TITLE" ] && [[ $CI_COMMIT_TITLE =~ fix\(repo\)|REBUILD ]] && \ + [ $SKIP_VERIFIED -eq 1 ] && grep -Fxq "$FOLDER_NAME" "../.verified_repos"; then + echo -e "\033[0;32mSkip folder $FOLDER_NAME (verified repository)\033[0m" + popd + continue + fi + + if [ -r ../.yaydeps/"$FOLDER_NAME" ]; then + while read -r YAYDEP ; do + if [ -d "../$YAYDEP" ]; then + pushd "../$YAYDEP" + hook "$YAYDEP" + SRCPKGDEST=$SRCDEST SRCDEST=$SRCDEST PKGDEST=$PKGDEST MAKEPKG_CONF="$TMPCONF" makepkg --clean -i $SIGNING_ARG --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" + # source: https://stackoverflow.com/a/53886735 + gpg --list-keys --fingerprint | grep pub -A 1 | grep -Ev "pub|--" | tr -d ' ' \ + | awk 'BEGIN { FS = "\n" } ; { print $1":6:" } ' | gpg --import-ownertrust + fi + + SRCPKGDEST=$SRCDEST SRCDEST=$SRCDEST PKGDEST=$PKGDEST MAKEPKG_CONF="$TMPCONF" makepkg --clean $SIGNING_ARG --asdeps --noconfirm --needed --noprogressbar || { echo -e "\033[0;31mSkip folder $FOLDER_NAME\033[0m"; UNSUCCESSFUL=1; } + popd +done < "$REPO_DIFF" + +popd + +date +%s > "$PKGDEST/LASTBUILD" + +if [ $UNSUCCESSFUL -eq 1 ]; then + if [ -n "$CI_DEFAULT_BRANCH" ] && [ -n "$CI_DEFAULT_BRANCH" ] && [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then + touch .fail + else + echo -e "\033[0;31mExit due makepkg failed\033[0m" + exit 2 + fi +fi diff --git a/utils/repodb.sh b/utils/repodb.sh new file mode 100755 index 0000000..212b137 --- /dev/null +++ b/utils/repodb.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# end up when failed +set -Eeuo pipefail + +# clean up when exit +trap cleanup SIGINT SIGTERM ERR EXIT +cleanup() { + trap - SIGINT SIGTERM ERR EXIT + unset ARCH + unset PKGDEST + unset REPO_DEST + unset GPG_KEY + unset PACKAGE_NAME + unset LATEST +} + +if [ -z $ARCH ]; then + ARCH=$(uname -m) + echo "Warning: You should specify arch environment variable, use current platform: $ARCH" +fi + +REPO_BASE_NAME="kunoisayami" +#ARCH=$(uname -m) +REPO_DEST="${PWD}/packages/$ARCH/$REPO_BASE_NAME.db.tar.xz" +GPG_KEY="4A0F0C8BC709ACA4341767FB243975C8DB9656B9" + +while read PACKAGE_NAME; do + #LATEST=$(ls -t "$PKGDEST/$PACKAGE_NAME"* | grep -v ".sig" | head -n 1 | cut -d' ' -f1) + if [ -z $PACKAGE_NAME ]; then + continue + fi + repo-add "$REPO_DEST" "$PACKAGE_NAME" -s -v -R -k $GPG_KEY +done |
