Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions .claude/settings.local.json

This file was deleted.

14 changes: 6 additions & 8 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: CD
on:
push:
tags:
- 'v*.*.*'
- "v*.*.*"

jobs:
pack-and-publish:
Expand All @@ -12,7 +12,7 @@ jobs:
strategy:
fail-fast: false
matrix:
configuration: [R2021, R2022, R2023, R2024, R2025, R2026]
configuration: [R2020, R2021, R2022, R2023, R2024, R2025, R2026, R2027]

steps:
- name: Checkout
Expand All @@ -21,18 +21,16 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
4.8.x
dotnet-version: 8.0.x

- name: Restore
run: dotnet restore source/Apibim.Revit.Extensions/Apibim.Revit.Extensions.csproj -c ${{ matrix.configuration }}
run: dotnet restore Revit.Extensions/Revit.Extensions.csproj -p:Configuration=${{ matrix.configuration }}

- name: Build
run: dotnet build source/Apibim.Revit.Extensions/Apibim.Revit.Extensions.csproj -c ${{ matrix.configuration }} --no-restore
run: dotnet build Revit.Extensions/Revit.Extensions.csproj -p:Configuration=${{ matrix.configuration }} --no-restore

- name: Pack
run: dotnet pack source/Apibim.Revit.Extensions/Apibim.Revit.Extensions.csproj -c ${{ matrix.configuration }} --no-build --output ./nupkgs
run: dotnet pack Revit.Extensions/Revit.Extensions.csproj -p:Configuration=${{ matrix.configuration }} --no-build --output ./nupkgs

- name: Push to NuGet
run: dotnet nuget push "./nupkgs/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
55 changes: 27 additions & 28 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,23 @@ name: CI

on:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]

jobs:
build:
build-and-test:
name: Revit ${{ matrix.revit }}
runs-on: windows-latest

permissions:
checks: write
contents: read

strategy:
fail-fast: false
matrix:
configuration: [R2021, R2022, R2023, R2024, R2025, R2026]
revit: [2020, 2021, 2022, 2023, 2024, 2025, 2026]

steps:
- name: Checkout
Expand All @@ -22,38 +27,32 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.x
4.8.x
dotnet-version: 8.0.x

- name: Restore
run: dotnet restore source/Apibim.Revit.Extensions/Apibim.Revit.Extensions.csproj -c ${{ matrix.configuration }}
run: dotnet restore Revit.Extensions.Tests/Revit.Extensions.Tests.csproj -p:Configuration=R${{ matrix.revit }}

- name: Build
run: dotnet build source/Apibim.Revit.Extensions/Apibim.Revit.Extensions.csproj -c ${{ matrix.configuration }} --no-restore

test:
runs-on: windows-latest
needs: build
run: dotnet build Revit.Extensions.Tests/Revit.Extensions.Tests.csproj -p:Configuration=R${{ matrix.revit }} --no-restore

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run tests
run: >
dotnet test "Revit.Extensions.Tests/bin/R${{ matrix.revit }}/Revit.Extensions.Tests.dll"
--logger "trx;LogFileName=results.trx"
--results-directory "${{ github.workspace }}/TestResults/${{ matrix.revit }}"

- name: Setup .NET
uses: actions/setup-dotnet@v4
- name: Publish test results
uses: dorny/test-reporter@v1
if: always()
with:
dotnet-version: 8.0.x

- name: Restore
run: dotnet restore tests/Apibim.Revit.Extensions.Tests/Apibim.Revit.Extensions.Tests.csproj -c R2025

- name: Test
run: dotnet test tests/Apibim.Revit.Extensions.Tests/Apibim.Revit.Extensions.Tests.csproj -c R2025 --no-restore --logger "trx;LogFileName=test-results.trx"
name: Tests – Revit ${{ matrix.revit }}
path: "TestResults/${{ matrix.revit }}/results.trx"
reporter: dotnet-trx

- name: Upload test results
- name: Upload test artifact
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: "**/TestResults/*.trx"
name: test-results-${{ matrix.revit }}
path: "TestResults/${{ matrix.revit }}/results.trx"
if-no-files-found: warn
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ packages/
.DS_Store
Thumbs.db

## Claude Code
.claude/

## Test results
TestResults/
*.trx
Expand Down
56 changes: 0 additions & 56 deletions Apibim.Revit.Extensions.sln

This file was deleted.

17 changes: 2 additions & 15 deletions Build.props
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<!-- Определение всех конфигураций Revit -->
<PropertyGroup>
<Configurations>R2019;R2020;R2021;R2022;R2023;R2024;R2025;R2026;R2027</Configurations>
<Configurations>R2020;R2021;R2022;R2023;R2024;R2025;R2026;R2027</Configurations>
<Platforms>AnyCPU</Platforms>
</PropertyGroup>
<!-- Определение версии Revit и TargetFramework -->
<PropertyGroup Condition="'$(Configuration)' == 'R2019'">
<RevitVersion>2019</RevitVersion>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'R2020'">
<RevitVersion>2020</RevitVersion>
<TargetFramework>net47</TargetFramework>
Expand Down Expand Up @@ -43,13 +37,11 @@
<TargetFramework>net8.0-windows</TargetFramework>
</PropertyGroup>

