Packaging & Release Pipeline

BarePDF automates Windows binary packaging, installer compilation, portable ZIP creation, and SHA256 checksum manifest generation using PowerShell scripts in packaging/windows/scripts/.

Automated Packaging Pipeline

The release pipeline executes in the following sequence:

  1. Version Validation: validate-version.ps1 verifies the root Cargo product version, inherited workspace package versions, Conventional Commit bump, Inno Setup configuration, and release tag when present.
  2. Staging Executable & Dependencies: stage-release.ps1 builds the release executable (cargo build --release) and copies BarePDF.exe, PDFium DLLs, licenses, and assets into target/release/staged/.
  3. Building Portable Package: build-portable.ps1 compresses staged files into target/release/portable/BarePDF-Portable-x64-v<version>.zip.
  4. Compiling Windows Installer: build-installer.ps1 compiles packaging/windows/installer/BarePDF.iss via Inno Setup (ISCC.exe) into target/release/installer/BarePDF-Setup-x64-v<version>.exe.
  5. Validating Installer & Registry Config: validate-installer.ps1 verifies the generated setup executable and registry key entries.
  6. Generating Checksums: generate-checksums.ps1 hashes the versioned installer and portable package, then copies one canonical versioned copy of each into target/release/artifacts/. It writes one versioned checksum manifest plus latest.json in the same directory.

Linux Packaging (.deb & AppImage)

BarePDF produces Debian packages (.deb) for Pardus 23/25, Debian, and Ubuntu, along with universal portable AppImage binaries.

Debian / Pardus Package (cargo deb)

Metadata is configured under [package.metadata.deb] in apps/barepdf/Cargo.toml.

  • Generation:
    cargo deb --package barepdf
  • Structure:
    • Binary: /usr/bin/barepdf
    • PDFium engine: /usr/lib/barepdf/libpdfium.so
    • Desktop entry: /usr/share/applications/barepdf.desktop
    • App icon: /usr/share/icons/hicolor/scalable/apps/barepdf.svg
  • Dependencies: Automatically resolved via $auto, requiring libxkbcommon0, libfontconfig1, libgbm1, and xdg-utils.

Standalone AppImage (appimagetool)

An AppDir staging directory packages the binary, bundled libpdfium.so, desktop entry, icons, and AppRun launcher:

./appimagetool AppDir BarePDF-<version>-x86_64.AppImage

The resulting AppImage runs portably on any x86_64 Linux system without requiring administrator privileges or system library installations.

GitHub Actions Release Workflow

The .github/workflows/release.yml workflow starts automatically after a successful CI push run on main, or through a manual dispatch. The Ed25519 manifest signing key must match the public key pinned in the repository before release discovery begins; a missing or mismatched key fails closed.

Discovery validates every first-parent commit since the latest stable tag, selects the newest unreleased product version, and tags the exact main snapshot whose CI run triggered publication. Superseded intermediate versions are intentionally skipped instead of shipping obsolete binaries. An existing matching release is accepted idempotently; conflicting or incomplete releases fail. After publication, that stable version becomes GitHub’s latest release and the Pages workflow is explicitly dispatched.

Public documentation links to the website download page. Its build reads the latest GitHub Release and exposes exactly one canonical versioned installer, portable package, and checksum manifest.