Skip to content

Commit f829f94

Browse files
committed
[sdk-1244] chore: Update CI and build for packages
1 parent c17244a commit f829f94

File tree

11 files changed

+386
-138
lines changed

11 files changed

+386
-138
lines changed

.github/actions/ci/action.yml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,25 @@ runs:
2323
uses: actions/setup-dotnet@v4
2424
with:
2525
dotnet-version: |
26-
6.0
27-
7.0
26+
8.0
27+
28+
- name: Setup Consul if needed
29+
uses: ./.github/actions/persistent-stores
30+
if: contains(inputs.project_file, 'ServerSdk.Consul')
31+
with:
32+
consul: true
33+
34+
- name: Setup DynamoDB if needed
35+
uses: ./.github/actions/persistent-stores
36+
if: contains(inputs.project_file, 'ServerSdk.DynamoDB')
37+
with:
38+
dynamodb: true
39+
40+
- name: Setup Redis if needed
41+
uses: ./.github/actions/persistent-stores
42+
if: contains(inputs.project_file, 'ServerSdk.Redis')
43+
with:
44+
redis: true
2845

2946
- name: Copy global.json in place
3047
shell: bash
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: "Start persistent stores"
2+
description: 'Runs contract tests against an SDK component.'
3+
inputs:
4+
consul:
5+
required: false
6+
description: "Whether or not a consul instance should be started."
7+
default: false
8+
dynamodb:
9+
required: false
10+
description: "Whether or not a dynamodb instance should be started."
11+
default: false
12+
redis:
13+
required: false
14+
description: "Whether or not a redis instance should be started."
15+
default: false
16+
17+
runs:
18+
using: composite
19+
steps:
20+
#
21+
# Linux services (using Docker)
22+
#
23+
24+
- name: "Consul for Linux"
25+
shell: bash
26+
if: ${{ inputs.consul == 'true' && runner.os == 'Linux' }}
27+
run: |
28+
docker run -d --name consul -p 8500:8500 hashicorp/consul
29+
30+
- name: "DynamoDB for Linux"
31+
shell: bash
32+
if: ${{ inputs.dynamodb == 'true' && runner.os == 'Linux' }}
33+
run: |
34+
docker run -d --name dynamodb -p 8000:8000 amazon/dynamodb-local
35+
36+
- name: "Redis for Linux"
37+
shell: bash
38+
if: ${{ inputs.redis == 'true' && runner.os == 'Linux' }}
39+
run: |
40+
docker run -d --name redis -p 6379:6379 redis
41+
42+
#
43+
# Windows services
44+
#
45+
46+
# Windows processes need to be started with Start-Process. This creates a
47+
# new process independent of this shell. That way it can run in the
48+
# background when we move on to the next step.
49+
50+
- name: "Consul for Windows"
51+
shell: powershell
52+
if: ${{ inputs.consul == 'true' && runner.os == 'Windows' }}
53+
run: |
54+
choco install consul
55+
Start-Process consul -ArgumentList 'agent', '-dev'
56+
57+
- name: "DynamoDB for Windows"
58+
shell: powershell
59+
if: ${{ inputs.dynamodb == 'true' && runner.os == 'Windows' }}
60+
run: |
61+
New-Item "dynamodb-local" -ItemType "directory" | Out-Null
62+
$ProgressPreference = "SilentlyContinue"
63+
wget "https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.zip" -OutFile "./dynamodb-local/dynamodb.zip"
64+
Expand-Archive -Path ./dynamodb-local/dynamodb.zip -DestinationPath ./dynamodb-local
65+
Start-Process java -ArgumentList '-Djava.library.path=./dynamodb-local/DynamoDBLocal_lib', '-jar', './dynamodb-local/DynamoDBLocal.jar', '-sharedDb'
66+
67+
- name: "Redis for Windows"
68+
shell: powershell
69+
if: ${{ inputs.redis == 'true' && runner.os == 'Windows' }}
70+
run: |
71+
choco install redis
72+
Start-Process redis-server
73+
74+
#
75+
# MacOS services
76+
#
77+
78+
- name: "Consul for MacOS"
79+
shell: bash
80+
if: ${{ inputs.consul == 'true' && runner.os == 'MacOS' }}
81+
run: |
82+
brew install consul
83+
brew services start consul
84+
85+
- name: "DynamoDB for MacOS"
86+
shell: bash
87+
if: ${{ inputs.dynamodb == 'true' && runner.os == 'MacOS' }}
88+
run: |
89+
brew install dynamodb-local
90+
nohup dynamodb-local &
91+
92+
- name: "Redis for MacOS"
93+
shell: bash
94+
if: ${{ inputs.redis == 'true' && runner.os == 'MacOS' }}
95+
run: |
96+
brew install redis
97+
brew services start redis

