Skip to content

Commit 99077bf

Browse files
committed
ci: geenrate linux release bins and on release hooks for updates
1 parent d540d0f commit 99077bf

2 files changed

Lines changed: 66 additions & 36 deletions

File tree

.github/workflows/tauri-build-dev.yml

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -277,12 +277,7 @@ jobs:
277277
permissions:
278278
contents: write
279279
timeout-minutes: 60
280-
strategy:
281-
fail-fast: false
282-
matrix:
283-
platform: [ ubuntu-22.04]
284-
285-
runs-on: ${{ matrix.platform }}
280+
runs-on: ubuntu-22.04
286281
steps:
287282
- uses: actions/checkout@v4
288283
- name: get Git Tag
@@ -293,20 +288,6 @@ jobs:
293288
with:
294289
node-version: 24
295290

296-
- name: GLIBC version
297-
run: |
298-
ldd --version
299-
- name: install Rust stable
300-
uses: dtolnay/rust-toolchain@stable
301-
with:
302-
toolchain: 1.85.1
303-
- name: install dependencies (ubuntu only)
304-
run: |
305-
sudo apt-get update
306-
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev
307-
sudo apt-get install -y libwebrtc-audio-processing-dev
308-
sudo apt-get install -y libunwind-dev
309-
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
310291
- name: install frontend dependencies
311292
env:
312293
GH_TOKEN: ${{ github.token }}
@@ -315,25 +296,41 @@ jobs:
315296
run: |
316297
npm ci
317298
npm run _ci-release:dev
318-
npm run tauri build
319-
ls -alh ./src-tauri/target/release
320-
mkdir ./src-tauri/target/release/phoenix-code
321-
cp ./src-tauri/target/release/phoenix-code-experimental-build ./src-tauri/target/release/phoenix-code
322-
cp ./src-build/linux/install-readme.txt ./src-tauri/target/release/phoenix-code/readme.txt
323-
cp ./src-tauri/target/release/phnode ./src-tauri/target/release/phoenix-code
324-
cp -r ./src-tauri/target/release/src-node ./src-tauri/target/release/phoenix-code
325-
ls -alh ./src-tauri/target/release/phoenix-code
326-
tar -cvzf phoenix-code.tar.gz -C ./src-tauri/target/release phoenix-code
327-
ls -alh phoenix-code.tar.gz
328-
GLIBC_VER=$(ldd --version | head -n1 | awk '{print $NF}')
329-
OUTPUT_FILENAME="phoenix-code-experimental-build_$(node -p "require('./package.json').version")_amd64_linux_bin-GLIBC-${GLIBC_VER}.tar.gz"
330-
mv phoenix-code.tar.gz "$OUTPUT_FILENAME"
331-
echo "OUTPUT_FILENAME=$OUTPUT_FILENAME" >> $GITHUB_ENV
332-
ls
299+
npm run _ci-releaseElectronApp
300+
ls -alh ./src-electron/dist/
301+
echo "OUTPUT_FILENAME=$(ls ./src-electron/dist/*.AppImage | head -1 | xargs basename)" >> $GITHUB_ENV
302+
303+
- name: Sign AppImage with minisign
304+
env:
305+
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
306+
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
307+
run: |
308+
# Install minisign
309+
sudo apt-get update && sudo apt-get install -y minisign
310+
311+
# Write private key to temp file
312+
echo "$TAURI_PRIVATE_KEY" > /tmp/tauri_private.key
313+
314+
# Sign the AppImage
315+
APPIMAGE_PATH="./src-electron/dist/${{ env.OUTPUT_FILENAME }}"
316+
echo "$TAURI_KEY_PASSWORD" | minisign -S -s /tmp/tauri_private.key -m "$APPIMAGE_PATH" -t "$(date +%s) file:${{ env.OUTPUT_FILENAME }}"
317+
318+
# Clean up private key
319+
rm /tmp/tauri_private.key
320+
321+
# Show signature file
322+
echo "Signature file contents:"
323+
cat "${APPIMAGE_PATH}.minisig"
324+
325+
# Rename .minisig to .sig for consistency
326+
mv "${APPIMAGE_PATH}.minisig" "${APPIMAGE_PATH}.sig"
327+
333328
- name: Upload Release Asset
334329
uses: softprops/action-gh-release@v2
335330
with:
336-
files: ${{ env.OUTPUT_FILENAME }}
331+
files: |
332+
./src-electron/dist/${{ env.OUTPUT_FILENAME }}
333+
./src-electron/dist/${{ env.OUTPUT_FILENAME }}.sig
337334
tag_name: ${{ env.GIT_TAG_NAME }}
338335
draft: true
339336
env:

