summaryrefslogtreecommitdiff
path: root/justfile
blob: d0d0143a052d4a2d2de6f3db9b08a19ab57b880c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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 }}