diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a61028f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI + +on: + pull_request: + push: + branches: + - master + +permissions: + contents: read + +jobs: + build-test-pack: + name: Restore, build, test, pack + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + + - name: Restore + run: dotnet restore IntervalTree.Net.sln + + - name: Build + run: dotnet build IntervalTree.Net.sln --configuration Release --no-restore + + - name: Test + run: dotnet test IntervalTree.Net.sln --configuration Release --no-build + + - name: Pack + run: dotnet pack src/IntervalTree.Net/IntervalTree.Net.csproj --configuration Release --no-build --output artifacts/packages diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73b6fd4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +obj/ +TestResults/ +artifacts/ +*.nupkg +*.snupkg +.vs/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7123144..b02e1a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,19 +12,20 @@ Thank you for your interest in contributing to **IntervalTree.Net**. This libra ``` 3. Restore dependencies and build the project: ```bash - dotnet restore tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj - dotnet build tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release --no-restore + dotnet restore IntervalTree.Net.sln + dotnet build IntervalTree.Net.sln --configuration Release --no-restore ``` 4. Run tests to verify your environment: ```bash - dotnet test tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release --no-build + dotnet test IntervalTree.Net.sln --configuration Release --no-build ``` ## Build and Test Instructions -- **Building**: Use `dotnet build tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release` to compile the library and test project. The library project includes no external dependencies. -- **Testing**: All new features must include unit tests. Tests should be added to the existing xUnit project under `tests/IntervalTree.Net.Tests/`. Run `dotnet test tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release` to execute the test suite. -- **Continuous Integration**: No GitHub Actions workflow is currently configured. Run restore, build and test locally before requesting a review. +- **Building**: Use `dotnet build IntervalTree.Net.sln --configuration Release` to compile the library and test project. The library project includes no external dependencies. +- **Testing**: All new features must include unit tests. Tests should be added to the existing xUnit project under `tests/IntervalTree.Net.Tests/`. Run `dotnet test IntervalTree.Net.sln --configuration Release` to execute the test suite. +- **Package validation**: Use `dotnet pack src/IntervalTree.Net/IntervalTree.Net.csproj --configuration Release --no-build` to create a local package for inspection. Do not publish packages from local validation. +- **Continuous Integration**: Pull requests and pushes to `master` run restore, build, test and pack validation. The workflow does not publish packages or require secrets. ## Coding Style diff --git a/IntervalTree.Net.sln b/IntervalTree.Net.sln new file mode 100644 index 0000000..6589180 --- /dev/null +++ b/IntervalTree.Net.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{7023B4F2-3045-413B-88B8-908AB23D8194}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntervalTree.Net", "src\IntervalTree.Net\IntervalTree.Net.csproj", "{1D52A0D8-2208-4855-8944-BE41B1A411C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{EA74D3EA-0B86-4536-8B27-4C2E528008E4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntervalTree.Net.Tests", "tests\IntervalTree.Net.Tests\IntervalTree.Net.Tests.csproj", "{EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D52A0D8-2208-4855-8944-BE41B1A411C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D52A0D8-2208-4855-8944-BE41B1A411C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D52A0D8-2208-4855-8944-BE41B1A411C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D52A0D8-2208-4855-8944-BE41B1A411C1}.Release|Any CPU.Build.0 = Release|Any CPU + {EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {1D52A0D8-2208-4855-8944-BE41B1A411C1} = {7023B4F2-3045-413B-88B8-908AB23D8194} + {EA92A05C-2EC2-41F0-9DFB-72A5D3AFF385} = {EA74D3EA-0B86-4536-8B27-4C2E528008E4} + EndGlobalSection +EndGlobal diff --git a/README.md b/README.md index fc6f67d..9fa9cf4 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,13 @@ Naïve range queries require scanning every interval, which is \(O(n)\) time per ## Installation -IntervalTree.Net is not currently published to NuGet. For local development, restore and build the test project directly: +IntervalTree.Net is not currently published to NuGet. For local development, restore and build the solution: ```shell -dotnet restore tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj -dotnet build tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release --no-restore -dotnet test tests/IntervalTree.Net.Tests/IntervalTree.Net.Tests.csproj --configuration Release --no-build +dotnet restore IntervalTree.Net.sln +dotnet build IntervalTree.Net.sln --configuration Release --no-restore +dotnet test IntervalTree.Net.sln --configuration Release --no-build +dotnet pack src/IntervalTree.Net/IntervalTree.Net.csproj --configuration Release --no-build ``` The library targets **net8.0** and uses modern C# features. The library project has no additional package dependencies. NuGet publishing is not approved or completed in the current repository state. diff --git a/src/IntervalTree.Net/IntervalTree.Net.csproj b/src/IntervalTree.Net/IntervalTree.Net.csproj index 719f8d8..f256909 100644 --- a/src/IntervalTree.Net/IntervalTree.Net.csproj +++ b/src/IntervalTree.Net/IntervalTree.Net.csproj @@ -4,5 +4,18 @@ enable enable latest + IntervalTree.Net + 0.1.0 + Courtland Hacker + A small .NET interval tree library for half-open interval storage and overlap queries. + interval-tree;intervals;range-query;data-structures;dotnet + https://github.com/Courtland9777/IntervalTree.Net + README.md + MIT + true + + + +