@@ -184,3 +184,98 @@ jobs:
184184 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
185185 ARCHIVE_PATH : ${{ steps.artifacts.outputs.archive }}
186186 SIG_PATH : ${{ steps.artifacts.outputs.sig }}
187+
188+ release-linux :
189+ name : Release Linux
190+ runs-on : ubuntu-latest
191+ needs : release
192+ timeout-minutes : 60
193+ permissions :
194+ contents : write
195+ env :
196+ VERSION : ${{ inputs.version }}
197+ steps :
198+ - uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
199+ with :
200+ ref : ${{ inputs.ref }}
201+ persist-credentials : false
202+
203+ - uses : cashapp/activate-hermit@e49f5cb4dd64ff0b0b659d1d8df499595451155a # v1
204+
205+ - uses : Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
206+ with :
207+ workspaces : desktop/src-tauri
208+
209+ - name : Install Tauri dependencies (Linux)
210+ env :
211+ DEBIAN_FRONTEND : noninteractive
212+ run : |
213+ sudo apt-get update \
214+ -o Acquire::Retries=3 \
215+ -o Acquire::http::Timeout=30 \
216+ -o Acquire::https::Timeout=30
217+ sudo apt-get install -y --no-install-recommends \
218+ -o Acquire::Retries=3 \
219+ -o Acquire::http::Timeout=30 \
220+ -o Acquire::https::Timeout=30 \
221+ -o DPkg::Lock::Timeout=120 \
222+ build-essential \
223+ curl \
224+ file \
225+ libasound2-dev \
226+ libayatana-appindicator3-dev \
227+ libgtk-3-dev \
228+ librsvg2-dev \
229+ libssl-dev \
230+ libwebkit2gtk-4.1-dev \
231+ libxdo-dev \
232+ patchelf \
233+ wget
234+
235+ - name : Install desktop dependencies
236+ run : just desktop-install-ci
237+
238+ - name : Patch version
239+ run : |
240+ cd desktop && node scripts/set-version-from-tag.mjs "$VERSION"
241+ cd src-tauri && cargo update --workspace
242+
243+ - name : Build sidecars
244+ run : |
245+ cargo build --release -p sprout-acp -p sprout-mcp -p sprout-agent -p sprout-dev-mcp -p git-credential-nostr -p sprout-cli
246+ ./scripts/bundle-sidecars.sh
247+
248+ - name : Build Linux Tauri app
249+ run : cd desktop && pnpm tauri build --verbose --ci --bundles deb,appimage
250+ env :
251+ CMAKE_POLICY_VERSION_MINIMUM : " 3.5"
252+
253+ - name : Locate Linux build artifacts
254+ id : linux-artifacts
255+ run : |
256+ BUNDLE_DIR="desktop/src-tauri/target/release/bundle"
257+
258+ DEB=$(find "$BUNDLE_DIR/deb" -name '*.deb' -type f | head -1)
259+ if [[ -z "$DEB" ]]; then
260+ echo "::error::No DEB found in $BUNDLE_DIR/deb"
261+ exit 1
262+ fi
263+ echo "deb=$DEB" >> "$GITHUB_OUTPUT"
264+
265+ APPIMAGE=$(find "$BUNDLE_DIR/appimage" -name '*.AppImage' -type f | head -1)
266+ if [[ -z "$APPIMAGE" ]]; then
267+ echo "::error::No AppImage found in $BUNDLE_DIR/appimage"
268+ exit 1
269+ fi
270+ echo "appimage=$APPIMAGE" >> "$GITHUB_OUTPUT"
271+
272+ - name : Upload Linux artifacts to versioned GitHub release
273+ run : |
274+ gh release upload "v${VERSION}" \
275+ "$DEB_PATH" \
276+ "$APPIMAGE_PATH" \
277+ --clobber
278+ env :
279+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
280+ DEB_PATH : ${{ steps.linux-artifacts.outputs.deb }}
281+ APPIMAGE_PATH : ${{ steps.linux-artifacts.outputs.appimage }}
0 commit comments