Skip to content

Commit 985ea20

Browse files
committed
Document quarantine handling for downloaded release packages
1 parent 9c27a65 commit 985ea20

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ For signed artifacts:
7474
./Scripts/release-smoke-install.sh --signed dist/DevStackMenu-*.pkg
7575
```
7676

77+
If you download a release `.pkg` from GitHub instead of building locally, note the current distribution status:
78+
79+
- local `dist/` exists only in your working copy or CI workspace after `make package`
80+
- GitHub Release assets are separate downloaded files and do not appear in your local `dist/`
81+
- unsigned / non-notarized downloaded packages can be blocked by Gatekeeper on macOS
82+
7783
The smoke script verifies:
7884

7985
- package path resolution and signature policy
@@ -110,6 +116,28 @@ rehash
110116

111117
This `.pkg` is the primary release artifact built by CI.
112118

119+
## Downloaded Release Packages
120+
121+
If macOS blocks an already-downloaded release package with "Apple could not verify it", the package is not notarized yet.
122+
123+
If you trust the release and want to install it manually, remove the quarantine attribute and open it again:
124+
125+
```sh
126+
PKG="$(ls -1t ~/Downloads/DevStackMenu-*.pkg | head -n 1)"
127+
xattr -dr com.apple.quarantine "$PKG"
128+
open "$PKG"
129+
```
130+
131+
Or install directly without Finder:
132+
133+
```sh
134+
PKG="$(ls -1t ~/Downloads/DevStackMenu-*.pkg | head -n 1)"
135+
xattr -dr com.apple.quarantine "$PKG"
136+
sudo installer -pkg "$PKG" -target /
137+
```
138+
139+
If you want Gatekeeper-friendly installs without removing quarantine manually, the release must be signed with Developer ID Installer and notarized. The repository already contains the pipeline hooks for that in `Scripts/sign-notarize-package.sh` and `.github/workflows/release.yml`; it only needs the Apple signing/notarization secrets configured.
140+
113141
## What It Does
114142

115143
- shows the current active profile, managed runtime, tunnel state, Docker context and compact metrics in the macOS menu bar

RELEASING.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ It performs installer + pkgutil + post-install checks.
2929
8. Verify the main app and compose-import helper use distinct bundle identifiers in the built artifacts.
3030
9. Verify single-instance behavior by launching the installed app twice and confirming the second launch exits while the original instance stays alive.
3131
10. If signing credentials are configured, run `workflow_dispatch` on Release Artifacts for signed/notarized output.
32+
11. If signing credentials are not configured, expect downloaded GitHub Release `.pkg` files to be blocked by Gatekeeper until the user removes `com.apple.quarantine` manually.
3233

3334
## GitHub Release Flow
3435

3536
The repository includes a workflow that builds a `.pkg` artifact, uploads it as a workflow artifact, and attaches it to the GitHub release for the tag on push/tag events.
3637
Signed/notarized output is optional and driven by workflow secrets.
38+
Without these secrets, GitHub Release assets remain unsigned and non-notarized, which is acceptable for maintainer testing but not a polished public install flow.
3739

3840
To enable signing/notarization on `workflow_dispatch`, configure:
3941

@@ -54,3 +56,10 @@ v0.1.1
5456

5557
- Artifacts are unsigned by default.
5658
- `make install-local` is a convenience for maintainers and local users; it is not a substitute for a signed distribution flow.
59+
- For a downloaded unsigned package, the current manual bypass is:
60+
61+
```sh
62+
PKG="$(ls -1t ~/Downloads/DevStackMenu-*.pkg | head -n 1)"
63+
xattr -dr com.apple.quarantine "$PKG"
64+
sudo installer -pkg "$PKG" -target /
65+
```

0 commit comments

Comments
 (0)