Skip to content

feat(ci): automate Windows MSI code signing via workflow_dispatch #119

Description

@boscorat

Summary

Automate Windows MSI code signing in CI using a workflow_dispatch trigger on a self-hosted runner with SimplySign Desktop. Evaluate both jsign and ssign as signing tools before committing to one.

Motivation

Currently, Windows MSI signing is a manual step: download the unsigned MSI from the draft release, sign locally with jsign + SimplySign Desktop, then re-upload. This works but requires the maintainer to be at their Linux machine with SimplySign Desktop connected.
Automating this via workflow_dispatch would allow signing from the GitHub Actions UI while keeping the same manual authentication flow (OTP from mobile app → SimplySign Desktop connected → signing runs).

Proposed approach

Phase 1: self-hosted runner with jsign (proven)

  • Set up a self-hosted Linux runner with SimplySign Desktop + jsign pre-installed
  • Create .github/workflows/sign-windows.yml triggered by workflow_dispatch
  • Workflow: authenticate SimplySign (manual OTP) → download unsigned MSI → sign with jsign → upload signed MSI → verify with osslsigncode
  • jsign is already proven to work with our PKCS#11 setup (tested locally)

Phase 2: evaluate ssign as alternative

  • ssign is a newer Rust-based tool for Certum cloud signing
  • Test ssign against the same SimplySign Desktop PKCS#11 setup
  • Compare: reliability, ease of setup, CI integration, timestamp support
  • Decision: adopt ssign if it matches or exceeds jsign, otherwise stay with jsign

Files to create/modify

  • .github/workflows/sign-windows.yml — new workflow for workflow_dispatch signing
  • RELEASE.md — update signing step to reference automated workflow
  • docs/codesigning.md — document CI signing setup

Context

  • Certum OV Open Source Code Signing certificate (CN=Open Source Developer Jason Telford Farrar)
  • SimplySign Desktop installed at /opt/SimplySignDesktop/ on maintainer's Linux machine
  • SunPKCS11 config at ~/provider_simplysign.cfg
  • jsign 7.5 at ~/jsign/jsign.jar — proven working locally
  • ssign v0.1.2 (current version but under active development)

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

buildanything to do with the build & release processcicontinuous integration - used by dependabot

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions