-
-
Notifications
You must be signed in to change notification settings - Fork 5
156 lines (141 loc) · 5.63 KB
/
Copy pathaur.yml
File metadata and controls
156 lines (141 loc) · 5.63 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
name: Publish to AUR
run-name: |
Publish to AUR ${{ github.event.inputs.tag || github.event.workflow_run.head_branch || github.ref_name }}
# Picks up after a successful Release run. Determines which binary was
# released from the tag and pushes the corresponding -bin package to AUR:
# sss_cli/v* → sss-bin / sss-nvidia-bin / sss-rocm-bin / sss-noocr-bin
# sss_code/v* → sss_code-bin
#
# The PKGBUILD + .SRCINFO + source tarball are produced by the archlinux
# format of nix-bundle-app (in dist/aur/ of the GitHub release). We just
# download them and push.
on:
workflow_dispatch:
inputs:
tag:
description: "Tag to push to AUR (e.g. sss_cli/v0.2.1 or sss_code/v0.3.0)."
required: true
type: string
workflow_run:
workflows: ["Release"]
types:
- completed
permissions:
contents: read
jobs:
publish_aur:
name: Push ${{ matrix.aur_pkg }} to AUR
runs-on: ubuntu-latest
container: archlinux:multilib-devel
if: >
${{
github.event_name == 'workflow_dispatch'
|| github.event.workflow_run.conclusion == 'success'
}}
strategy:
fail-fast: false
matrix:
aur_pkg: [sss-bin, sss-nvidia-bin, sss-rocm-bin, sss-noocr-bin, sss_code-bin]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Resolve tag + filter package
id: plan
shell: bash
run: |
if [ -n "${{ github.event.inputs.tag }}" ]; then
tag="${{ github.event.inputs.tag }}"
else
# workflow_run gives us the head_branch of the triggering run
# which is the tag ref (e.g. 'refs/tags/v0.1.5' → 'v0.1.5').
tag="${{ github.event.workflow_run.head_branch }}"
fi
echo "tag=$tag" >> "$GITHUB_OUTPUT"
# Each AUR pkg only matches one tag stream:
# sss_cli/v* → sss-bin, sss-nvidia-bin, sss-rocm-bin, sss-noocr-bin
# sss_code/v* → sss_code-bin
# Set `skip=true` for jobs that don't match the current tag.
aur_pkg="${{ matrix.aur_pkg }}"
skip=true
if [[ "$tag" == sss_code/v* ]] && [ "$aur_pkg" = "sss_code-bin" ]; then
skip=false
elif [[ "$tag" == sss_cli/v* ]] && [ "$aur_pkg" != "sss_code-bin" ]; then
skip=false
fi
echo "skip=$skip" >> "$GITHUB_OUTPUT"
echo "aur_pkg=$aur_pkg" >> "$GITHUB_OUTPUT"
- name: Install bootstrap tools
if: steps.plan.outputs.skip == 'false'
run: |
pacman -Syu --noconfirm git base-devel openssh pacman-contrib curl jq
- name: Download AUR tarball from release
if: steps.plan.outputs.skip == 'false'
id: download
shell: bash
run: |
tag="${{ steps.plan.outputs.tag }}"
aur_pkg="${{ steps.plan.outputs.aur_pkg }}"
mkdir -p work && cd work
# release.yml packs the archlinux format's `aur/` subdir into
# `<pkg>-bin-<ver>-aur.tar.gz` and uploads it as a release asset.
api="https://api.github.com/repos/${{ github.repository }}/releases/tags/$tag"
curl -fsSL -H "Accept: application/vnd.github+json" "$api" > release.json
url=$(jq -r '.assets[] | .browser_download_url' release.json \
| grep -E "${aur_pkg}-.+-aur\.tar\.gz$" | head -n1)
if [ -z "$url" ]; then
echo "::error::No <pkg>-bin-<ver>-aur.tar.gz asset on release $tag."
exit 1
fi
echo "Downloading $url"
curl -fsSL -O "$url"
tar xzf "${aur_pkg}"-*-aur.tar.gz
ls -la
if [ ! -f PKGBUILD ]; then
echo "::error::PKGBUILD missing after extracting AUR tarball."
exit 1
fi
- name: Configure SSH for AUR
if: steps.plan.outputs.skip == 'false'
shell: bash
run: |
useradd -m builder
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
mkdir -p /home/builder/.ssh
echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > /home/builder/.ssh/id_rsa
chmod 600 /home/builder/.ssh/id_rsa
ssh-keyscan aur.archlinux.org >> /home/builder/.ssh/known_hosts
chown -R builder:builder /home/builder/.ssh
- name: Push to AUR
if: steps.plan.outputs.skip == 'false'
shell: bash
run: |
aur_pkg="${{ steps.plan.outputs.aur_pkg }}"
tag="${{ steps.plan.outputs.tag }}"
version="${tag#sss_cli/v}"
version="${version#sss_code/v}"
chown -R builder:builder "$PWD"
chmod -R 755 "$PWD"
REPO_DIR="$PWD"
# Use a login shell (`su - builder`) so `$HOME` resolves to
# `/home/builder`. `--preserve-environment` kept root's HOME
# which made the `git clone` target land under `/root` and
# blew up with `Permission denied`.
su - builder -c "
set -e
cd \$HOME
git clone ssh://aur@aur.archlinux.org/${aur_pkg}.git aur-repo
cd aur-repo
cp '$REPO_DIR/work/'*PKGBUILD* . 2>/dev/null || true
cp '$REPO_DIR/work/'*.SRCINFO . 2>/dev/null || true
cp '$REPO_DIR/work/'*.tar.gz . 2>/dev/null || true
cp '$REPO_DIR/work/PKGBUILD' .
updpkgsums
makepkg --printsrcinfo > .SRCINFO
git config user.name '${{ secrets.AUR_USERNAME }}'
git config user.email '${{ secrets.AUR_EMAIL }}'
git add PKGBUILD .SRCINFO
git commit -m 'Release ${version}' || echo 'No changes to commit'
git push origin master
"