33 push :
44 tags :
55 - ' v*.*.*'
6+ workflow_dispatch :
7+ inputs :
8+ version :
9+ description : ' Version number (e.g., 1.0.0)'
10+ required : true
11+ type : string
612
713jobs :
814 mac :
915 name : macos
10- runs-on : macos-latest
16+ runs-on : macos-14
1117 permissions :
1218 contents : write
19+ env :
20+ APPLE_API_ISSUER : ${{ secrets.APPLE_API_ISSUER }}
21+ APPLE_API_KEY_ID : ${{ secrets.APPLE_API_KEY_ID }}
22+ APPLE_API_KEY_BASE64 : ${{ secrets.APPLE_API_KEY_BASE64 }}
23+ CSC_KEY_PASSWORD : ${{ secrets.APPLE_CERTIFICATES_BUNDLE_PASSWORD }}
1324 steps :
1425 - name : Checkout repository
1526 uses : actions/checkout@v4
@@ -22,42 +33,48 @@ jobs:
2233 - name : Install dependencies
2334 run : npm ci
2435
25- - name : Set version from tag
36+ - name : Determine version variables
2637 env :
2738 GITHUB_REF : ${{ github.ref }}
28- run : npm version "${GITHUB_REF#refs/tags/v}" --no-git-tag-version --allow-same-version
39+ VERSION_INPUT : ${{ github.event.inputs.version }}
40+ run : |
41+ if [ -n "$VERSION_INPUT" ]; then
42+ # Manual trigger with version input
43+ VERSION="$VERSION_INPUT"
44+ else
45+ # Tag trigger
46+ VERSION="${GITHUB_REF#refs/tags/v}"
47+ fi
48+ VERSION_WITHOUT_PRERELEASE=$(echo "$VERSION" | sed 's/-.*//')
49+
50+ echo "VERSION=$VERSION" >> $GITHUB_ENV
51+ echo "VERSION_WITHOUT_PRERELEASE=$VERSION_WITHOUT_PRERELEASE" >> $GITHUB_ENV
52+
53+ echo "Determined VERSION: $VERSION"
54+ echo "Determined VERSION_WITHOUT_PRERELEASE: $VERSION_WITHOUT_PRERELEASE"
55+
56+ - name : Set version from tag or input
57+ run : npm version "$VERSION" --no-git-tag-version --allow-same-version
2958
3059 - name : Build
3160 run : npm run build
3261
3362 - name : Install Apple Code Signing Certificate
3463 env :
35- APPLE_THIRD_PARTY_INSTALLER_SIGNING_CERTIFICATE_BASE64 : ${{ secrets.APPLE_3RD_PARTY_INSTALLER_SIGNING_CERTIFICATE_BASE64 }}
36- APPLE_THIRD_PARTY_SIGNING_CERTIFICATE_BASE64 : ${{ secrets.APPLE_3RD_PARTY_SIGNING_CERTIFICATE_BASE64 }}
37- BUILD_CERTIFICATE_BASE64 : ${{ secrets.APPLE_SIGNING_CERTIFICATE_BASE64 }}
38- P12_PASSWORD : ${{ secrets.APPLE_SIGNING_CERTIFICATE_PASSWORD }}
39- KEYCHAIN_PASSWORD : ${{ secrets.KEYCHAIN_PASSWORD }}
64+ APPLE_CERTIFICATES_BUNDLE_BASE64 : ${{ secrets.APPLE_CERTIFICATES_BUNDLE_BASE64 }}
65+ APPLE_CERTIFICATES_BUNDLE_PATH : ${{ runner.temp }}/apple_certificates_bundle.p12
4066 run : |
41- THIRD_PARTY_INSTALLER_CERTIFICATE_PATH=$RUNNER_TEMP/3rd_party_installer_certificate.p12
42- THIRD_PARTY_CERTIFICATE_PATH=$RUNNER_TEMP/3rd_party_certificate.p12
43- CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
44- KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
45-
46- # import certificate and provisioning profile from secrets
47- echo -n "$APPLE_THIRD_PARTY_INSTALLER_SIGNING_CERTIFICATE_BASE64" | base64 --decode -o $THIRD_PARTY_INSTALLER_CERTIFICATE_PATH
48- echo -n "$APPLE_THIRD_PARTY_SIGNING_CERTIFICATE_BASE64" | base64 --decode -o $THIRD_PARTY_CERTIFICATE_PATH
49- echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
50-
51- # create temporary keychain
52- security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
53- security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
54- security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
55-
56- # import certificate to keychain
57- security import $THIRD_PARTY_INSTALLER_CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
58- security import $THIRD_PARTY_CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
59- security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
60- security list-keychain -d user -s $KEYCHAIN_PATH
67+ echo -n "$APPLE_CERTIFICATES_BUNDLE_BASE64" | base64 --decode -o $APPLE_CERTIFICATES_BUNDLE_PATH
68+ echo "CSC_LINK=$APPLE_CERTIFICATES_BUNDLE_PATH" >> $GITHUB_ENV
69+
70+ - name : Install Apple API key
71+ run : |
72+ mkdir -p ~/private_keys/
73+
74+ KEY_PATH=~/private_keys/AuthKey_$APPLE_API_KEY_ID.p8
75+
76+ echo -n "$APPLE_API_KEY_BASE64" | base64 --decode -o $KEY_PATH
77+ echo "APPLE_API_KEY=$KEY_PATH" >> $GITHUB_ENV
6178
6279 - name : Install Mac Profiles
6380 env :
@@ -69,23 +86,40 @@ jobs:
6986
7087 - name : Package (Mac)
7188 env :
72- APPLE_TEAM_ID : ${{ secrets.APPLE_TEAM_ID }}
73- APPLE_ID : ${{ secrets.APPLE_ID }}
74- APPLE_APP_SPECIFIC_PASSWORD : ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
7589 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7690 run : npm run package:mac:publish
7791
78- - name : Set version from tag (without pre-release)
79- env :
80- GITHUB_REF : ${{ github.ref }}
81- run : |
82- VERSION=$(echo "${GITHUB_REF#refs/tags/v}" | sed 's/-.*//')
83- npm version "$VERSION" --no-git-tag-version --allow-same-version
92+ - name : Set version from tag or input (without pre-release)
93+ run : npm version "$VERSION_WITHOUT_PRERELEASE" --no-git-tag-version --allow-same-version
8494
8595 - name : Package (Mac App Store)
8696 env :
8797 GITHUB_RUN_NUMBER : ${{ github.run_number }}
88- run : npm run package:mac:store
98+ run : |
99+ echo "Packaging for Mac App Store..."
100+ npm run package:mac:store
101+
102+ - name : Submit to App Store Connect
103+ continue-on-error : true
104+ run : |
105+ echo "Submitting to App Store Connect..."
106+
107+ PKG_FILE=$(find dist -name "*.pkg" -type f | head -1)
108+ if [[ -z "$PKG_FILE" ]]; then
109+ echo "Error: No .pkg file found in dist directory"
110+ exit 1
111+ fi
112+
113+ echo "Found package: $PKG_FILE"
114+
115+ xcrun altool \
116+ --upload-app \
117+ --file "$PKG_FILE" \
118+ --type macos \
119+ --apiKey "$APPLE_API_KEY_ID" \
120+ --apiIssuer "$APPLE_API_ISSUER" \
121+ --output-format xml \
122+ --show-progress
89123
90124 - name : Upload artifacts
91125 uses : actions/upload-artifact@v4
0 commit comments