Skip to content

Bump golang.org/x/net from 0.23.0 to 0.33.0 in /src/D2Sharp/d2wrapper #64

Bump golang.org/x/net from 0.23.0 to 0.33.0 in /src/D2Sharp/d2wrapper

Bump golang.org/x/net from 0.23.0 to 0.33.0 in /src/D2Sharp/d2wrapper #64

name: Build, Package, and Release
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:
build:
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- 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: Test
run: dotnet test --no-restore --verbosity normal
- 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@v4.6.1
with:
name: d2net-${{ matrix.os }}
path: src/D2Sharp/bin/Release/net8.0/D2Sharp.*
- name: Upload native library
uses: actions/upload-artifact@v4.6.1
with:
name: d2wrapper-${{ matrix.os }}
path: src/D2Sharp/d2wrapper/d2wrapper*
- name: Upload build logs on failure
if: failure()
uses: actions/upload-artifact@v4.6.1
with:
name: build-logs-${{ matrix.os }}
path: |
**/*.log
**/*.trx
package:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Check for relevant changes
id: check_changes
run: |
if git diff --name-only HEAD^ HEAD | grep -qE '^src/|^examples/|\.csproj$|\.sln$|packages\.lock\.json$|go\.mod$|go\.sum$'; then
echo "Relevant changes detected"
echo "run_package=true" >> $GITHUB_OUTPUT
else
echo "No relevant changes detected"
echo "run_package=false" >> $GITHUB_OUTPUT
fi
- name: Setup .NET
if: steps.check_changes.outputs.run_package == 'true'
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Download artifacts
if: steps.check_changes.outputs.run_package == 'true'
uses: actions/download-artifact@v4.1.7
with:
path: artifacts
- name: Prepare files for packaging
if: steps.check_changes.outputs.run_package == 'true'
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
if: steps.check_changes.outputs.run_package == 'true'
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
if: steps.check_changes.outputs.run_package == 'true'
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
if: steps.check_changes.outputs.run_package == 'true'
run: nuget pack D2Sharp.nuspec -BasePath package
- name: Upload NuGet package
if: steps.check_changes.outputs.run_package == 'true'
uses: actions/upload-artifact@v4.6.1
with:
name: nuget-package
path: ./*.nupkg
- name: Skip packaging
if: steps.check_changes.outputs.run_package != 'true'
run: |
echo "No relevant changes for packaging, skipping this job"
release:
needs: package
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Check for relevant changes
id: check_changes
run: |
if git diff --name-only HEAD^ HEAD | grep -qE '^src/|^examples/|\.csproj$|\.sln$|packages\.lock\.json$|go\.mod$|go\.sum$'; then
echo "Relevant changes detected"
echo "run_release=true" >> $GITHUB_OUTPUT
else
echo "No relevant changes detected"
echo "run_release=false" >> $GITHUB_OUTPUT
fi
- name: Get current version
if: steps.check_changes.outputs.run_release == 'true'
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 "CURRENT_VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Get latest release version
if: steps.check_changes.outputs.run_release == 'true'
id: get_latest_release
run: |
LATEST_RELEASE=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r .tag_name | sed 's/^v//')
echo "LATEST_RELEASE=$LATEST_RELEASE" >> $GITHUB_OUTPUT
- name: Compare versions
if: steps.check_changes.outputs.run_release == 'true'
id: compare_versions
run: |
if [ "${{ steps.get_version.outputs.CURRENT_VERSION }}" != "${{ steps.get_latest_release.outputs.LATEST_RELEASE }}" ]; then
echo "VERSION_CHANGED=true" >> $GITHUB_OUTPUT
else
echo "VERSION_CHANGED=false" >> $GITHUB_OUTPUT
fi
- name: Download NuGet package
if: steps.check_changes.outputs.run_release == 'true' && steps.compare_versions.outputs.VERSION_CHANGED == 'true'
uses: actions/download-artifact@v4.1.7
with:
name: nuget-package
- name: Create Release
if: steps.check_changes.outputs.run_release == 'true' && steps.compare_versions.outputs.VERSION_CHANGED == 'true'
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.get_version.outputs.CURRENT_VERSION }}
release_name: Release ${{ steps.get_version.outputs.CURRENT_VERSION }}
draft: false
prerelease: true
- name: Upload Release Asset
if: steps.check_changes.outputs.run_release == 'true' && steps.compare_versions.outputs.VERSION_CHANGED == 'true'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ env.NUGET_PACKAGE_NAME }}.${{ steps.get_version.outputs.CURRENT_VERSION }}.nupkg
asset_name: ${{ env.NUGET_PACKAGE_NAME }}.${{ steps.get_version.outputs.CURRENT_VERSION }}.nupkg
asset_content_type: application/octet-stream
- name: Publish to NuGet
if: steps.check_changes.outputs.run_release == 'true' && steps.compare_versions.outputs.VERSION_CHANGED == 'true'
run: dotnet nuget push ./*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
- name: Skip release
if: steps.check_changes.outputs.run_release != 'true'
run: |
echo "No relevant changes for release, skipping this job"