Umbraco Deploy
CMSCloudHeartcoreDXP
15.latest
15.latest
  • Umbraco Deploy Documentation
  • Legacy Documentation
  • Release notes
  • Troubleshooting
  • Installation
    • Installing Umbraco Deploy
    • Licensing
  • Upgrading
    • Upgrading Umbraco Deploy
    • Version Specific Upgrade Details
  • Getting Started
    • Getting started
    • CI/CD Build and Deployment Pipeline
      • Azure DevOps
      • GitHub Actions
    • Streamlining Local Development
    • Configuration
  • Deployment Workflow
    • Deployment
    • Transferring Content, Media and Forms
    • Import and Export
      • Import and Export with Migrations
      • Import and Export from version 7
      • Import on start-up
    • Deploying Changes
    • Deploying deletions
    • Restoring content
      • Partial Restores
    • Deploy Dashboard
  • Extending
    • Extend Deploy
    • Handling Cache Refresher Notifications
Powered by GitBook
On this page
  • Default configuration
  • Implementing your own IArtifactImportOnStartupProvider

Was this helpful?

Edit on GitHub
Export as PDF
  1. Deployment Workflow
  2. Import and Export

Import on start-up

How to import content and schema on startup and implement your own `IArtifactImportOnStartupProvider`

PreviousImport and Export from version 7NextDeploying Changes

Last updated 5 months ago

Was this helpful?

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 .

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:

using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.Extensions;
using Umbraco.Deploy.Core;
using Umbraco.Deploy.Core.OperationStatus;
using Umbraco.Deploy.Infrastructure.Extensions;

internal sealed class DeployImportOnStartupComposer : IComposer
{
    public void Compose(IUmbracoBuilder builder)
        => builder.DeployArtifactImportOnStartupProviders()
            .Append<PhysicalDirectoryArtifactImportOnStartupProvider>();

    private sealed class PhysicalDirectoryArtifactImportOnStartupProvider : IArtifactImportOnStartupProvider
    {
        private readonly IArtifactImportExportService _artifactImportExportService;
        private readonly ILogger _logger;
        private readonly string _artifactsPath;

        public PhysicalDirectoryArtifactImportOnStartupProvider(IArtifactImportExportService artifactImportExportService, ILogger<PhysicalDirectoryArtifactImportOnStartupProvider> logger, IHostEnvironment hostEnvironment)
        {
            _artifactImportExportService = artifactImportExportService;
            _logger = logger;
            _artifactsPath = hostEnvironment.MapPathContentRoot("~/umbraco/Deploy/ImportOnStartup");
        }

        public Task<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;
        }
    }
}
settings