Skip to content

Commit b057338

Browse files
committed
sync
1 parent 792f5eb commit b057338

1 file changed

Lines changed: 115 additions & 0 deletions

File tree

.github/workflows/sign_missing.yml

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
name: Sign Missing Packages in Releases
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
dry_run:
7+
description: 'Only log what would happen (true/false)'
8+
required: false
9+
default: 'true'
10+
11+
jobs:
12+
sign:
13+
runs-on: ubuntu-latest
14+
15+
env:
16+
KEY_ID: 7E7B7BC98F96272B619AD8D7E6CA536875E45798
17+
KEY_FPR_SHORT: E6CA536875E45798
18+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
19+
20+
steps:
21+
- name: Checkout self
22+
uses: actions/checkout@v4
23+
24+
- name: Install GPG
25+
run: sudo apt-get install -y gnupg
26+
27+
- name: Import signing key
28+
run: |
29+
mkdir -p ~/.gnupg
30+
chmod 700 ~/.gnupg
31+
echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --batch --import
32+
gpg --list-keys
33+
34+
- name: Install GitHub CLI
35+
uses: cli/cli-action@v2
36+
37+
- name: List releases
38+
id: list_releases
39+
run: |
40+
gh api -H "Accept: application/vnd.github+json" \
41+
repos/envolution/aur/releases \
42+
> releases.json
43+
44+
- name: Process releases
45+
run: |
46+
DRY_RUN="${{ github.event.inputs.dry_run }}"
47+
echo "Dry-run: $DRY_RUN"
48+
mkdir -p work
49+
50+
jq -c '.[]' releases.json | while read -r release; do
51+
tag_name=$(echo "$release" | jq -r .tag_name)
52+
release_id=$(echo "$release" | jq -r .id)
53+
54+
echo "::group::Processing release: $tag_name"
55+
gh api -H "Accept: application/vnd.github+json" \
56+
repos/envolution/aur/releases/$release_id/assets \
57+
> "work/assets-${tag_name}.json"
58+
59+
missing_sigs=()
60+
zst_files=()
61+
62+
while IFS= read -r asset; do
63+
name=$(echo "$asset" | jq -r .name)
64+
url=$(echo "$asset" | jq -r .url)
65+
66+
if [[ "$name" == *.pkg.tar.zst ]]; then
67+
zst_files+=("$name")
68+
sig_name="$name.sig"
69+
if ! jq -r '.[].name' "work/assets-${tag_name}.json" | grep -q "^${sig_name}$"; then
70+
missing_sigs+=("$name")
71+
fi
72+
fi
73+
done < <(jq -c '.[]' "work/assets-${tag_name}.json")
74+
75+
for zst in "${missing_sigs[@]}"; do
76+
echo "Missing sig for $zst"
77+
78+
download_url="https://github.com/envolution/aur/releases/download/${tag_name}/${zst}"
79+
curl -L "$download_url" -o "work/${zst}"
80+
81+
if [[ "$DRY_RUN" == "true" ]]; then
82+
echo "[DRY-RUN] Would sign $zst and upload ${zst}.sig"
83+
continue
84+
fi
85+
86+
echo "Signing $zst..."
87+
gpg --batch --yes --detach-sign -u "$KEY_ID" "work/${zst}"
88+
89+
echo "Uploading ${zst}.sig..."
90+
gh release upload "$tag_name" "work/${zst}.sig" --clobber
91+
92+
echo "Re-uploading $zst (ensuring signature validity)..."
93+
gh release upload "$tag_name" "work/${zst}" --clobber
94+
95+
echo "Updating release notes..."
96+
new_body=$(
97+
cat <<EOF
98+
To install - first load GPG keys to the pacman keyring:
99+
\`\`\`bash
100+
sudo pacman-key --recv-keys $KEY_FPR_SHORT --keyserver keyserver.ubuntu.com
101+
sudo pacman-key --lsign-key $KEY_FPR_SHORT
102+
\`\`\`
103+
And then:
104+
\`\`\`bash
105+
sudo pacman -U https://github.com/envolution/aur/releases/download/${tag_name}/${zst}
106+
\`\`\`
107+
EOF
108+
)
109+
gh api --method PATCH -H "Accept: application/vnd.github+json" \
110+
/repos/envolution/aur/releases/$release_id \
111+
-f body="$new_body"
112+
done
113+
echo "::endgroup::"
114+
done
115+

0 commit comments

Comments
 (0)