Skip to main content
The Palyra release workflow ensures version coherence across all components, packages portable bundles for desktop and headless environments, and validates them through extensive smoke testing and build attestation. The distribution model focuses on archive-based portable installs with sidecar-assisted lifecycle management.

Release Workflow and Orchestration

The release process is triggered via GitHub Actions, either by pushing a version tag (e.g., v1.2.3) or through a manual workflow_dispatch .github/workflows/release.yml#3-17. The workflow is divided into metadata preparation, multi-platform artifact building, and security validation.

Version Coherence

Before any assets are built, the system asserts that the repository version matches the requested release version using assert-version-coherence.ps1 .github/workflows/release.yml#45-49. This prevents mismatched binaries from being bundled together.

Release Artifact Pipeline

“Release Pipeline Data Flow” Sources: .github/workflows/release.yml#120-210, scripts/release/package-portable.ps1#1-16, scripts/test/run-cli-install-smoke.ps1#1-6

Portable Bundle Creation

Palyra produces two primary artifact kinds: desktop and headless. Packaging is handled by package-portable.ps1, which aggregates binaries, documentation, and the web dashboard into a platform-specific ZIP archive scripts/release/package-portable.ps1#28-36.

Bundle Composition

ComponentDesktop BundleHeadless BundleSource Path
palyradYesYestarget/release/palyrad
palyra (CLI)YesYestarget/release/palyra
palyra-browserdYesYestarget/release/palyra-browserd
desktop-control-centerYesNoapps/desktop/src-tauri/target/release/
web/ (Dashboard)YesYesapps/web/dist
docs/ (Operator Docs)YesYescrates/palyra-cli/data/docs
Sources: scripts/release/package-portable.ps1#84-95

Archive Structure and Metadata

Each archive includes a release-manifest.json containing SHA256 hashes for all included binaries scripts/release/package-portable.ps1#175-185. The packaging script also generates a README.txt with platform-specific installation and update instructions scripts/release/package-portable.ps1#96-148.

Validation and Smoke Testing

Released archives undergo rigorous validation before publication. This ensures that the portable bundles are not only complete but also functional in a clean environment.

Portable Archive Validation

The validate-portable-archive.ps1 script performs “Path Traversal” checks and ensures no absolute paths are stored within the ZIP scripts/release/common.ps1#235-245. It also verifies the presence of required documentation files like README.md and release-validation-checklist.md scripts/release/common.ps1#113-121.

Installed Smoke Tests

The run-cli-install-smoke.ps1 harness simulates a real-world installation:
  1. Extraction: Unpacks the archive into a temporary install_root scripts/release/install-headless-package.ps1#28-29.
  2. Environment Isolation: Sets PALYRA_STATE_ROOT and PALYRA_CONFIG to temporary directories to avoid polluting the host scripts/test/run-cli-install-smoke.ps1#85-101.
  3. Command Execution: Runs installed_smoke.rs, which executes the installed palyra binary to verify doctor, setup, config validate, and docs search functionality crates/palyra-cli/tests/installed_smoke.rs#69-100.
“Smoke Test Execution Flow” Sources: scripts/test/run-cli-install-smoke.ps1#126-140, crates/palyra-cli/tests/installed_smoke.rs#17-36, scripts/release/install-headless-package.ps1#60-75

Security, Attestation, and Provenance

Palyra utilizes a multi-layered security gate approach for every release.

Build Attestation

The release workflow generates GitHub Build Attestations, providing a cryptographic link between the built artifacts and the source code/workflow that produced them .github/workflows/release.yml:22, 87.

Supply Chain Gates

The security.yml workflow runs before release artifacts are finalized: Sources: .github/workflows/security.yml#12-156, .github/workflows/release.yml#205-210

Installation and Lifecycle Scripts

Portable releases ship with PowerShell scripts to manage the install/uninstall lifecycle consistently across Windows, macOS, and Linux.

install-headless-package.ps1

This script automates the setup of a remote-mode daemon:

install-desktop-package.ps1

Optimized for the Tauri-based desktop application:

Update and Rollback Guidance

The release includes guidance for upgrades. Headless upgrades require running palyra config migrate after binary replacement but before restarting the daemon scripts/release/package-portable.ps1#140-141. Rollbacks involve stopping processes and restoring previous binaries while maintaining the same state root scripts/release/package-portable.ps1#150-156. Sources: scripts/release/install-headless-package.ps1#1-134, scripts/release/install-desktop-package.ps1#1-111, scripts/release/package-portable.ps1#121-148