cli/script/pkgmacos
Paul 80830d769e
Fix indentation
Co-authored-by: Andy Feller <andyfeller@github.com>
2024-05-21 19:46:51 +02:00

108 lines
2.8 KiB
Bash
Executable file

#!/bin/zsh
set -e
print_help() {
cat <<EOF
To build a universal pkg for macOS:
script/pkgmacos <tag-name>
To build and sign set APPLE_DEVELOPER_INSTALLER_ID environment variable before.
For example, if you have a signing identity with the identifier
"Developer ID Installer: Your Name (ABC123DEF)" set it in the variable.
EOF
}
if [ $# -eq 0 ]; then
print_help >&2
exit 1
fi
tag_name=""
while [ $# -gt 0 ]; do
case "$1" in
-h | --help )
print_help
exit 0
;;
-* )
printf "unrecognized flag: %s\n" "$1" >&2
exit 1
;;
* )
tag_name="$1"
shift 1
;;
esac
done
# gh-binary paths
bin_path="/bin/gh"
arm64_bin="dist/macos_darwin_arm64$bin_path"
amd64_bin="dist/macos_darwin_amd64_v1$bin_path"
# payload paths
payload_root="pkg_payload"
payload_local_bin="${payload_root}/usr/local/bin"
payload_zsh_site_functions="${payload_root}/usr/local/share/zsh/site-functions"
payload_man1="${payload_root}/usr/local/share/man/man1"
merge_binaries() {
lipo -create -output "${payload_local_bin}/gh" "$arm64_bin" "$amd64_bin"
}
build_pkg() {
# setup payload
mkdir -p "${payload_local_bin}"
mkdir -p "${payload_man1}"
mkdir -p "${payload_zsh_site_functions}"
# copy man pages
for file in ./share/man/man1/gh*.1; do
cp "$file" "${payload_man1}"
done
# Include only Zsh completions,
# the recommended/only option on macOS since Catalina for default shell.
cp "./share/zsh/site-functions/_gh" "${payload_zsh_site_functions}"
# merge binaries
merge_binaries
# build pkg
pkgbuild \
--root "$payload_root" \
--identifier "com.github.cli" \
--version "$tag_name" \
--install-location "/" \
"dist/com.github.cli.pkg"
# setup resources
mkdir "build/macOS/resources"
cp "LICENSE" "build/macOS/resources"
touch .gi
# build distribution
if [ -n "$APPLE_DEVELOPER_INSTALLER_ID" ]; then
# build and sign production package with license
productbuild \
--distribution "./build/macOS/distribution.xml" \
--resources "./build/macOS/resources" \
--package-path "./dist" \
--timestamp \
--sign "${APPLE_DEVELOPER_INSTALLER_ID?}" \
"./dist/gh_${tag_name}_macOS_universal.pkg"
else
echo "skipping macOS pkg code-signing; APPLE_DEVELOPER_INSTALLER_ID not set" >&2
# build production package with license without signing
productbuild \
--distribution "./build/macOS/distribution.xml" \
--resources "./build/macOS/resources" \
--package-path "./dist" \
"./dist/gh_${tag_name}_macOS_universal.pkg"
fi
# remove temp installer so it does not get uploaded
rm "dist/com.github.cli.pkg"
}
build_pkg