Compare commits

...

5 Commits

7 changed files with 93 additions and 49 deletions

1
.gitignore vendored
View File

@ -3,6 +3,7 @@ src/ascii-invaders**
src/HelloWorld** src/HelloWorld**
pkg/ pkg/
testing.log testing.log
wiki/
# Packaging outputs # Packaging outputs
*.pkg.tar.zst *.pkg.tar.zst

58
LICENSE
View File

@ -1,27 +1,31 @@
# http://www.wtfpl.net/about/ # http://www.wtfpl.net/about/
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004 Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long copies of this license document, and changing it is allowed as long
as the name is changed. as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO. 0. You just DO WHAT THE FUCK YOU WANT TO.
ANINIX ADDENDUM ANINIX ADDENDUM
Trademark Pending 2017 (https://aninix.net/irc/) Trademark 2017 (https://aninix.net/)
The "AniNIX" name and |> logo is trademark-pending as of 2017. All The "AniNIX" name and |> logo are trademarked as of 2017/11/21.
AniNIX materials can be reproduced and re-used, though you must AniNIX materials may be reproduced and re-used (though you must
contact the admins of the network to get written permission to use contact the admins of the network to get written permission to use
the AniNIX name. the AniNIX name or logo) so long as such reproduction or re-use
does not inhibit the original AniNIX use of the same.
Attribution is appreciated for other materials but not legally
required or necessary. Attribution is appreciated for other materials but not legally
required or necessary.
"AniNIX" trademark serial: 87177883
|> Logo trademark serial: 87177887

View File

@ -21,7 +21,7 @@ install: ${list} MaatIcon.png
for i in ${systemdList}; do install -m 0644 -o root $$i ${pkgdir}/usr/lib/systemd/system; done for i in ${systemdList}; do install -m 0644 -o root $$i ${pkgdir}/usr/lib/systemd/system; done
clean: clean:
cat .gitignore | sudo xargs rm -Rf git clean -fdX
uninstall: uninstall:
for i in ${list}; do rm -Rf ${installDir}/$$i; done for i in ${list}; do rm -Rf ${installDir}/$$i; done
@ -29,7 +29,21 @@ uninstall:
rmdir -p ${pkgdir}${serverRoot}/src rmdir -p ${pkgdir}${serverRoot}/src
rmdir -p ${pkgdir}${serverRoot}/pkg rmdir -p ${pkgdir}${serverRoot}/pkg
test: clean test:
./maat -h | grep -c Usage 1>/dev/null
checkperm:
chown -R ${owner}: ${pkgdir}${serverRoot}/src
chown -R ${owner}: ${pkgdir}${serverRoot}/pkg
for i in ${list}; do chown -R ${owner}: "${installDir}/$$i"; sudo chmod ${perms} "${installDir}/$$i"; done
diff:
for i in ${list}; do if [ -f ${installDir}/$$i ]; then diff "$$i" "${installDir}/$$i"; fi done
reverse:
for i in ${list}; do if [ -f ${installDir}/$$i ]; then cp "${installDir}/$$i" "$$i"; fi done
extendedtest: clean
sudo ./maat -u $$USER -T sudo ./maat -u $$USER -T
test -d src test -d src
test -d src/ascii-invaders test -d src/ascii-invaders
@ -48,14 +62,3 @@ test: clean
make clean make clean
@echo @echo
@echo Tests passed successfully. @echo Tests passed successfully.
diff:
for i in ${list}; do if [ -f ${installDir}/$$i ]; then diff "$$i" "${installDir}/$$i"; fi done
reverse:
for i in ${list}; do if [ -f ${installDir}/$$i ]; then cp "${installDir}/$$i" "$$i"; fi done
checkperm:
chown -R ${owner}: ${pkgdir}${serverRoot}/src
chown -R ${owner}: ${pkgdir}${serverRoot}/pkg
for i in ${list}; do chown -R ${owner}: "${installDir}/$$i"; sudo chmod ${perms} "${installDir}/$$i"; done

View File

@ -9,14 +9,14 @@ pkgrel() {
echo $(( `git log "$(git describe --tag --abbrev=0)"..HEAD | grep -c commit` + 1 )) echo $(( `git log "$(git describe --tag --abbrev=0)"..HEAD | grep -c commit` + 1 ))
} }
epoch="$(git log | grep -c commit)" epoch="$(git log | grep -c commit)"
pkgdesc="$(head -n 1 README)" pkgdesc="$(head -n 1 README.md)"
arch=("x86_64") arch=("x86_64")
url="https://aninix.net/foundation/${pkgname}" url="$(git config remote.origin.url | sed 's/.git$//')"
license=('custom') license=('custom')
groups=() groups=()
provides=("${pkgname}") provides=("${pkgname}")
conflicts=() conflicts=()
replaces=("${pkgname,,}", "aninix-${pkgname,,}") replaces=("${pkgname,,}" "aninix-${pkgname,,}")
backup=(usr/local/etc/Maat/aur.list) backup=(usr/local/etc/Maat/aur.list)
options=() options=()
install=installscript install=installscript
@ -28,7 +28,7 @@ validpgpkeys=()
prepare() { prepare() {
git pull git pull
make -C .. test && make -C .. clean make -C .. test
} }
build() { build() {

View File

@ -5,7 +5,7 @@ Maat is named for [the Egyptian goddess of truth and order](https://en.wikipedia
# Relevant Files and Software # Relevant Files and Software
Maat runs as a [systemd.timer](https://man.archlinux.org/man/systemd.timer.5) nightly, invoking our build script. Adhoc builds can be requested from admins. Output gets published on the [landing page](https://maat.aninix.net) from our build pipeline -- there you can download packages, view build logs, see testing status, etc. Maat runs as a [systemd.timer](https://man.archlinux.org/man/systemd.timer.5) nightly, invoking our build script. Ad hoc builds can be requested from admins. Output gets published on the [landing page](https://maat.aninix.net) from our build pipeline -- there you can download packages, view build logs, see testing status, etc.
Our CI/CD pipeline attempts to pull directly from Git sources, either from the AniNIX or the curated AUR, build those packages, and make the available to systems downstream. The `/usr/local/etc/Maat/aur.list` file allows the admin to control which AUR packages are pulled and built -- output files from builds can help identify issues like missing public GPG keys or dependency issues. Our CI/CD pipeline attempts to pull directly from Git sources, either from the AniNIX or the curated AUR, build those packages, and make the available to systems downstream. The `/usr/local/etc/Maat/aur.list` file allows the admin to control which AUR packages are pulled and built -- output files from builds can help identify issues like missing public GPG keys or dependency issues.
@ -13,3 +13,7 @@ Maat also consumes a GPG key. The admin will need to set up this key and publish
# Available Clients # Available Clients
As Maat is a pipeline for ArchLinux systems, the primary client is [Pacman](https://wiki.archlinux.org/title/Pacman). You can see how to subscribe your host to Maat in [this configuration snippet](https://aninix.net/AniNIX/Ubiqtorate/src/branch/main/roles/ShadowArch/files/pacman.conf#L103). As Maat is a pipeline for ArchLinux systems, the primary client is [Pacman](https://wiki.archlinux.org/title/Pacman). You can see how to subscribe your host to Maat in [this configuration snippet](https://aninix.net/AniNIX/Ubiqtorate/src/branch/main/roles/ShadowArch/files/pacman.conf#L103).
# Equivalents or Competition
General equivalents are Jenkins or GitLab CI/CD Runners. We chose to write our own because these are resource-intensive and often insecure. AniNIX/Maat enacts exactly the steps as detailed by Arch and only offers a noninteractive dashboard -- users are only able to see the artifacts and all changes must be done in upstream.

37
maat
View File

@ -83,7 +83,7 @@ function BuildRepo() {
git clone "$repo" git clone "$repo"
fi fi
cd "$repodir" cd "$repodir"
git reset --hard origin &>/dev/null git clean -fdX
output="$(git pull 2>&1)" output="$(git pull 2>&1)"
if [ -n "$incremental" ] && [ $( echo "$output" | grep -c 'Already up to date.' ) -eq 1 ]; then if [ -n "$incremental" ] && [ $( echo "$output" | grep -c 'Already up to date.' ) -eq 1 ]; then
return; return;
@ -138,6 +138,20 @@ function UpdateLocalRepo() {
set +x set +x
} }
### Clean source tracking
function CleanSrcTracking() {
searchbase="${homedir}/src"
for path in `find "$searchbase" -maxdepth 1 -mindepth 1 -type d`; do
cd "$path"
giturl="$(git config remote.origin.url)"
if ! grep "$giturl" "$aurconf"; then
cd "$searchbase"
rm -Rf "$path"
fi
done
}
# Clear variables # Clear variables
aurconf='/usr/local/etc/Maat/aur.list' aurconf='/usr/local/etc/Maat/aur.list'
baseurl='https://aninix.net/AniNIX' baseurl='https://aninix.net/AniNIX'
@ -150,12 +164,26 @@ timeout="90s"
# Stat tracking # Stat tracking
starttime=`date +%s` starttime=`date +%s`
function usage() {
### Show helptext
# param retcode: what to exit
retcode="$1"
cat <<EOM
Usage: $0
$0 -T # Extended testing
$0 -b homedir -c aurconf -u user -t timeout
Add -s to skip patching or -v for verbosity.
EOM
exit $retcode
}
# Parse arguments # Parse arguments
while getopts 'b:c:hil:st:Tu:v' OPTION; do while getopts 'b:c:hil:st:Tu:v' OPTION; do
case "${OPTION}" in case "${OPTION}" in
b) homedir="${OPTARG}" ;; b) homedir="${OPTARG}" ;;
c) aurconf="${OPTARG}" ;; c) aurconf="${OPTARG}" ;;
h) Usage; exit 0 ;; h) usage; exit 0 ;;
i) incremental=1 ;; i) incremental=1 ;;
l) cmdstring="$0"; for arg in $@; do if [ "$arg" != "-l" ] && [ "$arg" != "${OPTARG}" ]; then cmdstring="$cmdstring \"${arg}\""; fi; done; exec /bin/bash -c "$cmdstring | tee -a \"${OPTARG}\""; ;; l) cmdstring="$0"; for arg in $@; do if [ "$arg" != "-l" ] && [ "$arg" != "${OPTARG}" ]; then cmdstring="$cmdstring \"${arg}\""; fi; done; exec /bin/bash -c "$cmdstring | tee -a \"${OPTARG}\""; ;;
s) skipPatching=1 ;; s) skipPatching=1 ;;
@ -163,7 +191,7 @@ while getopts 'b:c:hil:st:Tu:v' OPTION; do
T) export MAATTESTINGVAR=1; exec $0 -l ./testing.log -u "$deprivuser" -v -s -c <(echo https://aur.archlinux.org/ascii-invaders.git) -b . ;; T) export MAATTESTINGVAR=1; exec $0 -l ./testing.log -u "$deprivuser" -v -s -c <(echo https://aur.archlinux.org/ascii-invaders.git) -b . ;;
u) deprivuser="${OPTARG}" ;; u) deprivuser="${OPTARG}" ;;
v) set -x ;; v) set -x ;;
*) usage; exit 1 ;; *) echo "Internal GitOps CI/CD Pipeline"; usage 1 ;;
esac esac
done done
@ -196,7 +224,8 @@ SeedWebFile
if [ -n "$MAATTESTINGVAR" ]; then if [ -n "$MAATTESTINGVAR" ]; then
BuildRepo "$baseurl"/HelloWorld BuildRepo "$baseurl"/HelloWorld
else else
for AniNIXrepo in `curl -s "$baseurl" | grep 'class="name"' | cut -f 4 -d \" | sed "s#^#https://$(echo "$baseurl" | cut -f 3 -d /)#" | sed 's/$/.git/'`; do CleanSrcTracking
for AniNIXrepo in `curl -s "$baseurl" | grep 'class="text primary name"' | cut -f 4 -d \" | sed "s#^#https://$(echo "$baseurl" | cut -f 3 -d /)#" | sed 's/$/.git/'`; do
BuildRepo "$AniNIXrepo" '.' BuildRepo "$AniNIXrepo" '.'
done done
fi fi

View File

@ -0,0 +1,3 @@
#!/bin/bash
make extendedtest