.github/workflows/release-please.yml

Lines changed: 71 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,20 @@ jobs:
1010
runs-on: ubuntu-22.04
1111

1212
outputs:
13+
package-sdk-client-released: ${{ steps.release.outputs['pkgs/sdk/client--release_created'] }}
14+
package-sdk-client-tag_name: ${{ steps.release.outputs['pkgs/sdk/client--tag_name'] }}
15+
package-sdk-server-ai-released: ${{ steps.release.outputs['pkgs/sdk/server-ai--release_created'] }}
16+
package-sdk-server-ai-tag_name: ${{ steps.release.outputs['pkgs/sdk/server-ai--tag_name'] }}
17+
package-sdk-server-consul-released: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-consul--release_created'] }}
18+
package-sdk-server-consul-tag_name: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-consul--tag_name'] }}
19+
package-sdk-server-dynamodb-released: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-dynamodb--release_created'] }}
20+
package-sdk-server-dynamodb-tag_name: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-dynamodb--tag_name'] }}
21+
package-sdk-server-redis-released: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-redis--release_created'] }}
22+
package-sdk-server-redis-tag_name: ${{ steps.release.outputs['pkgs/dotnet-server-sdk-redis--tag_name'] }}
1323
package-sdk-server-released: ${{ steps.release.outputs['pkgs/sdk/server--release_created'] }}
1424
package-sdk-server-tag_name: ${{ steps.release.outputs['pkgs/sdk/server--tag_name'] }}
1525
package-sdk-server-telemetry-released: ${{ steps.release.outputs['pkgs/telemetry--release_created'] }}
1626
package-sdk-server-telemetry-tag_name: ${{ steps.release.outputs['pkgs/telemetry--tag_name'] }}
17-
package-sdk-server-ai-released: ${{ steps.release.outputs['pkgs/sdk/server-ai--release_created'] }}
18-
package-sdk-server-ai-tag_name: ${{ steps.release.outputs['pkgs/sdk/server-ai--tag_name'] }}
19-
package-sdk-client-released: ${{ steps.release.outputs['pkgs/sdk/client--release_created'] }}
20-
package-sdk-client-tag_name: ${{ steps.release.outputs['pkgs/sdk/client--tag_name'] }}
2127
tag_name: ${{ steps.release.outputs.tag_name }}
2228

2329
steps:
@@ -27,136 +33,85 @@ jobs:
2733
token: ${{ secrets.GITHUB_TOKEN }}
2834
target-branch: ${{ github.ref_name }}
2935

30-
release-sdk-server:
31-
runs-on: ubuntu-22.04
36+
# this job calls to the release-sdk-client workflow because the client SDK has to be built on macos
37+
release-sdk-client:
3238
needs: release-please
39+
if: ${{ needs.release-please.outputs.package-sdk-client-released == 'true'}}
40+
uses: ./.github/workflows/release-sdk-client.yml
41+
with:
42+
dry_run: false
43+
44+
# Client SDK provenance job (since it uses a different workflow)
45+
release-sdk-client-provenance:
46+
needs: ['release-please', 'release-sdk-client']
3347
permissions:
48+
actions: read
3449
id-token: write
3550
contents: write
36-
pull-requests: write
37-
if: ${{ needs.release-please.outputs.package-sdk-server-released == 'true'}}
38-
outputs:
39-
hashes: ${{ steps.full-release.outputs.hashes }}
40-
steps:
41-
- uses: actions/checkout@v4
42-
43-
- name: Setup Env from project's Env file
44-
shell: bash
45-
run: echo "$(cat pkgs/sdk/server/github_actions.env)" >> $GITHUB_ENV
51+
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
52+
with:
53+
base64-subjects: "${{ needs.release-sdk-client.outputs.hashes }}"
54+
upload-assets: true
55+
upload-tag-name: ${{ needs.release-please.outputs.package-sdk-client-tag_name }}
56+
provenance-name: ${{ format('LaunchDarkly.ClientSdk-{0}_provenance.intoto.jsonl', needs.release-please.outputs.package-sdk-client-tag_name) }}
4657

