Umbraco Deploy
CMSCloudHeartcoreDXP
14.latest
14.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 startup
    • 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 startup

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