Skip to content

Commit d0b80a8

Browse files
feat: add macOS arm64 release artifacts alongside x64
- sdk-release action: added mac_artifact_arch input (default x64) to parameterize macOS artifact filenames (mac-clang-{arch}-*.zip) - release-please.yml: use macos-15-large (x64) for existing matrix, added separate arm64 jobs + provenance for client, server, server-redis - manual-sdk-release-artifacts.yml: same pattern for manual releases - Future releases will include both x64 and arm64 macOS artifacts Co-Authored-By: rlamb@launchdarkly.com <kingdewman@gmail.com>
1 parent 92a8cd2 commit d0b80a8

3 files changed

Lines changed: 149 additions & 14 deletions

File tree

.github/actions/sdk-release/action.yml

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ inputs:
1818
required: true
1919
sdk_cmake_target:
2020
description: 'CMake target of the sdk, e.g. launchdarkly-cpp-client.'
21+
mac_artifact_arch:
22+
description: 'Architecture label for macOS artifacts (x64 or arm64).'
23+
required: false
24+
default: 'x64'
2125
outputs:
2226
hashes-linux:
2327
description: "base64-encoded sha256 hash of linux build artifacts"
@@ -272,21 +276,21 @@ runs:
272276
OPENSSL_ROOT_DIR: ${{ steps.install-openssl.outputs.OPENSSL_ROOT_DIR }}
273277
CURL_ROOT: ${{ steps.install-curl.outputs.CURL_ROOT }}
274278

275-
- name: Archive Release Mac - AppleClang/x64/Static
279+
- name: Archive Release Mac - AppleClang/${{ inputs.mac_artifact_arch }}/Static
276280
if: runner.os == 'macOS'
277281
uses: thedoctor0/zip-release@0.7.1
278282
with:
279283
path: 'build-static/release'
280284
type: 'zip'
281-
filename: 'mac-clang-x64-static.zip'
285+
filename: 'mac-clang-${{ inputs.mac_artifact_arch }}-static.zip'
282286

283-
- name: Archive Release Mac - AppleClang/x64/Dynamic
287+
- name: Archive Release Mac - AppleClang/${{ inputs.mac_artifact_arch }}/Dynamic
284288
if: runner.os == 'macOS'
285289
uses: thedoctor0/zip-release@0.7.1
286290
with:
287291
path: 'build-dynamic/release'
288292
type: 'zip'
289-
filename: 'mac-clang-x64-dynamic.zip'
293+
filename: 'mac-clang-${{ inputs.mac_artifact_arch }}-dynamic.zip'
290294

291295
- name: Determine CURL artifact suffix for server SDK
292296
if: runner.os == 'macOS'
@@ -299,36 +303,38 @@ runs:
299303
echo "suffix=" >> $GITHUB_OUTPUT
300304
fi
301305
302-
- name: Archive Release Mac - AppleClang/x64/Static/CURL
306+
- name: Archive Release Mac - AppleClang/${{ inputs.mac_artifact_arch }}/Static/CURL
303307
if: runner.os == 'macOS'
304308
uses: thedoctor0/zip-release@0.7.1
305309
with:
306310
path: 'build-static-curl/release'
307311
type: 'zip'
308-
filename: 'mac-clang-x64-static-curl${{ steps.curl-suffix-macos.outputs.suffix }}.zip'
312+
filename: 'mac-clang-${{ inputs.mac_artifact_arch }}-static-curl${{ steps.curl-suffix-macos.outputs.suffix }}.zip'
309313

310-
- name: Archive Release Mac - AppleClang/x64/Dynamic/CURL
314+
- name: Archive Release Mac - AppleClang/${{ inputs.mac_artifact_arch }}/Dynamic/CURL
311315
if: runner.os == 'macOS'
312316
uses: thedoctor0/zip-release@0.7.1
313317
with:
314318
path: 'build-dynamic-curl/release'
315319
type: 'zip'
316-
filename: 'mac-clang-x64-dynamic-curl${{ steps.curl-suffix-macos.outputs.suffix }}.zip'
320+
filename: 'mac-clang-${{ inputs.mac_artifact_arch }}-dynamic-curl${{ steps.curl-suffix-macos.outputs.suffix }}.zip'
317321

