Adds separate native JavaScript checks, macOS Rust/build checks without release secrets, and a macOS release workflow for Hetzner Object Storage. The release uses pinned checkout, pnpm, Node, Rust, Apple-Actions certificate import and Tauri actions; Tauri builds, signs and notarizes the app. Small focused helpers validate the app/package and publish immutable S3 objects.
Releases use protected macos-vMAJOR.MINOR.PATCH tags contained in main; manual runs select an existing tag from the workflow on main. The app, package and Cargo versions must agree. The existing Apple team and bundle identifier are retained. The signing keychain and certificate export are cleaned up after each run.
ZIP and SHA-256 files are uploaded with conditional writes to <prefix>/<target>/<version>/. Byte-identical retries are accepted; different existing content is rejected. Each public download is checked before writing release.json. There is no latest pointer or updater manifest in this ticket. Hetzner requires an unversioned bucket for the conditional writes used here. Existing web/server workflows are unchanged.
Validation: all 98 native JavaScript tests and 8 Rust tests pass; ESLint, Rust formatting, Clippy and workflow YAML/shell checks pass. The unsigned macOS build succeeds. The new packaging helper was also exercised against the actual notarized 0.1.0 app, including extraction, signature, architecture, stapling and Gatekeeper verification.
Pending acceptance: the user is provisioning the macOS runner. Repository secrets and bucket variables must be configured, then an actual Actions/S3 release and installation of its public download must be verified. This PR remains a draft and KAN-58 remains In Progress until that acceptance is complete.
Required variables: MACOS_RUNNER, S3_BUCKET, S3_REGION (nbg1, fsn1, hel1). Optional variables: MACOS_CHECK_RUNNER, MACOS_RELEASE_TARGET (defaults to aarch64-apple-darwin), S3_PREFIX (defaults to releases/macos), S3_PUBLIC_BASE_URL (defaults to the public Hetzner bucket URL). Runner prerequisites: full Xcode and AWS CLI v2; the workflow prepares Node, pnpm and Rust. Use a clean isolated runner for PR checks.
The macos-v* tag-protection rule is already configured in Gitea with Twyco permitted to manage those tags. No release tag or external artifact has been published by this change.
Ticket: https://kanbangit.de/projects/1/tickets/58
Depends on PR #152. Original branch base and PR target: feature/KAN-56-signed-macos-release, successfully fast-forward pulled at 2b85517965d8710db04ae54f6eb4c2b7249b1846 before branch creation.
Adds separate native JavaScript checks, macOS Rust/build checks without release secrets, and a macOS release workflow for Hetzner Object Storage. The release uses pinned checkout, pnpm, Node, Rust, Apple-Actions certificate import and Tauri actions; Tauri builds, signs and notarizes the app. Small focused helpers validate the app/package and publish immutable S3 objects.
Releases use protected `macos-vMAJOR.MINOR.PATCH` tags contained in `main`; manual runs select an existing tag from the workflow on `main`. The app, package and Cargo versions must agree. The existing Apple team and bundle identifier are retained. The signing keychain and certificate export are cleaned up after each run.
ZIP and SHA-256 files are uploaded with conditional writes to `<prefix>/<target>/<version>/`. Byte-identical retries are accepted; different existing content is rejected. Each public download is checked before writing `release.json`. There is no latest pointer or updater manifest in this ticket. Hetzner requires an unversioned bucket for the conditional writes used here. Existing web/server workflows are unchanged.
Validation: all 98 native JavaScript tests and 8 Rust tests pass; ESLint, Rust formatting, Clippy and workflow YAML/shell checks pass. The unsigned macOS build succeeds. The new packaging helper was also exercised against the actual notarized 0.1.0 app, including extraction, signature, architecture, stapling and Gatekeeper verification.
Pending acceptance: the user is provisioning the macOS runner. Repository secrets and bucket variables must be configured, then an actual Actions/S3 release and installation of its public download must be verified. This PR remains a draft and KAN-58 remains In Progress until that acceptance is complete.
Required secrets: `APPLE_CERTIFICATE` (base64 .p12 including private key), `APPLE_CERTIFICATE_PASSWORD`, `APPLE_PASSWORD` (app-specific), `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`.
Required variables: `MACOS_RUNNER`, `S3_BUCKET`, `S3_REGION` (`nbg1`, `fsn1`, `hel1`). Optional variables: `MACOS_CHECK_RUNNER`, `MACOS_RELEASE_TARGET` (defaults to `aarch64-apple-darwin`), `S3_PREFIX` (defaults to `releases/macos`), `S3_PUBLIC_BASE_URL` (defaults to the public Hetzner bucket URL). Runner prerequisites: full Xcode and AWS CLI v2; the workflow prepares Node, pnpm and Rust. Use a clean isolated runner for PR checks.
The `macos-v*` tag-protection rule is already configured in Gitea with `Twyco` permitted to manage those tags. No release tag or external artifact has been published by this change.
Ticket: https://kanbangit.de/projects/1/tickets/58
Depends on PR #152. Original branch base and PR target: `feature/KAN-56-signed-macos-release`, successfully fast-forward pulled at `2b85517965d8710db04ae54f6eb4c2b7249b1846` before branch creation.
Twyco
changed target branch from feature/KAN-56-signed-macos-release to main2026-09-27 08:08:50 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds separate native JavaScript checks, macOS Rust/build checks without release secrets, and a macOS release workflow for Hetzner Object Storage. The release uses pinned checkout, pnpm, Node, Rust, Apple-Actions certificate import and Tauri actions; Tauri builds, signs and notarizes the app. Small focused helpers validate the app/package and publish immutable S3 objects.
Releases use protected
macos-vMAJOR.MINOR.PATCHtags contained inmain; manual runs select an existing tag from the workflow onmain. The app, package and Cargo versions must agree. The existing Apple team and bundle identifier are retained. The signing keychain and certificate export are cleaned up after each run.ZIP and SHA-256 files are uploaded with conditional writes to
<prefix>/<target>/<version>/. Byte-identical retries are accepted; different existing content is rejected. Each public download is checked before writingrelease.json. There is no latest pointer or updater manifest in this ticket. Hetzner requires an unversioned bucket for the conditional writes used here. Existing web/server workflows are unchanged.Validation: all 98 native JavaScript tests and 8 Rust tests pass; ESLint, Rust formatting, Clippy and workflow YAML/shell checks pass. The unsigned macOS build succeeds. The new packaging helper was also exercised against the actual notarized 0.1.0 app, including extraction, signature, architecture, stapling and Gatekeeper verification.
Pending acceptance: the user is provisioning the macOS runner. Repository secrets and bucket variables must be configured, then an actual Actions/S3 release and installation of its public download must be verified. This PR remains a draft and KAN-58 remains In Progress until that acceptance is complete.
Required secrets:
APPLE_CERTIFICATE(base64 .p12 including private key),APPLE_CERTIFICATE_PASSWORD,APPLE_PASSWORD(app-specific),S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY.Required variables:
MACOS_RUNNER,S3_BUCKET,S3_REGION(nbg1,fsn1,hel1). Optional variables:MACOS_CHECK_RUNNER,MACOS_RELEASE_TARGET(defaults toaarch64-apple-darwin),S3_PREFIX(defaults toreleases/macos),S3_PUBLIC_BASE_URL(defaults to the public Hetzner bucket URL). Runner prerequisites: full Xcode and AWS CLI v2; the workflow prepares Node, pnpm and Rust. Use a clean isolated runner for PR checks.The
macos-v*tag-protection rule is already configured in Gitea withTwycopermitted to manage those tags. No release tag or external artifact has been published by this change.Ticket: https://kanbangit.de/projects/1/tickets/58
Depends on PR #152. Original branch base and PR target:
feature/KAN-56-signed-macos-release, successfully fast-forward pulled at2b85517965d8710db04ae54f6eb4c2b7249b1846before branch creation.96afd8b7catofcba7673c2