.github/workflows/updateNotification.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ const WINDOWS_X64_NAME_SUFFIX = "_x64-setup.exe";
8787
const MAC_INTEL_NAME_SUFFIX = "_x64.dmg";
8888
// "Phoenix.Code.Experimental.Build_3.4.2_aarch64.dmg"
8989
const MAC_M1_NAME_SUFFIX = "_aarch64.dmg";
90+
// "phoenix-code-experimental-build_3.4.2.AppImage"
91+
const LINUX_APPIMAGE_NAME_SUFFIX = ".AppImage";
92+
// "phoenix-code-experimental-build_3.4.2.AppImage.sig"
93+
const LINUX_APPIMAGE_SIG_SUFFIX = ".AppImage.sig";
9094
function _getDownloadURLByNameSuffix(releaseAssets, suffix) {
9195
for(let releaseAsset of releaseAssets) {
9296
if(releaseAsset.name.endsWith(suffix)){
@@ -163,6 +167,26 @@ export default async function printStuff({github, context, githubWorkspaceRoot})
163167
console.log("Updating tauri update JSON file: ", _identifyUpdateJSONPath(releaseAssets));
164168
const latestJSON = JSON.parse(await _getLatestJson(releaseAssets));
165169
latestJSON.notes = releaseNotes;
170+
171+
// Add Linux AppImage to platforms (Electron build with minisign signature)
172+
try {
173+
const linuxAppImageURL = _getDownloadURLByNameSuffix(releaseAssets, LINUX_APPIMAGE_NAME_SUFFIX);
174+
let linuxSignature = "";
175+
try {
176+
const sigFileURL = _getDownloadURLByNameSuffix(releaseAssets, LINUX_APPIMAGE_SIG_SUFFIX);
177+
linuxSignature = await _getTextHTTPS(sigFileURL);
178+
console.log("Linux AppImage signature: ", linuxSignature);
179+
} catch (sigErr) {
180+
console.warn("Linux AppImage signature file not found, using empty signature");
181+
}
182+
latestJSON.platforms["linux-x86_64"] = {
183+
"signature": linuxSignature,
184+
"url": linuxAppImageURL
185+
};
186+
} catch (e) {
187+
console.warn("Linux AppImage not found in release assets, skipping linux-x86_64 platform");
188+
}
189+
166190
const latestJsonPath = `${githubWorkspaceRoot}/docs/${_identifyUpdateJSONPath(releaseAssets)}`;
167191
const currentVersion = getCurrentVersion(latestJsonPath);
168192
const latestVersion = latestJSON.version;
@@ -179,6 +203,12 @@ export default async function printStuff({github, context, githubWorkspaceRoot})
179203
const windowsDownloadURL = _getDownloadURLByNameSuffix(releaseAssets, WINDOWS_X64_NAME_SUFFIX);
180204
const macM1DownloadURL = _getDownloadURLByNameSuffix(releaseAssets, MAC_M1_NAME_SUFFIX);
181205
const macIntelDownloadURL = _getDownloadURLByNameSuffix(releaseAssets, MAC_INTEL_NAME_SUFFIX);
206+
let linuxAppImageURL = null;
207+
try {
208+
linuxAppImageURL = _getDownloadURLByNameSuffix(releaseAssets, LINUX_APPIMAGE_NAME_SUFFIX);
209+
} catch (e) {
210+
console.warn("Linux AppImage not found in release assets, skipping linux_appimage in install.json");
211+
}
182212
let installJSON = {
183213
"phcode.io.DownloadURL": {
184214
"windows_x64": windowsDownloadURL,
@@ -187,6 +217,9 @@ export default async function printStuff({github, context, githubWorkspaceRoot})
187217
"chrome_os": "https://play.google.com/store/apps/details?id=prod.phcode.twa"
188218
}
189219
};
220+
if (linuxAppImageURL) {
221+
installJSON["phcode.io.DownloadURL"]["linux_appimage"] = linuxAppImageURL;
222+
}
190223
installJSON = JSON.stringify(installJSON, null, 4);
191224
console.log("writing install.json to path: ", installJsonPath, " contents: ", installJSON)
192225
fs.writeFileSync(installJsonPath, installJSON);

0 commit comments

Comments
 (0)