six-degrees 0.8.0 → 1.0.0
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +16 -16
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +16 -16
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/insights.html +1 -1
- package/.next/standalone/.next/server/app/insights.rsc +16 -16
- package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +16 -16
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +16 -16
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +16 -16
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +16 -16
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +16 -16
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +16 -16
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +17 -17
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +17 -17
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +16 -16
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +16 -16
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +15 -15
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +2 -2
- package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +2 -2
- package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +2 -2
- package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +1 -1
- package/.next/standalone/.next/server/chunks/{lib_rpc_0t552z6.js → lib_rpc_1hjjjr4.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +4 -4
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/0hggugbh84m4t.js +21 -0
- package/.next/standalone/.next/static/chunks/1ods5h86raivz.js +1 -0
- package/.next/standalone/CHANGELOG.md +23 -0
- package/.next/standalone/README.md +15 -13
- package/.next/standalone/SECURITY.md +9 -4
- package/.next/standalone/app/api/scraper/route.js +9 -1
- package/.next/standalone/app/setup/page.js +55 -4
- package/.next/standalone/install.sh +7 -6
- package/.next/standalone/lib/scanner-setup.js +82 -3
- package/.next/standalone/lib/settings.js +3 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/build-app.mjs +167 -11
- package/.next/standalone/scripts/build-desktop.mjs +3 -2
- package/.next/standalone/scripts/ci-mac-signing.sh +128 -0
- package/.next/standalone/scripts/entitlements/electron.plist +23 -0
- package/.next/standalone/scripts/entitlements/node.plist +27 -0
- package/.next/standalone/scripts/mac-sign.mjs +563 -0
- package/.next/standalone/scripts/make-dmg-background.mjs +2 -1
- package/.next/standalone/scripts/set-signing-secrets.sh +96 -0
- package/.next/static/chunks/0hggugbh84m4t.js +21 -0
- package/.next/static/chunks/1ods5h86raivz.js +1 -0
- package/CHANGELOG.md +23 -0
- package/README.md +15 -13
- package/SECURITY.md +9 -4
- package/lib/scanner-setup.js +82 -3
- package/lib/settings.js +3 -0
- package/package.json +1 -1
- package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +0 -1
- package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +0 -21
- package/.next/static/chunks/0838_s6w-i_ik.js +0 -1
- package/.next/static/chunks/112mv-com-mqa.js +0 -21
- /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_ssgManifest.js +0 -0
- /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_buildManifest.js +0 -0
- /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# The Mac release's Developer ID, for .github/workflows/release.yml's Mac jobs
|
|
3
|
+
# (docs/brain/DESKTOP.md D4). Two commands:
|
|
4
|
+
#
|
|
5
|
+
# ci-mac-signing.sh setup VERSION DRY_RUN before the build
|
|
6
|
+
# ci-mac-signing.sh cleanup after it, always (if: always())
|
|
7
|
+
#
|
|
8
|
+
# setup asks scripts/mac-sign.mjs whether this release signs (release-plan):
|
|
9
|
+
# - all five secrets set: it signs, dry run or not;
|
|
10
|
+
# - none set: ad hoc, as before 1.0, unless this is a real release of 1.0.0 or
|
|
11
|
+
# later, which must be signed: then it fails here, before anything is built;
|
|
12
|
+
# - some but not all: always a mistake, and it fails, naming the missing ones.
|
|
13
|
+
# When it signs, it decodes the certificate (.p12, which carries Apple's
|
|
14
|
+
# Developer ID G2 intermediate too) into a temporary keychain with a random
|
|
15
|
+
# password, finds the "Developer ID Application" identity in it, decodes the App
|
|
16
|
+
# Store Connect API key (.p8) for notarytool, and hands the build their places
|
|
17
|
+
# through $GITHUB_ENV: SIX_DEGREES_SIGN_IDENTITY (the identity's SHA-1: names
|
|
18
|
+
# can repeat across renewals, a hash can't), SIX_DEGREES_SIGN_KEYCHAIN and
|
|
19
|
+
# SIX_DEGREES_NOTARY_KEY. The key's id and issuer reach the build step straight
|
|
20
|
+
# from the secrets (release.yml), never through a file. MAC_SIGNING says which
|
|
21
|
+
# it was (developer-id or ad-hoc), for the smoke test and the release notes.
|
|
22
|
+
#
|
|
23
|
+
# The secrets arrive as environment variables, set by release.yml from GitHub's
|
|
24
|
+
# secrets and nowhere else. Nothing here prints one: values go to files made
|
|
25
|
+
# under umask 077, or to `security` itself, and GitHub masks them in the log
|
|
26
|
+
# besides. Never run this with `bash -x`. cleanup deletes the keychain, puts the
|
|
27
|
+
# keychain search list back as it was, and removes every decoded file.
|
|
28
|
+
|
|
29
|
+
set -euo pipefail
|
|
30
|
+
|
|
31
|
+
work="${RUNNER_TEMP:?RUNNER_TEMP is not set (this runs in GitHub Actions)}/six-degrees-signing"
|
|
32
|
+
keychain="$work/signing.keychain-db"
|
|
33
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
34
|
+
|
|
35
|
+
say() { printf '%s\n' "$*"; }
|
|
36
|
+
die() { printf '::error::%s\n' "$*"; exit 1; }
|
|
37
|
+
|
|
38
|
+
setup() {
|
|
39
|
+
local version="${1:?usage: ci-mac-signing.sh setup VERSION DRY_RUN}" dry_run="${2:-false}" plan
|
|
40
|
+
local genv="${GITHUB_ENV:?GITHUB_ENV is not set}"
|
|
41
|
+
# release-plan reads only whether each secret is set, never a value.
|
|
42
|
+
if ! plan="$(node "$here/mac-sign.mjs" release-plan "$version" "$dry_run")"; then
|
|
43
|
+
die "The Mac app can't be built as asked: see the line above."
|
|
44
|
+
fi
|
|
45
|
+
if [ "$plan" != developer-id ]; then
|
|
46
|
+
echo "MAC_SIGNING=ad-hoc" >> "$genv"
|
|
47
|
+
say "Signing: ad hoc."
|
|
48
|
+
return 0
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
umask 077
|
|
52
|
+
rm -rf "$work"
|
|
53
|
+
mkdir -p "$work"
|
|
54
|
+
|
|
55
|
+
# The certificate, for the keychain only; its file goes as soon as it's in.
|
|
56
|
+
printf '%s' "$MACOS_SIGN_P12_BASE64" | base64 --decode > "$work/cert.p12" 2>/dev/null \
|
|
57
|
+
|| die "MACOS_SIGN_P12_BASE64 isn't base64 (set it again with scripts/set-signing-secrets.sh)."
|
|
58
|
+
[ -s "$work/cert.p12" ] || die "MACOS_SIGN_P12_BASE64 decodes to nothing."
|
|
59
|
+
# The API key, for notarytool, kept until cleanup.
|
|
60
|
+
printf '%s' "$APPLE_API_KEY_P8_BASE64" | base64 --decode > "$work/AuthKey.p8" 2>/dev/null \
|
|
61
|
+
|| die "APPLE_API_KEY_P8_BASE64 isn't base64 (set it again with scripts/set-signing-secrets.sh)."
|
|
62
|
+
grep -q -- '-----BEGIN PRIVATE KEY-----' "$work/AuthKey.p8" \
|
|
63
|
+
|| die "APPLE_API_KEY_P8_BASE64 doesn't decode to an App Store Connect API key (.p8)."
|
|
64
|
+
|
|
65
|
+
# A keychain of its own, with a password nobody needs to know, unlocked for
|
|
66
|
+
# the length of the job (6 hours), and codesign allowed to use the key without
|
|
67
|
+
# asking (the partition list): there is nobody to click Allow on a runner.
|
|
68
|
+
local kc_pass
|
|
69
|
+
kc_pass="$(head -c 32 /dev/urandom | base64 | tr -d '\n=+/')"
|
|
70
|
+
security create-keychain -p "$kc_pass" "$keychain"
|
|
71
|
+
security set-keychain-settings -lut 21600 "$keychain"
|
|
72
|
+
security unlock-keychain -p "$kc_pass" "$keychain"
|
|
73
|
+
security import "$work/cert.p12" -k "$keychain" -f pkcs12 -P "$MACOS_SIGN_P12_PASSWORD" \
|
|
74
|
+
-T /usr/bin/codesign -T /usr/bin/security > /dev/null \
|
|
75
|
+
|| die "The certificate wouldn't import: is MACOS_SIGN_P12_PASSWORD the .p12's password?"
|
|
76
|
+
rm -f "$work/cert.p12"
|
|
77
|
+
security set-key-partition-list -S apple-tool:,apple: -s -k "$kc_pass" "$keychain" > /dev/null
|
|
78
|
+
kc_pass=""
|
|
79
|
+
|
|
80
|
+
# codesign finds an identity only in a keychain on the search list. The list as
|
|
81
|
+
# it was is kept, for cleanup to put back.
|
|
82
|
+
security list-keychains -d user > "$work/search-list"
|
|
83
|
+
local line orig=()
|
|
84
|
+
while IFS= read -r line; do
|
|
85
|
+
line="${line#"${line%%[![:space:]]*}"}"; line="${line%\"}"; line="${line#\"}"
|
|
86
|
+
[ -n "$line" ] && orig+=("$line")
|
|
87
|
+
done < "$work/search-list"
|
|
88
|
+
security list-keychains -d user -s "$keychain" ${orig[@]+"${orig[@]}"}
|
|
89
|
+
|
|
90
|
+
# By its kind, not its full name: whatever Developer ID Application identity
|
|
91
|
+
# the certificate holds, and it must be valid (its chain reaches Apple's root).
|
|
92
|
+
local found identity name
|
|
93
|
+
found="$(security find-identity -v -p codesigning "$keychain" | grep '"Developer ID Application: ' | head -1 || true)"
|
|
94
|
+
identity="$(printf '%s\n' "$found" | awk '{print $2}')"
|
|
95
|
+
name="$(printf '%s\n' "$found" | sed -n 's/.*"\(Developer ID Application: [^"]*\)".*/\1/p')"
|
|
96
|
+
if [ -z "$identity" ]; then
|
|
97
|
+
say "The keychain holds these code-signing identities (valid or not):"
|
|
98
|
+
security find-identity -p codesigning "$keychain" | sed 's/^/ /'
|
|
99
|
+
die "No valid \"Developer ID Application\" identity in MACOS_SIGN_P12_BASE64. Export the Developer ID Application certificate with its private key (and Apple's intermediate) as the .p12."
|
|
100
|
+
fi
|
|
101
|
+
{
|
|
102
|
+
echo "SIX_DEGREES_SIGN_IDENTITY=$identity"
|
|
103
|
+
echo "SIX_DEGREES_SIGN_KEYCHAIN=$keychain"
|
|
104
|
+
echo "SIX_DEGREES_NOTARY_KEY=$work/AuthKey.p8"
|
|
105
|
+
echo "MAC_SIGNING=developer-id"
|
|
106
|
+
} >> "$genv"
|
|
107
|
+
say "Signing: $name, from a temporary keychain; notarized with the App Store Connect API key."
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
cleanup() {
|
|
111
|
+
if [ -f "$work/search-list" ]; then
|
|
112
|
+
local line orig=()
|
|
113
|
+
while IFS= read -r line; do
|
|
114
|
+
line="${line#"${line%%[![:space:]]*}"}"; line="${line%\"}"; line="${line#\"}"
|
|
115
|
+
[ -n "$line" ] && orig+=("$line")
|
|
116
|
+
done < "$work/search-list"
|
|
117
|
+
security list-keychains -d user -s ${orig[@]+"${orig[@]}"} || true
|
|
118
|
+
fi
|
|
119
|
+
if [ -e "$keychain" ]; then security delete-keychain "$keychain" || true; fi
|
|
120
|
+
rm -rf "$work"
|
|
121
|
+
say "Signing: cleaned up (no keychain, key or certificate left)."
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
case "${1:-}" in
|
|
125
|
+
setup) shift; setup "$@" ;;
|
|
126
|
+
cleanup) cleanup ;;
|
|
127
|
+
*) echo "usage: ci-mac-signing.sh setup VERSION DRY_RUN | cleanup" >&2; exit 2 ;;
|
|
128
|
+
esac
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<!--
|
|
4
|
+
Six Degrees.app and its Electron helper apps (GPU, Renderer, Plugin), signed
|
|
5
|
+
with Developer ID and the hardened runtime (scripts/mac-sign.mjs, DESKTOP.md D4).
|
|
6
|
+
|
|
7
|
+
allow-jit V8 compiles JavaScript as it runs; the hardened
|
|
8
|
+
runtime refuses that without it.
|
|
9
|
+
allow-unsigned-executable-memory what V8 still uses where it can't use MAP_JIT
|
|
10
|
+
(Intel Macs). Discord's and Electron's own
|
|
11
|
+
templates carry the same two.
|
|
12
|
+
|
|
13
|
+
Never disable-library-validation: every library the app loads is signed by the
|
|
14
|
+
same team in the same pass, and it loads nothing from outside itself.
|
|
15
|
+
-->
|
|
16
|
+
<plist version="1.0">
|
|
17
|
+
<dict>
|
|
18
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
19
|
+
<true/>
|
|
20
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
21
|
+
<true/>
|
|
22
|
+
</dict>
|
|
23
|
+
</plist>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<!--
|
|
4
|
+
The Node inside the app (Contents/Resources/node), which runs the server, and
|
|
5
|
+
Playwright's driver's Node when it isn't a link to that one. Signed with
|
|
6
|
+
Developer ID and the hardened runtime (scripts/mac-sign.mjs, DESKTOP.md D4).
|
|
7
|
+
|
|
8
|
+
allow-jit V8 compiles JavaScript as it runs. Without it
|
|
9
|
+
Node 24 stops before running anything: "Failed
|
|
10
|
+
to reserve virtual memory for CodeRange"
|
|
11
|
+
(checked on this build's Node, 2026-10-04).
|
|
12
|
+
allow-unsigned-executable-memory what V8 still uses where it can't use MAP_JIT
|
|
13
|
+
(Intel Macs). Node's own release signature
|
|
14
|
+
carries both.
|
|
15
|
+
|
|
16
|
+
Never disable-library-validation, which Node's own signature does carry so that
|
|
17
|
+
anyone's native addons load: the only native code this server loads is the
|
|
18
|
+
app's own (sharp and its libvips), signed by the same team in the same pass.
|
|
19
|
+
-->
|
|
20
|
+
<plist version="1.0">
|
|
21
|
+
<dict>
|
|
22
|
+
<key>com.apple.security.cs.allow-jit</key>
|
|
23
|
+
<true/>
|
|
24
|
+
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
|
25
|
+
<true/>
|
|
26
|
+
</dict>
|
|
27
|
+
</plist>
|