Skip to content

Commit 786be95

Browse files
authored
ci: macOS code signing and notarization (#4)
1 parent 080315e commit 786be95

7 files changed

Lines changed: 121 additions & 52 deletions

File tree

.github/workflows/build_macos.yml

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ permissions:
1010
jobs:
1111
build:
1212
runs-on: macos-latest
13+
environment: Sign Executables
1314

1415
steps:
1516
- name: Checkout repo
@@ -23,18 +24,42 @@ jobs:
2324
- name: Install gogio tool
2425
run: make install_deps
2526

26-
- name: Install create-dmg tool
27-
run: brew install create-dmg
27+
- name: Install create-dmg and librsvg tools
28+
run: brew install create-dmg librsvg
2829

2930
- name: Generate macOS icon
3031
run: |
31-
chmod +x ./assets/png_to_icns.sh
32-
./assets/png_to_icns.sh
32+
chmod +x ./assets/svg_to_icns.sh
33+
./assets/svg_to_icns.sh
3334
34-
- name: Build macos disk images
35+
- name: Import signing certificate
36+
env:
37+
CERTIFICATE_P12_BASE64: ${{ secrets.CERTIFICATE_P12_BASE64 }}
38+
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
39+
run: |
40+
CERTIFICATE_PATH=$RUNNER_TEMP/certificate.p12
41+
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
42+
KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
43+
44+
echo -n "$CERTIFICATE_P12_BASE64" | base64 --decode -o $CERTIFICATE_PATH
45+
46+
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
47+
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
48+
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
49+
security import $CERTIFICATE_PATH -P "$CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
50+
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
51+
security list-keychains -d user -s $KEYCHAIN_PATH login.keychain-db
52+
53+
- name: Build and sign macOS app
3554
run: |
36-
make build_macos_app
55+
make build_macos_signed
56+
make notarize_macos
3757
make build_macos_dmg
58+
env:
59+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
60+
IDENTITY: ${{ secrets.IDENTITY }}
61+
APPLE_ID: ${{ secrets.APPLE_ID }}
62+
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
3863

3964
- name: Upload Release Asset
4065
run: |

assets/appicon.icns

61 KB
Binary file not shown.

assets/appicon.svg

Lines changed: 19 additions & 0 deletions
Loading

assets/debrief-installer-bk.png

2.73 KB
Loading

assets/debrief-installer-bk.svg

Lines changed: 24 additions & 0 deletions
Loading

assets/png_to_icns.sh

Lines changed: 0 additions & 46 deletions
This file was deleted.

assets/svg_to_icns.sh

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/bin/bash
2+
# png_to_icns.sh - Generate macOS .icns icon from an SVG source
3+
#
4+
# Usage: ./png_to_icns.sh [input.svg] [output.icns]
5+
# Defaults: input = ./assets/appicon.svg, output = ./assets/appicon.icns
6+
#
7+
# Requires: rsvg-convert (brew install librsvg), iconutil
8+
9+
set -euo pipefail
10+
11+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
12+
INPUT="${1:-$SCRIPT_DIR/appicon.svg}"
13+
OUTPUT="${2:-$SCRIPT_DIR/appicon.icns}"
14+
15+
if [ ! -f "$INPUT" ]; then
16+
echo "ERROR: Source SVG not found at $INPUT"
17+
exit 1
18+
fi
19+
20+
for cmd in rsvg-convert iconutil; do
21+
if ! command -v "$cmd" &>/dev/null; then
22+
echo "ERROR: Required tool '$cmd' is not installed"
23+
echo " brew install librsvg"
24+
exit 1
25+
fi
26+
done
27+
28+
ICONSET=$(mktemp -d)/appicon.iconset
29+
mkdir -p "$ICONSET"
30+
31+
cleanup() {
32+
rm -rf "$(dirname "$ICONSET")"
33+
}
34+
trap cleanup EXIT
35+
36+
# Standard sizes: 16, 32, 128, 256, 512 at 1x and 2x
37+
SIZES=(16 32 128 256 512)
38+
39+
for size in "${SIZES[@]}"; do
40+
double=$((size * 2))
41+
rsvg-convert -w "$size" -h "$size" "$INPUT" -o "$ICONSET/icon_${size}x${size}.png"
42+
rsvg-convert -w "$double" -h "$double" "$INPUT" -o "$ICONSET/icon_${size}x${size}@2x.png"
43+
done
44+
45+
iconutil -c icns "$ICONSET" -o "$OUTPUT"
46+
47+
echo "Created $OUTPUT"

0 commit comments

Comments
 (0)