forked from Spark/builder
Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
0af6624ba1 | |||
df93a9bd80 | |||
b42e62d9d6 | |||
99bba5c866 | |||
c9740dac87 | |||
0a31377fcd | |||
8adeef05bc | |||
0181a1099f | |||
179080a377 | |||
86539bce14 | |||
a90a326af1 | |||
e449b6a3e4 | |||
f0b451030f | |||
b7379871e9 | |||
81664a9400 | |||
162ef2ffe1 | |||
1fa31d3e0f | |||
407501dc8a | |||
dcac04661b | |||
4a548d05e1 | |||
22f33ba2c6 | |||
e8f71b2eb1 | |||
d1b08a83be | |||
0fc6927784 | |||
b5843c81ec | |||
3eb3afaa3a | |||
057aa4ff86 | |||
222adcc7bc | |||
125903dbcd | |||
d42669565c | |||
ca73f5eeaf | |||
cba181007b | |||
1f2b2e3c6d | |||
271ba6b62e | |||
9f1e311b5e | |||
d07c3748a9 | |||
e96427f2ad | |||
b923682b75 | |||
ba4a4199e2 | |||
449509113f | |||
2f3ab1be25 | |||
0570c6bf8f | |||
5c8aa3407c | |||
46b91d02bf | |||
477140947f | |||
ce66eb51e1 | |||
76cac367e9 | |||
5a6687534c | |||
c65a29fc63 | |||
22accf3f20 | |||
d3fcb9b4ee | |||
6f7f61122c | |||
7f7da9e665 |
65
README.md
Normal file
65
README.md
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
Spark autobuilder
|
||||||
|
=================
|
||||||
|
|
||||||
|
To use the build scripts, grab the latest Spark rootfs in one of the following ways:
|
||||||
|
```
|
||||||
|
curl -sL https://spark.fleshless.org/rootfs/latest.tar.xz | podman import - localhost/spark
|
||||||
|
# or
|
||||||
|
git clone https://code.fleshless.org/Spark/spark-rootfs.git; cd spark-rootfs; podman build --rm -t localhost/spark .
|
||||||
|
```
|
||||||
|
|
||||||
|
Then build a builder image from `./autobuilder`:
|
||||||
|
```
|
||||||
|
cd ./autobuilder; podman build --rm -t localhost/spark:autobuilder .
|
||||||
|
```
|
||||||
|
|
||||||
|
Example for Arch images:
|
||||||
|
```
|
||||||
|
cd autobuilder
|
||||||
|
podman build --build-arg BASEIMAGE=docker.io/archlinux:base-devel --rm -t localhost/arch:autobuilder .
|
||||||
|
|
||||||
|
PODMAN_IMAGE=localhost/arch:autobuilder makepkg-ci /tmp/pkg https://code.fleshless.org/PKGBUILDs/ssm-git
|
||||||
|
```
|
||||||
|
|
||||||
|
makepkg-podman
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Builds Arch packages using `podman`. Takes the image name in the `PODMAN_IMAGE` env var.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
```
|
||||||
|
[PODMAN_IMAGE=<image>] makepkg-podman [makepkg_args]
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
git clone https://code.fleshless.org/PKGBUILDs/ssm-git /tmp/ssm-git
|
||||||
|
cd /tmp/ssm-git
|
||||||
|
makepkg-podman -sL
|
||||||
|
```
|
||||||
|
|
||||||
|
makepkg-ci
|
||||||
|
----------
|
||||||
|
|
||||||
|
Builds Arch packages from a git repo using `makepkg-podman` and puts the packages into `dest`.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
```
|
||||||
|
[PODMAN_IMAGE=<image>] makepkg-ci <dest> <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```
|
||||||
|
makepkg-ci /tmp/artifacts https://code.fleshless.org/PKGBUILDs/ssm-git
|
||||||
|
```
|
||||||
|
|
||||||
|
pkgbuilder
|
||||||
|
----------
|
||||||
|
|
||||||
|
Tracks given git repos for changes and builds packages on updates.
|
||||||
|
`pkgbuilder.conf` goes into `$XDG_CONFIG_HOME/pkgbuilder/config`
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
```
|
||||||
|
pkgbuilder
|
||||||
|
```
|
11
autobuilder/Containerfile
Normal file
11
autobuilder/Containerfile
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
ARG BASEIMAGE=localhost/spark
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
|
COPY ./mirrorlist /etc/pacman.d/mirrorlist
|
||||||
|
COPY gnupg /.gnupg
|
||||||
|
COPY ./build /build
|
||||||
|
|
||||||
|
RUN pacman -Sy --noconfirm archlinux-keyring
|
||||||
|
RUN pacman -Suy --noconfirm base-devel nodejs git
|
||||||
|
|
||||||
|
RUN chmod 700 /.gnupg
|
9
autobuilder/README.md
Normal file
9
autobuilder/README.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
autobuilder image
|
||||||
|
=================
|
||||||
|
|
||||||
|
For some packages, you might need to import some pgp keys into the image. Use the `./gnupg` directory to do so, then rebuild the image:
|
||||||
|
|
||||||
|
```
|
||||||
|
GNUPGHOME=./gnupg gpg --recv-keys <keyid>
|
||||||
|
podman build --rm -t localhost/spark:autobuilder .
|
||||||
|
```
|
35
autobuilder/build
Executable file
35
autobuilder/build
Executable file
|
@ -0,0 +1,35 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
chown -R root:root /buildroot
|
||||||
|
}
|
||||||
|
|
||||||
|
# Upgrade
|
||||||
|
pacman -Suy --noconfirm
|
||||||
|
|
||||||
|
# Create a builder user
|
||||||
|
useradd -U builder
|
||||||
|
builder_uid=$(id -u builder)
|
||||||
|
builder_gid=$(id -g builder)
|
||||||
|
|
||||||
|
# dir permissions
|
||||||
|
chown -R "$builder_uid:$builder_gid" /.gnupg /buildroot
|
||||||
|
|
||||||
|
# Return the permissions on exit
|
||||||
|
trap cleanup INT TERM EXIT
|
||||||
|
|
||||||
|
# Add sudo permissions for pacman to install dependencies
|
||||||
|
printf '%s ALL=(ALL) NOPASSWD: /usr/bin/pacman\n' 'builder' > /etc/sudoers.d/builduser
|
||||||
|
|
||||||
|
# Workdir
|
||||||
|
cd /buildroot
|
||||||
|
|
||||||
|
# Install all additional packages
|
||||||
|
deps=( ./deps/* )
|
||||||
|
[[ $deps ]] && pacman -U "${deps[@]}"
|
||||||
|
|
||||||
|
# Build the damn thing
|
||||||
|
sudo -u builder GNUPGHOME="/.gnupg" makepkg "$@"
|
||||||
|
|
||||||
|
chown -R root:root /buildroot/
|
3
autobuilder/build-container
Executable file
3
autobuilder/build-container
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
podman build . -t 'spark:autobuilder'
|
0
autobuilder/gnupg/.empty
Normal file
0
autobuilder/gnupg/.empty
Normal file
7
autobuilder/mirrorlist
Normal file
7
autobuilder/mirrorlist
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Fleshless
|
||||||
|
Server = https://mirror.fleshless.org/arch/$repo/os/$arch
|
||||||
|
|
||||||
|
# Backup
|
||||||
|
Server = https://mirror.pkgbuild.com/$repo/os/$arch
|
||||||
|
Server = https://mirror.pseudoform.org/$repo/os/$arch
|
||||||
|
Server = https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch
|
70
lxf
70
lxf
|
@ -1,70 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
mkconf() {
|
|
||||||
for i in "${includes[@]}"; do
|
|
||||||
echo "lxc.include = $lxf_conf_dir/$i.conf"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "lxc.rootfs.path = $lxf_cont_dir/$cont_name/rootfs"
|
|
||||||
echo "lxc.uts.name = $cont_name"
|
|
||||||
}
|
|
||||||
|
|
||||||
mount_cont() {
|
|
||||||
ov-mount -n "$cont_name" "$rootfs" "$cont_dir/rootfs"
|
|
||||||
}
|
|
||||||
|
|
||||||
lxf_conf_dir='/etc/lxf/conf'
|
|
||||||
lxf_cont_dir='/var/lib/lxf/cont'
|
|
||||||
lxf_rootfs_dir='/var/lib/lxf/fs'
|
|
||||||
|
|
||||||
[[ -f '/etc/lxf.conf' ]] && source '/etc/lxf.conf'
|
|
||||||
|
|
||||||
while (( $# )); do
|
|
||||||
case $1 in
|
|
||||||
(-i) includes+=( "$2" ); shift;;
|
|
||||||
(-r) rootfs="$2"; shift;;
|
|
||||||
|
|
||||||
(--cont-dir) lxf_cont_dir=$2; shift;;
|
|
||||||
(--conf-dir) lxf_conf_dir=$2; shift;;
|
|
||||||
|
|
||||||
(--) shift; break;;
|
|
||||||
(-*) echo "Unknown key: $1" >&2: exit 1;;
|
|
||||||
(*) break;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
action=$1; shift; [[ $action ]] || exit 1
|
|
||||||
cont_name=$1; shift; [[ $cont_name ]] || exit 1
|
|
||||||
|
|
||||||
cont_dir="$lxf_cont_dir/$cont_name"
|
|
||||||
|
|
||||||
case $action in
|
|
||||||
(create|new)
|
|
||||||
[[ "$rootfs" ]] || exit 1
|
|
||||||
rootfs="$lxf_rootfs_dir/$rootfs"
|
|
||||||
|
|
||||||
[[ -d "$cont_dir" ]] && {
|
|
||||||
printf 'Container already exists: %s\n' "$cont_dir" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
mkdir -p "$cont_dir" || exit $?
|
|
||||||
|
|
||||||
mkconf > "$cont_dir/config"
|
|
||||||
mount_cont
|
|
||||||
;;
|
|
||||||
|
|
||||||
(mount)
|
|
||||||
mountpoint -q "$cont_dir/rootfs" && {
|
|
||||||
printf 'Container already mounted: %s\n' "$cont_dir/rootfs" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
mount_cont
|
|
||||||
;;
|
|
||||||
|
|
||||||
(umount) umount "$cont_dir/rootfs";;
|
|
||||||
esac
|
|
32
makepkg-ci
Executable file
32
makepkg-ci
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
cleanup() { rm -rf "$tmpdir"; }
|
||||||
|
trap 'cleanup' EXIT
|
||||||
|
|
||||||
|
did="pkg-build-$$.$SRANDOM"
|
||||||
|
tmpdir="/tmp/$did"
|
||||||
|
mkdir "$tmpdir"
|
||||||
|
|
||||||
|
pkg_dest=$1
|
||||||
|
pkg_url=$2
|
||||||
|
|
||||||
|
mkdir -p "$pkg_dest" || exit 1
|
||||||
|
|
||||||
|
git clone "$pkg_url" "$tmpdir"
|
||||||
|
cd "$tmpdir"
|
||||||
|
makepkg-podman --noconfirm -sL
|
||||||
|
|
||||||
|
artifacts=( "$tmpdir/"*.pkg.* )
|
||||||
|
for i in "${artifacts[@]}"; do
|
||||||
|
i_name="${i##*/}"
|
||||||
|
|
||||||
|
printf 'Found artifact: %s\n' "$i_name"
|
||||||
|
|
||||||
|
if [[ -f "$pkg_dest/$i_name" ]]; then
|
||||||
|
printf '%s/%s already exists, not overwriting.\n' "$pkg_dest" "$i_name"
|
||||||
|
else
|
||||||
|
printf 'Copying %s to %s.\n' "$i_name" "$pkg_dest"
|
||||||
|
cp -vn "$i" "$pkg_dest"
|
||||||
|
fi
|
||||||
|
done
|
|
@ -1,68 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
# Depends on lxf
|
|
||||||
shopt -s nullglob
|
|
||||||
|
|
||||||
cleanup() { lxf umount "$cnt"; }
|
|
||||||
|
|
||||||
buildscript() {
|
|
||||||
cat <<- EOF
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
# The builder user is already created in the rootfs
|
|
||||||
|
|
||||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
|
|
||||||
export LC_ALL=en_US.UTF-8
|
|
||||||
|
|
||||||
# Network
|
|
||||||
dhcpcd eth0
|
|
||||||
|
|
||||||
# Upgrade
|
|
||||||
pacman -Suy --noconfirm
|
|
||||||
|
|
||||||
# Build dir
|
|
||||||
mkdir -m777 /buildroot
|
|
||||||
|
|
||||||
# Build the damn thing
|
|
||||||
cd /buildroot
|
|
||||||
sudo -u builder git clone "$pkg_url" .
|
|
||||||
sudo -u builder makepkg -s --noconfirm -L
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# Config
|
|
||||||
wrk_dir='/home/lxc'
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
pkg_url=$1
|
|
||||||
pkg_dest=$2
|
|
||||||
cnt="_makepkg.$$"
|
|
||||||
cnt_dir="$wrk_dir/containers/$cnt"
|
|
||||||
|
|
||||||
# Create new container
|
|
||||||
lxf -r builder -i base new "$cnt" || exit $?
|
|
||||||
|
|
||||||
# Unmount the thing in any case
|
|
||||||
trap 'cleanup' INT TERM EXIT
|
|
||||||
|
|
||||||
# Add the build script
|
|
||||||
buildscript > "$cnt_dir/rootfs/init"
|
|
||||||
chmod 755 "$cnt_dir/rootfs/init"
|
|
||||||
|
|
||||||
# Start the container
|
|
||||||
lxc-start -n "$cnt" -F /init || exit $?
|
|
||||||
|
|
||||||
# Put the artifacts where asked to
|
|
||||||
[[ "$pkg_dest" ]] && {
|
|
||||||
artifacts=( "$cnt_dir/rootfs/buildroot/"*.pkg.* )
|
|
||||||
|
|
||||||
for i in "${artifacts[@]}"; do
|
|
||||||
i_name="${i##*/}"
|
|
||||||
|
|
||||||
printf 'Found artifact: %s\n' "$i_name"
|
|
||||||
|
|
||||||
if [[ -f "$pkg_dest/$i_name" ]]; then
|
|
||||||
echo "$pkg_dest/$i_name already exists, not overwriting."
|
|
||||||
else
|
|
||||||
cp -vn "$i" "$pkg_dest"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
14
makepkg-podman
Executable file
14
makepkg-podman
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
image=${PODMAN_IMAGE:-localhost/spark:autobuilder}
|
||||||
|
|
||||||
|
podman_cmd=(
|
||||||
|
podman run --rm -it -u root
|
||||||
|
-v "$PWD:/buildroot"
|
||||||
|
--workdir /buildroot
|
||||||
|
--name "autobuilder.$$"
|
||||||
|
--env "BUILDUSER=$USER"
|
||||||
|
"$image" /build "$@"
|
||||||
|
)
|
||||||
|
|
||||||
|
"${podman_cmd[@]}"
|
57
pkgbuilder
57
pkgbuilder
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
err() { printf '%s\n' "$*" >&2; }
|
err() { printf '%s\n' "$*" >&2; }
|
||||||
|
|
||||||
build_remote() { sudo makepkg-overlay "$@"; }
|
build_remote() { makepkg-ci "$@"; }
|
||||||
cleanup() { rm -f "$lockfile"; }
|
cleanup() { rm -f "$lockfile"; }
|
||||||
|
|
||||||
lock() {
|
lock() {
|
||||||
|
@ -21,57 +21,8 @@ lockfile="$HOME/.cache/pkgbuilder/.lock"
|
||||||
lock || exit 1
|
lock || exit 1
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
spark_repos="$HOME/public"
|
|
||||||
|
|
||||||
declare -A pkg_dests
|
declare -A pkg_dests
|
||||||
pkg_dests=(
|
source "$HOME/.config/pkgbuilder/config"
|
||||||
[spark]="$spark_repos/spark/import"
|
|
||||||
[spark-extra]="$spark_repos/spark-extra/import"
|
|
||||||
[spark-testing]="$spark_repos/spark-testing/import"
|
|
||||||
[spark-updates]="$spark_repos/spark-updates/spark/import"
|
|
||||||
)
|
|
||||||
|
|
||||||
repos=(
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/sinit-spark"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/sinit-sysvcompat"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/smdev"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/spark-etc"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/spark-rc"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/ssm"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/ssm-services-git"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/systemd-dummy"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/ubase-extras"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/udev-dummy"
|
|
||||||
spark "https://code.fleshless.org/pkgbuilds/xorg-noudev-conf"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/anope-services"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/chef-client"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/dmenu-q-xywh-xft-git"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/dxvk-bin"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/eudev"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/fake"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/graphicsmagick-webp"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/ircd-ratbox"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/lemonbar"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/libsystemd-standalone"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/loksh"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/mlmmj"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/nginx-mod-rtmp"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/posh"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/prm"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/qstat"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/scron"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/sx-utils"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/systemd-libs-systemd"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/ufw-tools"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/xkb-layout-ducky-mini"
|
|
||||||
spark-extra "https://code.fleshless.org/pkgbuilds/xsct-git"
|
|
||||||
spark-testing "https://code.fleshless.org/pkgbuilds/compton-git"
|
|
||||||
spark-testing "https://code.fleshless.org/pkgbuilds/fskit-git"
|
|
||||||
spark-testing "https://code.fleshless.org/pkgbuilds/ssm-git"
|
|
||||||
spark-testing "https://code.fleshless.org/pkgbuilds/xtitle-git"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wrkdir="$HOME/.cache/pkgbuilder/repositories"
|
wrkdir="$HOME/.cache/pkgbuilder/repositories"
|
||||||
mkdir -p "$wrkdir"
|
mkdir -p "$wrkdir"
|
||||||
|
@ -93,11 +44,11 @@ while (($#>1)); do
|
||||||
mkdir -p "$wrkdir/${repo_path%$repo_name}"
|
mkdir -p "$wrkdir/${repo_path%$repo_name}"
|
||||||
git clone "$pkg_repo" "$repo_local"
|
git clone "$pkg_repo" "$repo_local"
|
||||||
|
|
||||||
build_remote "$pkg_repo" "$pkg_dest"
|
build_remote "$pkg_dest" "$pkg_repo"
|
||||||
else
|
else
|
||||||
git -C "$repo_local" remote update
|
git -C "$repo_local" remote update
|
||||||
if git -C "$repo_local" status --porcelain -bu | grep -q behind; then
|
if git -C "$repo_local" status --porcelain -bu | grep -q behind; then
|
||||||
build_remote "$pkg_repo" "$pkg_dest"
|
build_remote "$pkg_dest" "$pkg_repo"
|
||||||
git -C "$repo_local" pull
|
git -C "$repo_local" pull
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
16
pkgbuilder.config
Normal file
16
pkgbuilder.config
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# Example config for pkgbuilder
|
||||||
|
|
||||||
|
spark_repos="$HOME/public"
|
||||||
|
|
||||||
|
pkg_dests=(
|
||||||
|
[spark]="$spark_repos/spark/import"
|
||||||
|
[spark-extra]="$spark_repos/spark-extra/import"
|
||||||
|
[spark-testing]="$spark_repos/spark-testing/import"
|
||||||
|
[spark-updates]="$spark_repos/spark-updates/spark/import"
|
||||||
|
)
|
||||||
|
|
||||||
|
repos=(
|
||||||
|
spark "https://code.fleshless.org/pkgbuilds/sinit-spark"
|
||||||
|
spark-extra "https://code.fleshless.org/pkgbuilds/anope-services"
|
||||||
|
spark-testing "https://code.fleshless.org/pkgbuilds/ssm-git"
|
||||||
|
)
|
83
repo-clean
83
repo-clean
|
@ -1,83 +0,0 @@
|
||||||
#!/usr/bin/bash
|
|
||||||
shopt -s nullglob
|
|
||||||
|
|
||||||
parse_pkg_filename() {
|
|
||||||
declare filename=$1
|
|
||||||
declare -a filename_array
|
|
||||||
|
|
||||||
IFS='-' read -r -a filename_array <<< "$filename"
|
|
||||||
|
|
||||||
for (( i=${#filename_array[@]}; i>=0; i-- )); do
|
|
||||||
printf '%s ' "${filename_array[$i]}"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
is_latest() {
|
|
||||||
declare filename=$1 p
|
|
||||||
|
|
||||||
for p in "${latest[@]}"; do
|
|
||||||
if [[ "$filename" == "$p" ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
_pacsort() {
|
|
||||||
declare i
|
|
||||||
|
|
||||||
for i in *.pkg.tar.xz; do
|
|
||||||
printf '%s\n' "$i"
|
|
||||||
done | pacsort -f
|
|
||||||
}
|
|
||||||
|
|
||||||
while (( $# )); do
|
|
||||||
case "$1" in
|
|
||||||
-r) flag_rm=1;;
|
|
||||||
-d) flag_debug=1;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if ! (( flag_rm )); then
|
|
||||||
if ! [[ -d old ]]; then
|
|
||||||
mkdir -p old || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
read -d '' -r -a package_files < <( _pacsort )
|
|
||||||
|
|
||||||
for f in "${package_files[@]}"; do
|
|
||||||
unset revision version end package_name
|
|
||||||
|
|
||||||
read -r end revision version _ < <(parse_pkg_filename "$f")
|
|
||||||
package_name=${f%%-$version-$revision*}
|
|
||||||
|
|
||||||
declare -g -A latest["$package_name"]="$package_name-$version-$revision-$end"
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in ${package_files[@]}; do
|
|
||||||
if is_latest "$f"; then
|
|
||||||
(( flag_debug )) && printf '%s is the latest version available\n' "$f"
|
|
||||||
else
|
|
||||||
printf 'Removing: %s\n' "$f"
|
|
||||||
|
|
||||||
if (( flag_rm )); then
|
|
||||||
rm -f "$f" "${f}.sig"
|
|
||||||
else
|
|
||||||
mv "$f" old/
|
|
||||||
|
|
||||||
if [[ -f "${f}.sig" ]]; then
|
|
||||||
mv "${f}.sig" old/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -d old ]]; then
|
|
||||||
cd old
|
|
||||||
exec bash "$0" -r
|
|
||||||
fi
|
|
|
@ -1,48 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
shopt -s nullglob
|
|
||||||
|
|
||||||
lockfile='.mainenance.lock'
|
|
||||||
|
|
||||||
usage() { echo "$0 <repo_name>"; }
|
|
||||||
|
|
||||||
spark_repo=$1
|
|
||||||
[[ "$spark_repo" ]] || {
|
|
||||||
usage
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup() { rm -f "$lockfile"; }
|
|
||||||
|
|
||||||
lock() {
|
|
||||||
[[ -f "$lockfile" ]] && {
|
|
||||||
printf 'Lockfile found: %s\n' "$lockfile" >&2
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $$ > "$lockfile"
|
|
||||||
lock_pid=$(<"$lockfile")
|
|
||||||
[[ $$ == "$lock_pid" ]] || return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
cd "$HOME/public/$spark_repo" || exit $?
|
|
||||||
|
|
||||||
lock || exit 1
|
|
||||||
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
for f in import/*; do
|
|
||||||
f_name="${f##*/}"
|
|
||||||
if [[ -f "$f_name" ]]; then
|
|
||||||
printf 'Package already exists: %s, not overwriting\n' "$f_name" >&2
|
|
||||||
else
|
|
||||||
mv -vf "$f" ./
|
|
||||||
new_pkgs+=( "$f_name" )
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
repo-sign
|
|
||||||
repo-clean
|
|
||||||
|
|
||||||
for p in "${new_pkgs[@]}"; do
|
|
||||||
repo-add -n "$spark_repo.db.tar.gz" "$p"
|
|
||||||
done
|
|
15
repo-sign
15
repo-sign
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/bash
|
|
||||||
shopt -s nullglob
|
|
||||||
|
|
||||||
for i in *.pkg.*; do
|
|
||||||
if ! [[ "$i" == "${i%.*}.sig" ]]; then
|
|
||||||
if ! [[ -f "${i}.sig" ]]; then
|
|
||||||
unsigned_pkgs+=( "$i" )
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for i in "${unsigned_pkgs[@]}"; do
|
|
||||||
echo $i
|
|
||||||
gpg --pinentry-mode loopback --passphrase-fd 0 --batch --no-tty --detach-sign --no-armor "$i" < ~/.gnupg/passphrase
|
|
||||||
done
|
|
49
syntax
49
syntax
|
@ -1,49 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
_highlight() {
|
|
||||||
declare -n syn=$1
|
|
||||||
|
|
||||||
if [[ "$syn" ]]; then
|
|
||||||
exec highlight --force --inline-css -f -I -O xhtml -S "$syn" 2>/dev/null
|
|
||||||
else
|
|
||||||
# echo " :cgit: No syntax type provided."
|
|
||||||
exec cat
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
file_name=$1
|
|
||||||
file_extension="${file_name##*.}"
|
|
||||||
|
|
||||||
if ! [[ "$file_name" == "$file_extension" ]]; then
|
|
||||||
case "$file_extension" in
|
|
||||||
(md) exec cmark;;
|
|
||||||
(bash|zsh) syntax='sh';;
|
|
||||||
(*) syntax=$file_extension;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$file_name" in
|
|
||||||
(Makefile) syntax='makefile';;
|
|
||||||
(PKGBUILD) syntax='sh';;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Read and output the first line
|
|
||||||
read -r
|
|
||||||
|
|
||||||
# Set syntax if the first line is a shebang
|
|
||||||
if [[ "$REPLY" =~ ^'#!' ]]; then
|
|
||||||
case "$REPLY" in
|
|
||||||
(*sh) syntax='sh';;
|
|
||||||
(*ruby*) syntax='ruby';;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
{
|
|
||||||
# Print the first line
|
|
||||||
printf '%s\n' "$REPLY"
|
|
||||||
|
|
||||||
# Read and output everything
|
|
||||||
while read -r; do
|
|
||||||
printf '%s\n' "$REPLY"
|
|
||||||
done
|
|
||||||
} | _highlight syntax
|
|
Loading…
Reference in New Issue
Block a user