@@ -72,3 +72,163 @@ jobs:
7272 with :
7373 generate_release_notes : true
7474 files : mdterm-*
75+
76+ publish-packages :
77+ needs : release
78+ runs-on : ubuntu-latest
79+
80+ steps :
81+ - uses : actions/checkout@v4
82+
83+ - name : Download release artifacts
84+ uses : actions/download-artifact@v4
85+ with :
86+ path : ./artifacts
87+
88+ - name : Package artifacts
89+ run : |
90+ cd artifacts
91+ [ -d mdterm-win-x64 ] && zip -r ../mdterm-win-x64.zip mdterm-win-x64/
92+ [ -d mdterm-linux-x64 ] && tar czf ../mdterm-linux-x64.tar.gz mdterm-linux-x64/
93+ [ -d mdterm-osx-x64 ] && tar czf ../mdterm-osx-x64.tar.gz mdterm-osx-x64/
94+ [ -d mdterm-osx-arm64 ] && tar czf ../mdterm-osx-arm64.tar.gz mdterm-osx-arm64/
95+
96+ - name : Extract version
97+ id : version
98+ run : echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
99+
100+ - name : Compute SHA256 hashes
101+ id : hashes
102+ run : |
103+ echo "win_x64=$(sha256sum mdterm-win-x64.zip | awk '{print $1}')" >> "$GITHUB_OUTPUT"
104+ echo "linux_x64=$(sha256sum mdterm-linux-x64.tar.gz | awk '{print $1}')" >> "$GITHUB_OUTPUT"
105+ echo "osx_x64=$(sha256sum mdterm-osx-x64.tar.gz | awk '{print $1}')" >> "$GITHUB_OUTPUT"
106+ echo "osx_arm64=$(sha256sum mdterm-osx-arm64.tar.gz | awk '{print $1}')" >> "$GITHUB_OUTPUT"
107+
108+ - name : Render packaging templates
109+ run : |
110+ VERSION="${{ steps.version.outputs.version }}"
111+
112+ render() {
113+ sed \
114+ -e "s/VERSION_PLACEHOLDER/${VERSION}/g" \
115+ -e "s/SHA256_PLACEHOLDER/${{ steps.hashes.outputs.win_x64 }}/g" \
116+ -e "s/SHA256_ARM64_PLACEHOLDER/${{ steps.hashes.outputs.osx_arm64 }}/g" \
117+ -e "s/SHA256_X64_PLACEHOLDER/${{ steps.hashes.outputs.osx_x64 }}/g" \
118+ -e "s/SHA256_LINUX_PLACEHOLDER/${{ steps.hashes.outputs.linux_x64 }}/g" \
119+ "$1"
120+ }
121+
122+ # Winget
123+ mkdir -p rendered/winget
124+ for f in packaging/winget/*; do
125+ render "$f" > "rendered/winget/$(basename "$f")"
126+ done
127+
128+ # Scoop
129+ mkdir -p rendered/scoop
130+ render packaging/scoop/mdterm.json > rendered/scoop/mdterm.json
131+
132+ # Chocolatey
133+ mkdir -p rendered/chocolatey/tools
134+ render packaging/chocolatey/mdterm.nuspec > rendered/chocolatey/mdterm.nuspec
135+ render packaging/chocolatey/tools/chocolateyInstall.ps1 > rendered/chocolatey/tools/chocolateyInstall.ps1
136+
137+ # Homebrew
138+ mkdir -p rendered/homebrew
139+ render packaging/homebrew/mdterm.rb > rendered/homebrew/mdterm.rb
140+
141+ # AUR
142+ mkdir -p rendered/aur
143+ render packaging/aur/PKGBUILD > rendered/aur/PKGBUILD
144+ render packaging/aur/.SRCINFO > rendered/aur/.SRCINFO
145+
146+ - name : Commit rendered packaging
147+ run : |
148+ git config user.name "github-actions[bot]"
149+ git config user.email "github-actions[bot]@users.noreply.github.com"
150+ cp -r rendered/* packaging/
151+ git add packaging/
152+ git diff --cached --quiet || git commit -m "chore: update packaging for v${{ steps.version.outputs.version }}"
153+ git push
154+
155+ # ── Winget ──────────────────────────────────────────────
156+ - name : Publish to Winget
157+ uses : vedantmgoyal9/winget-releaser@v2
158+ with :
159+ identifier : fasterinnerlooper.mdterm
160+ installers-regex : ' \.zip$'
161+ token : ${{ secrets.WINGET_TOKEN }}
162+ continue-on-error : true
163+
164+ # ── Scoop ───────────────────────────────────────────────
165+ - name : Publish to Scoop bucket
166+ if : ${{ secrets.SCOOP_BUCKET_TOKEN != '' }}
167+ run : |
168+ git clone "https://x-access-token:${{ secrets.SCOOP_BUCKET_TOKEN }}@github.com/fasterinnerlooper/scoop-bucket.git" scoop-bucket
169+ cp rendered/scoop/mdterm.json scoop-bucket/bucket/
170+ cd scoop-bucket
171+ git config user.name "github-actions[bot]"
172+ git config user.email "github-actions[bot]@users.noreply.github.com"
173+ git add bucket/mdterm.json
174+ git commit -m "mdterm: update to v${{ steps.version.outputs.version }}"
175+ git push
176+ continue-on-error : true
177+
178+ # ── Chocolatey ──────────────────────────────────────────
179+ - name : Publish to Chocolatey
180+ if : ${{ secrets.CHOCOLATEY_API_KEY != '' }}
181+ run : |
182+ sudo apt-get update && sudo apt-get install -y mono-devel nuget
183+ nuget pack rendered/chocolatey/mdterm.nuspec -OutputDirectory rendered/chocolatey
184+ nuget push rendered/chocolatey/mdterm.*.nupkg \
185+ -Source "https://push.chocolatey.org/" \
186+ -ApiKey "${{ secrets.CHOCOLATEY_API_KEY }}"
187+ continue-on-error : true
188+
189+ # ── Homebrew ────────────────────────────────────────────
190+ - name : Publish to Homebrew tap
191+ if : ${{ secrets.HOMEBREW_TAP_TOKEN != '' }}
192+ run : |
193+ git clone "https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/fasterinnerlooper/homebrew-tap.git" homebrew-tap
194+ cp rendered/homebrew/mdterm.rb homebrew-tap/Formula/
195+ cd homebrew-tap
196+ git config user.name "github-actions[bot]"
197+ git config user.email "github-actions[bot]@users.noreply.github.com"
198+ git add Formula/mdterm.rb
199+ git commit -m "mdterm: update to v${{ steps.version.outputs.version }}"
200+ git push
201+ continue-on-error : true
202+
203+ # ── Snap Store ──────────────────────────────────────────
204+ - name : Prepare Snap build
205+ if : ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS != '' }}
206+ run : mkdir -p snap && cp packaging/snap/snapcraft.yaml snap/snapcraft.yaml
207+ - name : Build Snap package
208+ if : ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS != '' }}
209+ id : snap_build
210+ uses : snapcore/action-build@v1
211+ - name : Publish to Snap Store
212+ if : ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS != '' }}
213+ uses : snapcore/action-publish@v1
214+ with :
215+ store : stable
216+ snap : ${{ steps.snap_build.outputs.snap }}
217+ release : stable
218+ env :
219+ SNAPCRAFT_STORE_CREDENTIALS : ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
220+ continue-on-error : true
221+
222+ # ── AUR ─────────────────────────────────────────────────
223+ - name : Publish to AUR
224+ if : ${{ secrets.AUR_SSH_PRIVATE_KEY != '' }}
225+ uses : KSXGitHub/github-actions-deploy-aur@v4.1.1
226+ with :
227+ pkgname : mdterm
228+ pkgbuild : ./rendered/aur/PKGBUILD
229+ srcinfo : ./rendered/aur/.SRCINFO
230+ commit_username : " mdterm-bot"
231+ commit_email : " bot@mdterm.dev"
232+ ssh_private_key : ${{ secrets.AUR_SSH_PRIVATE_KEY }}
233+ commit_message : " Update to v${{ steps.version.outputs.version }}"
234+ continue-on-error : true
0 commit comments