47-
- uses: ./.github/actions/full-release
48-
id: full-release
49-
with:
50-
workspace_path: ${{ env.WORKSPACE_PATH }}
51-
project_file: ${{ env.PROJECT_FILE }}
52-
build_output_path: ${{ env.BUILD_OUTPUT_PATH }}
53-
test_project_file: ${{ env.TEST_PROJECT_FILE }}
54-
dll_name: ${{ env.BUILD_OUTPUT_DLL_NAME }}
55-
dry_run: false
56-
aws_role: ${{ vars.AWS_ROLE_ARN }}
57-
token: ${{ secrets.GITHUB_TOKEN }}
58+
# Server packages using the shared release workflow
59+
release-sdk-server:
60+
needs: release-please
61+
if: ${{ needs.release-please.outputs.package-sdk-server-released == 'true'}}
62+
uses: ./.github/workflows/release.yml
63+
with:
64+
package_path: pkgs/sdk/server
65+
dry_run: false
66+
generate_provenance: true
67+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-tag_name }}
5868

5969
release-sdk-server-ai:
60-
runs-on: ubuntu-22.04
6170
needs: release-please
62-
permissions:
63-
id-token: write
64-
contents: write
65-
pull-requests: write
6671
if: ${{ needs.release-please.outputs.package-sdk-server-ai-released == 'true'}}
67-
outputs:
68-
hashes: ${{ steps.full-release.outputs.hashes }}
69-
steps:
70-
- uses: actions/checkout@v4
71-
72-
- name: Setup Env from project's Env file
73-
shell: bash
74-
run: echo "$(cat pkgs/sdk/server-ai/github_actions.env)" >> $GITHUB_ENV
75-
76-
- uses: ./.github/actions/full-release
77-
id: full-release
78-
with:
79-
workspace_path: ${{ env.WORKSPACE_PATH }}
80-
project_file: ${{ env.PROJECT_FILE }}
81-
build_output_path: ${{ env.BUILD_OUTPUT_PATH }}
82-
test_project_file: ${{ env.TEST_PROJECT_FILE }}
83-
dll_name: ${{ env.BUILD_OUTPUT_DLL_NAME }}
84-
dry_run: false
85-
aws_role: ${{ vars.AWS_ROLE_ARN }}
86-
token: ${{ secrets.GITHUB_TOKEN }}
72+
uses: ./.github/workflows/release.yml
73+
with:
74+
package_path: pkgs/sdk/server-ai
75+
dry_run: false
76+
generate_provenance: true
77+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-ai-tag_name }}
8778

