Skip to content

Bump cdr.dev/slog from 1.4.2-0.20221206192828-e4803b10ae17 to 1.6.1 in /src/D2Sharp/d2wrapper #38

Bump cdr.dev/slog from 1.4.2-0.20221206192828-e4803b10ae17 to 1.6.1 in /src/D2Sharp/d2wrapper

Bump cdr.dev/slog from 1.4.2-0.20221206192828-e4803b10ae17 to 1.6.1 in /src/D2Sharp/d2wrapper #38

name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
permissions:
contents: write
packages: write
env:
DOTNET_VERSION: '8.0.x'
GO_VERSION: '1.22.2'
NUGET_PACKAGE_NAME: 'D2Sharp'
CI: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Run dotnet format
run: dotnet format --verify-no-changes
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v3
with:
working-directory: src/D2Sharp/d2wrapper
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Run tests
run: dotnet test --collect:"XPlat Code Coverage"
- name: Upload coverage
uses: codecov/codecov-action@v3
build:
needs: [lint, test]
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Cache NuGet packages
uses: actions/cache@v3
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Install GCC (Ubuntu)
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update && sudo apt-get install -y gcc
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Build native library
run: |
cd src/D2Sharp/d2wrapper
go build -buildmode=c-shared -o d2wrapper${{ runner.os == 'Windows' && '.dll' || runner.os == 'macOS' && '.dylib' || '.so' }} .
- name: Upload D2Sharp build artifact
uses: actions/upload-artifact@v3
with:
name: d2net-${{ matrix.os }}
path: src/D2Sharp/bin/Release/net8.0/D2Sharp.*
- name: Upload native library
uses: actions/upload-artifact@v3
with:
name: d2wrapper-${{ matrix.os }}
path: src/D2Sharp/d2wrapper/d2wrapper*
package:
needs: build
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.VERSION }}
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: artifacts
- name: Prepare files for packaging
run: |
mkdir -p package/lib/net8.0
mkdir -p package/runtimes/win-x64/native
mkdir -p package/runtimes/linux-x64/native
mkdir -p package/runtimes/osx-x64/native
cp artifacts/d2net-ubuntu-latest/D2Sharp.dll package/lib/net8.0/
cp artifacts/d2wrapper-windows-latest/d2wrapper.dll package/runtimes/win-x64/native/
cp artifacts/d2wrapper-ubuntu-latest/d2wrapper.so package/runtimes/linux-x64/native/
cp artifacts/d2wrapper-macos-latest/d2wrapper.dylib package/runtimes/osx-x64/native/
- name: Get version
id: get_version
run: |
VERSION=$(grep -oP '(?<=<VersionPrefix>).*(?=</VersionPrefix>)' src/D2Sharp/D2Sharp.csproj)
SUFFIX=$(grep -oP '(?<=<VersionSuffix>).*(?=</VersionSuffix>)' src/D2Sharp/D2Sharp.csproj)
if [ ! -z "$SUFFIX" ]; then
VERSION="$VERSION-$SUFFIX"
fi
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Create nuspec file
run: |
cat << EOF > D2Sharp.nuspec
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>D2Sharp</id>
<version>${{ steps.get_version.outputs.VERSION }}</version>
<authors>Alrik Olson</authors>
<description>A .NET wrapper for the D2 library</description>
<projectUrl>https://github.com/AlrikOlson/D2Sharp</projectUrl>
<repository type="git" url="https://github.com/AlrikOlson/D2Sharp.git" />
<tags>d2 diagram visualization</tags>
<readme>README.nuget.md</readme>
<dependencies>
<group targetFramework="net8.0">
<dependency id="Microsoft.Extensions.Logging" version="8.0.0" />
</group>
</dependencies>
</metadata>
<files>
<file src="lib/net8.0/D2Sharp.dll" target="lib/net8.0" />
<file src="runtimes/**/*" target="runtimes" />
<file src="../README.nuget.md" target="\" />
</files>
</package>
EOF
- name: Pack NuGet package
run: nuget pack D2Sharp.nuspec -BasePath package
- name: Upload NuGet package
uses: actions/upload-artifact@v3
with:
name: nuget-package
path: ./*.nupkg
release:
needs: package
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download NuGet package
uses: actions/download-artifact@v3
with:
name: nuget-package
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Semantic Release
uses: cycjimmy/semantic-release-action@v3
id: semantic
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
extra_plugins: |
@semantic-release/git
@semantic-release/changelog
@semantic-release/exec
- name: Create Release
if: steps.semantic.outputs.new_release_published == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create v${{ steps.semantic.outputs.new_release_version }} \
--title "Release ${{ steps.semantic.outputs.new_release_version }}" \
--notes "$(cat CHANGELOG.md)" \
*.nupkg
- name: Publish to NuGet
if: steps.semantic.outputs.new_release_published == 'true'
run: dotnet nuget push ./*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
deploy-docs:
needs: release
runs-on: ubuntu-latest
if: needs.release.result == 'success'
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Generate docs
run: dotnet tool install -g docfx && docfx docs/docfx.json
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: docs/_site