@seamapi/cli 0.18.1 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,7 +22,9 @@ $ npm install --global @seamapi/cli
22
22
  ```
23
23
 
24
24
  Alternatively, download a standalone binary for your platform from the
25
- [latest GitHub release].
25
+ [latest GitHub release]. The macOS binaries are signed with the Seam Labs, Inc.
26
+ Apple Developer ID and notarized by Apple, so macOS runs them without
27
+ a Gatekeeper prompt.
26
28
 
27
29
  On Arch Linux, install the [`seam-bin`][aur] package from the AUR with
28
30
 
@@ -396,6 +398,58 @@ The following repository secrets must be set on [GitHub Actions]:
396
398
  [GitHub Actions]: https://github.com/features/actions
397
399
  [GPG private key]: https://github.com/marketplace/actions/import-gpg#prerequisites
398
400
 
401
+ ### Signing the macOS binaries
402
+
403
+ The standalone macOS binaries are code signed and notarized while they are
404
+ built, so that Gatekeeper lets them run on machines other than the one that
405
+ built them. Both need an [Apple Developer Program] membership.
406
+
407
+ Anything that releases signs, and fails rather than publish a binary that
408
+ macOS refuses to run. A check builds the macOS binaries with `sign: false`
409
+ instead: a pull request from a fork cannot read the credentials, and nothing a
410
+ check builds is ever released. There is no ad-hoc signature fallback, since
411
+ Gatekeeper rejects one anywhere but the machine that made it.
412
+
413
+ Set these repository secrets to code sign:
414
+
415
+ - `APPLE_CERTIFICATE`: A base64 encoded PKCS#12 (`.p12`) bundle holding a
416
+ [Developer ID Application] certificate, its private key, and its certificate
417
+ chain. Export it from Keychain Access, then encode it with
418
+ `base64 --input certificate.p12 | pbcopy`.
419
+ - `APPLE_CERTIFICATE_PASSWORD`: The password set while exporting the bundle.
420
+ - `APPLE_SIGNING_IDENTITY`: Normally left unset. The build signs with the one
421
+ Developer ID Application identity in the bundle, so this is only needed to
422
+ choose between several, e.g.,
423
+ `Developer ID Application: Seam Labs, Inc. (XXXXXXXXXX)`.
424
+
425
+ And these to notarize, from an [App Store Connect API key]:
426
+
427
+ - `APPLE_API_KEY`: The base64 encoded API private key (`.p8`).
428
+ - `APPLE_API_KEY_ID`: The API key id.
429
+ - `APPLE_API_ISSUER_ID`: The API key issuer id.
430
+
431
+ Notarization tickets cannot be stapled to a bare executable, so Gatekeeper
432
+ looks them up online the first time a downloaded binary runs.
433
+
434
+ Check the credentials without cutting a release by triggering
435
+ [a build workflow_dispatch on GitHub Actions], on the web or with
436
+
437
+ ```
438
+ $ gh workflow run build.yml --ref <branch>
439
+ ```
440
+
441
+ GitHub only offers a workflow_dispatch for a workflow already on the default
442
+ branch, so the build workflow must be merged first. It then runs against any
443
+ branch.
444
+
445
+ Then confirm the run's macOS binaries job signed and notarized: it verifies the
446
+ signature, assesses the binary the way Gatekeeper does, and runs it.
447
+
448
+ [App Store Connect API key]: https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api
449
+ [Apple Developer Program]: https://developer.apple.com/programs/
450
+ [Developer ID Application]: https://developer.apple.com/help/account/reference/certificate-types/
451
+ [a build workflow_dispatch on GitHub Actions]: https://github.com/seamapi/cli/actions?query=workflow%3A_build
452
+
399
453
  ## Contributing
400
454
 
401
455
  > If using squash merge, edit and ensure the commit message follows the [Angular Commit Message Conventions] specification.
package/lib/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const seamapiCliVersion = "0.18.1";
1
+ declare const seamapiCliVersion = "0.18.2";
2
2
  declare const seamapiBlueprintVersion = "1.2.0";
3
3
  export { seamapiBlueprintVersion };
4
4
  export default seamapiCliVersion;
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Versions are replaced with generated values when the package is packed.
2
- const seamapiCliVersion = '0.18.1';
2
+ const seamapiCliVersion = '0.18.2';
3
3
  const seamapiBlueprintVersion = '1.2.0';
4
4
  export { seamapiBlueprintVersion };
5
5
  export default seamapiCliVersion;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/cli",
3
- "version": "0.18.1",
3
+ "version": "0.18.2",
4
4
  "description": "A command-line interface (CLI) for interacting with the Seam API.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -1,5 +1,5 @@
1
1
  // Versions are replaced with generated values when the package is packed.
2
- const seamapiCliVersion = '0.18.1'
2
+ const seamapiCliVersion = '0.18.2'
3
3
  const seamapiBlueprintVersion = '1.2.0'
4
4
 
5
5
  export { seamapiBlueprintVersion }