8879
release-telemetry:
89-
runs-on: ubuntu-22.04
9080
needs: release-please
91-
permissions:
92-
id-token: write
93-
contents: write
94-
pull-requests: write
9581
if: ${{ needs.release-please.outputs.package-sdk-server-telemetry-released == 'true'}}
96-
outputs:
97-
hashes: ${{ steps.full-release.outputs.hashes }}
98-
steps:
99-
- uses: actions/checkout@v4
100-
101-
- name: Setup Env from project's Env file
102-
shell: bash
103-
run: echo "$(cat pkgs/telemetry/github_actions.env)" >> $GITHUB_ENV
104-
105-
- uses: ./.github/actions/full-release
106-
id: full-release
107-
with:
108-
workspace_path: ${{ env.WORKSPACE_PATH }}
109-
project_file: ${{ env.PROJECT_FILE }}
110-
build_output_path: ${{ env.BUILD_OUTPUT_PATH }}
111-
test_project_file: ${{ env.TEST_PROJECT_FILE }}
112-
dll_name: ${{ env.BUILD_OUTPUT_DLL_NAME }}
113-
dry_run: false
114-
aws_role: ${{ vars.AWS_ROLE_ARN }}
115-
token: ${{ secrets.GITHUB_TOKEN }}
116-
117-
# this job calls to the release-sdk-client workflow because the client SDK has to be built on macos
118-
release-sdk-client:
119-
needs: release-please
120-
if: ${{ needs.release-please.outputs.package-sdk-client-released == 'true'}}
121-
uses: ./.github/workflows/release-sdk-client.yml
82+
uses: ./.github/workflows/release.yml
12283
with:
84+
package_path: pkgs/telemetry
12385
dry_run: false
86+
generate_provenance: true
87+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-telemetry-tag_name }}
12488

125-
release-sdk-server-provenance:
126-
needs: ['release-please', 'release-sdk-server']
127-
permissions:
128-
actions: read
129-
id-token: write
130-
contents: write
131-
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
89+
release-sdk-server-redis:
90+
needs: release-please
91+
if: ${{ needs.release-please.outputs.package-sdk-server-redis-released == 'true'}}
92+
uses: ./.github/workflows/release.yml
13293
with:
133-
base64-subjects: "${{ needs.release-sdk-server.outputs.hashes }}"
134-
upload-assets: true
135-
upload-tag-name: ${{ needs.release-please.outputs.package-sdk-server-tag_name }}
136-
provenance-name: ${{ format('LaunchDarkly.ServerSdk-{0}_provenance.intoto.jsonl', needs.release-please.outputs.package-sdk-server-tag_name) }}
94+
package_path: pkgs/dotnet-server-sdk-redis
95+
dry_run: false
96+
generate_provenance: true
97+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-redis-tag_name }}
13798

138-
release-telemetry-provenance:
139-
needs: ['release-please', 'release-telemetry']
140-
permissions:
141-
actions: read
142-
id-token: write
143-
contents: write
144-
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
99+
release-sdk-server-consul:
100+
needs: release-please
101+
if: ${{ needs.release-please.outputs.package-sdk-server-consul-released == 'true'}}
102+
uses: ./.github/workflows/release.yml
145103
with:
146-
base64-subjects: "${{ needs.release-telemetry.outputs.hashes }}"
147-
upload-assets: true
148-
upload-tag-name: ${{ needs.release-please.outputs.package-sdk-server-telemetry-tag_name }}
149-
provenance-name: ${{ format('LaunchDarkly.ServerSdk.Telemetry-{0}_provenance.intoto.jsonl', needs.release-please.outputs.package-sdk-server-telemetry-tag_name) }}
104+
package_path: pkgs/dotnet-server-sdk-consul
105+
dry_run: false
106+
generate_provenance: true
107+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-consul-tag_name }}
150108

151-
release-sdk-client-provenance:
152-
needs: ['release-please', 'release-sdk-client']
153-
permissions:
154-
actions: read
155-
id-token: write
156-
contents: write
157-
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
109+
release-sdk-server-dynamodb:
110+
needs: release-please
111+
if: ${{ needs.release-please.outputs.package-sdk-server-dynamodb-released == 'true'}}
112+
uses: ./.github/workflows/release.yml
158113
with:
159-
base64-subjects: "${{ needs.release-sdk-client.outputs.hashes }}"
160-
upload-assets: true
161-
upload-tag-name: ${{ needs.release-please.outputs.package-sdk-client-tag_name }}
162-
provenance-name: ${{ format('LaunchDarkly.ClientSdk-{0}_provenance.intoto.jsonl', needs.release-please.outputs.package-sdk-client-tag_name) }}
114+
package_path: pkgs/dotnet-server-sdk-dynamodb
115+
dry_run: false
116+
generate_provenance: true
117+
tag_name: ${{ needs.release-please.outputs.package-sdk-server-dynamodb-tag_name }}

0 commit comments

Comments
 (0)