Skip to main content
The Palyra release workflow ensures that all distributed artifacts are built deterministically, packaged with their necessary sidecars (Web UI, documentation, and help snapshots), and cryptographically attested for supply chain security. The process is governed by the release.yml GitHub Action and a suite of PowerShell scripts that manage portable archive creation and validation.

Release Workflow Lifecycle

The release process follows a strict sequence of version coherence checks, multi-platform builds, and automated smoke testing before artifacts are published.

1. Metadata Preparation & Coherence

The workflow begins by executing assert-version-coherence.ps1 scripts/release/assert-version-coherence.ps1. This script ensures that the version defined in Cargo.toml matches the requested release tag and any explicit version overrides .github/workflows/release.yml#45-64. It also generates release and migration notes from templates .github/workflows/release.yml#78-106.

2. Artifact Packaging

Palyra distributes two primary artifact types: Desktop Portable Bundles and Headless Portable Packages. Both are managed by package-portable.ps1 scripts/release/package-portable.ps1.
Artifact KindIncluded ComponentsTarget Use Case
Desktoppalyra-desktop-control-center, palyrad, palyra-browserd, palyra CLI, web/ dist, docs/End-user workstations (Windows/macOS/Linux)
Headlesspalyrad, palyra-browserd, palyra CLI, web/ dist, docs/Servers, remote nodes, and CI/CD environments

3. Validation & Smoke Testing

Before publication, archives are passed to validate-portable-archive.ps1 scripts/release/validate-portable-archive.ps1. This script performs: Sources: .github/workflows/release.yml#30-169, scripts/release/package-portable.ps1#1-160, scripts/release/validate-portable-archive.ps1#1-133

Packaging Data Flow

The following diagram illustrates the transformation of build artifacts into a signed release package.

Build to Package Pipeline

Sources: scripts/release/package-portable.ps1#65-95, scripts/release/validate-portable-archive.ps1#29-57, .github/workflows/release.yml#165-169

Installation & Portable Lifecycle

Palyra uses specialized scripts to handle the “installation” of portable archives, ensuring environment variables and CLI shims are correctly configured.

Headless Installation (install-headless-package.ps1)

This script automates the setup of a server environment:
  1. Extraction: Unpacks the archive to a clean InstallRoot scripts/release/install-headless-package.ps1#28-29.
  2. Configuration: Runs palyra setup to initialize a remote-mode config at the specified ConfigPath scripts/release/install-headless-package.ps1#61.
  3. Systemd Integration: On Linux, it generates a palyrad.service unit file pointing to the new binaries and configuration scripts/release/install-headless-package.ps1#88-112.
  4. Verification: Executes a suite of smoke commands (e.g., palyra doctor) to ensure the installation is functional scripts/release/install-headless-package.ps1#58-72.

CLI Documentation System

The palyra CLI includes a built-in documentation engine that reads from the docs/ directory bundled during packaging. Sources: scripts/release/install-headless-package.ps1#1-132, crates/palyra-cli/src/commands/docs.rs#11-85

Security Attestation & Provenance

Palyra implements a “Security Gates” workflow and GitHub build attestations to provide a verifiable chain of custody for all releases.

Build Attestations

The release workflow uses the actions/attest-build-provenance action to generate SLSA (Supply-chain Levels for Software Artifacts) provenance .github/workflows/release.yml#22. These sidecar files allow users to verify that the binaries were indeed built on GitHub’s infrastructure from the specific tag in the marektomas-cz/Palyra repository.

Security Gates

Before a release is finalized, the security.yml workflow enforces several checks:

Security Entity Mapping

Sources: .github/workflows/security.yml#95-132, .github/workflows/release.yml#19-22

Release Smoke Testing

The run-release-smoke.ps1 scripts/test/run-release-smoke.ps1 script simulates a full release cycle in a temporary environment. It builds all components, packages them into archives, installs them using the production install scripts, and then verifies that the resulting installation passes all diagnostic checks scripts/test/run-release-smoke.ps1#152-185. This ensures that the install-metadata.json and CLI shims work correctly across different platforms before the actual release is triggered. Sources: scripts/test/run-release-smoke.ps1#1-185