From e8193c225e52a5fc5256482f4a6c37f15af51cd3 Mon Sep 17 00:00:00 2001 From: mahach666 <79989386+mahach666@users.noreply.github.com> Date: Fri, 13 Nov 2026 04:08:40 +0300 Subject: [PATCH] Prepare release 0.11.1 with an IOScene range that nuget.org accepts nuget.org refused IfcIO.Scene 0.11.0 ("invalid Version: '0.2.0-0'"): a dependency bound with one prerelease label must start with a letter there. IfcIO and IfcIO.Cli 0.11.0 were published. IOScene is now referenced as [0.1.0, 0.2.0-0.0), and pack-release.ps1 fails a release whose IfcIO.Scene dependency bounds nuget.org would refuse, by the gallery's rule, and one whose IOScene range has no lower bound. Version 0.11.1, the first release of IfcIO.Scene; the changelog notes that 0.11.0 did not publish it. --- CHANGELOG.md | 13 ++++++++++++- CONTRIBUTING.md | 4 ++-- Directory.Build.props | 2 +- Directory.Packages.props | 2 +- README.md | 2 +- docs/scene-adapter.md | 4 ++-- src/IfcIO.Scene/IfcIO.Scene.csproj | 2 +- tools/pack-release.ps1 | 17 +++++++++++++++-- 8 files changed, 35 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc3ca3a..edd5b46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,22 @@ All notable changes to the `IfcIO` library are documented in this file. ## [Unreleased] +## [0.11.1] - 2026-11-13 + +### Fixed +- **`IfcIO.Scene` NuGet package**: published for the first time. nuget.org refused `IfcIO.Scene` 0.11.0 because the + upper bound of its `IOScene` range, `0.2.0-0`, is a version it does not accept in a dependency (a prerelease label of + one part must start with a letter). The range is now `[0.1.0, 0.2.0-0.0)`, which keeps out every 0.2.0 preview + except `0.2.0-0`, a version IOScene does not publish. + `IfcIO` and `IfcIO.Cli` 0.11.1 have the same code as 0.11.0. +- `tools/pack-release.ps1` fails a release whose `IfcIO.Scene` dependency bounds nuget.org would refuse, and one whose + `IOScene` range has no lower bound. + ## [0.11.0] - 2026-11-13 ### Added - **`IfcIO.Scene`**: `IfcSceneReader` converts an IFC file or `IfcModel` into an `IOScene` `SceneDocument` in metres with Z up (GlobalIds as `SourceId` and `IfcGuid`, storeys as levels and tree nodes, property and quantity sets keyed `ifc:`, materials, 4D schedules), with diagnostics for elements without geometry. See `docs/scene-adapter.md`. -- **`IfcIO.Scene` NuGet package**: published on the `IfcIO` release tag and depends on exactly the same `IfcIO` version (`[X.Y.Z]`). It references `IOScene` with the range `[0.1.0, 0.2.0-0)`; a release that would depend on an `IOScene` preview fails. +- **`IfcIO.Scene` NuGet package**: published on the `IfcIO` release tag and depends on exactly the same `IfcIO` version (`[X.Y.Z]`). It references `IOScene` with the range `[0.1.0, 0.2.0-0)`; a release that would depend on an `IOScene` preview fails. Not published with 0.11.0: nuget.org refused the package because of that range (see 0.11.1). ### Fixed - **World placement of geometry read from IFC (`IfcModel.Open`)**: element meshes are now in world coordinates. Previously object placements were ignored and every element sat at its local origin. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index adc8a58..9e9b947 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,10 +20,10 @@ Report security vulnerabilities privately through the **Security** tab. ## Scene adapter `src/IfcIO.Scene` converts IfcIO models into `IOScene` documents and uses only the public API of `IfcIO`; the `IfcIO` -package itself keeps no dependencies. `IOScene` is referenced with the range `[0.1.0, 0.2.0-0)`, and restore takes the +package itself keeps no dependencies. `IOScene` is referenced with the range `[0.1.0, 0.2.0-0.0)`, and restore takes the lowest version in it, 0.1.0 from NuGet.org. To build against an `IOScene` version that is not on NuGet.org yet, start the range in `Directory.Packages.props` at that version (for a new minor, move the upper bound too, for example -`[0.2.0-preview.1, 0.3.0-0)`) and restore from a local folder of packages: +`[0.2.0-preview.1, 0.3.0-0.0)`) and restore from a local folder of packages: `dotnet build IfcIO.slnx -p:RestoreAdditionalProjectSources=`. Changing the `SceneModel.Key`, `SourceId` or `IfcGuid` the adapter writes, its `ifc:` key format, or the value form (`Text`, `Kind`, `Unit`) it writes under a key fails the golden identity test and is a breaking release. diff --git a/Directory.Build.props b/Directory.Build.props index 8cb7a60..5f6f3e3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,7 +14,7 @@ - 0.11.0 + 0.11.1 mahach666 Copyright (c) 2026 IOExtend IfcIO diff --git a/Directory.Packages.props b/Directory.Packages.props index 44f9091..7da773a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,7 +5,7 @@ - + diff --git a/README.md b/README.md index 6a30418..aba5234 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Reads and writes ISO 10303-21 STEP physical files conforming to **IFC2x3 Coordin ## Limitations -- Version 0.11.0 is a preview. The API can evolve before 1.0. +- Version 0.11.1 is a preview. The API can evolve before 1.0. - IFC5 (USD/JSON) is not yet supported. - Boolean mesh cutting evaluates planar CSG half-spaces; non-planar curved intersections are tessellated. diff --git a/docs/scene-adapter.md b/docs/scene-adapter.md index 1187653..be52724 100644 --- a/docs/scene-adapter.md +++ b/docs/scene-adapter.md @@ -11,8 +11,8 @@ that read scenes work from it. The scene model and its rules are specified in th its [key registry](https://github.com/IOExtend/IOScene/blob/main/docs/keys.md). Status: preview. The `IfcIO.Scene` package is released with IfcIO, on the same tag, and depends on exactly the same -`IfcIO` version. It references `IOScene` with the range `[0.1.0, 0.2.0-0)`: any 0.1 release from 0.1.0 on, and no -preview of the next breaking line. +`IfcIO` version. It references `IOScene` with the range `[0.1.0, 0.2.0-0.0)`: any 0.1 release from 0.1.0 on, and no +preview of the next breaking line except `0.2.0-0`, which IOScene does not publish. Its first release is 0.11.1. ## Usage diff --git a/src/IfcIO.Scene/IfcIO.Scene.csproj b/src/IfcIO.Scene/IfcIO.Scene.csproj index 3e837a5..08f5731 100644 --- a/src/IfcIO.Scene/IfcIO.Scene.csproj +++ b/src/IfcIO.Scene/IfcIO.Scene.csproj @@ -3,7 +3,7 @@ Converts IFC models read by IfcIO into IOScene documents in metres with Z up, keeping GlobalIds, storeys, property sets, quantities and 4D schedules. true - + $(NoWarn);NU5104 diff --git a/tools/pack-release.ps1 b/tools/pack-release.ps1 index ecc498b..8ef7e7d 100644 --- a/tools/pack-release.ps1 +++ b/tools/pack-release.ps1 @@ -44,8 +44,21 @@ function Assert-AdapterNuspec([string]$NuspecPath, [string]$EngineId, [string]$V if ($scene.Count -eq 0) { throw "$NuspecPath has no dependency on IOScene." } foreach ($dependency in $scene) { $range = $dependency.GetAttribute('version') - if ($range.TrimStart('[', '(').Split(',')[0].Contains('-')) { - throw "$NuspecPath depends on IOScene '$range', whose lower bound is a prerelease; release IOScene first and require its stable version." + $lower = $range.TrimStart('[', '(').Split(',')[0].Trim() + if ($lower -eq '' -or $lower.Contains('-')) { + throw "$NuspecPath depends on IOScene '$range', whose lower bound is missing or a prerelease; release IOScene first and require its stable version." + } + } + # (c) nuget.org refuses a dependency bound with metadata, or one whose prerelease label has one part and does not start + # with a letter (NuGetGallery ManifestValidator.ValidateDependencyVersion); dotnet pack accepts both, so only the push would fail. + foreach ($dependency in $dependencies) { + $range = $dependency.GetAttribute('version') + foreach ($bound in $range.Trim('[', ']', '(', ')').Split(',')) { + $bound = $bound.Trim() + $label = if ($bound.Contains('-')) { $bound.Substring($bound.IndexOf('-') + 1) } else { '' } + if ($bound.Contains('+') -or ($label -ne '' -and -not $label.Contains('.') -and $label -notmatch '^[a-z][0-9a-z-]*$')) { + throw "$NuspecPath depends on $($dependency.GetAttribute('id')) '$range', whose bound '$bound' nuget.org refuses." + } } } }