mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 12:20:27 +01:00
build: macOS package notarization
Includes hardened-runtime patch from gdams from https://github.com/nodejs/node/issues/29216#issuecomment-546932966 PR-URL: https://github.com/nodejs/node/pull/31459 Refs: https://github.com/nodejs/node/issues/29216 Reviewed-By: Christian Clauss <cclauss@me.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Ash Cripps <ashley.cripps@ibm.com> Signed-off-by: Rod Vagg <rod@vagg.org>
This commit is contained in:
parent
811b3a9931
commit
6db6af4057
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -33,6 +33,7 @@
|
||||||
/doc/api.xml
|
/doc/api.xml
|
||||||
/node
|
/node
|
||||||
/node_g
|
/node_g
|
||||||
|
/gon-config.json
|
||||||
/*.exe
|
/*.exe
|
||||||
/*.swp
|
/*.swp
|
||||||
/out
|
/out
|
||||||
|
|
|
||||||
1
Makefile
1
Makefile
|
|
@ -1003,6 +1003,7 @@ $(PKG): release-only
|
||||||
--resources $(MACOSOUTDIR)/installer/productbuild/Resources \
|
--resources $(MACOSOUTDIR)/installer/productbuild/Resources \
|
||||||
--package-path $(MACOSOUTDIR)/pkgs ./$(PKG)
|
--package-path $(MACOSOUTDIR)/pkgs ./$(PKG)
|
||||||
SIGN="$(PRODUCTSIGN_CERT)" PKG="$(PKG)" bash tools/osx-productsign.sh
|
SIGN="$(PRODUCTSIGN_CERT)" PKG="$(PKG)" bash tools/osx-productsign.sh
|
||||||
|
bash tools/osx-notarize.sh $(FULLVERSION)
|
||||||
|
|
||||||
.PHONY: pkg
|
.PHONY: pkg
|
||||||
# Builds the macOS installer for releases.
|
# Builds the macOS installer for releases.
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,13 @@ if [ "X$SIGN" == "X" ]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
codesign -s "$SIGN" "$PKGDIR"/bin/node
|
# All macOS executable binaries in the bundle must be codesigned with the
|
||||||
|
# hardened runtime enabled.
|
||||||
|
# See https://github.com/nodejs/node/pull/31459
|
||||||
|
|
||||||
|
codesign \
|
||||||
|
--sign "$SIGN" \
|
||||||
|
--entitlements tools/osx-entitlements.plist \
|
||||||
|
--options runtime \
|
||||||
|
--timestamp \
|
||||||
|
"$PKGDIR"/bin/node
|
||||||
|
|
|
||||||
16
tools/osx-entitlements.plist
Normal file
16
tools/osx-entitlements.plist
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.disable-executable-page-protection</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.disable-library-validation</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
12
tools/osx-gon-config.json.tmpl
Normal file
12
tools/osx-gon-config.json.tmpl
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"notarize": [{
|
||||||
|
"path": "node-{{pkgid}}.pkg",
|
||||||
|
"bundle_id": "org.nodejs.pkg.{{pkgid}}",
|
||||||
|
"staple": true
|
||||||
|
}],
|
||||||
|
|
||||||
|
"apple_id": {
|
||||||
|
"username": "{{appleid}}",
|
||||||
|
"password": "@env:NOTARIZATION_PASSWORD"
|
||||||
|
}
|
||||||
|
}
|
||||||
37
tools/osx-notarize.sh
Executable file
37
tools/osx-notarize.sh
Executable file
|
|
@ -0,0 +1,37 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Uses gon, from https://github.com/mitchellh/gon, to notarize a generated node-<version>.pkg file
|
||||||
|
# with Apple for installation on macOS Catalina and later as validated by Gatekeeper.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
gon_version="0.2.2"
|
||||||
|
gon_exe="${HOME}/.gon/gon_${gon_version}"
|
||||||
|
|
||||||
|
__dirname="$(CDPATH= cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
pkgid="$1"
|
||||||
|
|
||||||
|
if [ "X${pkgid}" == "X" ]; then
|
||||||
|
echo "Usage: $0 <pkgid>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "X$NOTARIZATION_ID" == "X" ]; then
|
||||||
|
echo "No NOTARIZATION_ID environment var. Skipping notarization."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
mkdir -p "${HOME}/.gon/"
|
||||||
|
|
||||||
|
if [ ! -f "${gon_exe}" ]; then
|
||||||
|
curl -sL "https://github.com/mitchellh/gon/releases/download/v${gon_version}/gon_${gon_version}_macos.zip" -o "${gon_exe}.zip"
|
||||||
|
(cd "${HOME}/.gon/" && rm -f gon && unzip "${gon_exe}.zip" && mv gon "${gon_exe}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat tools/osx-gon-config.json.tmpl \
|
||||||
|
| sed -e "s/{{appleid}}/${NOTARIZATION_ID}/" -e "s/{{pkgid}}/${pkgid}/" \
|
||||||
|
> gon-config.json
|
||||||
|
|
||||||
|
"${gon_exe}" -log-level=info gon-config.json
|
||||||
Loading…
Reference in New Issue
Block a user