318322
- name: Hash Mac Build Artifacts for provenance
319323
if: runner.os == 'macOS'
320324
shell: bash
321325
id: hash-macos
322326
run: |
323327
CURL_SUFFIX="${{ steps.curl-suffix-macos.outputs.suffix }}"
324-
echo "hashes-macos=$(shasum -a 256 mac-clang-x64-static.zip mac-clang-x64-dynamic.zip mac-clang-x64-static-curl${CURL_SUFFIX}.zip mac-clang-x64-dynamic-curl${CURL_SUFFIX}.zip | base64 -b 0)" >> "$GITHUB_OUTPUT"
328+
ARCH="${{ inputs.mac_artifact_arch }}"
329+
echo "hashes-macos=$(shasum -a 256 mac-clang-${ARCH}-static.zip mac-clang-${ARCH}-dynamic.zip mac-clang-${ARCH}-static-curl${CURL_SUFFIX}.zip mac-clang-${ARCH}-dynamic-curl${CURL_SUFFIX}.zip | base64 -b 0)" >> "$GITHUB_OUTPUT"
325330
326331
- name: Upload Mac Build Artifacts
327332
if: runner.os == 'macOS'
328333
shell: bash
329334
run: |
330335
ls
331336
CURL_SUFFIX="${{ steps.curl-suffix-macos.outputs.suffix }}"
332-
gh release upload ${{ inputs.tag_name }} mac-clang-x64-static.zip mac-clang-x64-dynamic.zip mac-clang-x64-static-curl${CURL_SUFFIX}.zip mac-clang-x64-dynamic-curl${CURL_SUFFIX}.zip --clobber
337+
ARCH="${{ inputs.mac_artifact_arch }}"
338+
gh release upload ${{ inputs.tag_name }} mac-clang-${ARCH}-static.zip mac-clang-${ARCH}-dynamic.zip mac-clang-${ARCH}-static-curl${CURL_SUFFIX}.zip mac-clang-${ARCH}-dynamic-curl${CURL_SUFFIX}.zip --clobber
333339
env:
334340
GH_TOKEN: ${{ inputs.github_token }}

.github/workflows/manual-sdk-release-artifacts.yml

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
strategy:
3939
matrix:
4040
# Each of the platforms for which release-artifacts need generated.
41-
os: [ ubuntu-22.04, windows-2022, macos-15 ]
41+
os: [ ubuntu-22.04, windows-2022, macos-15-large ]
4242
runs-on: ${{ matrix.os }}
4343
outputs:
4444
hashes-linux: ${{ steps.release-sdk.outputs.hashes-linux }}
@@ -58,6 +58,27 @@ jobs:
5858
github_token: ${{secrets.GITHUB_TOKEN}}
5959
sdk_path: ${{ needs.split-input.outputs.sdk_path}}
6060
sdk_cmake_target: ${{ needs.split-input.outputs.sdk_cmake_target}}
61+
62+
release-sdk-mac-arm64:
63+
needs: split-input
64+
runs-on: macos-15
65+
outputs:
66+
hashes-macos-arm64: ${{ steps.release-sdk.outputs.hashes-macos }}
67+
steps:
68+
# https://github.com/actions/checkout/releases/tag/v4.3.0
69+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
70+
with:
71+
ref: ${{ inputs.tag }}
72+
- id: release-sdk
73+
name: Full release of ${{ needs.split-input.outputs.sdk_path }} (macOS arm64)
74+
uses: ./.github/actions/sdk-release
75+
with:
76+
tag_name: ${{ inputs.tag }}
77+
github_token: ${{secrets.GITHUB_TOKEN}}
78+
sdk_path: ${{ needs.split-input.outputs.sdk_path}}
79+
sdk_cmake_target: ${{ needs.split-input.outputs.sdk_cmake_target}}
80+
mac_artifact_arch: 'arm64'
81+
6182
release-sdk-provenance:
6283
needs: [ 'release-sdk' ]
6384
strategy:
@@ -74,3 +95,16 @@ jobs:
7495
upload-assets: true
7596
upload-tag-name: ${{ inputs.tag }}
7697
provenance-name: ${{ format('{0}-multiple-provenance.intoto.jsonl', matrix.os) }}
98+
99+
release-sdk-mac-arm64-provenance:
100+
needs: [ 'release-sdk-mac-arm64' ]
101+
permissions:
102+
actions: read
103+
id-token: write
104+
contents: write
105+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
106+
with:
107+
base64-subjects: "${{ needs.release-sdk-mac-arm64.outputs.hashes-macos-arm64 }}"
108+
upload-assets: true
109+
upload-tag-name: ${{ inputs.tag }}
110+
provenance-name: 'macos-arm64-multiple-provenance.intoto.jsonl'

