summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 9c16fe1c968eb10468b5b5a0a31da2515ca7ba86 (plain)
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
# Maintainer: Kaj Kowalski <info@kajkowalski.nl>

# Source package: builds the `runner` + `run` binaries from the tagged
# GitHub source tarball with cargo. `pkgver`/`sha256sums` are rewritten by
# CI (.github/workflows/aur-release.yml) on every release; the values below
# are only a checked-in reference snapshot.
pkgname=runner-run
pkgver=0.19.1
pkgrel=1
pkgdesc='Universal project task runner'
arch=('x86_64' 'aarch64')
url='https://github.com/kjanat/runner'
license=('MIT')
depends=('glibc' 'gcc-libs')
makedepends=('cargo')
checkdepends=('just')
source=("$pkgname-$pkgver.tar.gz::https://github.com/kjanat/runner/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('511d51c49adb1198dc0cb446a1a9f2884394100c399cd6dbdd741a0a979286ef')

prepare() {
	cd "runner-$pkgver"
	export RUSTUP_TOOLCHAIN=stable
	cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
}

build() {
	cd "runner-$pkgver"
	export RUSTUP_TOOLCHAIN=stable
	cargo build --frozen --release --bin runner --bin run
	env CARGO_TARGET_DIR=target/man \
		cargo run --frozen --features man -- man --output man
}

check() {
	cd "runner-$pkgver"
	export RUSTUP_TOOLCHAIN=stable
	# Integration tests shell out to `just` only (checkdepends); no network.
	cargo test --frozen --release
}

package() {
	cd "runner-$pkgver"
	install -Dm0755 -t "$pkgdir/usr/bin/" target/release/runner target/release/run
	install -Dm0644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
	install -Dm0644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"

	# Shell completions. `runner completions <shell>` is the only generator
	# (a `run completions` subcommand does not exist) and emits a single
	# stream covering BOTH `runner` and `run` with the path of the invoking
	# `runner` binary baked in via `current_exe()`. Strategy:
	#   1. Generate the combined stream for each shell.
	#   2. sed-rewrite the baked target/release paths to /usr/bin/{runner,run}.
	#      Longer match first — `…/run` is a prefix of `…/runner`.
	#   3. awk-split bash + zsh on their start-of-line boundaries so each
	#      command gets its own autoload file. Fish stays as one file.
	local g="$srcdir/_compl"
	local bin_runner="$srcdir/runner-$pkgver/target/release/runner"
	local bin_run="$srcdir/runner-$pkgver/target/release/run"
	mkdir -p "$g"
	"$bin_runner" completions bash >"$g/bash.combined"
	"$bin_runner" completions zsh  >"$g/zsh.combined"
	"$bin_runner" completions fish >"$g/fish.combined"
	"$bin_runner" completions pwsh >"$g/runner.ps1"
	sed -i -e "s|$bin_runner|/usr/bin/runner|g" \
		-e "s|$bin_run|/usr/bin/run|g" \
		"$g/bash.combined" "$g/zsh.combined" "$g/fish.combined" "$g/runner.ps1"
	awk -v r="$g/runner.bash" -v n="$g/run.bash" \
		'/^_clap_complete_run\(\) \{$/ {o=n} {print > (o?o:r)}' "$g/bash.combined"
	awk -v r="$g/_runner" -v n="$g/_run" \
		'/^#compdef run$/ {o=n} {print > (o?o:r)}' "$g/zsh.combined"
	install -Dm0644 "$g/runner.bash" "$pkgdir/usr/share/bash-completion/completions/runner"
	install -Dm0644 "$g/run.bash"    "$pkgdir/usr/share/bash-completion/completions/run"
	install -Dm0644 "$g/_runner"     "$pkgdir/usr/share/zsh/site-functions/_runner"
	install -Dm0644 "$g/_run"        "$pkgdir/usr/share/zsh/site-functions/_run"
	# Fish autoloads completion files by command basename — `runner.fish` is
	# sourced on `runner<TAB>` but never on `run<TAB>`. Install the (identical)
	# combined stream under both names so each command's first tab works in
	# a fresh shell, without depending on session order.
	install -Dm0644 "$g/fish.combined" "$pkgdir/usr/share/fish/vendor_completions.d/runner.fish"
	install -Dm0644 "$g/fish.combined" "$pkgdir/usr/share/fish/vendor_completions.d/run.fish"
	# PowerShell has no system autoload dir on Linux — pwsh users dot-source
	# this file from their `$PROFILE`:  . /usr/share/runner/runner.ps1
	install -Dm0644 "$g/runner.ps1" "$pkgdir/usr/share/runner/runner.ps1"

	# Man pages rendered into ./man by build(). makepkg gzips them (zipman).
	install -Dm0644 -t "$pkgdir/usr/share/man/man1/" man/*.1
}