<!-- OutputPath и DefineConstants -->
<PropertyGroup Condition="'$(RevitVersion)' != ''">
<OutputPath>bin\$(Configuration)\</OutputPath>
<DefineConstants>DEBUG;$(Configuration);REVIT_$(RevitVersion)</DefineConstants>
</PropertyGroup>

<!-- Общие свойства -->
<PropertyGroup>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>default</LangVersion>
Expand All @@ -65,14 +57,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference
Condition="'$(Configuration)' == 'R$(RevitVersion)'"
Include="Revit_All_Main_Versions_API_x64"
Version="$(RevitVersion).*"
IncludeAssets="build; compile"/>
<PackageReference Condition="'$(Configuration)' == 'R$(RevitVersion)'" Include="Revit_All_Main_Versions_API_x64" Version="$(RevitVersion).*" IncludeAssets="build; compile"/>
</ItemGroup>

<!-- Общие ссылки .NET -->
<ItemGroup>
<Reference Include="PresentationCore"/>
<Reference Include="PresentationFramework"/>
Expand Down
36 changes: 15 additions & 21 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
# Apibim.Revit.Extensions — Developer Guide
# Revit.Extensions — Developer Guide

## Project overview

Open-source library of Revit API extension methods, designed to support all Revit versions from 2019 to 2027.
Published as a NuGet package: `Apibim.Revit.Extensions`.
Published as a NuGet package: `Revit.Extensions`.

## Repository structure

```
Apibim.Revit.Extensions/
Revit.Extensions/
├── .github/workflows/
│ ├── ci.yml ← Build + test on every push / PR
│ └── cd.yml ← Pack + publish NuGet on tag v*.*.*
├── source/
│ └── Apibim.Revit.Extensions/
│ ├── Apibim.Revit.Extensions.csproj
├── Revit.Extensions/
│ ├── Revit.Extensions.csproj
│ └── Extensions/
│ ├── ElementExtensions.cs
│ ├── GeometryExtensions.cs
│ ├── PointExtensions.cs
│ ├── DocumentExtensions.cs
│ └── AsyncTasksExecutor.cs
├── tests/
│ └── Apibim.Revit.Extensions.Tests/
│ ├── Apibim.Revit.Extensions.Tests.csproj
├── Revit.Extensions.Tests/
│ ├── Revit.Extensions.Tests.csproj
│ └── Extensions/
│ ├── GeometryExtensionsTests.cs
│ ├── AsyncTasksExecutorTests.cs
Expand All @@ -32,14 +30,13 @@ Apibim.Revit.Extensions/
├── Directory.Build.props ← Imports Build.props; sets Nullable/ImplicitUsings/LangVersion
├── nuget.config
├── .gitignore
└── Apibim.Revit.Extensions.sln
└── Revit.Extensions.sln
```

## Build configurations

| Configuration | Revit | TargetFramework |
|---------------|-------|-----------------|
| R2019 | 2019 | net47 |
| R2020 | 2020 | net47 |
| R2021 | 2021 | net48 |
| R2022 | 2022 | net48 |
Expand All @@ -55,23 +52,20 @@ Each configuration sets `REVIT_<year>` as a compile-time constant (e.g. `REVIT_2

```bash
# Build for a specific Revit version
dotnet build source/Apibim.Revit.Extensions -c R2026
dotnet build source/Revit.Extensions -c R2026

# Build all versions (PowerShell)
foreach ($c in @("R2021","R2022","R2023","R2024","R2025","R2026")) {
dotnet build source/Apibim.Revit.Extensions -c $c
dotnet build source/Revit.Extensions -c $c
}

# Run tests (always with R2025 — only version that works headless)
dotnet test tests/Apibim.Revit.Extensions.Tests -c R2025

# Create NuGet package
dotnet pack source/Apibim.Revit.Extensions -c R2026 --output ./nupkgs
dotnet pack source/Revit.Extensions -c R2026 --output ./nupkgs
```

## NuGet package

- **PackageId:** `Apibim.Revit.Extensions`
- **PackageId:** `Revit.Extensions`
- **Version scheme:** `{RevitYear}.0.{patch}` → e.g. `2026.0.1`
- **Trigger CD:** push a tag matching `v*.*.*` → `git tag v2026.0.1 && git push --tags`
- **Secret required:** `NUGET_API_KEY` in GitHub repository secrets
Expand All @@ -91,10 +85,10 @@ Example in `PointExtensions.cs`:

## Adding new extensions

1. Create `source/Apibim.Revit.Extensions/Extensions/MyExtensions.cs`
2. Use `namespace Apibim.Revit.Extensions;`
1. Create `Revit.Extensions/Extensions/MyExtensions.cs`
2. Use `namespace Revit.Extensions;`
3. Mark class `public static`
4. Add unit tests in `tests/.../Extensions/MyExtensionsTests.cs`
4. Add unit tests in `Revit.Extensions.Tests/Extensions/MyExtensionsTests.cs`

## Notes

Expand Down
Loading