@@ -21,12 +21,13 @@ jobs:
21
21
id : version
22
22
23
23
# ================================
24
- # macOS
24
+ # macOS
25
25
# ================================
26
- osx-build :
27
- name : Build macOS
26
+ create-macos-artifacts :
27
+ name : Create macOS artifacts
28
28
runs-on : macos-latest
29
29
environment : release
30
+ needs : prereqs
30
31
strategy :
31
32
matrix :
32
33
runtime : [ osx-x64, osx-arm64 ]
38
39
with :
39
40
dotnet-version : 7.0.x
40
41
41
- - name : Install dependencies
42
- run : dotnet restore
43
-
44
42
- name : Build
45
43
run : |
46
44
dotnet build src/osx/Installer.Mac/*.csproj \
@@ -57,203 +55,88 @@ jobs:
57
55
--configuration=MacRelease --output=payload \
58
56
--symbol-output=symbols --runtime=${{ matrix.runtime }}
59
57
60
- - name : Create keychain
58
+ - name : Set up signing/notarization infrastructure
61
59
env :
62
- CERT_BASE64 : ${{ secrets.DEVELOPER_CERTIFICATE_BASE64 }}
63
- CERT_PASSPHRASE : ${{ secrets.DEVELOPER_CERTIFICATE_PASSWORD }}
64
- run : |
60
+ A1 : ${{ secrets.APPLICATION_CERTIFICATE_BASE64 }}
61
+ A2 : ${{ secrets.APPLICATION_CERTIFICATE_PASSWORD }}
62
+ I1 : ${{ secrets.INSTALLER_CERTIFICATE_BASE64 }}
63
+ I2 : ${{ secrets.INSTALLER_CERTIFICATE_PASSWORD }}
64
+ N1 : ${{ secrets.APPLE_TEAM_ID }}
65
+ N2 : ${{ secrets.APPLE_DEVELOPER_ID }}
66
+ N3 : ${{ secrets.APPLE_DEVELOPER_PASSWORD }}
67
+ N4 : ${{ secrets.APPLE_KEYCHAIN_PROFILE }}
68
+ run : |
69
+ echo "Setting up signing certificates"
65
70
security create-keychain -p pwd $RUNNER_TEMP/buildagent.keychain
66
71
security default-keychain -s $RUNNER_TEMP/buildagent.keychain
67
72
security unlock-keychain -p pwd $RUNNER_TEMP/buildagent.keychain
68
- echo $CERT_BASE64 | base64 -D > $RUNNER_TEMP/cert.p12
69
- security import $RUNNER_TEMP/cert.p12 -k $RUNNER_TEMP/buildagent.keychain -P $CERT_PASSPHRASE -T /usr/bin/codesign
70
- security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $RUNNER_TEMP/buildagent.keychain
71
-
72
- - name : Developer sign
73
- env :
74
- APPLE_TEAM_ID : ${{ secrets.APPLE_TEAM_ID }}
75
- run : |
76
- .github/run_developer_signing.sh payload $APPLE_TEAM_ID $GITHUB_WORKSPACE/src/osx/Installer.Mac/entitlements.xml
77
-
78
- - name : Upload macOS artifacts
79
- uses : actions/upload-artifact@v3
80
- with :
81
- name : tmp.${{ matrix.runtime }}-build
82
- path : |
83
- payload
84
- symbols
85
-
86
- osx-payload-sign :
87
- name : Sign macOS payload
88
- # ESRP service requires signing to run on Windows
89
- runs-on : windows-latest
90
- environment : release
91
- strategy :
92
- matrix :
93
- runtime : [ osx-x64, osx-arm64 ]
94
- needs : osx-build
95
- steps :
96
- - uses : actions/checkout@v4
97
-
98
- - name : Download payload
99
- uses : actions/download-artifact@v3
100
- with :
101
- name : tmp.${{ matrix.runtime }}-build
102
-
103
- - name : Zip unsigned payload
104
- shell : pwsh
105
- run : |
106
- Compress-Archive -Path payload payload/payload.zip
107
- cd payload
108
- Get-ChildItem -Exclude payload.zip | Remove-Item -Recurse -Force
109
73
110
- - uses : azure/login@v1
111
- with :
112
- creds : ${{ secrets.AZURE_CREDENTIALS }}
113
-
114
- - name : Set up ESRP client
115
- shell : pwsh
116
- env :
117
- AZURE_VAULT : ${{ secrets.AZURE_VAULT }}
118
- AUTH_CERT : ${{ secrets.AZURE_VAULT_AUTH_CERT_NAME }}
119
- REQUEST_SIGNING_CERT : ${{ secrets.AZURE_VAULT_REQUEST_SIGNING_CERT_NAME }}
120
- run : |
121
- .github\set_up_esrp.ps1
122
-
123
- - name : Run ESRP client
124
- shell : pwsh
74
+ echo $A1 | base64 -D > $RUNNER_TEMP/cert.p12
75
+ security import $RUNNER_TEMP/cert.p12 \
76
+ -k $RUNNER_TEMP/buildagent.keychain \
77
+ -P $A2 \
78
+ -T /usr/bin/codesign
79
+ security set-key-partition-list \
80
+ -S apple-tool:,apple:,codesign: \
81
+ -s -k pwd \
82
+ $RUNNER_TEMP/buildagent.keychain
83
+
84
+ echo $I1 | base64 -D > $RUNNER_TEMP/cert.p12
85
+ security import $RUNNER_TEMP/cert.p12 \
86
+ -k $RUNNER_TEMP/buildagent.keychain \
87
+ -P $I2 \
88
+ -T /usr/bin/productbuild
89
+ security set-key-partition-list \
90
+ -S apple-tool:,apple:,productbuild: \
91
+ -s -k pwd \
92
+ $RUNNER_TEMP/buildagent.keychain
93
+
94
+ echo "Setting up notarytool"
95
+ xcrun notarytool store-credentials \
96
+ --team-id $N1 \
97
+ --apple-id $N2 \
98
+ --password $N3 \
99
+ "$N4"
100
+
101
+ - name : Run codesign against payload
125
102
env :
126
- AZURE_AAD_ID : ${{ secrets.AZURE_AAD_ID }}
127
- APPLE_KEY_CODE : ${{ secrets.APPLE_KEY_CODE }}
128
- APPLE_SIGNING_OP_CODE : ${{ secrets.APPLE_SIGNING_OPERATION_CODE }}
103
+ A3 : ${{ secrets.APPLE_APPLICATION_SIGNING_IDENTITY }}
129
104
run : |
130
- python .github\run_esrp_signing.py payload `
131
- $env:APPLE_KEY_CODE $env:APPLE_SIGNING_OP_CODE `
132
- --params 'Hardening' '--options=runtime'
133
-
134
- - name : Unzip signed payload
135
- shell : pwsh
136
- run : |
137
- Expand-Archive signed/payload.zip -DestinationPath signed
138
- Remove-Item signed/payload.zip
139
-
140
- - name : Upload signed payload
141
- uses : actions/upload-artifact@v3
142
- with :
143
- name : ${{ matrix.runtime }}-payload-sign
144
- path : |
145
- signed
146
-
147
- osx-pack :
148
- name : Package macOS payload
149
- runs-on : macos-latest
150
- strategy :
151
- matrix :
152
- runtime : [ osx-x64, osx-arm64 ]
153
- needs : osx-payload-sign
154
- steps :
155
- - uses : actions/checkout@v4
156
-
157
- - name : Set version environment variable
158
- run : echo "VERSION=$(cat VERSION | sed -E 's/.[0-9]+$//')" >> $GITHUB_ENV
159
-
160
- - name : Set up .NET
161
-
162
- with :
163
- dotnet-version : 7.0.x
164
-
165
- - name : Download signed payload
166
- uses : actions/download-artifact@v3
167
- with :
168
- name : ${{ matrix.runtime }}-payload-sign
105
+ ./src/osx/Installer.Mac/codesign.sh "payload" "$A3" \
106
+ "$GITHUB_WORKSPACE/src/osx/Installer.Mac/entitlements.xml"
169
107
170
108
- name : Create component package
171
109
run : |
172
- src/osx/Installer.Mac/pack.sh --payload=payload \
173
- --version=$VERSION \
174
- --output=components/com.microsoft.gitcredentialmanager.component.pkg
175
-
176
- - name : Create product archive
177
- run : |
178
- src/osx/Installer.Mac/dist.sh --package-path=components \
179
- --version=$VERSION --runtime=${{ matrix.runtime }} \
180
- --output=pkg/gcm-${{ matrix.runtime }}-$VERSION.pkg || exit 1
110
+ src/osx/Installer.Mac/pack.sh --payload="payload" \
111
+ --version="${{ needs.prereqs.outputs.version }}" \
112
+ --output="components/com.microsoft.gitcredentialmanager.component.pkg"
181
113
182
- - name : Upload package
183
- uses : actions/upload-artifact@v3
184
- with :
185
- name : tmp.${{ matrix.runtime }}-pack
186
- path : |
187
- pkg
188
-
189
- osx-sign :
190
- name : Sign and notarize macOS package
191
- # ESRP service requires signing to run on Windows
192
- runs-on : windows-latest
193
- environment : release
194
- strategy :
195
- matrix :
196
- runtime : [ osx-x64, osx-arm64 ]
197
- needs : osx-pack
198
- steps :
199
- - uses : actions/checkout@v4
200
-
201
- - name : Download unsigned package
202
- uses : actions/download-artifact@v3
203
- with :
204
- name : tmp.${{ matrix.runtime }}-pack
205
- path : pkg
206
-
207
- - name : Zip unsigned package
208
- shell : pwsh
209
- run : |
210
- Compress-Archive -Path pkg/*.pkg pkg/gcm-pkg.zip
211
- cd pkg
212
- Get-ChildItem -Exclude gcm-pkg.zip | Remove-Item -Recurse -Force
213
-
214
- - uses : azure/login@v1
215
- with :
216
- creds : ${{ secrets.AZURE_CREDENTIALS }}
217
-
218
- - name : Set up ESRP client
219
- shell : pwsh
114
+ - name : Create and sign product archive
220
115
env :
221
- AZURE_VAULT : ${{ secrets.AZURE_VAULT }}
222
- AUTH_CERT : ${{ secrets.AZURE_VAULT_AUTH_CERT_NAME }}
223
- REQUEST_SIGNING_CERT : ${{ secrets.AZURE_VAULT_REQUEST_SIGNING_CERT_NAME }}
116
+ I3 : ${{ secrets.APPLE_INSTALLER_SIGNING_IDENTITY }}
224
117
run : |
225
- .github\set_up_esrp.ps1
226
-
227
- - name : Sign package
228
- shell : pwsh
229
- env :
230
- AZURE_AAD_ID : ${{ secrets.AZURE_AAD_ID }}
231
- APPLE_KEY_CODE : ${{ secrets.APPLE_KEY_CODE }}
232
- APPLE_SIGNING_OP_CODE : ${{ secrets.APPLE_SIGNING_OPERATION_CODE }}
233
- run : |
234
- python .github\run_esrp_signing.py pkg $env:APPLE_KEY_CODE $env:APPLE_SIGNING_OP_CODE
235
-
236
- - name : Unzip signed package
237
- shell : pwsh
238
- run : |
239
- mkdir unsigned
240
- Expand-Archive -LiteralPath signed\gcm-pkg.zip -DestinationPath .\unsigned -Force
241
- Remove-Item signed\gcm-pkg.zip -Force
118
+ src/osx/Installer.Mac/dist.sh --package-path=components \
119
+ --version="${{ needs.prereqs.outputs.version }}" \
120
+ --runtime="${{ matrix.runtime }}" \
121
+ --output="pkg/gcm-${{ matrix.runtime }}-${{ needs.prereqs.outputs.version }}.pkg" \
122
+ --identity="$I3" || exit 1
242
123
243
- - name : Notarize signed package
244
- shell : pwsh
124
+ - name : Notarize product archive
245
125
env :
246
- AZURE_AAD_ID : ${{ secrets.AZURE_AAD_ID }}
247
- APPLE_KEY_CODE : ${{ secrets.APPLE_KEY_CODE }}
248
- APPLE_NOTARIZATION_OP_CODE : ${{ secrets.APPLE_NOTARIZATION_OPERATION_CODE }}
126
+ N4 : ${{ secrets.APPLE_KEYCHAIN_PROFILE }}
249
127
run : |
250
- python .github\run_esrp_signing.py unsigned $env:APPLE_KEY_CODE $env:APPLE_NOTARIZATION_OP_CODE --params 'BundleId' 'com.microsoft.gitcredentialmanager'
128
+ src/osx/Installer.Mac/notarize.sh \
129
+ --package="pkg/gcm-${{ matrix.runtime }}-${{ needs.prereqs.outputs.version }}.pkg" \
130
+ --keychain-profile="$N4"
251
131
252
- - name : Publish signed package
132
+ - name : Upload artifacts
253
133
uses : actions/upload-artifact@v3
254
134
with :
255
- name : ${{ matrix.runtime }}-sign
256
- path : signed/*.pkg
135
+ name : macos-${{ matrix.runtime }}-artifacts
136
+ path : |
137
+ ./pkg/*
138
+ ./symbols/*
139
+ ./payload/*
257
140
258
141
# ================================
259
142
# Windows
@@ -624,7 +507,7 @@ jobs:
624
507
command : git-credential-manager
625
508
description : linux
626
509
- os : macos-latest
627
- artifact : osx-x64-sign
510
+ artifact : macos- osx-x64-artifacts
628
511
command : git-credential-manager
629
512
description : osx-x64
630
513
- os : windows-latest
@@ -640,7 +523,7 @@ jobs:
640
523
command : git-credential-manager
641
524
description : dotnet-tool
642
525
runs-on : ${{ matrix.component.os }}
643
- needs : [ osx-sign , win-sign, create-linux-artifacts, dotnet-tool-sign ]
526
+ needs : [ create-macos-artifacts , win-sign, create-linux-artifacts, dotnet-tool-sign ]
644
527
steps :
645
528
- uses : actions/checkout@v4
646
529
@@ -670,15 +553,15 @@ jobs:
670
553
if : contains(matrix.component.description, 'linux')
671
554
run : |
672
555
# Ensure we find only the source tarball, not the symbols
673
- tarpath=$(find ./tar -name '*[[:digit:]].tar.gz')
556
+ tarpath=$(find . -name '*[[:digit:]].tar.gz')
674
557
tar -xvf $tarpath -C /usr/local/bin
675
558
"${{ matrix.component.command }}" configure
676
559
677
560
- name : Install macOS
678
561
if : contains(matrix.component.description, 'osx-x64')
679
562
run : |
680
563
# Only validate x64, given arm64 agents are not available
681
- pkgpath=$(find ./*.pkg)
564
+ pkgpath=$(find ./pkg/ *.pkg)
682
565
sudo installer -pkg $pkgpath -target /
683
566
684
567
- name : Install .NET tool
@@ -716,13 +599,14 @@ jobs:
716
599
717
600
- name : Archive macOS payload and symbols
718
601
run : |
602
+ version="${{ needs.prereqs.outputs.version }}"
719
603
mkdir osx-payload-and-symbols
720
604
721
- tar -C osx-x64-payload-sign -czf osx-payload-and-symbols/gcm-osx-x64-$VERSION .tar.gz .
722
- tar -C tmp. osx-x64-build /symbols -czf osx-payload-and-symbols/gcm-osx-x64-$VERSION -symbols.tar.gz .
605
+ tar -C macos- osx-x64-artifacts/ payload -czf osx-payload-and-symbols/gcm-osx-x64-$version .tar.gz .
606
+ tar -C macos- osx-x64-artifacts /symbols -czf osx-payload-and-symbols/gcm-osx-x64-$version -symbols.tar.gz .
723
607
724
- tar -C osx-arm64-payload-sign -czf osx-payload-and-symbols/gcm-osx-arm64-$VERSION .tar.gz .
725
- tar -C tmp. osx-arm64-build /symbols -czf osx-payload-and-symbols/gcm-osx-arm64-$VERSION -symbols.tar.gz .
608
+ tar -C macos- osx-arm64-artifacts -czf osx-payload-and-symbols/gcm-osx-arm64-$version .tar.gz .
609
+ tar -C macos- osx-arm64-artifacts /symbols -czf osx-payload-and-symbols/gcm-osx-arm64-$version -symbols.tar.gz .
726
610
727
611
- name : Archive Windows payload and symbols
728
612
run : |
@@ -780,8 +664,8 @@ jobs:
780
664
uploadDirectoryToRelease('win-x86-payload-and-symbols'),
781
665
782
666
// Upload macOS artifacts
783
- uploadDirectoryToRelease('osx-x64-sign '),
784
- uploadDirectoryToRelease('osx-arm64-sign '),
667
+ uploadDirectoryToRelease('macos- osx-x64-artifacts/pkg '),
668
+ uploadDirectoryToRelease('macos- osx-arm64-artifacts/pkg '),
785
669
uploadDirectoryToRelease('osx-payload-and-symbols'),
786
670
787
671
// Upload Linux artifacts
0 commit comments