Skip to content

Commit

Permalink
chore: Migrate to github actions and release-please.
Browse files Browse the repository at this point in the history
  • Loading branch information
kinyoklion committed Dec 5, 2024
1 parent b4600d1 commit bbe2c45
Show file tree
Hide file tree
Showing 14 changed files with 346 additions and 9 deletions.
21 changes: 21 additions & 0 deletions .github/actions/build-docs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Build Documentation
description: 'Build Documentation.'

runs:
using: composite
steps:
- name: Setup dotnet build tools
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0
- name: Install docfx
shell: bash
run: dotnet tool update -g docfx

# Note: in the docfx.json file, the 'Configuration' property is set to Debug so that we don't require
# signing to happen just to build docs.
- name: Build docs
shell: bash
run: |
docfx metadata
docfx build
20 changes: 20 additions & 0 deletions .github/actions/ci/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: CI
description: Build and Test
inputs:
sdk:
description: 'The dotnet SDK to use.'
required: false
default: '9'

runs:
using: composite
steps:
- uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ inputs.sdk }}
- run: dotnet restore src/LaunchDarkly.Logging
shell: bash
- run: dotnet build src/LaunchDarkly.Logging
shell: bash
- run: dotnet test test/LaunchDarkly.Logging.Tests
shell: bash
24 changes: 24 additions & 0 deletions .github/actions/publish-docs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Publish Documentation
description: 'Publish the documentation to Github pages'
inputs:
dry_run:
description: 'Is this a dry run. If so no package will be published.'
required: true
token:
description: 'Token to use for publishing.'
required: true

runs:
using: composite
steps:
- uses: launchdarkly/gh-actions/actions/[email protected]
if: ${{ inputs.dry_run == 'false' }}
name: 'Publish to Github pages'
with:
docs_path: docs
github_token: ${{ inputs.token }}
- name: Dry Run Publish
if: ${{ inputs.dry_run == 'true' }}
shell: bash
run: |
echo "This is a dry run and docs are not being published."
50 changes: 50 additions & 0 deletions .github/actions/publish/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Publish Package
description: 'Packs DLLs into unsigned Nuget package and publishes to Nuget.'
inputs:
dry_run:
description: 'Is this a dry run. If so no package will be published.'
required: true
outputs:
hashes:
description: sha256sum hashes of built artifacts
value: ${{ steps.hash.outputs.hashes }}

runs:
using: composite
steps:
- name: Setup dotnet build tools
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0

- name: Create Nuget Package
shell: bash
run: |
dotnet restore ./src/LaunchDarkly.Logging.CommonLogging/LaunchDarkly.Logging.CommonLogging.csproj
dotnet pack --no-build --output nupkgs --configuration Release ./src/LaunchDarkly.Logging.CommonLogging/LaunchDarkly.Logging.CommonLogging.csproj
- name: Publish Package
if: ${{ inputs.dry_run == 'false' }}
shell: bash
run: |
for pkg in $(find ./nupkgs -name '*.nupkg' -o -name '*.snupkg'); do
echo "publishing ${pkg}"
dotnet nuget push "${pkg}" --api-key ${{ env.NUGET_API_KEY }} --source https://www.nuget.org
echo "published ${pkg}"
done
- name: Hash nuget packages
id: hash
if: ${{ inputs.dry_run == 'false' }}
shell: bash
run: |
echo "hashes=$(sha256sum ./nupkgs/*.nupkg ./nupkgs/*.snupkg | base64 -w0)" >> "$GITHUB_OUTPUT"
- name: Dry Run Publish
if: ${{ inputs.dry_run == 'true' }}
shell: bash
run: |
echo "This is a dry run and packages are not being published."
for pkg in $(find ./nupkgs -name '*.nupkg' -o -name '*.snupkg'); do
echo "detected package ${pkg}"
done
18 changes: 18 additions & 0 deletions .github/actions/release-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Release Build
description: 'Build in Release Configuration'

runs:
using: composite
steps:
- name: Setup dotnet build tools
uses: actions/setup-dotnet@v4
with:
dotnet-version: 9.0

- name: Restore Packages
shell: bash
run: dotnet restore

- name: Build
shell: bash
run: dotnet build /p:Configuration=Release ./src/LaunchDarkly.Logging/LaunchDarkly.Logging.csproj
26 changes: 26 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Build and Test

on:
push:
branches: [main, 'feat/**']
paths-ignore:
- '**.md' #Do not need to run CI for markdown changes.
pull_request:
branches: [main, 'feat/**']
paths-ignore:
- '**.md'
workflow_call:

