Skip to main content
The Palyra release workflow ensures that all distributed artifacts are built deterministically, validated against strict security and coherence gates, and accompanied by verifiable supply-chain metadata. The process transforms the source workspace into portable bundles for both desktop and headless environments, generating SLSA (Supply-chain Levels for Software Artifacts) provenance and GitHub build attestations to guarantee artifact integrity.

Release Workflow Architecture

The release process is orchestrated via GitHub Actions and a suite of PowerShell scripts that manage cross-platform consistency. It follows a “Build -> Package -> Validate -> Attest” pipeline.

High-Level Data Flow

This diagram illustrates the transition from raw build artifacts to a signed, validated release package. “Release Packaging Pipeline” Sources: .github/workflows/release.yml#120-210, scripts/release/package-portable.ps1#23-95, scripts/release/validate-portable-archive.ps1#28-122

Version Coherence & Metadata

Before packaging, the system enforces version coherence across all workspace members. The prepare-release job derives metadata and ensures the repository version matches the requested release tag .github/workflows/release.yml#30-65.

Key Release Artifacts

ArtifactDescriptionContents
Desktop BundlePortable GUI packagepalyra-desktop-control-center, sidecars, web assets, docs.
Headless PackageServer-side packagepalyrad, palyra, palyra-browserd, web assets, docs.
Release Manifestrelease-manifest.jsonMetadata: artifact_kind, version, platform, sha256 of binaries.
Checksumschecksums.txtCanonical SHA256 hashes for every file in the archive.
Sources: scripts/release/package-portable.ps1#28-120, scripts/release/validate-portable-archive.ps1#29-57

Portable Packaging Implementation

The script package-portable.ps1 is responsible for assembling the payload. It colocates the core binaries with the web/ dashboard distribution and the embedded operator documentation scripts/release/package-portable.ps1#84-95.

Binary Colocation Logic

The release assumes a specific directory structure for runtime discovery:
  1. Binaries: palyra, palyrad, and palyra-browserd reside in the root scripts/release/package-portable.ps1#87-89.
  2. Web Assets: The dashboard is placed in a web/ subdirectory scripts/release/package-portable.ps1#92.
  3. Docs: Operator docs and help snapshots are placed in docs/ and docs/help_snapshots/ scripts/release/package-portable.ps1#93-94.
Sources: scripts/release/package-portable.ps1#65-95, scripts/release/validate-portable-archive.ps1#43-57

Validation & Security Gates

Palyra employs multi-layered validation to prevent the distribution of malformed or insecure artifacts.

1. Archive Integrity Validation

The validate-portable-archive.ps1 script performs:

2. Supply Chain Security

Release engineering includes extensive supply-chain scanning: Sources: .github/workflows/security.yml#12-156, scripts/release/validate-portable-archive.ps1#8-122

Release Smoke Testing

The run-release-smoke.ps1 script performs a full lifecycle simulation. It builds, packages, installs, and validates the release artifacts in a clean-room environment. “Release Smoke Test Flow” Sources: scripts/test/run-release-smoke.ps1#152-190, scripts/release/install-headless-package.ps1#58-72

Provenance & Attestation

Palyra generates verifiable attestations to link the final binaries back to the specific GitHub Actions workflow run.
  • GitHub Build Attestations: Uses actions/attest-build-provenance to sign the artifacts with the repository’s identity .github/workflows/release.yml#21-22.
  • SLSA Provenance: Generates non-forgeable provenance for all release assets, allowing users to verify that the binary was built in a secure, isolated environment.
Sources: .github/workflows/release.yml#19-22, .github/workflows/security.yml#147-156