How to import content and schema on startup and implement your own `IArtifactImportOnStartupProvider`
Deploy can import content and/or schema previously exported from another Umbraco installation on start-up. This allows for a quick setup of a baseline/starter kit or serves as a workaround for large ZIP archives that cannot be uploaded via the backoffice.
Default configuration
The default configuration will look for the ZIP archive umbraco\Deploy\import-on-startup.zip on start-up and if it exists, run an import and delete the file on successful completion. If you want to customize the default behavior, do so via settings.
This feature is extensible via a provider-based model by implementing IArtifactImportOnStartupProvider and registering it using builder.DeployArtifactImportOnStartupProviders(). The default Umbraco.Deploy.Infrastructure.SettingsArtifactImportOnStartupProvider implementation uses the above settings and inherits from Umbraco.Deploy.Infrastructure.ArtifactImportOnStartupProviderZipArchiveBase (which can be used for your own custom implementation).
Implementing your own IArtifactImportOnStartupProvider
An example of an import on a start-up provider that imports from a physical directory (instead of ZIP archive) is shown below:
usingUmbraco.Cms.Core;usingUmbraco.Cms.Core.Composing;usingUmbraco.Cms.Core.Extensions;usingUmbraco.Deploy.Core;usingUmbraco.Deploy.Core.OperationStatus;usingUmbraco.Deploy.Infrastructure.Extensions;internalsealedclassDeployImportOnStartupComposer:IComposer{publicvoidCompose(IUmbracoBuilder builder)=>builder.DeployArtifactImportOnStartupProviders() .Append<PhysicalDirectoryArtifactImportOnStartupProvider>();privatesealedclassPhysicalDirectoryArtifactImportOnStartupProvider:IArtifactImportOnStartupProvider {privatereadonlyIArtifactImportExportService _artifactImportExportService;privatereadonlyILogger _logger;privatereadonlystring _artifactsPath; public PhysicalDirectoryArtifactImportOnStartupProvider(IArtifactImportExportService artifactImportExportService, ILogger<PhysicalDirectoryArtifactImportOnStartupProvider> logger, IHostEnvironment hostEnvironment)
{ _artifactImportExportService = artifactImportExportService; _logger = logger; _artifactsPath =hostEnvironment.MapPathContentRoot("~/umbraco/Deploy/ImportOnStartup"); }publicTask<bool> CanImportAsync(CancellationToken cancellationToken =default)=>Task.FromResult(Directory.Exists(_artifactsPath)); public async Task<Attempt<ImportArtifactsOperationStatus>> ImportAsync(CancellationToken cancellationToken = default)
{ _logger.LogInformation("Importing Umbraco content and/or schema import at startup from directory {FilePath}.", _artifactsPath);
Attempt<ImportArtifactsOperationStatus> attempt = await _artifactImportExportService.ImportArtifactsAsync(_artifactsPath, default, null, cancellationToken);
_logger.LogInformation("Imported Umbraco content and/or schema import at startup from directory {FilePath} with status: {OperationStatus}.", _artifactsPath, attempt.Result);
if (attempt.Success) {Directory.Delete(_artifactsPath,true); _logger.LogInformation("Deleted physical directory after successful import on startup {FilePath}.", _artifactsPath);
}return attempt; } }}