Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/linux-bundle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:

The AppImage and deb in `Stellr-Linux-x86_64-packages-UNSIGNED-NOT-FOR-RELEASE` are intentionally unsigned development artifacts and must not be published as an official release.
SUMMARY
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: Stellr-Linux-x86_64-packages-UNSIGNED-NOT-FOR-RELEASE
path: artifacts/linux-x86_64/*
Expand All @@ -55,7 +55,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
name: Stellr-Linux-x86_64-packages-UNSIGNED-NOT-FOR-RELEASE
path: artifacts/linux-x86_64
Expand All @@ -82,7 +82,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
name: Stellr-Linux-x86_64-packages-UNSIGNED-NOT-FOR-RELEASE
path: artifacts/linux-x86_64
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/macos-bundle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:

`Stellr-macOS-universal-DMG-UNSIGNED-NOT-FOR-RELEASE` has no trusted Developer ID identity and must not be published as an official release.
SUMMARY
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: Stellr-macOS-universal-DMG-UNSIGNED-NOT-FOR-RELEASE
path: artifacts/macos-universal/*UNSIGNED-NOT-FOR-RELEASE*
Expand Down
19 changes: 12 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,22 @@ jobs:
- name: Build signed Windows NSIS package
shell: powershell
run: .\scripts\build-windows-nsis.ps1 -Channel Release -CertificateThumbprint $env:WINDOWS_CERTIFICATE_THUMBPRINT
- name: Prove the companion CLI from PowerShell and cmd.exe
shell: powershell
env:
GITHUB_TOKEN: ${{ github.token }}
run: .\scripts\smoke-windows-cli.ps1 -ExecutablePath target\release\stellr.exe
- name: Prove the real application-process boundary
shell: powershell
env:
GITHUB_TOKEN: ${{ github.token }}
run: .\scripts\smoke-windows-application-process.ps1 -ExecutablePath target\release\stellr.exe
run: .\scripts\smoke-windows-application-process.ps1 -ExecutablePath target\release\stellr-desktop.exe
- name: Smoke signed install, WebView2 launch, and uninstall
shell: powershell
run: |
$installer = Get-ChildItem artifacts\windows-x64\*.exe -File | Select-Object -ExpandProperty FullName -First 1
.\scripts\smoke-windows-nsis.ps1 -InstallerPath $installer
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: release-windows
path: artifacts/windows-x64/*
Expand Down Expand Up @@ -135,7 +140,7 @@ jobs:
run: bash scripts/build-macos-universal.sh Release
- name: Verify signature, slices, and signed launch
run: bash scripts/inspect-macos-dmg.sh artifacts/macos-universal/*.dmg Release
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: release-macos
path: artifacts/macos-universal/*
Expand Down Expand Up @@ -164,7 +169,7 @@ jobs:
- run: npm --prefix web ci
- name: Build Linux release packages
run: bash scripts/build-linux-packages.sh Release
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: release-linux
path: artifacts/linux-x86_64/*
Expand All @@ -175,7 +180,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
name: release-linux
path: artifacts/linux-x86_64
Expand All @@ -200,7 +205,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
name: release-linux
path: artifacts/linux-x86_64
Expand All @@ -214,7 +219,7 @@ jobs:
contents: write
issues: write
steps:
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v8
with:
pattern: release-*
merge-multiple: true
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/windows-bundle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,16 @@ jobs:
- name: Build unsigned Windows x64 NSIS installer
shell: powershell
run: .\scripts\build-windows-nsis.ps1 -Channel Development
- name: Prove the companion CLI from PowerShell and cmd.exe
shell: powershell
env:
GITHUB_TOKEN: ${{ github.token }}
run: .\scripts\smoke-windows-cli.ps1 -ExecutablePath target\release\stellr.exe
- name: Prove the real desktop application-process boundary
shell: powershell
env:
GITHUB_TOKEN: ${{ github.token }}
run: .\scripts\smoke-windows-application-process.ps1 -ExecutablePath target\release\stellr.exe
run: .\scripts\smoke-windows-application-process.ps1 -ExecutablePath target\release\stellr-desktop.exe
- name: Smoke install, WebView2 launch, and uninstall
shell: powershell
run: |
Expand All @@ -45,7 +50,7 @@ jobs:

`Stellr-Windows-x64-NSIS-UNSIGNED-NOT-FOR-RELEASE` is intentionally unsigned and must not be published as an official release.
"@ | Out-File -FilePath $env:GITHUB_STEP_SUMMARY -Append
- uses: actions/upload-artifact@v4
- uses: actions/upload-artifact@v7
with:
name: Stellr-Windows-x64-NSIS-UNSIGNED-NOT-FOR-RELEASE
path: artifacts/windows-x64/*UNSIGNED-NOT-FOR-RELEASE*
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

## Unreleased

- Upgraded all bundle artifact uploads to `actions/upload-artifact@v7` and
downloads to `actions/download-artifact@v8`, removing the obsolete
action-runtime warnings without suppressing them.
- Hardened Windows application startup smokes with a measured 90-second cold
start budget and captured native startup-stage diagnostics on failure.
- Split the Windows desktop and CLI entry points so installed shortcuts and
protocol launches open without a terminal while `stellr serve` retains
native PowerShell and Command Prompt behavior.
- Fixed installed desktop startup so a no-argument launch opens the existing
empty repository-selection shell instead of treating the installation
directory as a Git repository.
Expand Down
5 changes: 5 additions & 0 deletions crates/app/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[package]
name = "stellr-app"
version = "0.1.0"
default-run = "stellr-desktop"
edition.workspace = true
license.workspace = true
repository.workspace = true
Expand All @@ -9,6 +10,10 @@ repository.workspace = true
name = "stellr"
path = "src/main.rs"

[[bin]]
name = "stellr-desktop"
path = "src/desktop_main.rs"

[dependencies]
async-trait.workspace = true
axum = "0.8"
Expand Down
16 changes: 14 additions & 2 deletions crates/app/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,26 @@ use std::path::PathBuf;
use clap::{Args, Parser, Subcommand};

#[derive(Parser)]
#[command(name = "stellr")]
#[command(name = "stellr", version)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Command>,
#[arg(value_name = "STELLR_LINK", hide = true)]
#[arg(
value_name = "STELLR_LINK",
hide = true,
value_parser = parse_protocol_target
)]
pub protocol_target: Option<String>,
}

fn parse_protocol_target(value: &str) -> Result<String, String> {
if value.starts_with("stellr://") {
Ok(value.to_owned())
} else {
Err("expected a Stellr subcommand or stellr:// link".to_owned())
}
}

#[derive(Subcommand)]
pub enum Command {
#[cfg(debug_assertions)]
Expand Down
17 changes: 17 additions & 0 deletions crates/app/src/desktop_main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#![cfg_attr(
all(target_os = "windows", not(debug_assertions)),
windows_subsystem = "windows"
)]

fn main() {
#[cfg(not(all(target_os = "windows", not(debug_assertions))))]
let result = stellr_app::entrypoints::run_cli();
#[cfg(all(target_os = "windows", not(debug_assertions)))]
let result = stellr_app::entrypoints::run_desktop();

if let Err(_error) = result {
#[cfg(debug_assertions)]
eprintln!("{_error}");
std::process::exit(1);
}
}
Loading