.github/workflows/release-please.yml

Lines changed: 98 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
strategy:
2828
matrix:
2929
# Each of the platforms for which release-artifacts need generated.
30-
os: [ ubuntu-22.04, windows-2022, macos-15 ]
30+
os: [ ubuntu-22.04, windows-2022, macos-15-large ]
3131
runs-on: ${{ matrix.os }}
3232
needs: [ 'release-please' ]
3333
if: ${{ needs.release-please.outputs.package-client-released == 'true'}}
@@ -48,11 +48,30 @@ jobs:
4848
sdk_path: 'libs/client-sdk'
4949
sdk_cmake_target: 'launchdarkly-cpp-client'
5050

51+
release-client-mac-arm64:
52+
runs-on: macos-15
53+
needs: [ 'release-please' ]
54+
if: ${{ needs.release-please.outputs.package-client-released == 'true'}}
55+
outputs:
56+
hashes-macos-arm64: ${{ steps.release-client.outputs.hashes-macos }}
57+
steps:
58+
# https://github.com/actions/checkout/releases/tag/v4.3.0
59+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
60+
- id: release-client
61+
name: Full release of libs/client-sdk (macOS arm64)
62+
uses: ./.github/actions/sdk-release
63+
with:
64+
tag_name: ${{ needs.release-please.outputs.package-client-tag }}
65+
github_token: ${{secrets.GITHUB_TOKEN}}
66+
sdk_path: 'libs/client-sdk'
67+
sdk_cmake_target: 'launchdarkly-cpp-client'
68+
mac_artifact_arch: 'arm64'
69+
5170
release-server:
5271
strategy:
5372
matrix:
5473
# Each of the platforms for which release-artifacts need generated.
55-
os: [ ubuntu-22.04, windows-2022, macos-15 ]
74+
os: [ ubuntu-22.04, windows-2022, macos-15-large ]
5675
runs-on: ${{ matrix.os }}
5776
needs: [ 'release-please' ]
5877
if: ${{ needs.release-please.outputs.package-server-released == 'true'}}
@@ -73,11 +92,30 @@ jobs:
7392
sdk_path: 'libs/server-sdk'
7493
sdk_cmake_target: 'launchdarkly-cpp-server'
7594

95+
release-server-mac-arm64:
96+
runs-on: macos-15
97+
needs: [ 'release-please' ]
98+
if: ${{ needs.release-please.outputs.package-server-released == 'true'}}
99+
outputs:
100+
hashes-macos-arm64: ${{ steps.release-server.outputs.hashes-macos }}
101+
steps:
102+
# https://github.com/actions/checkout/releases/tag/v4.3.0
103+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
104+
- id: release-server
105+
name: Full release of libs/server-sdk (macOS arm64)
106+
uses: ./.github/actions/sdk-release
107+
with:
108+
tag_name: ${{ needs.release-please.outputs.package-server-tag }}
109+
github_token: ${{secrets.GITHUB_TOKEN}}
110+
sdk_path: 'libs/server-sdk'
111+
sdk_cmake_target: 'launchdarkly-cpp-server'
112+
mac_artifact_arch: 'arm64'
113+
76114
release-server-redis:
77115
strategy:
78116
matrix:
79117
# Each of the platforms for which release-artifacts need generated.
80-
os: [ ubuntu-22.04, windows-2022, macos-15 ]
118+
os: [ ubuntu-22.04, windows-2022, macos-15-large ]
81119
runs-on: ${{ matrix.os }}
82120
needs: [ 'release-please' ]
83121
if: ${{ needs.release-please.outputs.package-server-redis-released == 'true'}}
@@ -98,6 +136,25 @@ jobs:
98136
sdk_path: 'libs/server-sdk-redis-source'
99137
sdk_cmake_target: 'launchdarkly-cpp-server-redis-source'
100138

