Compare commits

...

14 Commits

Author SHA1 Message Date
Jedd Morgan 23d5dd44bc Merge pull request #382 from specklesystems/dev
.NET Build and Publish / build (push) Has been cancelled
Dev -> Main for release
2025-09-08 10:54:56 +01:00
Jedd Morgan 4c615ae8c6 Back Merge Main -> dev (#381)
Co-authored-by: Adam Hathcock <adamhathcock@users.noreply.github.com>
2025-09-08 10:43:16 +01:00
Jedd Morgan d5ee9fb76c Merge branch 'dev' into jrm/dev-main 2025-09-08 10:42:30 +01:00
Björn Steinhagen ea118bcdbb fix: collection order (#380)
* fix: collection order

* chore: format

* refactor: keeping depth first
2025-09-08 09:21:02 +00:00
Adam Hathcock ba456ee3eb Merge pull request #378 from specklesystems/dev
.NET Build and Publish / build (push) Has been cancelled
Dev to main for release (NO SQUASH)
2025-08-28 09:33:09 +01:00
Adam Hathcock 10d283a9f7 Report increment rather than total position (#377)
* Report increment rather than total position

* Report progress before saving SQLite
2025-08-26 16:45:53 +01:00
dependabot[bot] 647c4733cb Bump actions/checkout from 4 to 5 (#376)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-20 10:32:24 +01:00
Jedd Morgan 30c9b17dab Merge pull request #374 from specklesystems/dev
.NET Build and Publish / build (push) Has been cancelled
Dev -> Main
2025-08-06 13:39:59 +01:00
Jedd Morgan f7ddc19086 Merge pull request #375 from specklesystems/jrm/main-dev-7
Main -> Dev
2025-08-06 13:28:59 +01:00
Jedd Morgan 6d06901b4f Merge branch 'dev' into jrm/main-dev-7 2025-08-06 13:13:39 +01:00
Jedd Morgan 4b588fc287 Do not dispose the activity factory (#372)
.NET Build and Publish / build (push) Has been cancelled
2025-08-04 14:21:50 +00:00
Jedd Morgan 786e683d89 Merge pull request #371 from specklesystems/dev
.NET Build and Publish / build (push) Has been cancelled
Dev -> Main for 3.5.0 stable
2025-08-01 14:49:47 +01:00
Jedd Morgan 8d999f4f9c Update README.md (#370) 2025-07-30 07:53:10 +00:00
Jedd Morgan bb7542e254 chore(ci): Remove Gitversion (#369)
* Strip out gitversion

* Pr workflow

* fix?

* fix x2

* pass envvars properly
2025-07-30 08:41:32 +01:00
14 changed files with 80 additions and 57 deletions
+1 -8
View File
@@ -3,18 +3,11 @@
"isRoot": true,
"tools": {
"csharpier": {
"version": "1.0.2",
"version": "1.1.2",
"commands": [
"csharpier"
],
"rollForward": false
},
"gitversion.tool": {
"version": "6.1.0",
"commands": [
"dotnet-gitversion"
],
"rollForward": false
}
}
}
+18 -4
View File
@@ -8,9 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
uses: actions/checkout@v5
- name: Setup .NET
uses: actions/setup-dotnet@v4
@@ -21,9 +19,25 @@ jobs:
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
- id: set-version
name: Set version to output
run: |
SEMVER="3.0.99.${{ github.run_number }}"
FILE_VERSION=$(echo "$SEMVER" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
FILE_VERSION="$FILE_VERSION.${{ github.run_number }}"
echo "semver=$SEMVER" >> "$GITHUB_OUTPUT"
echo "fileVersion=$FILE_VERSION" >> "$GITHUB_OUTPUT"
echo $SEMVER
echo $FILE_VERSION
- name: 🔫 Build All
run: ./build.sh
env:
SEMVER: ${{ steps.set-version.outputs.SEMVER }}
FILE_VERSION: ${{ steps.set-version.outputs.FILE_VERSION }}
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v5
+24 -7
View File
@@ -2,7 +2,6 @@ name: .NET Build and Publish
on:
push:
branches: ["main", "dev"]
tags: ["3.*"]
jobs:
@@ -10,23 +9,41 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
uses: actions/checkout@v5
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.x.x
- uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
- id: set-version
name: Set version to output
run: |
TAG=${{ github.ref_name }}
if [[ "${{ github.ref }}" != refs/tags/* ]]; then
TAG="3.0.99.${{ github.run_number }}"
fi
SEMVER="${TAG}"
FILE_VERSION=$(echo "$TAG" | sed -E 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
FILE_VERSION="$FILE_VERSION.${{ github.run_number }}"
echo "semver=$SEMVER" >> "$GITHUB_OUTPUT"
echo "fileVersion=$FILE_VERSION" >> "$GITHUB_OUTPUT"
echo $SEMVER
echo $FILE_VERSION
- name: 🔫 Build and Pack
run: ./build.sh pack
env:
SEMVER: ${{ steps.set-version.outputs.SEMVER }}
FILE_VERSION: ${{ steps.set-version.outputs.FILE_VERSION }}
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v5
with:
-6
View File
@@ -1,6 +0,0 @@
workflow: GitFlow/v1
next-version: 3.0.0
branches:
main:
prevent-increment:
when-current-commit-tagged: true
+21 -10
View File
@@ -9,9 +9,12 @@ Speckle | Sharp | SDK
### .NET SDK, Tests, and Objects
[![codecov](https://codecov.io/gh/specklesystems/speckle-sharp-sdk/branch/dev/graph/badge.svg?token=TTM5OGr38m)](https://codecov.io/gh/specklesystems/speckle-sharp-sdk)
<a href="https://www.nuget.org/packages/Speckle.Sdk/"><img alt="NuGet Version" src="https://img.shields.io/nuget/v/Speckle.Sdk?label=Speckle.Sdk"></a>
<a href="https://www.nuget.org/packages/Speckle.Objects/"><img alt="NuGet Version" src="https://img.shields.io/nuget/v/Speckle.Sdk?label=Speckle.Objects"></a>
<a href="https://www.nuget.org/packages/Speckle.Automate.Sdk/"><img alt="NuGet Version" src="https://img.shields.io/nuget/v/Speckle.Sdk?label=Speckle.Automate.Sdk"></a>
> [!WARNING]
> This is an early beta release, not meant for use in production! We're working to stabilise the 3.0 API, and until then there will be breaking changes. You have been warned!
> Releases Speckle.Sdk and Speckle.Objects are reliable for production use, but the APIs may not be wholly stable, and there may be breaking changes between releases, with little documentation.
# Repo structure
@@ -28,11 +31,13 @@ This repo is the home of our next-generation Speckle .NET SDK. It uses .NET Stan
### Other repos
Make sure to also check and ⭐️ these other Speckle next generation repositories:
Make sure to also check and ⭐️ these other repositories:
- [`speckle-sharp-connectors`](https://github.com/specklesystems/speckle-sharp-connectors): our csharp repo of next gen connectors
- [`speckle-sketchup`](https://github.com/specklesystems/speckle-sketchup): Sketchup connector
- [`speckle-powerbi`](https://github.com/specklesystems/speckle-powerbi): PowerBi connector
- [`speckle-sharp-connectors`](https://github.com/specklesystems/speckle-sharp-connectors): our csharp repo of next gen connectors.
- [`speckle-server`](https://github.com/specklesystems/speckle-server): the speckle server.
- [`speckle-sketchup`](https://github.com/specklesystems/speckle-blender): Blender connector.
- [`speckle-sketchup`](https://github.com/specklesystems/speckle-sketchup): Sketchup connector.
- [`speckle-powerbi`](https://github.com/specklesystems/speckle-powerbi): PowerBi connector.
- and more [connectors & tooling](https://github.com/specklesystems/)!
## Documentation
@@ -45,18 +50,24 @@ Comprehensive developer and user documentation can be found in our:
### Building
Make sure you clone this repository together with its submodules: `git clone https://github.com/specklesystems/speckle-sharp-sdk.git -recursive`.
Afterwards, just restore all the NuGet packages and hit Build!
Ensure you're using a [8.0.4xx](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) .NET SDK.
After cloning this repository, just restore all the NuGet packages and hit Build!
### Developing
This project is evolving fast, to better understand how to use Core we suggest checking out the Unit and Integration tests. Running the integration tests locally requires a local server running on your computer.
It is highly recommended you use
- Either Jetbrains Rider or Visual Studio 2022
- Ensure your IDE is set to use [the correct .NET SDK version](https://github.com/specklesystems/speckle-sharp-sdk/blob/main/global.json) (newer major versions may work, but may incorrectly run analysers we haven't configured)
- You should install the cshapier plugin ([Rider](https://plugins.jetbrains.com/plugin/18243-csharpier), [VS](https://marketplace.visualstudio.com/items?itemName=csharpier.CSharpier)) and configure it to run on save
We'll be also adding [preliminary documentation on our forum](https://discourse.speckle.works/c/speckle-insider/10).
Docs are a bit patchy [https://docs.speckle.systems/developers/looking-for-developer-docs](https://docs.speckle.systems/developers/looking-for-developer-docs)
### Tests
There are two test projects, one for unit tests and one for integration tests. The latter needs a server running locally in order to run.
There are several test projects. It is a requirement that all tests pass for PRs to be merged.
The Integration test projects require a local server to be running.
You must have docker installed. Then you can run `docker compose up --wait` from the root of the repo to start the required containers.
## Contributing
-1
View File
@@ -23,7 +23,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{DA2AED
Directory.Packages.props = Directory.Packages.props
global.json = global.json
README.md = README.md
GitVersion.yml = GitVersion.yml
docker-compose.yml = docker-compose.yml
CodeMetricsConfig.txt = CodeMetricsConfig.txt
Directory.Build.Targets = Directory.Build.Targets
+1 -2
View File
@@ -11,7 +11,6 @@
<File Path="Directory.Build.Targets" />
<File Path="Directory.Packages.props" />
<File Path="docker-compose.yml" />
<File Path="GitVersion.yml" />
<File Path="global.json" />
<File Path="README.md" />
<File Path=".github\copilot-instructions.md" />
@@ -43,4 +42,4 @@
<Project Path="tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj" />
<Project Path="tests/Speckle.Sdk.Tests.Unit/Speckle.Sdk.Tests.Unit.csproj" />
</Folder>
</Solution>
</Solution>
+8 -10
View File
@@ -1,4 +1,3 @@
using System.Text.Json;
using GlobExpressions;
using static Bullseye.Targets;
using static SimpleExec.Command;
@@ -16,14 +15,13 @@ const string CLEAN_LOCKS = "clean-locks";
const string PERF = "perf";
const string DEEP_CLEAN = "deep-clean";
static async Task<(string, string)> GetVersions()
static (string semver, string fileVerison) GetVersions()
{
var (output, _) = await ReadAsync("dotnet", "dotnet-gitversion /output json").ConfigureAwait(false);
output = output.Trim();
var jDoc = JsonDocument.Parse(output);
var version = jDoc.RootElement.GetProperty("FullSemVer").GetString() ?? "3.0.0-localBuild";
var fileVersion = jDoc.RootElement.GetProperty("AssemblySemFileVer").GetString() ?? "3.0.0.0";
return (version, fileVersion);
string semver =
Environment.GetEnvironmentVariable("SEMVER") ?? throw new ArgumentException("Expected SEMVER env var");
string fileVersion =
Environment.GetEnvironmentVariable("FILE_VERSION") ?? throw new ArgumentException("Expected FILE_VERSION env var");
return (semver, fileVersion);
}
Target(
@@ -77,7 +75,7 @@ Target(
dependsOn: [RESTORE],
async () =>
{
var (version, fileVersion) = await GetVersions().ConfigureAwait(false);
var (version, fileVersion) = GetVersions();
Console.WriteLine($"Version: {version} & {fileVersion}");
await RunAsync(
"dotnet",
@@ -174,7 +172,7 @@ Target(
async () =>
{
{
var (version, fileVersion) = await GetVersions().ConfigureAwait(false);
var (version, fileVersion) = GetVersions();
Console.WriteLine($"Version: {version} & {fileVersion}");
await RunAsync("dotnet", $"pack Speckle.Sdk.sln -c Release -o output --no-build -p:Version={version}")
.ConfigureAwait(false);
-1
View File
@@ -265,7 +265,6 @@ public sealed class BlobApi : IBlobApi
[AutoInterfaceIgnore]
public void Dispose()
{
_activityFactory.Dispose();
_authedClient.Dispose();
_unauthedClient.Dispose();
}
+1 -2
View File
@@ -169,8 +169,7 @@ public class Base : DynamicBase, ISpeckleObject
return count;
}
case IEnumerable e
and not string:
case IEnumerable e and not string:
{
foreach (var arrValue in e)
{
@@ -109,9 +109,9 @@ public abstract class GraphTraversal<T>
break;
case IList list:
{
foreach (object? obj in list)
for (int i = list.Count - 1; i >= 0; i--)
{
TraverseMemberToStack(stack, obj, memberName, parent);
TraverseMemberToStack(stack, list[i], memberName, parent);
}
break;
@@ -100,9 +100,9 @@ public sealed class ObjectSaver(
{
if (!_options.SkipCacheWrite && batch.Count != 0)
{
sqLiteJsonCacheManager.SaveObjects(batch.Select(x => (x.Id.Value, x.Json.Value)));
Interlocked.Add(ref _cached, batch.Count);
progress?.Report(new(ProgressEvent.CachedToLocal, _cached, _objectsSerialized));
sqLiteJsonCacheManager.SaveObjects(batch.Select(x => (x.Id.Value, x.Json.Value)));
}
}
catch (OperationCanceledException)
@@ -20,7 +20,7 @@ internal sealed class ProgressStream(
{
int n = _stream.Read(buffer, offset, count);
_position += n;
progress?.Report(new(ProgressEvent.DownloadBytes, _position, streamLength));
progress?.Report(new(ProgressEvent.DownloadBytes, n, streamLength));
return n;
}
@@ -28,7 +28,7 @@ internal sealed class ProgressStream(
{
_stream.Write(buffer, offset, count);
_position += count;
progress?.Report(new(ProgressEvent.UploadBytes, _position, streamLength));
progress?.Report(new(ProgressEvent.UploadBytes, count, streamLength));
}
public override bool CanRead => true;
@@ -39,7 +39,7 @@ public abstract class PrimitiveTestFixture
}.Select(x => new object[] { x });
public static Half[] Float16TestCases { get; } =
[default, Half.Epsilon, Half.MaxValue, Half.MinValue, Half.PositiveInfinity, Half.NegativeInfinity, Half.NaN];
[default, Half.Epsilon, Half.MaxValue, Half.MinValue, Half.PositiveInfinity, Half.NegativeInfinity, Half.NaN];
public static float[] FloatIntegralTestCases { get; } = [0, 1, int.MaxValue, int.MinValue];