feat: Add nightly release workflow

This commit is contained in:
Suyog Tandel
2026-01-13 12:50:23 +05:30
parent 71798deb14
commit cd5541440e
3 changed files with 114 additions and 21 deletions
+104
View File
@@ -0,0 +1,104 @@
name: "publish-stable"
on:
push:
branches:
- release-nightly
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: "macos-latest"
args: "--target aarch64-apple-darwin"
- platform: "macos-latest"
args: "--target x86_64-apple-darwin"
- platform: "ubuntu-22.04"
args: ""
- platform: "windows-latest"
args: "--target x86_64-pc-windows-msvc"
- platform: "windows-latest"
args: "--target i686-pc-windows-msvc"
- platform: "windows-latest"
args: "--target aarch64-pc-windows-msvc"
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: setup node
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
with:
targets: >
${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' ||
matrix.platform == 'windows-latest' && 'x86_64-pc-windows-msvc,i686-pc-windows-msvc,aarch64-pc-windows-msvc' || '' }}
- name: install dependencies (ubuntu only)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libpcsclite-dev libudev-dev libusb-1.0-0-dev
# --- ADDED: Prerequisites for repacking AppImage ---
sudo apt-get install -y fuse libfuse2
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
- name: install frontend dependencies
run: deno install
- name: Extract version from Cargo.toml
id: get_version
shell: bash
run: |
cargo_file="src-tauri/Cargo.toml"
version=$(grep -m 1 '^version' "$cargo_file" | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/')
echo "version=$version" >> $GITHUB_ENV
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: v${{ env.version }}
releaseName: "PicoForge(v${{ env.version }})-nightly"
releaseBody: |
### PicoForge app(v${{ env.version }}) Nightly release
> [!CAUTION]
> This is a nightly release and thus will have bugs.
>
> I am not responsible if using this build bricks your pico in any way.
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
- name: Patch and Overwrite AppImage
if: matrix.platform == 'ubuntu-22.04'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
APPIMAGE_PATH=$(find src-tauri/target/release/bundle/appimage -name "*.AppImage" | head -n 1)
echo "Patching local file: $APPIMAGE_PATH"
$APPIMAGE_PATH --appimage-extract > /dev/null
rm -f squashfs-root/usr/lib/libpcsclite.so.1
ARCH=x86_64 ./appimagetool-x86_64.AppImage --appimage-extract-and-run squashfs-root/ "$APPIMAGE_PATH"
echo "Overwriting Draft Release asset..."
gh release upload "v${{ env.version }}" "$APPIMAGE_PATH" --clobber
echo "Success! The Draft Release now has the fixed AppImage."
+1 -5
View File
@@ -17,8 +17,6 @@
> This software does not share any code with the official closed-source pico-fido application.
>
> For some reason, when running the app on windows, it needs to be ran as administrator or it cannot detect the device, this will be fixed in future. Till then run the app as admin.
>
> For linux users if RPM or DEB does not work or not supported on the distro, it is better to compile the app from source and use it, AppImages does not work correctly as of now.
## About
@@ -32,8 +30,6 @@ PicoForge is a modern desktop application for configuring and managing Pico FIDO
- Support for multiple hardware variants and vendors
> **Alpha Status**: This application is currently under active development and in alpha stage. Users should expect bugs and are encouraged to report them. The app has been tested on Linux and Windows 10 with the official Raspberry Pi Pico2 and currently supports Pico FIDO firmware version 7.2 only.
>
> The AppImage in the release builds have a lot of issues right now, I will fix them in the next or upcomming releases, till then you can either complie the app from source or use the .deb/.rpm versions from the releases.
## Screenshots
@@ -113,7 +109,7 @@ The compiled binaries will be available in:
#### Linux
- AppImages do not work, either use DEBs or RPMs, or build from source.
- AppImages are preferred way to use the applicatoion, just make sure you have pcsc daemon installed and running before starting the appimage.
- Flatpaks are planned for future `BETA` versions of the apps.
+9 -16
View File
@@ -35,18 +35,6 @@
{ view: "about", icon: Info, label: "About" },
];
function minimize() {
appWindow.minimize();
}
async function toggleMaximize() {
await appWindow.toggleMaximize();
}
function closeApp() {
appWindow.close();
}
onMount(() => {
const setupWindow = async () => {
isMaximized = await appWindow.isMaximized();
@@ -83,7 +71,7 @@
{#each menuItems as item}
<Sidebar.MenuItem>
<Sidebar.MenuButton isActive={currentView === item.view} onclick={() => onViewChange(item.view)}>
<svelte:component this={item.icon} />
<item.icon />
<span>{item.label}</span>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
@@ -130,11 +118,11 @@
</div>
<div class="flex items-center gap-1">
<Button variant="ghost" size="icon" class="h-8 w-8 hover:bg-muted" onclick={minimize}>
<Button variant="ghost" size="icon" class="h-8 w-8 hover:bg-muted" onclick={() => appWindow.minimize()}>
<Minus class="h-4 w-4" />
</Button>
<Button variant="ghost" size="icon" class="h-8 w-8 hover:bg-muted" onclick={toggleMaximize}>
<Button variant="ghost" size="icon" class="h-8 w-8 hover:bg-muted" onclick={() => appWindow.toggleMaximize()}>
{#if isMaximized}
<Minimize class="h-3.5 w-3.5 rotate-180" />
{:else}
@@ -142,7 +130,12 @@
{/if}
</Button>
<Button variant="ghost" size="icon" class="h-8 w-8 hover:bg-red-500 hover:text-white transition-colors" onclick={closeApp}>
<Button
variant="ghost"
size="icon"
class="h-8 w-8 hover:bg-red-500 hover:text-white transition-colors"
onclick={() => appWindow.close()}
>
<X class="h-4 w-4" />
</Button>
</div>