139+
release-server-redis-mac-arm64:
140+
runs-on: macos-15
141+
needs: [ 'release-please' ]
142+
if: ${{ needs.release-please.outputs.package-server-redis-released == 'true'}}
143+
outputs:
144+
hashes-macos-arm64: ${{ steps.release-server-redis.outputs.hashes-macos }}
145+
steps:
146+
# https://github.com/actions/checkout/releases/tag/v4.3.0
147+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955
148+
- id: release-server-redis
149+
name: Full release of libs/server-sdk-redis-source (macOS arm64)
150+
uses: ./.github/actions/sdk-release
151+
with:
152+
tag_name: ${{ needs.release-please.outputs.package-server-redis-tag }}
153+
github_token: ${{secrets.GITHUB_TOKEN}}
154+
sdk_path: 'libs/server-sdk-redis-source'
155+
sdk_cmake_target: 'launchdarkly-cpp-server-redis-source'
156+
mac_artifact_arch: 'arm64'
157+
101158
release-client-provenance:
102159
needs: [ 'release-please', 'release-client' ]
103160
strategy:
@@ -115,6 +172,19 @@ jobs:
115172
upload-tag-name: ${{ needs.release-please.outputs.package-client-tag }}
116173
provenance-name: ${{ format('{0}-client-multiple-provenance.intoto.jsonl', matrix.os) }}
117174

175+
release-client-mac-arm64-provenance:
176+
needs: [ 'release-please', 'release-client-mac-arm64' ]
177+
permissions:
178+
actions: read
179+
id-token: write
180+
contents: write
181+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
182+
with:
183+
base64-subjects: "${{ needs.release-client-mac-arm64.outputs.hashes-macos-arm64 }}"
184+
upload-assets: true
185+
upload-tag-name: ${{ needs.release-please.outputs.package-client-tag }}
186+
provenance-name: 'macos-arm64-client-multiple-provenance.intoto.jsonl'
187+
118188
release-server-provenance:
119189
needs: [ 'release-please', 'release-server' ]
120190
strategy:
@@ -132,6 +202,19 @@ jobs:
132202
upload-tag-name: ${{ needs.release-please.outputs.package-server-tag }}
133203
provenance-name: ${{ format('{0}-server-multiple-provenance.intoto.jsonl', matrix.os) }}
134204

205+
release-server-mac-arm64-provenance:
206+
needs: [ 'release-please', 'release-server-mac-arm64' ]
207+
permissions:
208+
actions: read
209+
id-token: write
210+
contents: write
211+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
212+
with:
213+
base64-subjects: "${{ needs.release-server-mac-arm64.outputs.hashes-macos-arm64 }}"
214+
upload-assets: true
215+
upload-tag-name: ${{ needs.release-please.outputs.package-server-tag }}
216+
provenance-name: 'macos-arm64-server-multiple-provenance.intoto.jsonl'
217+
135218
release-server-redis-provenance:
136219
needs: [ 'release-please', 'release-server-redis' ]
137220
strategy:
@@ -149,3 +232,15 @@ jobs:
149232
upload-tag-name: ${{ needs.release-please.outputs.package-server-redis-tag }}
150233
provenance-name: ${{ format('{0}-server-redis-multiple-provenance.intoto.jsonl', matrix.os) }}
151234

235+
release-server-redis-mac-arm64-provenance:
236+
needs: [ 'release-please', 'release-server-redis-mac-arm64' ]
237+
permissions:
238+
actions: read
239+
id-token: write
240+
contents: write
241+
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
242+
with:
243+
base64-subjects: "${{ needs.release-server-redis-mac-arm64.outputs.hashes-macos-arm64 }}"
244+
upload-assets: true
245+
upload-tag-name: ${{ needs.release-please.outputs.package-server-redis-tag }}
246+
provenance-name: 'macos-arm64-server-redis-multiple-provenance.intoto.jsonl'

0 commit comments

Comments
 (0)