@@ -78,15 +78,115 @@ jobs:
7878 echo "======== Updated PKGBUILD ========"
7979 cat "${PKGBUILD}"
8080
81- # ── Push to AUR ───────────────────────────────────────────────────────────
82- - name : " Deploy to AUR"
83- uses : KSXGitHub/github-actions-deploy-aur@v2.7.2
84- with :
85- pkgname : dev-sidecar-bin
86- pkgbuild : packages/aur/PKGBUILD
87- commit_username : ${{ vars.AUR_USERNAME }}
88- commit_email : ${{ vars.AUR_EMAIL }}
89- ssh_private_key : ${{ secrets.AUR_SSH_PRIVATE_KEY }}
90- commit_message : " Update to v${{ steps.version.outputs.version }}"
91- allow_empty_commits : false
92- force_push : true
81+ # ── Push to AUR via git + SSH ─────────────────────────────────────────────
82+ - name : " Set up SSH key for AUR"
83+ run : |
84+ install -dm700 ~/.ssh
85+
86+ # Write the private key
87+ echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > ~/.ssh/aur_id
88+ chmod 600 ~/.ssh/aur_id
89+
90+ # Trust AUR's host key
91+ ssh-keyscan -t rsa,ecdsa,ed25519 aur.archlinux.org >> ~/.ssh/known_hosts 2>/dev/null
92+ chmod 644 ~/.ssh/known_hosts
93+
94+ # SSH config: use this key for AUR
95+ cat >> ~/.ssh/config << 'EOF'
96+ Host aur.archlinux.org
97+ IdentityFile ~/.ssh/aur_id
98+ User aur
99+ EOF
100+ chmod 600 ~/.ssh/config
101+
102+ - name : " Clone AUR repository"
103+ run : |
104+ git clone ssh://aur@aur.archlinux.org/dev-sidecar-bin.git /tmp/aur-dev-sidecar-bin
105+
106+ - name : " Copy PKGBUILD and generate .SRCINFO"
107+ run : |
108+ cp packages/aur/PKGBUILD /tmp/aur-dev-sidecar-bin/PKGBUILD
109+
110+ # Generate .SRCINFO (makepkg is not available on the ubuntu runner since pacman is
111+ # not installed, so we generate it with a small Python helper that parses the
112+ # PKGBUILD variables we set)
113+ cd /tmp/aur-dev-sidecar-bin
114+
115+ python3 - << 'PYEOF'
116+ import re, subprocess, pathlib
117+
118+ pkgbuild = pathlib.Path("PKGBUILD").read_text()
119+
120+ def extract(var):
121+ m = re.search(rf"^{var}=(.+)", pkgbuild, re.MULTILINE)
122+ return m.group(1).strip().strip("'\"") if m else ""
123+
124+ pkgname = extract("pkgname")
125+ pkgver = extract("pkgver")
126+ pkgrel = extract("pkgrel")
127+ pkgdesc = extract("pkgdesc").strip("'\"")
128+ arch_line = re.search(r"^arch=\((.+)\)", pkgbuild, re.MULTILINE).group(1)
129+ archs = re.findall(r"'([^']+)'", arch_line)
130+ url = extract("url")
131+ license_ = re.search(r"^license=\('([^']+)'\)", pkgbuild, re.MULTILINE).group(1)
132+ depends_m = re.search(r"^depends=\((.+?)\)", pkgbuild, re.MULTILINE | re.DOTALL)
133+ depends = re.findall(r"'([^']+)'", depends_m.group(1)) if depends_m else []
134+ provides_m = re.search(r"^provides=\('([^']+)'\)", pkgbuild, re.MULTILINE)
135+ provides = [provides_m.group(1)] if provides_m else []
136+ conflicts_m= re.search(r"^conflicts=\('([^']+)'\)", pkgbuild, re.MULTILINE)
137+ conflicts = [conflicts_m.group(1)] if conflicts_m else []
138+
139+ src_x86 = re.search(r"^source_x86_64=\(\"([^\"]+)\"\)", pkgbuild, re.MULTILINE)
140+ src_aarch = re.search(r"^source_aarch64=\(\"([^\"]+)\"\)", pkgbuild, re.MULTILINE)
141+ sha_x86 = re.search(r"^sha256sums_x86_64=\('([^']+)'\)", pkgbuild, re.MULTILINE)
142+ sha_aarch = re.search(r"^sha256sums_aarch64=\('([^']+)'\)", pkgbuild, re.MULTILINE)
143+
144+ lines = []
145+ lines.append("# Generated by mksrcinfo helper")
146+ lines.append(f"pkgbase = {pkgname}")
147+ lines.append(f"\tpkgdesc = {pkgdesc}")
148+ lines.append(f"\tpkgver = {pkgver}")
149+ lines.append(f"\tpkgrel = {pkgrel}")
150+ lines.append(f"\turl = {url}")
151+ for a in archs:
152+ lines.append(f"\tarch = {a}")
153+ lines.append(f"\tlicense = {license_}")
154+ for d in depends:
155+ lines.append(f"\tdepends = {d}")
156+ for p in provides:
157+ lines.append(f"\tprovides = {p}")
158+ for c in conflicts:
159+ lines.append(f"\tconflicts = {c}")
160+ if src_x86:
161+ lines.append(f"\tsource_x86_64 = {src_x86.group(1)}")
162+ if sha_x86:
163+ lines.append(f"\tsha256sums_x86_64 = {sha_x86.group(1)}")
164+ if src_aarch:
165+ lines.append(f"\tsource_aarch64 = {src_aarch.group(1)}")
166+ if sha_aarch:
167+ lines.append(f"\tsha256sums_aarch64 = {sha_aarch.group(1)}")
168+ lines.append("")
169+ lines.append(f"pkgname = {pkgname}")
170+
171+ pathlib.Path(".SRCINFO").write_text("\n".join(lines) + "\n")
172+ print(".SRCINFO generated:")
173+ print("\n".join(lines))
174+ PYEOF
175+
176+ - name : " Commit and push to AUR"
177+ run : |
178+ cd /tmp/aur-dev-sidecar-bin
179+
180+ git config user.name "${{ vars.AUR_USERNAME }}"
181+ git config user.email "${{ vars.AUR_EMAIL }}"
182+
183+ git add PKGBUILD .SRCINFO
184+
185+ # Only commit if there are actual changes
186+ if git diff --cached --quiet; then
187+ echo "No changes to commit – AUR is already up to date."
188+ else
189+ git commit -m "Update to v${{ steps.version.outputs.version }}"
190+ git push
191+ echo "Successfully pushed to AUR."
192+ fi
0 commit comments