Working with Packages
Extension packages can be restored for an environment to extend CluedIn with additional features (e.g. crawlers, export targets, and vocabularies).
Packages are made available through nuget feeds that can be publicly or privately hosted, or even directly hosted from your local machine.
Check the full package documentation for all commands and options.
Local Package Development
To support local development an environment is pre-configured with a packages/local
nuget folder. This is a folder that allows developers to place locally built nuget packages to be included in a CluedIn environment.
The easiest way to integrate your locally built packages into CluedIn, is to build your extension packages directly to this folder.
Common Development Loop
1. Prepare the environment
To begin setup an environment for local development that targets CluedIn 3.2.3 (use whichever version is relevant to you). We’ll call it custom
:
> .\cluedin.ps1 env custom -Tag 3.2.3
+------------------------------+
| CluedIn - Manage Environment |
+------------------------------+
Setting 'CLUEDIN_ANNOTATION_TAG' in 'custom' environment
Setting 'CLUEDIN_CLEAN_TAG' in 'custom' environment
Setting 'CLUEDIN_DATASOURCE_TAG' in 'custom' environment
Setting 'CLUEDIN_GQL_TAG' in 'custom' environment
Setting 'CLUEDIN_INSTALLER_TAG' in 'custom' environment
Setting 'CLUEDIN_NEO4J_TAG' in 'custom' environment
Setting 'CLUEDIN_OPENREFINE_TAG' in 'custom' environment
Setting 'CLUEDIN_SERVER_TAG' in 'custom' environment
Setting 'CLUEDIN_SQLSERVER_TAG' in 'custom' environment
Setting 'CLUEDIN_SUBMITTER_TAG' in 'custom' environment
Setting 'CLUEDIN_UI_TAG' in 'custom' environment
2. Add a reference to your package
In this example, we are building a package called MyCustomExtension
. To ensure it is restored as part of CluedIn, we need to add it to the package list for the environment:
> .\cluedin.ps1 packages custom -Add MyCustomExtension
+--------------------+
| CluedIn - Packages |
+--------------------+
Added package MyCustomExtension
You can also specify a version for your package if you need to using
-version
. You can also use floating versions e.g.1.0.0-*
for the latest pre-release.
3. Pack your extension
We can now build our extension as a nuget package - providing the path to the custom environment local
folder:
> dotnet pack .\MyCustomExtension\ -o .\env\custom\packages\local\
Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
MyCustomExtension -> ..\src\MyCustomExtension\bin\Debug\netcoreapp3.1\MyCustomExtension.dll
Successfully created package '..\env\custom\packages\local\MyCustomExtension.1.0.0.nupkg'.
Always build and pack
You can also configure your extension project to always build and pack to the local folder by modifying the MyCustomExtension.csproj
<PropertyGroup>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageOutputPath>..\env\custom\packages\local\</PackageOutputPath>
</PropertyGroup>
> dotnet build .\MyCustomExtension\
Microsoft (R) Build Engine version 16.9.0+57a23d249 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
MyCustomExtension -> ..\MyCustomExtension\bin\Debug\netcoreapp3.1\MyCustomExtension.dll
Successfully created package '..\env\custom\packages\local\MyCustomExtension.1.0.0.nupkg'.
4. Restore packages for CluedIn
Now we have the package available and configured for CluedIn, we need to restore our packages for CluedIn to consume
> .\cluedin.ps1 packages custom -Restore
+--------------------+
| CluedIn - Packages |
+--------------------+
# ...
ServerComponent.Extensions -> /tmp/ServerComponent.Extensions/ServerComponent.Extensions.dll
[Package Trimming]: Removing 0 libraries from publish output that are available in the runtime store
[Package Trimming]: Removing 0 asset(s) from publish output that are available in the host
ServerComponent.Extensions -> /components/ServerComponent/
5. Now start CluedIn
Finally we can start our CluedIn instance:
> .\cluedin.ps1 up custom
+-----------------------------+
| CluedIn - Environment => up |
+-----------------------------+
Creating network "cluedin_custom_default" with the default driver
Creating cluedin_custom_elasticsearch_1 ...
Creating cluedin_custom_neo4j_1 ...
Creating cluedin_custom_sqlserver_1 ... done
Creating cluedin_custom_redis_1 ... done
Creating cluedin_custom_openrefine_1 ... done
Creating cluedin_custom_seq_1 ... done
# ...
6. Confirm your package was included
To confirm our custom package was included, we can check the docker logs for the libraries and dependencies that were restored.
When CluedIn starts up, it’s first task is to take the all the extension assets from disk and to copy them into the container.
> docker logs cluedin_custom_server_1
Register CA Certificate - [SKIPPED - No File]
Enable COREDUMP mode - [SKIPPED]
'../components/ServerComponent/MyCustomExtension.dll' -> './ServerComponent/MyCustomExtension.dll'
'../components/ServerComponent/ServerComponent.Extensions.deps.json' -> './ServerComponent/ServerComponent.Extensions.deps.json'
'../components/ServerComponent' -> './ServerComponent'
Installing component extensions - [COMPLETE]
7. Restart Server
As our package contents are copied into the container we must restart the cluedin server. We can do this by calling up
and excluding the service, followed by calling up
again with all services.
> .\cluedin.ps1 up custom -disable server
> .\cluedin.ps1 up custom
8. Update your package
Any changes to the packages.txt
will require -restore
to be called again. If you are using floating versions and you want to restore a new version of a package, you can simply run -restore
again.
When building packages locally, it is strongly recommended to ensure your package builds with a new version each time. NuGet (which underpins the restore process) assumes once a package is available for a specific version, it will not change in future, so it is persisted in a cache for future requests.
If you rebuild the same version you have previously restored, you will need to clear the cache during a restore by passing the -ClearCache
flag. All nuget packages are stored in the same cache it is not currently possible to clear the cache for a specific feed.
> .\cluedin.ps1 packages custom -Restore -Force -ClearCache
> .\cluedin.ps1 up custom -disable server
> .\cluedin.ps1 up custom