jobs:
build-test-linux:
strategy:
matrix:
os: ['ubuntu-latest', 'windows-latest']
dotnet: [{sdk: '8.x'}, {sdk: '9.x'}]
runs-on: ${{ matrix.os }}
name: Build ${{ matrix.os }} - ${{ matrix.dotnet.sdk }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/ci
with:
sdk: ${{ matrix.dotnet.sdk }}
86 changes: 86 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Publish Package

on:
workflow_dispatch:
inputs:
dry_run:
description: 'Is this a dry run. If so no package will be published.'
type: boolean
required: true
tag:
description: 'Tag for provenance. For a dry run the value does not matter.'
type: string
required: true

workflow_call:
inputs:
dry_run:
description: 'Is this a dry run. If so no package will be published.'
type: boolean
required: true
tag:
description: 'Tag for provenance'
type: string
required: true

jobs:
publish:
runs-on: ubuntu-latest
permissions:
id-token: write # Needed if using OIDC to get release secrets.
contents: write # Contents and pull-requests are for release-please to make releases.
pull-requests: write

steps:
- uses: actions/checkout@v4

- uses: launchdarkly/gh-actions/actions/[email protected]
name: Get secrets
with:
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
ssm_parameter_pairs: '/production/common/releasing/digicert/host = DIGICERT_HOST,
/production/common/releasing/digicert/api_key = DIGICERT_API_KEY,
/production/common/releasing/digicert/client_cert_file_b64 = DIGICERT_CLIENT_CERT_FILE_B64,
/production/common/releasing/digicert/client_cert_password = DIGICERT_CLIENT_CERT_PASSWORD,
/production/common/releasing/digicert/code_signing_cert_sha1_hash = DIGICERT_CODE_SIGNING_CERT_SHA1_HASH,
/production/common/releasing/nuget/api_key = NUGET_API_KEY'
s3_path_pairs: 'launchdarkly-releaser/dotnet/LaunchDarkly.Logging.snk = LaunchDarkly.Logging.snk'


- name: Build Release
uses: ./.github/actions/release-build

- name: Build Documentation
uses: ./.github/actions/build-docs

- name: Sign DLLs
uses: launchdarkly/gh-actions/actions/[email protected]
with:
build_configuration_path: ./src/LaunchDarkly.Logging/bin/Release
dll_name: LaunchDarkly.Logging.dll

- name: Publish Nupkg
id: publish
uses: ./.github/actions/publish
with:
dry_run: ${{ inputs.dry_run }}

- name: Publish Documentation
uses: ./.github/actions/publish-docs
with:
token: ${{ secrets.GITHUB_TOKEN }}
dry_run: ${{ inputs.dry_run }}

provenance:
permissions:
actions: read
id-token: write
contents: write
if: ${{ inputs.dry_run == 'false' }}
needs: ['publish']
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
with:
base64-subjects: "${{ needs.publish.outputs.hashes }}"
upload-assets: true
upload-tag-name: ${{ inputs.tag }}
provenance-name: ${{ format('LaunchDarkly.Logging-{0}_provenance.intoto.jsonl', inputs.tag) }}
36 changes: 36 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Release Please

on:
push:
branches:
- main

jobs:
release-please:
outputs:
releases_created: ${{ steps.release.outputs.releases_created }}
tag_name: ${{ steps.release.outputs.tag_name }}
runs-on: ubuntu-latest
permissions:
id-token: write # Needed if using OIDC to get release secrets.
contents: write # Contents and pull-requests are for release-please to make releases.
pull-requests: write

steps:
- uses: googleapis/release-please-action@v4
id: release
with:
token: ${{secrets.GITHUB_TOKEN}}
default-branch: main

ci:
needs: ['release-please']
if: ${{ needs.release-please.outputs.releases_created == 'true' }}
uses: ./.github/workflows/ci.yml
publish:
needs: ['release-please', 'ci']
if: ${{ needs.release-please.outputs.releases_created == 'true' }}
uses: ./.github/workflows/publish.yml
with:
dry_run: false
tag: ${{ needs.release-please.outputs.tag_name }}
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish

# Others
[Bb]in
[Oo]bj
Expand All @@ -80,3 +77,5 @@ project.lock.json

*.snk
*.p12
api/
docs/
3 changes: 3 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
".": "2.0.0"
}
48 changes: 48 additions & 0 deletions docfx.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"metadata": [
{
"src": [
{
"src": "./src",
"files": [
"**/*.csproj",
"**/bin/**/**LaunchDarkly**.dll"
]
}
],
"dest": "./api",
"properties" : {
"Configuration": "Debug"
}
}
],
"build": {
"content": [
{
"files": [
"**/*.{md,yml}"
],
"exclude": [
"docs/**"
]
}
],
"resource": [
{
"files": [
"images/**"
]
}
],
"output": "docs",
"template": [
"default"
],
"globalMetadata": {
"_appName": "LaunchDarkly Logging API for .NET",
"_appTitle": "LaunchDarkly Logging API for .NET",
"_enableSearch": true,
"pdf": false
}
}
}
File renamed without changes.
10 changes: 10 additions & 0 deletions release-please-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"packages": {
".": {
"release-type": "simple",
"bootstrap-sha": "b4600d1c993afecd737dad1c85da34908c7d7e50",
"include-v-in-tag": false,
"include-component-in-tag": false
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TestFramework Condition="'$(TESTFRAMEWORK)' == ''">netcoreapp3.1;net6.0</TestFramework>
<TargetFrameworks>$(TESTFRAMEWORK)</TargetFrameworks>
<TargetFrameworks>net8.0</TargetFrameworks>
<TargetFrameworks Condition="$(OS) == 'Windows_NT'">$(TargetFrameworks);net462</TargetFrameworks>
<AssemblyName>LaunchDarkly.Logging.Tests</AssemblyName>
</PropertyGroup>

Expand All @@ -11,10 +11,6 @@
<PackageReference Include="xunit.runner.console" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5" />
<PackageReference Include="JunitXml.TestLogger" Version="3.0.114" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp3.1'
or '$(TargetFramework)' == 'net6.0' ">
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
</ItemGroup>

Expand Down

0 comments on commit bbe2c45

Please sign in to comment.