# justfile for the cashmere/ports overlay. # Wraps the poudriere workflow from AGENTS.md — run from the repo root. # Host-side make runs as the user; DISTDIR/WRKDIRPREFIX/PORTSDIR come from ~/.env. set minimum-version := '1.39.0' jail := "151amd64" tree := "base" overlay := "custom" pkgdir := "/usr/local/poudriere/data/packages/" + jail + "-" + tree + "/All" pkglist := justfile_directory() / "pkglist" doas := require("doas") poudriere := require("poudriere") # List the available recipes [default] default: @just --list # Test a port in the poudriere jail: just test kimi-code [group('ports')] test port: #!/usr/bin/env bash set -euo pipefail dir=$(ls -d */{{ quote(port) }} 2>/dev/null | head -1) || true [ -n "$dir" ] || { echo "port '{{ port }}' not found in overlay" >&2; exit 1; } {{ doas }} {{ poudriere }} testport -j {{ jail }} -p {{ tree }} -O {{ overlay }} -o "$dir" # Install a port systemwide, building it first if the package is missing: just install kimi-code [group('ports')] install port: #!/usr/bin/env bash set -euo pipefail . ~/.env dir=$(ls -d */{{ quote(port) }} 2>/dev/null | head -1) || true [ -n "$dir" ] || { echo "port '{{ port }}' not found in overlay" >&2; exit 1; } pkgname=$(make -C "$dir" -V PKGNAME) # testport does not keep its package; bulk does [ -n "$pkgname" ] && [ -f "{{ pkgdir }}/$pkgname.pkg" ] \ || {{ doas }} {{ poudriere }} bulk -j {{ jail }} -p {{ tree }} -O {{ overlay }} "$dir" {{ doas }} pkg install -y "$dir" # Upgrade a port to a new version, then build and install it: just upgrade kimi-code 0.29.0 [group('ports')] upgrade port version: #!/usr/bin/env bash set -euo pipefail . ~/.env dir=$(ls -d */{{ quote(port) }} 2>/dev/null | head -1) || true [ -n "$dir" ] || { echo "port '{{ port }}' not found in overlay" >&2; exit 1; } old_dist=$(make -C "$dir" -V DISTFILES) sed -i '' 's/^DISTVERSION=.*/DISTVERSION= {{ version }}/' "$dir/Makefile" # npm ports (lockfile present): regenerate files/package-lock.json per the overlay workflow if [ -f "$dir/files/package-lock.json" ]; then mv "$dir/files/package-lock.json" "$dir/files/package-lock.json.old" make -C "$dir" fetch cp "$WRKDIRPREFIX/$(pwd)/$dir/work/package-lock.json.generated" "$dir/files/package-lock.json" rm "$dir/files/package-lock.json.old" make -C "$dir" clean distclean fi make -C "$dir" fetch make -C "$dir" makesum # regenerate the plist if the port has one (hashed asset names change every release) if [ -f "$dir/pkg-plist" ]; then make -C "$dir" makeplist | tail -n +2 > "$dir/pkg-plist.new" mv "$dir/pkg-plist.new" "$dir/pkg-plist" make -C "$dir" clean fi # bulk validates the port (check-plist, stage-qa) and keeps the package for pkg install {{ doas }} {{ poudriere }} bulk -j {{ jail }} -p {{ tree }} -O {{ overlay }} "$dir" {{ doas }} pkg install "$dir" # prune the previous version's distfile (may be root-owned) [ -z "$old_dist" ] || {{ doas }} rm -f "$DISTDIR/$old_dist" # Bulk-build every port in the overlay (the tracked pkglist) [group('repo')] bulk: {{ doas }} {{ poudriere }} bulk -j {{ jail }} -p {{ tree }} -O {{ overlay }} -f {{ pkglist }} # Update the base ports tree (git pull --rebase of the pinned quarterly branch) [group('repo')] update-tree: {{ doas }} {{ poudriere }} ports -u -p {{ tree }} # Stop a running poudriere build [confirm('Kill the running build in jail ' + jail + '?')] [group('repo')] stop: {{ doas }} {{ poudriere }} jail -k -j {{ jail }}