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
2 changes: 1 addition & 1 deletion .ai/checklists/plugin-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Domain rules live in the per-kind skills; this is the packaging and lifecycle ga
- [ ] Output path set for **both** Debug and Release, to `Grand.Web/Plugins/{SystemName}/`.
- [ ] All GrandNode project references `<Private>false</Private>`, with `ExcludeAssets` matching the nearest comparable plugin.
- [ ] Package references carry no inline version.
- [ ] Added to `GrandNode.sln`.
- [ ] Added to `GrandNode.slnx`.
- [ ] `logo.jpg` present and copied to output.
- [ ] Themes only: `Content/theme.jpg` present, and `Content/**` copied with `PreserveNewest`.

Expand Down
2 changes: 1 addition & 1 deletion .ai/knowledge/repository-map.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# GrandNode Repository Map

## Root
- `GrandNode.sln`: main solution.
- `GrandNode.slnx`: main solution.
- `global.json`: pinned .NET SDK behavior.
- `Directory.Packages.props`: central NuGet package versions.
- `src/Build`: common MSBuild props and targets.
Expand Down
2 changes: 1 addition & 1 deletion .ai/prompts/create-plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Scaffold a new installable GrandNode plugin end to end, with the correct project
- anything else → `.ai/skills/plugin-module.md`
3. Read `.ai/templates/plugin/` and copy the skeleton files that apply. Read `.ai/examples/` for a worked end-to-end plugin.
4. Pick the closest existing plugin in `src/Plugins/` and diff your scaffold against it. State which one you used.
5. Create the project and add it to `GrandNode.sln`.
5. Create the project and add it to `GrandNode.slnx`.
6. Wire up in this order:
1. `.csproj` — SDK, `Grand.Common.props` import, output path, `Private=false` references.
2. `Manifest.cs` — `[assembly: PluginInfo(...)]` with an existing `Group` value.
Expand Down
2 changes: 1 addition & 1 deletion .ai/standards/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,5 +92,5 @@ Modules use `..\..\Web\Grand.Web\Modules\{ModuleName}\`. Both Debug and Release

1. Create under the correct `src/` folder — see `.ai/knowledge/repository-map.md`.
2. Import `Grand.Common.props`.
3. Add to `GrandNode.sln`.
3. Add to `GrandNode.slnx`.
4. Add the mirror test project under `src/Tests/` when the project contains logic.
2 changes: 1 addition & 1 deletion .ai/templates/plugin/base-plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ Required. Without it the plugin renders without an image in the admin plugin lis

## Checklist

- [ ] Project added to `GrandNode.sln`.
- [ ] Project added to `GrandNode.slnx`.
- [ ] `SystemName` identical in `Manifest.cs`, `{Feature}Defaults`, and the output folder.
- [ ] `Group` is one of the existing group names.
- [ ] Output path set for Debug **and** Release.
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/aspnetcore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ jobs:
with:
dotnet-version: 10.0.301
- name: Restore
run: dotnet restore ./GrandNode.sln
run: dotnet restore ./GrandNode.slnx
- name: Build with dotnet
run: dotnet build ./GrandNode.sln --configuration Release
run: dotnet build ./GrandNode.slnx --configuration Release
- name: Start Docker for Mongodb
run: docker run -d -p 27017:27017 mongo
- name: Wait for MongoDB to be ready
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,6 @@ jobs:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
run: |
./.sonar/scanner/dotnet-sonarscanner begin /k:"grandnode_grandnode2" /o:"grandnode" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml"
dotnet build ./GrandNode.sln
dotnet build ./GrandNode.slnx
./.github/scripts/run-tests.sh Debug --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
./.sonar/scanner/dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
2 changes: 1 addition & 1 deletion .github/workflows/grandnode.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Restore
run: dotnet restore "${{ env.WORKING_DIRECTORY }}"
- name: Build sln
run: dotnet build "GrandNode.sln" --configuration ${{ env.CONFIGURATION }}
run: dotnet build "GrandNode.slnx" --configuration ${{ env.CONFIGURATION }}
- name: Unit tests
# The job-level CONFIGURATION env var is picked up by MSBuild as the Configuration
# property, so "Build sln" above produces Release regardless of the missing
Expand Down
1,064 changes: 0 additions & 1,064 deletions GrandNode.sln

This file was deleted.

100 changes: 100 additions & 0 deletions GrandNode.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<Solution>
<Configurations>
<Platform Name="Any CPU" />
<Platform Name="x64" />
<Platform Name="x86" />
</Configurations>
<Folder Name="/Build/">
<File Path="src/Build/Grand.Common.props" />
<File Path="src/Build/Grand.Plugin.props" />
</Folder>
<Folder Name="/Business/">
<Project Path="src/Business/Grand.Business.Authentication/Grand.Business.Authentication.csproj" />
<Project Path="src/Business/Grand.Business.Catalog/Grand.Business.Catalog.csproj" />
<Project Path="src/Business/Grand.Business.Checkout/Grand.Business.Checkout.csproj" />
<Project Path="src/Business/Grand.Business.Cms/Grand.Business.Cms.csproj" />
<Project Path="src/Business/Grand.Business.Common/Grand.Business.Common.csproj" />
<Project Path="src/Business/Grand.Business.Core/Grand.Business.Core.csproj" />
<Project Path="src/Business/Grand.Business.Customers/Grand.Business.Customers.csproj" />
<Project Path="src/Business/Grand.Business.Marketing/Grand.Business.Marketing.csproj" />
<Project Path="src/Business/Grand.Business.Messages/Grand.Business.Messages.csproj" />
<Project Path="src/Business/Grand.Business.Storage/Grand.Business.Storage.csproj" />
</Folder>
<Folder Name="/Core/">
<Project Path="src/Core/Grand.Data/Grand.Data.csproj" />
<Project Path="src/Core/Grand.Domain/Grand.Domain.csproj" />
<Project Path="src/Core/Grand.Infrastructure/Grand.Infrastructure.csproj" />
<Project Path="src/Core/Grand.Mapping/Grand.Mapping.csproj" />
<Project Path="src/Core/Grand.Mediator/Grand.Mediator.csproj" />
<Project Path="src/Core/Grand.SharedKernel/Grand.SharedKernel.csproj" />
</Folder>
<Folder Name="/Modules/">
<Project Path="src/Modules/Grand.Module.Api/Grand.Module.Api.csproj" />
<Project Path="src/Modules/Grand.Module.Installer/Grand.Module.Installer.csproj" />
<Project Path="src/Modules/Grand.Module.Migration/Grand.Module.Migration.csproj" />
<Project Path="src/Modules/Grand.Module.ScheduledTasks/Grand.Module.ScheduledTasks.csproj" />
</Folder>
<Folder Name="/Plugins/">
<Project Path="src/Plugins/Authentication.Facebook/Authentication.Facebook.csproj" />
<Project Path="src/Plugins/Authentication.Google/Authentication.Google.csproj" />
<Project Path="src/Plugins/DiscountRules.Standard/DiscountRules.Standard.csproj" />
<Project Path="src/Plugins/ExchangeRate.McExchange/ExchangeRate.McExchange.csproj" />
<Project Path="src/Plugins/Payments.BrainTree/Payments.BrainTree.csproj" />
<Project Path="src/Plugins/Payments.CashOnDelivery/Payments.CashOnDelivery.csproj" />
<Project Path="src/Plugins/Payments.StripeCheckout/Payments.StripeCheckout.csproj" />
<Project Path="src/Plugins/Shipping.ByWeight/Shipping.ByWeight.csproj" />
<Project Path="src/Plugins/Shipping.FixedRateShipping/Shipping.FixedRateShipping.csproj" />
<Project Path="src/Plugins/Shipping.ShippingPoint/Shipping.ShippingPoint.csproj" />
<Project Path="src/Plugins/Tax.CountryStateZip/Tax.CountryStateZip.csproj" />
<Project Path="src/Plugins/Tax.FixedRate/Tax.FixedRate.csproj" />
<Project Path="src/Plugins/Theme.Modern/Theme.Modern.csproj" />
<Project Path="src/Plugins/Widgets.FacebookPixel/Widgets.FacebookPixel.csproj" />
<Project Path="src/Plugins/Widgets.GoogleAnalytics/Widgets.GoogleAnalytics.csproj" />
<Project Path="src/Plugins/Widgets.Slider/Widgets.Slider.csproj" />
</Folder>
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
</Folder>
<Folder Name="/src/" />
<Folder Name="/src/Core/" />
<Folder Name="/src/Tests/">
<Project Path="src/Tests/Grand.Web.Store.Tests/Grand.Web.Store.Tests.csproj" />
<Project Path="src/Tests/Grand.Web.Vendor.Tests/Grand.Web.Vendor.Tests.csproj" />
</Folder>
<Folder Name="/src/Web/" />
<Folder Name="/Tests/">
<Project Path="src/Tests/Grand.Business.Authentication.Tests/Grand.Business.Authentication.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Catalog.Tests/Grand.Business.Catalog.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Checkout.Tests/Grand.Business.Checkout.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Cms.Tests/Grand.Business.Cms.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Common.Tests/Grand.Business.Common.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Customers.Tests/Grand.Business.Customers.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Marketing.Tests/Grand.Business.Marketing.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Messages.Tests/Grand.Business.Messages.Tests.csproj" />
<Project Path="src/Tests/Grand.Business.Storage.Tests/Grand.Business.Storage.Tests.csproj" />
<Project Path="src/Tests/Grand.Data.Tests/Grand.Data.Tests.csproj" />
<Project Path="src/Tests/Grand.Domain.Tests/Grand.Domain.Tests.csproj" />
<Project Path="src/Tests/Grand.Infrastructure.Tests/Grand.Infrastructure.Tests.csproj" />
<Project Path="src/Tests/Grand.Mapping.Tests/Grand.Mapping.Tests.csproj" />
<Project Path="src/Tests/Grand.Mediator.Tests/Grand.Mediator.Tests.csproj" />
<Project Path="src/Tests/Grand.Module.Api.Tests/Grand.Module.Api.Tests.csproj" />
<Project Path="src/Tests/Grand.Modules.Tests/Grand.Modules.Tests.csproj" />
<Project Path="src/Tests/Grand.SharedKernel.Tests/Grand.SharedKernel.Tests.csproj" />
<Project Path="src/Tests/Grand.Web.Admin.Tests/Grand.Web.Admin.Tests.csproj" />
<Project Path="src/Tests/Grand.Web.Common.Tests/Grand.Web.Common.Tests.csproj" />
<Project Path="src/Tests/Grand.Web.Tests/Grand.Web.Tests.csproj" />
</Folder>
<Folder Name="/Web/">
<Project Path="src/Web/Grand.Web.Admin/Grand.Web.Admin.csproj" />
<Project Path="src/Web/Grand.Web.Store/Grand.Web.Store.csproj" />
<Project Path="src/Web/Grand.Web.Vendor/Grand.Web.Vendor.csproj" />
<Project Path="src/Web/Grand.Web/Grand.Web.csproj" />
</Folder>
<Folder Name="/Web/Shared/">
<Project Path="src/Web/Grand.SharedUIResources/Grand.SharedUIResources.csproj" />
<Project Path="src/Web/Grand.Web.AdminShared/Grand.Web.AdminShared.csproj" />
<Project Path="src/Web/Grand.Web.Common/Grand.Web.Common.csproj" />
</Folder>
<Project Path="src/Aspire/Aspire.AppHost/Aspire.AppHost.csproj" />
<Project Path="src/Aspire/Aspire.ServiceDefaults/Aspire.ServiceDefaults.csproj" />
</Solution>
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ docker pull grandnode/grandnode2:x.xx
* Open locally in an IDE

Extract the source code package downloaded from the Releases tab to a folder (or
clone the repository), and open `GrandNode.sln`. Build the whole solution - that
clone the repository), and open `GrandNode.slnx`. Build the whole solution - that
compiles the modules and plugins into the web project's output as well - then set
`Grand.Web` as the startup project and run it. See
[Building from source](#building-from-source) for the command line equivalent and
Expand All @@ -152,7 +152,7 @@ git clone - b x.xx https://github.com/grandnode/grandnode2.git
```
```bash
cd ~/source/grandnode
dotnet restore GrandNode.sln
dotnet restore GrandNode.slnx
```
Now it's time to rebuild all modules and plugins and publish the application. Each
module and plugin copies itself into the web project's output, so they have to be
Expand Down Expand Up @@ -195,11 +195,11 @@ Feel free to visit our [detailed guide about GrandNode installation.](https://gr
#### Backend

```bash
dotnet restore GrandNode.sln
dotnet build GrandNode.sln
dotnet restore GrandNode.slnx
dotnet build GrandNode.slnx
```

`GrandNode.sln` contains the whole application: the core libraries, the web
`GrandNode.slnx` contains the whole application: the core libraries, the web
project, the modules under `src/Modules` (installer, migrations, REST API,
scheduled tasks) and the plugins under `src/Plugins`. Building the solution
builds them all and copies each module and plugin into
Expand Down Expand Up @@ -254,7 +254,7 @@ dotnet run --project src/Web/Grand.Web

`Grand.Web` does not reference the plugins - they install themselves into its
output directory when *they* are built. So build the solution once
(`dotnet build GrandNode.sln`) before the first run; after that you can start the
(`dotnet build GrandNode.slnx`) before the first run; after that you can start the
web project alone.

The Kestrel profile listens on <https://localhost:5001> and
Expand Down
2 changes: 1 addition & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ steps:
displayName: 'dotnet restore'
inputs:
command: 'restore'
projects: '**/*.sln'
projects: '**/*.slnx'
feedsToUse: 'select'

- task: DotNetCoreCLI@2
Expand Down
Loading