pkgbuild-review
2411 bytes
1#!/usr/bin/env bash
2set -euo pipefail
3
4repo_dir=$(realpath -e -- "$(dirname -- "$0")/..")
5temp_dir=$(mktemp -d)
6trap 'rm -rf "$temp_dir"' EXIT
7
8mkdir -p "$temp_dir/bin" "$temp_dir/cache" "$temp_dir/package"
9
10cat > "$temp_dir/bin/curl" <<'EOF'
11#!/usr/bin/env bash
12set -euo pipefail
13
14while (($#)); do
15 case "$1" in
16 -d)
17 printf '%s' "$2" > "$MOCK_CURL_PAYLOAD"
18 shift 2
19 ;;
20 *)
21 shift
22 ;;
23 esac
24done
25
26printf 'request\n' >> "$MOCK_CURL_REQUESTS"
27verdict="${MOCK_CURL_VERDICT:-ALLOW}"
28printf '{"choices":[{"message":{"content":"VERDICT: **%s**\\nCONFIDENCE: HIGH\\nFLAGS:\\n- none\\nSUMMARY: Reviewed."}}]}\n' "$verdict"
29EOF
30chmod +x "$temp_dir/bin/curl"
31
32cat > "$temp_dir/package/PKGBUILD" <<'EOF'
33pkgname=not-srcinfo
34pkgver=999
35pkgrel=1
36arch=(any)
37install=example.install
38source=(helper.sh 'archive::https://example.com/archive.tar.gz')
39sha256sums=(SKIP SKIP)
40EOF
41
42cat > "$temp_dir/package/.SRCINFO" <<'EOF'
43pkgbase = example
44 pkgver = 1
45 pkgrel = 1
46 install = example.install
47 source = helper.sh
48 source = archive::https://example.com/archive.tar.gz
49EOF
50
51printf '%s\n' 'echo helper' > "$temp_dir/package/helper.sh"
52printf '%s\n' 'post_install() { echo installed; }' > "$temp_dir/package/example.install"
53
54run_review() {
55 PATH="$temp_dir/bin:$PATH" \
56 PKGBUILD_REVIEW_CACHE="$temp_dir/cache" \
57 MOCK_CURL_PAYLOAD="$temp_dir/payload.json" \
58 MOCK_CURL_REQUESTS="$temp_dir/requests" \
59 MOCK_CURL_VERDICT="${MOCK_CURL_VERDICT:-ALLOW}" \
60 "$repo_dir/pkgbuild-review" "$temp_dir/package/PKGBUILD" > "$temp_dir/output"
61}
62
63run_review
64[[ $(<"$temp_dir/output") == *'[example 1]'* ]]
65jq -e '.messages[1].content | contains("<declared-sources>\nhelper.sh\narchive::https://example.com/archive.tar.gz")' "$temp_dir/payload.json" > /dev/null
66jq -e '.messages[1].content | contains("path: helper.sh\ncontents:\necho helper")' "$temp_dir/payload.json" > /dev/null
67jq -e '.messages[1].content | contains("path: example.install\ncontents:\npost_install() { echo installed; }")' "$temp_dir/payload.json" > /dev/null
68
69printf '%s\n' 'echo changed' > "$temp_dir/package/helper.sh"
70run_review
71[[ $(wc -l < "$temp_dir/requests") -eq 1 ]]
72
73printf '%s\n' '# changed' >> "$temp_dir/package/PKGBUILD"
74MOCK_CURL_VERDICT=ASK run_review <<< 'c'
75[[ $(<"$temp_dir/output") == *'ASK'* ]]
76[[ $(wc -l < "$temp_dir/requests") -eq 2 ]]