diff --git a/10/umbraco-deploy/deployment-workflow/README.md b/10/umbraco-deploy/deployment-workflow/README.md index 4fad394cc2d..6dc57282535 100644 --- a/10/umbraco-deploy/deployment-workflow/README.md +++ b/10/umbraco-deploy/deployment-workflow/README.md @@ -11,7 +11,7 @@ Umbraco Deploy uses a deployment model that relies on Git and Umbraco Deploy cor If your project contains a Staging environment, deployments will be made from Development to Staging and then from Staging to Live. {% endhint %} -![Left to right model](<../../../umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) +![Left to right model](images/left-to-right.png) ## Deployment Approach diff --git a/10/umbraco-deploy/deployment-workflow/content-transfer.md b/10/umbraco-deploy/deployment-workflow/content-transfer.md index c4286d4d6b8..96964c74e95 100644 --- a/10/umbraco-deploy/deployment-workflow/content-transfer.md +++ b/10/umbraco-deploy/deployment-workflow/content-transfer.md @@ -68,6 +68,6 @@ This does not include entries submitted via the forms. Sometimes a content transfer might not be possible. For example if you add a new property to the HomePage Document type and you don’t have that property in both environments, you’ll get an error with a hint on how to fix this. -![clone dialog](../../../umbraco-cloud/deployment/images/schema-mismatch.png) +![Clone dialog](images/schema-mismatch.png) If you are seeing this type of issue when trying to transfer content, head over to our article about [Schema Mismatch errors](../troubleshooting.md), where you can read about how to resolve the issues. diff --git a/10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png b/10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png deleted file mode 100644 index 2fd8c4ce8f4..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/change-env-name.png b/10/umbraco-deploy/deployment-workflow/images/change-env-name.png deleted file mode 100644 index 3b6c00e5158..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/change-env-name.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/content-transfer.gif b/10/umbraco-deploy/deployment-workflow/images/content-transfer.gif deleted file mode 100644 index 8b4dea9bfb8..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/content-transfer.gif and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png b/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png deleted file mode 100644 index 8fcc2e4f54a..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype2 (1).png b/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype2 (1).png deleted file mode 100644 index 222348d67d2..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/deletions-of-doctype2 (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/left-to-right (2).png b/10/umbraco-deploy/deployment-workflow/images/left-to-right (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/left-to-right (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog (1).png b/10/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog (1).png deleted file mode 100644 index 17f3093f0ca..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/restart-environment.gif b/10/umbraco-deploy/deployment-workflow/images/restart-environment.gif deleted file mode 100644 index ee90b397bc2..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/restart-environment.gif and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png b/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (2).png b/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (2).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/schema-mismatch (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif b/10/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif deleted file mode 100644 index 722b29ff83e..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/transfer-queue (1).png b/10/umbraco-deploy/deployment-workflow/images/transfer-queue (1).png deleted file mode 100644 index a1430de1864..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/transfer-queue (1).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/transfer-queue (2).png b/10/umbraco-deploy/deployment-workflow/images/transfer-queue (2).png deleted file mode 100644 index a1430de1864..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/transfer-queue (2).png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/transfer-queue.png b/10/umbraco-deploy/deployment-workflow/images/transfer-queue.png deleted file mode 100644 index a1430de1864..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/transfer-queue.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png b/10/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png deleted file mode 100644 index e1186bbc234..00000000000 Binary files a/10/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/import-export.md b/10/umbraco-deploy/deployment-workflow/import-export.md index a0b3e160d25..2e3c78be4b7 100644 --- a/10/umbraco-deploy/deployment-workflow/import-export.md +++ b/10/umbraco-deploy/deployment-workflow/import-export.md @@ -32,17 +32,17 @@ When exporting, you can choose to include associated media files. Bear in mind t If your account has access to the Settings section, you can also choose to include the schema information and related files as well. -![Export dialog](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog.png) +![Export dialog](images/export-dialog.png) Umbraco Deploy will then serialize all the selected items to individual files, archive them into a zip file and make that available for download. You can download the file using the _Download_ button. After the download, you should also delete the archive file from the server. You can do this immediately via the _Delete_ button available in the dialog. -![Export dialog complete](../../../10/umbraco-deploy/deployment-workflow/images//export-dialog-complete.png) +![Export dialog complete](images/export-dialog-complete.png) If you miss doing this, you can also clean up archive files from the Umbraco Deploy dashboard in the _Settings_ section. -![Delete exports](../../../10/umbraco-deploy/deployment-workflow/images//delete-exports.png) +![Delete exports](images/delete-exports.png) {% hint style="info" %} The exported archive files are saved to the Umbraco temp folder in the `Deploy\Export` sub-directory. This is a temporary (non-persistent) location, local to the backoffice server and therefore shouldn't be used for long-term storage of exports. You can also only download the file from the export dialog in the backoffice. @@ -52,7 +52,7 @@ The exported archive files are saved to the Umbraco temp folder in the `Deploy\E Having previously exported content and schema to a zip file, you can import this into a new environment. -![Import dialog](../../../10/umbraco-deploy/deployment-workflow/images//import-dialog.png) +![Import dialog](images/import-dialog.png) You can upload the file via the browser. @@ -62,13 +62,13 @@ Similar to when exporting, you can choose to import everything from the archive Deploy does not touch the default maximum upload size, but can you [configure this yourself by following the CMS documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/maximumuploadsizesettings). {% endhint %} -![Import dialog step 2](../../../10/umbraco-deploy/deployment-workflow/images//import-dialog-2.png) +![Import dialog step 2](images/import-dialog-2.png) We validate the file before importing. Schema items that content depends on must either be in the upload itself or already exist on the target environment with the same details. If there are any issues that mean the import cannot proceed, it will be reported. You may also be given warnings for review. You can choose to ignore these and proceed if they aren't relevant to the action you are carrying out. The import then proceeds, processing all the items provided in the zip file. -![Import dialog step 3](../../../10/umbraco-deploy/deployment-workflow/images//import-dialog-3.png) +![Import dialog step 3](images/import-dialog-3.png) Once complete or on close of the dialog, the imported file will be deleted from the server. If this is missed, perhaps via a closed browser, you can also delete archive files from the Umbraco Deploy dashboard in the _Settings_ section. diff --git a/13/umbraco-deploy/SUMMARY.md b/13/umbraco-deploy/SUMMARY.md index 2f110a75823..6baefe0b45a 100644 --- a/13/umbraco-deploy/SUMMARY.md +++ b/13/umbraco-deploy/SUMMARY.md @@ -31,6 +31,7 @@ * [Import and Export](deployment-workflow/import-export.md) * [Import and Export with Migrations](deployment-workflow/import-with-migrations.md) * [Import and Export from version 7](deployment-workflow/import-export-v7.md) + * [Import on startup](deployment-workflow/import-on-startup.md) * [Deploying Changes](deployment-workflow/deploying-changes.md) * [Deploying deletions](deployment-workflow/deploying-deletions.md) * [Restoring content](deployment-workflow/restoring-content/README.md) diff --git a/13/umbraco-deploy/deployment-workflow/README.md b/13/umbraco-deploy/deployment-workflow/README.md index 74c02cda225..b026a773e5c 100644 --- a/13/umbraco-deploy/deployment-workflow/README.md +++ b/13/umbraco-deploy/deployment-workflow/README.md @@ -69,7 +69,7 @@ The extraction will end in one of two possible outcomes: It is also possible to see which version of Umbraco Deploy you are running, when the last operation was started and the status of the deployment operation. -![Deploy Dashboard](../../../10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png) +![Deploy dashboard](images/deploy-dashboard.png) {% embed url="https://www.youtube.com/embed/l5qdTsIddKM?rel=0" %} Umbraco Deploy - Content transfer and deploy diff --git a/13/umbraco-deploy/deployment-workflow/content-transfer.md b/13/umbraco-deploy/deployment-workflow/content-transfer.md index d6317ebc379..7234a851331 100644 --- a/13/umbraco-deploy/deployment-workflow/content-transfer.md +++ b/13/umbraco-deploy/deployment-workflow/content-transfer.md @@ -67,6 +67,6 @@ This does not include entries submitted via the forms. Sometimes a content transfer might not be possible. For example if you add a new property to the HomePage Document type and you don’t have that property in both environments, you’ll get an error with a hint on how to fix this. -![clone dialog]() +![Clone dialog](images/schema-mismatch.png) If you are seeing this type of issue when trying to transfer content, head over to our article about [Schema Mismatch errors](../troubleshooting.md), where you can read about how to resolve the issues. diff --git a/13/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png b/13/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png deleted file mode 100644 index 2fd8c4ce8f4..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/change-env-name.png b/13/umbraco-deploy/deployment-workflow/images/change-env-name.png deleted file mode 100644 index 3b6c00e5158..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/change-env-name.png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/content-transfer.gif b/13/umbraco-deploy/deployment-workflow/images/content-transfer.gif deleted file mode 100644 index 8b4dea9bfb8..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/content-transfer.gif and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/delete-exports.png b/13/umbraco-deploy/deployment-workflow/images/delete-exports.png new file mode 100644 index 00000000000..1d0a3157d86 Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/delete-exports.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png b/13/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png deleted file mode 100644 index 8fcc2e4f54a..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png and /dev/null differ diff --git a/10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard (1).png b/13/umbraco-deploy/deployment-workflow/images/deploy-dashboard.png similarity index 100% rename from 10/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard (1).png rename to 13/umbraco-deploy/deployment-workflow/images/deploy-dashboard.png diff --git a/13/umbraco-deploy/deployment-workflow/images/export-complete-dialog.png b/13/umbraco-deploy/deployment-workflow/images/export-complete-dialog.png new file mode 100644 index 00000000000..776acb65284 Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/export-complete-dialog.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/import-dialog-2.png b/13/umbraco-deploy/deployment-workflow/images/import-dialog-2.png new file mode 100644 index 00000000000..99bb865fbdf Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/import-dialog-2.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/import-dialog-3.png b/13/umbraco-deploy/deployment-workflow/images/import-dialog-3.png new file mode 100644 index 00000000000..ef8ef4e4386 Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/import-dialog-3.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/import-dialog.png b/13/umbraco-deploy/deployment-workflow/images/import-dialog.png new file mode 100644 index 00000000000..e42696348bd Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/import-dialog.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/left-to-right (2).png b/13/umbraco-deploy/deployment-workflow/images/left-to-right (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/left-to-right (2).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/restart-environment.gif b/13/umbraco-deploy/deployment-workflow/images/restart-environment.gif deleted file mode 100644 index ee90b397bc2..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/restart-environment.gif and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png b/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png b/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif b/13/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif deleted file mode 100644 index 722b29ff83e..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/tree-export-dialog.png b/13/umbraco-deploy/deployment-workflow/images/tree-export-dialog.png new file mode 100644 index 00000000000..eb4f73555b1 Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/tree-export-dialog.png differ diff --git a/13/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png b/13/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png deleted file mode 100644 index e1186bbc234..00000000000 Binary files a/13/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png and /dev/null differ diff --git a/13/umbraco-deploy/deployment-workflow/images/workspace-export-dialog.png b/13/umbraco-deploy/deployment-workflow/images/workspace-export-dialog.png new file mode 100644 index 00000000000..176d215b030 Binary files /dev/null and b/13/umbraco-deploy/deployment-workflow/images/workspace-export-dialog.png differ diff --git a/13/umbraco-deploy/deployment-workflow/import-export.md b/13/umbraco-deploy/deployment-workflow/import-export.md index bacc4c334b5..70dfd89882c 100644 --- a/13/umbraco-deploy/deployment-workflow/import-export.md +++ b/13/umbraco-deploy/deployment-workflow/import-export.md @@ -32,17 +32,21 @@ When exporting, you can choose to include associated media files. Bear in mind t If your account has access to the Settings section, you can also choose to include the schema information and related files as well. -![Export dialog](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog.png) +![Export dialog](images/tree-export-dialog.png) + +When doing a workspace export, you also have the option to include *all* schema in the export (introduced in Deploy 13.3), regardless of whether it is in use by any content. + +![Workspace export dialog](images/workspace-export-dialog.png) Umbraco Deploy will then serialize all the selected items to individual files, archive them into a zip file and make that available for download. You can download the file using the _Download_ button. After the download, you should also delete the archive file from the server. You can do this immediately via the _Delete_ button available in the dialog. -![Export dialog complete](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog-complete.png) +![Export dialog complete](images/export-complete-dialog.png) If you miss doing this, you can also clean up archive files from the Umbraco Deploy dashboard in the _Settings_ section. -![Delete exports](../../../10/umbraco-deploy/deployment-workflow/images/delete-exports.png) +![Delete exports](images/delete-exports.png) {% hint style="info" %} The exported archive files are saved to the Umbraco temp folder in the `Deploy\Export` sub-directory. This is a temporary (non-persistent) location, local to the backoffice server and therefore shouldn't be used for long-term storage of exports. You can also only download the file from the export dialog in the backoffice. @@ -52,7 +56,7 @@ The exported archive files are saved to the Umbraco temp folder in the `Deploy\E Having previously exported content and schema to a zip file, you can import this into a new environment. -![Import dialog](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog.png) +![Import dialog](images/import-dialog.png) You can upload the file via the browser. @@ -63,13 +67,13 @@ Deploy does not touch the default maximum upload size, but you can [configure th On Umbraco Cloud, the upload size limit is 500 MB. {% endhint %} -![Import dialog step 2](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-2.png) +![Import dialog step 2](images/import-dialog-2.png) We validate the file before importing. Schema items that content depends on must either be in the upload itself or already exist on the target environment with the same details. If there are any issues that mean the import cannot proceed, it will be reported. You may also be given warnings for review. You can choose to ignore these and proceed if they aren't relevant to the action you are carrying out. The import then proceeds, processing all the items provided in the zip file. -![Import dialog step 3](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-3.png) +![Import dialog step 3](images/import-dialog-3.png) Once complete or on close of the dialog, the imported file will be deleted from the server. If this is missed, perhaps via a closed browser, you can also delete archive files from the Umbraco Deploy dashboard in the _Settings_ section. diff --git a/13/umbraco-deploy/deployment-workflow/import-on-startup.md b/13/umbraco-deploy/deployment-workflow/import-on-startup.md new file mode 100644 index 00000000000..062e9d54032 --- /dev/null +++ b/13/umbraco-deploy/deployment-workflow/import-on-startup.md @@ -0,0 +1,69 @@ +--- +meta.Title: Import on startup +description: How to import content and schema on startup and implement your own `IArtifactImportOnStartupProvider` +--- + +# Import on startup + +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](../getting-started/deploy-settings.md#import-on-startup). + +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: + +```csharp +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(); + + private sealed class PhysicalDirectoryArtifactImportOnStartupProvider : IArtifactImportOnStartupProvider + { + private readonly IArtifactImportExportService _artifactImportExportService; + private readonly ILogger _logger; + private readonly string _artifactsPath; + + public PhysicalDirectoryArtifactImportOnStartupProvider(IArtifactImportExportService artifactImportExportService, ILogger logger, IHostEnvironment hostEnvironment) + { + _artifactImportExportService = artifactImportExportService; + _logger = logger; + _artifactsPath = hostEnvironment.MapPathContentRoot("~/umbraco/Deploy/ImportOnStartup"); + } + + public Task CanImportAsync(CancellationToken cancellationToken = default) + => Task.FromResult(Directory.Exists(_artifactsPath)); + + public async Task> ImportAsync(CancellationToken cancellationToken = default) + { + _logger.LogInformation("Importing Umbraco content and/or schema import at startup from directory {FilePath}.", _artifactsPath); + + Attempt 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); + + return attempt; + } + + public Task OnImportCompletedAsync() + { + Directory.Delete(_artifactsPath, true); + + return Task.CompletedTask; + } + } +} +``` \ No newline at end of file diff --git a/13/umbraco-deploy/getting-started/deploy-settings.md b/13/umbraco-deploy/getting-started/deploy-settings.md index 7ab98cd9f58..3542c7d5993 100644 --- a/13/umbraco-deploy/getting-started/deploy-settings.md +++ b/13/umbraco-deploy/getting-started/deploy-settings.md @@ -33,52 +33,62 @@ For illustration purposes, the following structure represents the full set of op ... "Umbraco": { "Deploy": { - "Settings": { - "ApiKey": "", - "ApiSecret": "", - "Edition": "Default", - "ExcludedEntityTypes": [], - "RelationTypes" : [], - "ValueConnectors": [], - "SessionTimeout": "0.0:20:00", - "SourceDeployTimeout": "0.0:20:00", - "DatabaseCommandTimeout": "0.0:20:00", - "EnableSignatureCacheReads": true, - "HttpClientTimeout": "0.0:20:00", - "DiskOperationsTimeout": "0.0:05:00", - "SourceDeployBatchSize": null, - "PackageBatchSize": null, - "UseDatabaseBackedTransferQueue": true, - "IgnoreBrokenDependenciesBehavior": "Restore", - "AcceptInvalidCertificates": false, - "TransferFormsAsContent": true, - "TransferDictionaryAsContent": false, - "IgnoreMissingLanguagesForDictionaryItems": false, - "SetEmptyDictionaryItemsOnTransfer": true, - "AllowMembersDeploymentOperations": "None", - "TransferMemberGroupsAsContent": false, - "ExportMemberGroups": true, - "ReloadMemoryCacheFollowingDiskReadOperation": false, - "AllowDomainsDeploymentOperations": "None", - "AllowWebhooksDeploymentOperations": "None", - "TrashedContentDeploymentOperations": "Import", - "PreferLocalDbConnectionString": false, - "MediaFileChecksumCalculationMethod": "PartialFileContents", - "NumberOfSignaturesToUseAllRelationCache": 100, - "ContinueOnMediaFilePathTooLongException": false, - "SuppressCacheRefresherNotifications": false, - "ResolveUserInTargetEnvironment": false, - "Suspensions": { - "DiskRead": "All", - "PartialRestore": "All", - "Restore": "All", - "Deploy": "All", - "Import": "All", - "Export": "All" - }, - "HideConfigurationDetails": false, - "HideVersionDetails": false - } + "Settings": { + "ApiKey": "", + "ApiSecret": "", + "Edition": "Default", + "ExcludedEntityTypes": [], + "RelationTypes" : [], + "ValueConnectors": [], + "SessionTimeout": "0.0:20:00", + "SourceDeployTimeout": "0.0:20:00", + "DatabaseCommandTimeout": "0.0:20:00", + "EnableSignatureCacheReads": true, + "HttpClientTimeout": "0.0:20:00", + "DiskOperationsTimeout": "0.0:05:00", + "SourceDeployBatchSize": null, + "PackageBatchSize": null, + "UseDatabaseBackedTransferQueue": true, + "IgnoreBrokenDependenciesBehavior": "Restore", + "AcceptInvalidCertificates": false, + "TransferFormsAsContent": true, + "TransferDictionaryAsContent": false, + "IgnoreMissingLanguagesForDictionaryItems": false, + "SetEmptyDictionaryItemsOnTransfer": true, + "AllowMembersDeploymentOperations": "None", + "TransferMemberGroupsAsContent": false, + "ExportMemberGroups": true, + "ReloadMemoryCacheFollowingDiskReadOperation": false, + "AllowDomainsDeploymentOperations": "None", + "AllowWebhooksDeploymentOperations": "None", + "TrashedContentDeploymentOperations": "Import", + "PreferLocalDbConnectionString": false, + "MediaFileChecksumCalculationMethod": "PartialFileContents", + "NumberOfSignaturesToUseAllRelationCache": 100, + "ContinueOnMediaFilePathTooLongException": false, + "SuppressCacheRefresherNotifications": false, + "ResolveUserInTargetEnvironment": false, + "Suspensions": { + "DiskRead": "All", + "PartialRestore": "All", + "Restore": "All", + "Deploy": "All", + "Import": "All", + "Export": "All" + }, + "HideConfigurationDetails": false, + "HideVersionDetails": false, + "ValidateDependenciesOnImport": true + }, + "ImportOnStartup": { + "Enabled": true, + "Files": ["~/umbraco/Deploy/import-on-startup.zip"], + "FileAction": "Delete", + "WarningsAsErrors": false, + "EntityTypes": [], + "Cultures": [], + "Username": null + } } } } @@ -86,7 +96,7 @@ For illustration purposes, the following structure represents the full set of op Some configuration is applied via code rather than application settings. Where this is the case is also discussed in the sections to follow. -## Configuration Via Application Settings +## Configuration via application settings ### ApiKey or ApiSecret @@ -116,9 +126,9 @@ This setting allows you to exclude a certain type of entity from being deployed. This setting allows you to manage how relations are deployed between environments. You will need to specify an alias and a mode for each relation type. The mode can be either: -* `Exclude` - This causes the relation to be excluded and not transferred on deployments. -* `Weak` - This causes the relation to be deployed if both content items are found on the target environment. -* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency. +* `Exclude` - This causes the relation to be excluded and not transferred on deployments +* `Weak` - This causes the relation to be deployed if both content items are found on the target environment +* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency ```json "RelationTypes": { @@ -176,8 +186,8 @@ An error message of "The remote API has returned a response indicating a platfor If encountering this issue, there are two batch settings that can be applied with integer values (for example 500). This will cause Deploy to transfer items in batches, up to a maximum size. This will allow each individual batch to complete within the time available. The higher the value, the bigger the batches. -* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images). -* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations. +* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images) +* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations ### UseDatabaseBackedTransferQueue @@ -257,14 +267,14 @@ To configure the behavior you prefer, amend this value to either `None`, `Transf For example, using the following settings, you will have an installation that ignores broken dependencies when restoring from an upstream environment. It will however still prevent deployment and report any dependency issues when attempting a transfer to an upstream environment. ```json - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependenciesBehavior": "Restore", ``` When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting existed that took a value of `true` or `false`. To achieve the same result as the example above, the following configuration was required: ```json - "IgnoreBrokenDependencies": true, - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependencies": true, +"IgnoreBrokenDependenciesBehavior": "Restore", ``` ### Memory cache reload @@ -272,7 +282,7 @@ When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting Some customers have reported intermittent issues related to Umbraco's memory cache following deployments, which are resolved by a manual reload of the cache via the _Settings > Published Status > Caches_ dashboard. If you are running into such issues and are able to accommodate a cache clear after deployment, this workaround can be automated via the following setting: ```json - "ReloadMemoryCacheFollowingDiskReadOperation": true, +"ReloadMemoryCacheFollowingDiskReadOperation": true, ``` By upgrading to the most recent available version of the CMS major you are running, you'll be able to benefit from the latest bug fixes and optimizations in this area. That should be your first option if encountering cache related issues. Failing that, or if a CMS upgrade is not an option, then this workaround can be considered. @@ -282,7 +292,7 @@ By upgrading to the most recent available version of the CMS major you are runni Culture and hostname settings, defined per content item for culture invariant content, are not deployed between environments by default. They can be opted into via configuration. ```json - "AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", +"AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", ``` To enable this, set the configuration value as appropriate for the types of domains you want to allow: @@ -298,7 +308,7 @@ Combinations of settings can be applied, e.g. `Hostname,AbsolutePath`. When deploying content items, public access rules based on member groups are transferred. You can amend this behavior using this setting. ```json - "AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", +"AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", ``` * `None` - no public access rules will be transferred @@ -313,13 +323,13 @@ When deploying content items, public access rules based on member groups are tra Webhooks may be considered environment specific or schema information that you would like to synchronize between environments. As such, by default, Umbraco Deploy does not include webhooks in schema deployment operations. ```json - "AllowWebhooksDeploymentOperations": "None|All", +"AllowWebhooksDeploymentOperations": "None|All", ``` If you would like you include them you can adjust this setting: -* `None` - webhooks are not deployed and are expected to be managed independently in each environment. -* `All` - webhooks included in schema deployments. +* `None` - webhooks are not deployed and are expected to be managed independently in each environment +* `All` - webhooks included in schema deployments ## Deployment of trashed content @@ -394,27 +404,27 @@ Deploy operations suspend scheduled publishing, Examine indexing, document cache Each setting within this section represents a Deploy operation. For each, the suspensions that are carried out can be amended with one or more of following values: -- `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -- `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -- `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All`, -- `Deploy` - `None, ScheduledPublishing, All`, -- `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -- `Export` - `None, ScheduledPublishing, All` +* `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All` +* `Deploy` - `None, ScheduledPublishing, All` +* `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `Export` - `None, ScheduledPublishing, All` The default value for all suspension settings is `All`. So for example if you wanted to remove Examine indexing suspension and resumption during partial restore operations, you could set the following: ```json - "Suspensions": { - "PartialRestore": "ScheduledPublishing, DocumentCache" - } +"Suspensions": { + "PartialRestore": "ScheduledPublishing, DocumentCache" +}, ``` It's also possible to set the values for all operations by setting `Suspensions` to a value instead of an object, for example: ```json - "Suspensions": "ScheduledPublishing, DocumentCache, Signatures" +"Suspensions": "ScheduledPublishing, DocumentCache, Signatures", ``` If you prefer configuration in code, operators overloads on the settings class make this process straightforward, as shown in the following example: @@ -423,7 +433,7 @@ If you prefer configuration in code, operators overloads on the settings class m using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Core.Configuration.DeployConfiguration; -internal class DeploySuspensionComposer : IComposer +internal sealed class DeploySuspensionsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.Services.Configure(options => @@ -448,7 +458,28 @@ If set to `true` the configuration details shown on the setting's dashboard will If set to `true` the version details shown on the setting's dashboard will be hidden. -## Configuration Via Code +### ValidateDependenciesOnImport {#validate-dependencies-on-import} + +A default notification handler for the `ValidateArtifactImportNotification` is registered by Deploy that: + +* Adds warnings for dependencies that must match exactly, and are both not in the import and not with matching checksums in the target environment +* Adds warnings for all remaining content dependencies and errors for all schema dependencies that don't exist in the import + +To avoid this handler from being registered, you can set this setting to `false`. + +### Import on startup {#import-on-startup} + +Deploy can [import content and/or schema previously exported from another Umbraco installation on start-up](../deployment-workflow/import-on-startup.md). This can be customized by changing the `Umbraco:Deploy:ImportOnStartup` settings (note that this is directly below the `Deploy` section and not nested below `Settings`): + +* `Enabled` - this feature is enabled by default, but can be disabled (e.g. to prevent importing on specific environments) +* `Files` - the files that are imported on start-up (relative to the project content root, defaults to `umbraco\Deploy\import-on-startup.zip`), which are checked individually (files that do not exist are skipped and a warning will be logged) +* `FileAction` - `None` will leave the file on disk (and potentially import it again on the next start-up), `Archive` renames the file to end with `.imported` and `Delete` (the default) will remove the file on successful import +* `WarningsAsErrors` - indicates whether warnings should be considered as errors +* `EntityTypes` - sets the entity types to import, note that the default import validation will return warnings for entity types in the ZIP archive that are skipped due to this setting +* `Cultures` - the ISO codes of content variants that should be imported +* `Username` - the email address of the user that performs the import (used for auditing), uses the 'super-user' administrator account if not set + +## Configuration via code ### Webhook Events @@ -458,7 +489,7 @@ Umbraco Deploy can optionally register events that you can use with Umbraco webh using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Infrastructure.Extensions; -public class RegisterDeployWebhooksComposer : IComposer +internal sealed class DeployWebhookEventsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.WebhookEvents().AddDeploy(deployBuilder => deployBuilder.AddTask()); diff --git a/13/umbraco-deploy/release-notes.md b/13/umbraco-deploy/release-notes.md index 64340252b0c..1f18ebfee6f 100644 --- a/13/umbraco-deploy/release-notes.md +++ b/13/umbraco-deploy/release-notes.md @@ -18,6 +18,10 @@ If you are upgrading to a new major version you can find the details about the b This section contains the release notes for Umbraco Deploy 13 including all changes for this version. +#### [13.3.0](https://github.com/umbraco/Umbraco.Deploy.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) (November 21st 2024) + +* All items from 13.3.0-rc1 + #### [13.3.0-rc1](https://github.com/umbraco/Umbraco.Deploy.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) (November 13rd 2024) * Add option to include all schema in a workspace export diff --git a/14/umbraco-deploy/SUMMARY.md b/14/umbraco-deploy/SUMMARY.md index 156a4a3ae12..4ac136516a4 100644 --- a/14/umbraco-deploy/SUMMARY.md +++ b/14/umbraco-deploy/SUMMARY.md @@ -31,6 +31,7 @@ * [Import and Export](deployment-workflow/import-export.md) * [Import and Export with Migrations](deployment-workflow/import-with-migrations.md) * [Import and Export from version 7](deployment-workflow/import-export-v7.md) + * [Import on startup](deployment-workflow/import-on-startup.md) * [Deploying Changes](deployment-workflow/deploying-changes.md) * [Deploying deletions](deployment-workflow/deploying-deletions.md) * [Restoring content](deployment-workflow/restoring-content/README.md) diff --git a/14/umbraco-deploy/deployment-workflow/content-transfer.md b/14/umbraco-deploy/deployment-workflow/content-transfer.md index 0eb16f5d180..d3bea4c38fc 100644 --- a/14/umbraco-deploy/deployment-workflow/content-transfer.md +++ b/14/umbraco-deploy/deployment-workflow/content-transfer.md @@ -68,6 +68,6 @@ This does not include entries submitted via the forms. Sometimes a content transfer might not be possible. For example if you add a new property to the HomePage Document type and you don’t have that property in both environments, you’ll get an error with a hint on how to fix this. -![clone dialog](<../../../10/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png>) +![Schema mismatch](../deployment-workflow/images/schema-mismatch.png) If you are seeing this type of issue when trying to transfer content, head over to our article about [Schema Mismatch errors](../troubleshooting.md), where you can read about how to resolve the issues. diff --git a/14/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png b/14/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png deleted file mode 100644 index 2fd8c4ce8f4..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/change-env-name.png b/14/umbraco-deploy/deployment-workflow/images/change-env-name.png deleted file mode 100644 index 3b6c00e5158..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/change-env-name.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/content-transfer.gif b/14/umbraco-deploy/deployment-workflow/images/content-transfer.gif deleted file mode 100644 index 8b4dea9bfb8..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/content-transfer.gif and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/delete-exports.png b/14/umbraco-deploy/deployment-workflow/images/delete-exports.png new file mode 100644 index 00000000000..7c6bc8c53a7 Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/delete-exports.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png b/14/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png deleted file mode 100644 index 8fcc2e4f54a..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/deploy-dashboard.png b/14/umbraco-deploy/deployment-workflow/images/deploy-dashboard.png new file mode 100644 index 00000000000..f364aeac6dc Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/deploy-dashboard.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/environment-export-modal.png b/14/umbraco-deploy/deployment-workflow/images/environment-export-modal.png new file mode 100644 index 00000000000..de6e7a3eeea Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/environment-export-modal.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/export-complete.png b/14/umbraco-deploy/deployment-workflow/images/export-complete.png new file mode 100644 index 00000000000..3cff8d54d81 Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/export-complete.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/import-complete.png b/14/umbraco-deploy/deployment-workflow/images/import-complete.png new file mode 100644 index 00000000000..ab4b033482c Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/import-complete.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/import-modal-2.png b/14/umbraco-deploy/deployment-workflow/images/import-modal-2.png new file mode 100644 index 00000000000..f89f6d322cf Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/import-modal-2.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/import-modal.png b/14/umbraco-deploy/deployment-workflow/images/import-modal.png new file mode 100644 index 00000000000..3c746aeb94c Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/import-modal.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/left-to-right (2).png b/14/umbraco-deploy/deployment-workflow/images/left-to-right (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/left-to-right (2).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png b/14/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png deleted file mode 100644 index 367008754fe..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/restart-environment.gif b/14/umbraco-deploy/deployment-workflow/images/restart-environment.gif deleted file mode 100644 index ee90b397bc2..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/restart-environment.gif and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch.png b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch.png index 3ca384cb6cc..a2292cd1e98 100644 Binary files a/14/umbraco-deploy/deployment-workflow/images/schema-mismatch.png and b/14/umbraco-deploy/deployment-workflow/images/schema-mismatch.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif b/14/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif deleted file mode 100644 index 722b29ff83e..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/transfer-queue.png b/14/umbraco-deploy/deployment-workflow/images/transfer-queue.png deleted file mode 100644 index a1430de1864..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/transfer-queue.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/images/tree-export-modal.png b/14/umbraco-deploy/deployment-workflow/images/tree-export-modal.png new file mode 100644 index 00000000000..b286d8372b4 Binary files /dev/null and b/14/umbraco-deploy/deployment-workflow/images/tree-export-modal.png differ diff --git a/14/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png b/14/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png deleted file mode 100644 index e1186bbc234..00000000000 Binary files a/14/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png and /dev/null differ diff --git a/14/umbraco-deploy/deployment-workflow/import-export.md b/14/umbraco-deploy/deployment-workflow/import-export.md index bacc4c334b5..e466883aead 100644 --- a/14/umbraco-deploy/deployment-workflow/import-export.md +++ b/14/umbraco-deploy/deployment-workflow/import-export.md @@ -26,23 +26,27 @@ We are also able provide hooks to allow for migrations of artifacts (such as dat ## Exporting content and schema -To export content and schema, you can select either a specific item of content, or a whole tree or workspace. +To export content and schema, you can select either a specific item of content, or a whole tree or environment. When exporting, you can choose to include associated media files. Bear in mind that including media files for a large site can lead to a big zip file. So even with this option, you might want to consider a different method for transferring large amounts of media. For example using direct transfer between Cloud storage accounts or File Transfer Protocol (FTP). If your account has access to the Settings section, you can also choose to include the schema information and related files as well. -![Export dialog](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog.png) +![Tree export](images/tree-export-modal.png) + +When doing an environment export, you also have the option to include *all* schema in the export (introduced in Deploy 14.2), regardless of whether it is in use by any content. + +![Environment export](images/environment-export-modal.png) Umbraco Deploy will then serialize all the selected items to individual files, archive them into a zip file and make that available for download. You can download the file using the _Download_ button. After the download, you should also delete the archive file from the server. You can do this immediately via the _Delete_ button available in the dialog. -![Export dialog complete](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog-complete.png) +![Export complete](images/export-complete.png) If you miss doing this, you can also clean up archive files from the Umbraco Deploy dashboard in the _Settings_ section. -![Delete exports](../../../10/umbraco-deploy/deployment-workflow/images/delete-exports.png) +![Delete exports](images/delete-exports.png) {% hint style="info" %} The exported archive files are saved to the Umbraco temp folder in the `Deploy\Export` sub-directory. This is a temporary (non-persistent) location, local to the backoffice server and therefore shouldn't be used for long-term storage of exports. You can also only download the file from the export dialog in the backoffice. @@ -52,7 +56,7 @@ The exported archive files are saved to the Umbraco temp folder in the `Deploy\E Having previously exported content and schema to a zip file, you can import this into a new environment. -![Import dialog](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog.png) +![Import (step 1)](images/import-modal.png) You can upload the file via the browser. @@ -63,13 +67,13 @@ Deploy does not touch the default maximum upload size, but you can [configure th On Umbraco Cloud, the upload size limit is 500 MB. {% endhint %} -![Import dialog step 2](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-2.png) +![Import (step 2)](images/import-modal-2.png) We validate the file before importing. Schema items that content depends on must either be in the upload itself or already exist on the target environment with the same details. If there are any issues that mean the import cannot proceed, it will be reported. You may also be given warnings for review. You can choose to ignore these and proceed if they aren't relevant to the action you are carrying out. The import then proceeds, processing all the items provided in the zip file. -![Import dialog step 3](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-3.png) +![Import complete](images/import-complete.png) Once complete or on close of the dialog, the imported file will be deleted from the server. If this is missed, perhaps via a closed browser, you can also delete archive files from the Umbraco Deploy dashboard in the _Settings_ section. diff --git a/14/umbraco-deploy/deployment-workflow/import-on-startup.md b/14/umbraco-deploy/deployment-workflow/import-on-startup.md new file mode 100644 index 00000000000..062e9d54032 --- /dev/null +++ b/14/umbraco-deploy/deployment-workflow/import-on-startup.md @@ -0,0 +1,69 @@ +--- +meta.Title: Import on startup +description: How to import content and schema on startup and implement your own `IArtifactImportOnStartupProvider` +--- + +# Import on startup + +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](../getting-started/deploy-settings.md#import-on-startup). + +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: + +```csharp +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(); + + private sealed class PhysicalDirectoryArtifactImportOnStartupProvider : IArtifactImportOnStartupProvider + { + private readonly IArtifactImportExportService _artifactImportExportService; + private readonly ILogger _logger; + private readonly string _artifactsPath; + + public PhysicalDirectoryArtifactImportOnStartupProvider(IArtifactImportExportService artifactImportExportService, ILogger logger, IHostEnvironment hostEnvironment) + { + _artifactImportExportService = artifactImportExportService; + _logger = logger; + _artifactsPath = hostEnvironment.MapPathContentRoot("~/umbraco/Deploy/ImportOnStartup"); + } + + public Task CanImportAsync(CancellationToken cancellationToken = default) + => Task.FromResult(Directory.Exists(_artifactsPath)); + + public async Task> ImportAsync(CancellationToken cancellationToken = default) + { + _logger.LogInformation("Importing Umbraco content and/or schema import at startup from directory {FilePath}.", _artifactsPath); + + Attempt 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); + + return attempt; + } + + public Task OnImportCompletedAsync() + { + Directory.Delete(_artifactsPath, true); + + return Task.CompletedTask; + } + } +} +``` \ No newline at end of file diff --git a/14/umbraco-deploy/getting-started/deploy-settings.md b/14/umbraco-deploy/getting-started/deploy-settings.md index ac79c87b44b..03569d85c8c 100644 --- a/14/umbraco-deploy/getting-started/deploy-settings.md +++ b/14/umbraco-deploy/getting-started/deploy-settings.md @@ -33,53 +33,63 @@ For illustration purposes, the following structure represents the full set of op ... "Umbraco": { "Deploy": { - "Settings": { - "ApiKey": "", - "ApiSecret": "", - "Edition": "Default", - "ExcludedEntityTypes": [], - "RelationTypes" : [], - "ValueConnectors": [], - "SessionTimeout": "0.0:20:00", - "SourceDeployTimeout": "0.0:20:00", - "DatabaseCommandTimeout": "0.0:20:00", - "EnableSignatureCacheReads": true, - "HttpClientTimeout": "0.0:20:00", - "DiskOperationsTimeout": "0.0:05:00", - "SourceDeployBatchSize": null, - "PackageBatchSize": null, - "MaxRequestLength": null, - "UseDatabaseBackedTransferQueue": true, - "IgnoreBrokenDependenciesBehavior": "Restore", - "AcceptInvalidCertificates": false, - "TransferFormsAsContent": true, - "TransferDictionaryAsContent": false, - "IgnoreMissingLanguagesForDictionaryItems": false, - "SetEmptyDictionaryItemsOnTransfer": true, - "AllowMembersDeploymentOperations": "None", - "TransferMemberGroupsAsContent": false, - "ExportMemberGroups": true, - "ReloadMemoryCacheFollowingDiskReadOperation": false, - "AllowDomainsDeploymentOperations": "None", - "AllowWebhooksDeploymentOperations": "None", - "TrashedContentDeploymentOperations": "Import", - "PreferLocalDbConnectionString": false, - "MediaFileChecksumCalculationMethod": "PartialFileContents", - "NumberOfSignaturesToUseAllRelationCache": 100, - "ContinueOnMediaFilePathTooLongException": false, - "SuppressCacheRefresherNotifications": false, - "ResolveUserInTargetEnvironment": false, - "Suspensions": { - "DiskRead": "All", - "PartialRestore": "All", - "Restore": "All", - "Deploy": "All", - "Import": "All", - "Export": "All" - }, - "HideConfigurationDetails": false, - "HideVersionDetails": false - } + "Settings": { + "ApiKey": "", + "ApiSecret": "", + "Edition": "Default", + "ExcludedEntityTypes": [], + "RelationTypes" : [], + "ValueConnectors": [], + "SessionTimeout": "0.0:20:00", + "SourceDeployTimeout": "0.0:20:00", + "DatabaseCommandTimeout": "0.0:20:00", + "EnableSignatureCacheReads": true, + "HttpClientTimeout": "0.0:20:00", + "DiskOperationsTimeout": "0.0:05:00", + "SourceDeployBatchSize": null, + "PackageBatchSize": null, + "MaxRequestLength": null, + "UseDatabaseBackedTransferQueue": true, + "IgnoreBrokenDependenciesBehavior": "Restore", + "AcceptInvalidCertificates": false, + "TransferFormsAsContent": true, + "TransferDictionaryAsContent": false, + "IgnoreMissingLanguagesForDictionaryItems": false, + "SetEmptyDictionaryItemsOnTransfer": true, + "AllowMembersDeploymentOperations": "None", + "TransferMemberGroupsAsContent": false, + "ExportMemberGroups": true, + "ReloadMemoryCacheFollowingDiskReadOperation": false, + "AllowDomainsDeploymentOperations": "None", + "AllowWebhooksDeploymentOperations": "None", + "TrashedContentDeploymentOperations": "Import", + "PreferLocalDbConnectionString": false, + "MediaFileChecksumCalculationMethod": "PartialFileContents", + "NumberOfSignaturesToUseAllRelationCache": 100, + "ContinueOnMediaFilePathTooLongException": false, + "SuppressCacheRefresherNotifications": false, + "ResolveUserInTargetEnvironment": false, + "Suspensions": { + "DiskRead": "All", + "PartialRestore": "All", + "Restore": "All", + "Deploy": "All", + "Import": "All", + "Export": "All" + }, + "HideConfigurationDetails": false, + "HideVersionDetails": false, + "ValidateDependenciesOnImport": true + }, + "ImportOnStartup": { + "Enabled": true, + "Files": ["~/umbraco/Deploy/import-on-startup.zip"], + "FileAction": "Delete", + "WarningsAsErrors": false, + "EntityTypes": [], + "Cultures": [], + "Username": null + } } } } @@ -87,7 +97,7 @@ For illustration purposes, the following structure represents the full set of op Some configuration is applied via code rather than application settings. Where this is the case is also discussed in the sections to follow. -## Configuration Via Application Settings +## Configuration via application settings ### ApiKey or ApiSecret @@ -117,9 +127,9 @@ This setting allows you to exclude a certain type of entity from being deployed. This setting allows you to manage how relations are deployed between environments. You will need to specify an alias and a mode for each relation type. The mode can be either: -* `Exclude` - This causes the relation to be excluded and not transferred on deployments. -* `Weak` - This causes the relation to be deployed if both content items are found on the target environment. -* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency. +* `Exclude` - This causes the relation to be excluded and not transferred on deployments +* `Weak` - This causes the relation to be deployed if both content items are found on the target environment +* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency ```json "RelationTypes": { @@ -177,8 +187,8 @@ An error message of "The remote API has returned a response indicating a platfor If encountering this issue, there are two batch settings that can be applied with integer values (for example 500). This will cause Deploy to transfer items in batches, up to a maximum size. This will allow each individual batch to complete within the time available. The higher the value, the bigger the batches. -* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images). -* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations. +* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images) +* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations ### MaxRequestLength @@ -264,14 +274,14 @@ To configure the behavior you prefer, amend this value to either `None`, `Transf For example, using the following settings, you will have an installation that ignores broken dependencies when restoring from an upstream environment. It will however still prevent deployment and report any dependency issues when attempting a transfer to an upstream environment. ```json - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependenciesBehavior": "Restore", ``` When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting existed that took a value of `true` or `false`. To achieve the same result as the example above, the following configuration was required: ```json - "IgnoreBrokenDependencies": true, - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependencies": true, +"IgnoreBrokenDependenciesBehavior": "Restore", ``` ### Memory cache reload @@ -279,7 +289,7 @@ When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting Some customers have reported intermittent issues related to Umbraco's memory cache following deployments, which are resolved by a manual reload of the cache via the _Settings > Published Status > Caches_ dashboard. If you are running into such issues and are able to accommodate a cache clear after deployment, this workaround can be automated via the following setting: ```json - "ReloadMemoryCacheFollowingDiskReadOperation": true, +"ReloadMemoryCacheFollowingDiskReadOperation": true, ``` By upgrading to the most recent available version of the CMS major you are running, you'll be able to benefit from the latest bug fixes and optimizations in this area. That should be your first option if encountering cache related issues. Failing that, or if a CMS upgrade is not an option, then this workaround can be considered. @@ -289,7 +299,7 @@ By upgrading to the most recent available version of the CMS major you are runni Culture and hostname settings, defined per content item for culture invariant content, are not deployed between environments by default. They can be opted into via configuration. ```json - "AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", +"AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", ``` To enable this, set the configuration value as appropriate for the types of domains you want to allow: @@ -305,7 +315,7 @@ Combinations of settings can be applied, e.g. `Hostname,AbsolutePath`. When deploying content items, public access rules based on member groups are transferred. You can amend this behavior using this setting. ```json - "AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", +"AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", ``` * `None` - no public access rules will be transferred @@ -320,13 +330,13 @@ When deploying content items, public access rules based on member groups are tra Webhooks may be considered environment specific or schema information that you would like to synchronize between environments. As such, by default, Umbraco Deploy does not include webhooks in schema deployment operations. ```json - "AllowWebhooksDeploymentOperations": "None|All", +"AllowWebhooksDeploymentOperations": "None|All", ``` If you would like you include them you can adjust this setting: -* `None` - webhooks are not deployed and are expected to be managed independently in each environment. -* `All` - webhooks included in schema deployments. +* `None` - webhooks are not deployed and are expected to be managed independently in each environment +* `All` - webhooks included in schema deployments ## Deployment of trashed content @@ -401,11 +411,11 @@ Deploy operations suspend scheduled publishing, Examine indexing, document cache Each setting within this section represents a Deploy operation. For each, the suspensions that are carried out can be amended with one or more of following values: -* `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -* `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -* `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All`, -* `Deploy` - `None, ScheduledPublishing, All`, -* `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All`, +* `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All` +* `Deploy` - `None, ScheduledPublishing, All` +* `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All` * `Export` - `None, ScheduledPublishing, All` The default value for all suspension settings is `All`. @@ -413,15 +423,15 @@ The default value for all suspension settings is `All`. So for example if you wanted to remove Examine indexing suspension and resumption during partial restore operations, you could set the following: ```json - "Suspensions": { - "PartialRestore": "ScheduledPublishing, DocumentCache" - } +"Suspensions": { + "PartialRestore": "ScheduledPublishing, DocumentCache" +}, ``` It's also possible to set the values for all operations by setting `Suspensions` to a value instead of an object, for example: ```json - "Suspensions": "ScheduledPublishing, DocumentCache, Signatures" +"Suspensions": "ScheduledPublishing, DocumentCache, Signatures", ``` If you prefer configuration in code, operators overloads on the settings class make this process straightforward, as shown in the following example: @@ -430,7 +440,7 @@ If you prefer configuration in code, operators overloads on the settings class m using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Core.Configuration.DeployConfiguration; -internal class DeploySuspensionComposer : IComposer +internal sealed class DeploySuspensionsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.Services.Configure(options => @@ -455,7 +465,28 @@ If set to `true` the configuration details shown on the setting's dashboard will If set to `true` the version details shown on the setting's dashboard will be hidden. -## Configuration Via Code +### ValidateDependenciesOnImport {#validate-dependencies-on-import} + +A default notification handler for the `ValidateArtifactImportNotification` is registered by Deploy that: + +* Adds warnings for dependencies that must match exactly, and are both not in the import and not with matching checksums in the target environment +* Adds warnings for all remaining content dependencies and errors for all schema dependencies that don't exist in the import + +To avoid this handler from being registered, you can set this setting to `false`. + +### Import on startup {#import-on-startup} + +Deploy can [import content and/or schema previously exported from another Umbraco installation on start-up](../deployment-workflow/import-on-startup.md). This can be customized by changing the `Umbraco:Deploy:ImportOnStartup` settings (note that this is directly below the `Deploy` section and not nested below `Settings`): + +* `Enabled` - this feature is enabled by default, but can be disabled (e.g. to prevent importing on specific environments) +* `Files` - the files that are imported on start-up (relative to the project content root, defaults to `umbraco\Deploy\import-on-startup.zip`), which are checked individually (files that do not exist are skipped and a warning will be logged) +* `FileAction` - `None` will leave the file on disk (and potentially import it again on the next start-up), `Archive` renames the file to end with `.imported` and `Delete` (the default) will remove the file on successful import +* `WarningsAsErrors` - indicates whether warnings should be considered as errors +* `EntityTypes` - sets the entity types to import, note that the default import validation will return warnings for entity types in the ZIP archive that are skipped due to this setting +* `Cultures` - the ISO codes of content variants that should be imported +* `Username` - the email address of the user that performs the import (used for auditing), uses the 'super-user' administrator account if not set + +## Configuration via code ### Webhook Events @@ -465,7 +496,7 @@ Umbraco Deploy can optionally register events that you can use with Umbraco webh using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Infrastructure.Extensions; -public class RegisterDeployWebhooksComposer : IComposer +internal sealed class DeployWebhookEventsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.WebhookEvents().AddDeploy(deployBuilder => deployBuilder.AddTask()); diff --git a/14/umbraco-deploy/release-notes.md b/14/umbraco-deploy/release-notes.md index d4501a633c7..8b429f93801 100644 --- a/14/umbraco-deploy/release-notes.md +++ b/14/umbraco-deploy/release-notes.md @@ -18,6 +18,10 @@ If you are upgrading to a new major version you can find the details about the b This section contains the release notes for Umbraco Deploy 14 including all changes for this version. +#### [14.2.0](https://github.com/umbraco/Umbraco.Deploy.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) (November 21st 2024) + +* All items from 14.2.0-rc1 + #### [14.2.0-rc1](https://github.com/umbraco/Umbraco.Deploy.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) (November 13th 2024) * Add option to include all schema in a workspace export diff --git a/15/umbraco-deploy/SUMMARY.md b/15/umbraco-deploy/SUMMARY.md index 2f110a75823..3fe78c1055e 100644 --- a/15/umbraco-deploy/SUMMARY.md +++ b/15/umbraco-deploy/SUMMARY.md @@ -31,6 +31,7 @@ * [Import and Export](deployment-workflow/import-export.md) * [Import and Export with Migrations](deployment-workflow/import-with-migrations.md) * [Import and Export from version 7](deployment-workflow/import-export-v7.md) + * [Import on start-up](deployment-workflow/import-on-startup.md) * [Deploying Changes](deployment-workflow/deploying-changes.md) * [Deploying deletions](deployment-workflow/deploying-deletions.md) * [Restoring content](deployment-workflow/restoring-content/README.md) diff --git a/15/umbraco-deploy/deployment-workflow/content-transfer.md b/15/umbraco-deploy/deployment-workflow/content-transfer.md index 0eb16f5d180..d3bea4c38fc 100644 --- a/15/umbraco-deploy/deployment-workflow/content-transfer.md +++ b/15/umbraco-deploy/deployment-workflow/content-transfer.md @@ -68,6 +68,6 @@ This does not include entries submitted via the forms. Sometimes a content transfer might not be possible. For example if you add a new property to the HomePage Document type and you don’t have that property in both environments, you’ll get an error with a hint on how to fix this. -![clone dialog](<../../../10/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png>) +![Schema mismatch](../deployment-workflow/images/schema-mismatch.png) If you are seeing this type of issue when trying to transfer content, head over to our article about [Schema Mismatch errors](../troubleshooting.md), where you can read about how to resolve the issues. diff --git a/15/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png b/15/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png deleted file mode 100644 index 2fd8c4ce8f4..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/Deploy-dahsboard.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/change-env-name.png b/15/umbraco-deploy/deployment-workflow/images/change-env-name.png deleted file mode 100644 index 3b6c00e5158..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/change-env-name.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/content-transfer.gif b/15/umbraco-deploy/deployment-workflow/images/content-transfer.gif deleted file mode 100644 index 8b4dea9bfb8..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/content-transfer.gif and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/delete-exports.png b/15/umbraco-deploy/deployment-workflow/images/delete-exports.png new file mode 100644 index 00000000000..7c6bc8c53a7 Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/delete-exports.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png b/15/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png deleted file mode 100644 index 8fcc2e4f54a..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/deletions-of-doctype.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/environment-export-modal.png b/15/umbraco-deploy/deployment-workflow/images/environment-export-modal.png new file mode 100644 index 00000000000..de6e7a3eeea Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/environment-export-modal.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/export-complete.png b/15/umbraco-deploy/deployment-workflow/images/export-complete.png new file mode 100644 index 00000000000..3cff8d54d81 Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/export-complete.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/import-complete.png b/15/umbraco-deploy/deployment-workflow/images/import-complete.png new file mode 100644 index 00000000000..ab4b033482c Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/import-complete.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/import-modal-2.png b/15/umbraco-deploy/deployment-workflow/images/import-modal-2.png new file mode 100644 index 00000000000..f89f6d322cf Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/import-modal-2.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/import-modal.png b/15/umbraco-deploy/deployment-workflow/images/import-modal.png new file mode 100644 index 00000000000..3c746aeb94c Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/import-modal.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1) (2).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1) (2).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/left-to-right (2).png b/15/umbraco-deploy/deployment-workflow/images/left-to-right (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/left-to-right (2).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png b/15/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png deleted file mode 100644 index 367008754fe..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/queue-for-transfer-dialog.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/restart-environment.gif b/15/umbraco-deploy/deployment-workflow/images/restart-environment.gif deleted file mode 100644 index ee90b397bc2..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/restart-environment.gif and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1) (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch (1).png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch.png b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch.png index 3ca384cb6cc..a2292cd1e98 100644 Binary files a/15/umbraco-deploy/deployment-workflow/images/schema-mismatch.png and b/15/umbraco-deploy/deployment-workflow/images/schema-mismatch.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif b/15/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif deleted file mode 100644 index 722b29ff83e..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/stage-commit-deploy.gif and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/transfer-queue.png b/15/umbraco-deploy/deployment-workflow/images/transfer-queue.png deleted file mode 100644 index a1430de1864..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/transfer-queue.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/images/tree-export-modal.png b/15/umbraco-deploy/deployment-workflow/images/tree-export-modal.png new file mode 100644 index 00000000000..b286d8372b4 Binary files /dev/null and b/15/umbraco-deploy/deployment-workflow/images/tree-export-modal.png differ diff --git a/15/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png b/15/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png deleted file mode 100644 index e1186bbc234..00000000000 Binary files a/15/umbraco-deploy/deployment-workflow/images/umbraco-deploy-config.png and /dev/null differ diff --git a/15/umbraco-deploy/deployment-workflow/import-export.md b/15/umbraco-deploy/deployment-workflow/import-export.md index bacc4c334b5..239ccd29987 100644 --- a/15/umbraco-deploy/deployment-workflow/import-export.md +++ b/15/umbraco-deploy/deployment-workflow/import-export.md @@ -32,17 +32,21 @@ When exporting, you can choose to include associated media files. Bear in mind t If your account has access to the Settings section, you can also choose to include the schema information and related files as well. -![Export dialog](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog.png) +![Tree export](images/tree-export-modal.png) + +When exporting an environment, you can include _all_ schema, regardless of whether any content uses it. + +![Environment export](images/environment-export-modal.png) Umbraco Deploy will then serialize all the selected items to individual files, archive them into a zip file and make that available for download. You can download the file using the _Download_ button. After the download, you should also delete the archive file from the server. You can do this immediately via the _Delete_ button available in the dialog. -![Export dialog complete](../../../10/umbraco-deploy/deployment-workflow/images/export-dialog-complete.png) +![Export complete](images/export-complete.png) If you miss doing this, you can also clean up archive files from the Umbraco Deploy dashboard in the _Settings_ section. -![Delete exports](../../../10/umbraco-deploy/deployment-workflow/images/delete-exports.png) +![Delete exports](images/delete-exports.png) {% hint style="info" %} The exported archive files are saved to the Umbraco temp folder in the `Deploy\Export` sub-directory. This is a temporary (non-persistent) location, local to the backoffice server and therefore shouldn't be used for long-term storage of exports. You can also only download the file from the export dialog in the backoffice. @@ -52,7 +56,7 @@ The exported archive files are saved to the Umbraco temp folder in the `Deploy\E Having previously exported content and schema to a zip file, you can import this into a new environment. -![Import dialog](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog.png) +![Import (step 1)](images/import-modal.png) You can upload the file via the browser. @@ -63,13 +67,13 @@ Deploy does not touch the default maximum upload size, but you can [configure th On Umbraco Cloud, the upload size limit is 500 MB. {% endhint %} -![Import dialog step 2](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-2.png) +![Import (step 2)](images/import-modal-2.png) We validate the file before importing. Schema items that content depends on must either be in the upload itself or already exist on the target environment with the same details. If there are any issues that mean the import cannot proceed, it will be reported. You may also be given warnings for review. You can choose to ignore these and proceed if they aren't relevant to the action you are carrying out. The import then proceeds, processing all the items provided in the zip file. -![Import dialog step 3](../../../10/umbraco-deploy/deployment-workflow/images/import-dialog-3.png) +![Import complete](images/import-complete.png) Once complete or on close of the dialog, the imported file will be deleted from the server. If this is missed, perhaps via a closed browser, you can also delete archive files from the Umbraco Deploy dashboard in the _Settings_ section. diff --git a/15/umbraco-deploy/deployment-workflow/import-on-startup.md b/15/umbraco-deploy/deployment-workflow/import-on-startup.md new file mode 100644 index 00000000000..062e9d54032 --- /dev/null +++ b/15/umbraco-deploy/deployment-workflow/import-on-startup.md @@ -0,0 +1,69 @@ +--- +meta.Title: Import on startup +description: How to import content and schema on startup and implement your own `IArtifactImportOnStartupProvider` +--- + +# Import on startup + +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](../getting-started/deploy-settings.md#import-on-startup). + +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: + +```csharp +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(); + + private sealed class PhysicalDirectoryArtifactImportOnStartupProvider : IArtifactImportOnStartupProvider + { + private readonly IArtifactImportExportService _artifactImportExportService; + private readonly ILogger _logger; + private readonly string _artifactsPath; + + public PhysicalDirectoryArtifactImportOnStartupProvider(IArtifactImportExportService artifactImportExportService, ILogger logger, IHostEnvironment hostEnvironment) + { + _artifactImportExportService = artifactImportExportService; + _logger = logger; + _artifactsPath = hostEnvironment.MapPathContentRoot("~/umbraco/Deploy/ImportOnStartup"); + } + + public Task CanImportAsync(CancellationToken cancellationToken = default) + => Task.FromResult(Directory.Exists(_artifactsPath)); + + public async Task> ImportAsync(CancellationToken cancellationToken = default) + { + _logger.LogInformation("Importing Umbraco content and/or schema import at startup from directory {FilePath}.", _artifactsPath); + + Attempt 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); + + return attempt; + } + + public Task OnImportCompletedAsync() + { + Directory.Delete(_artifactsPath, true); + + return Task.CompletedTask; + } + } +} +``` \ No newline at end of file diff --git a/15/umbraco-deploy/getting-started/deploy-settings.md b/15/umbraco-deploy/getting-started/deploy-settings.md index ac79c87b44b..03569d85c8c 100644 --- a/15/umbraco-deploy/getting-started/deploy-settings.md +++ b/15/umbraco-deploy/getting-started/deploy-settings.md @@ -33,53 +33,63 @@ For illustration purposes, the following structure represents the full set of op ... "Umbraco": { "Deploy": { - "Settings": { - "ApiKey": "", - "ApiSecret": "", - "Edition": "Default", - "ExcludedEntityTypes": [], - "RelationTypes" : [], - "ValueConnectors": [], - "SessionTimeout": "0.0:20:00", - "SourceDeployTimeout": "0.0:20:00", - "DatabaseCommandTimeout": "0.0:20:00", - "EnableSignatureCacheReads": true, - "HttpClientTimeout": "0.0:20:00", - "DiskOperationsTimeout": "0.0:05:00", - "SourceDeployBatchSize": null, - "PackageBatchSize": null, - "MaxRequestLength": null, - "UseDatabaseBackedTransferQueue": true, - "IgnoreBrokenDependenciesBehavior": "Restore", - "AcceptInvalidCertificates": false, - "TransferFormsAsContent": true, - "TransferDictionaryAsContent": false, - "IgnoreMissingLanguagesForDictionaryItems": false, - "SetEmptyDictionaryItemsOnTransfer": true, - "AllowMembersDeploymentOperations": "None", - "TransferMemberGroupsAsContent": false, - "ExportMemberGroups": true, - "ReloadMemoryCacheFollowingDiskReadOperation": false, - "AllowDomainsDeploymentOperations": "None", - "AllowWebhooksDeploymentOperations": "None", - "TrashedContentDeploymentOperations": "Import", - "PreferLocalDbConnectionString": false, - "MediaFileChecksumCalculationMethod": "PartialFileContents", - "NumberOfSignaturesToUseAllRelationCache": 100, - "ContinueOnMediaFilePathTooLongException": false, - "SuppressCacheRefresherNotifications": false, - "ResolveUserInTargetEnvironment": false, - "Suspensions": { - "DiskRead": "All", - "PartialRestore": "All", - "Restore": "All", - "Deploy": "All", - "Import": "All", - "Export": "All" - }, - "HideConfigurationDetails": false, - "HideVersionDetails": false - } + "Settings": { + "ApiKey": "", + "ApiSecret": "", + "Edition": "Default", + "ExcludedEntityTypes": [], + "RelationTypes" : [], + "ValueConnectors": [], + "SessionTimeout": "0.0:20:00", + "SourceDeployTimeout": "0.0:20:00", + "DatabaseCommandTimeout": "0.0:20:00", + "EnableSignatureCacheReads": true, + "HttpClientTimeout": "0.0:20:00", + "DiskOperationsTimeout": "0.0:05:00", + "SourceDeployBatchSize": null, + "PackageBatchSize": null, + "MaxRequestLength": null, + "UseDatabaseBackedTransferQueue": true, + "IgnoreBrokenDependenciesBehavior": "Restore", + "AcceptInvalidCertificates": false, + "TransferFormsAsContent": true, + "TransferDictionaryAsContent": false, + "IgnoreMissingLanguagesForDictionaryItems": false, + "SetEmptyDictionaryItemsOnTransfer": true, + "AllowMembersDeploymentOperations": "None", + "TransferMemberGroupsAsContent": false, + "ExportMemberGroups": true, + "ReloadMemoryCacheFollowingDiskReadOperation": false, + "AllowDomainsDeploymentOperations": "None", + "AllowWebhooksDeploymentOperations": "None", + "TrashedContentDeploymentOperations": "Import", + "PreferLocalDbConnectionString": false, + "MediaFileChecksumCalculationMethod": "PartialFileContents", + "NumberOfSignaturesToUseAllRelationCache": 100, + "ContinueOnMediaFilePathTooLongException": false, + "SuppressCacheRefresherNotifications": false, + "ResolveUserInTargetEnvironment": false, + "Suspensions": { + "DiskRead": "All", + "PartialRestore": "All", + "Restore": "All", + "Deploy": "All", + "Import": "All", + "Export": "All" + }, + "HideConfigurationDetails": false, + "HideVersionDetails": false, + "ValidateDependenciesOnImport": true + }, + "ImportOnStartup": { + "Enabled": true, + "Files": ["~/umbraco/Deploy/import-on-startup.zip"], + "FileAction": "Delete", + "WarningsAsErrors": false, + "EntityTypes": [], + "Cultures": [], + "Username": null + } } } } @@ -87,7 +97,7 @@ For illustration purposes, the following structure represents the full set of op Some configuration is applied via code rather than application settings. Where this is the case is also discussed in the sections to follow. -## Configuration Via Application Settings +## Configuration via application settings ### ApiKey or ApiSecret @@ -117,9 +127,9 @@ This setting allows you to exclude a certain type of entity from being deployed. This setting allows you to manage how relations are deployed between environments. You will need to specify an alias and a mode for each relation type. The mode can be either: -* `Exclude` - This causes the relation to be excluded and not transferred on deployments. -* `Weak` - This causes the relation to be deployed if both content items are found on the target environment. -* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency. +* `Exclude` - This causes the relation to be excluded and not transferred on deployments +* `Weak` - This causes the relation to be deployed if both content items are found on the target environment +* `Strong` - This requires the content item that is related is set as a dependency, so if anything is added as a relation it would also add it as a dependency ```json "RelationTypes": { @@ -177,8 +187,8 @@ An error message of "The remote API has returned a response indicating a platfor If encountering this issue, there are two batch settings that can be applied with integer values (for example 500). This will cause Deploy to transfer items in batches, up to a maximum size. This will allow each individual batch to complete within the time available. The higher the value, the bigger the batches. -* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images). -* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations. +* `SourceDeployBatchSize` - applies a batch setting for the transfer of multiple selected items to an upstream environment (such as a media folder with many images) +* `PackageBatchSize` - applies a batch setting to the processing of a Deploy "package", which contains all the items selected for a Deploy operation, plus all the determined dependencies and relations ### MaxRequestLength @@ -264,14 +274,14 @@ To configure the behavior you prefer, amend this value to either `None`, `Transf For example, using the following settings, you will have an installation that ignores broken dependencies when restoring from an upstream environment. It will however still prevent deployment and report any dependency issues when attempting a transfer to an upstream environment. ```json - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependenciesBehavior": "Restore", ``` When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting existed that took a value of `true` or `false`. To achieve the same result as the example above, the following configuration was required: ```json - "IgnoreBrokenDependencies": true, - "IgnoreBrokenDependenciesBehavior": "Restore", +"IgnoreBrokenDependencies": true, +"IgnoreBrokenDependenciesBehavior": "Restore", ``` ### Memory cache reload @@ -279,7 +289,7 @@ When configuring for Deploy 9, an additional `IgnoreBrokenDependencies` setting Some customers have reported intermittent issues related to Umbraco's memory cache following deployments, which are resolved by a manual reload of the cache via the _Settings > Published Status > Caches_ dashboard. If you are running into such issues and are able to accommodate a cache clear after deployment, this workaround can be automated via the following setting: ```json - "ReloadMemoryCacheFollowingDiskReadOperation": true, +"ReloadMemoryCacheFollowingDiskReadOperation": true, ``` By upgrading to the most recent available version of the CMS major you are running, you'll be able to benefit from the latest bug fixes and optimizations in this area. That should be your first option if encountering cache related issues. Failing that, or if a CMS upgrade is not an option, then this workaround can be considered. @@ -289,7 +299,7 @@ By upgrading to the most recent available version of the CMS major you are runni Culture and hostname settings, defined per content item for culture invariant content, are not deployed between environments by default. They can be opted into via configuration. ```json - "AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", +"AllowDomainsDeploymentOperations": "None|Culture|AbsolutePath|Hostname|All", ``` To enable this, set the configuration value as appropriate for the types of domains you want to allow: @@ -305,7 +315,7 @@ Combinations of settings can be applied, e.g. `Hostname,AbsolutePath`. When deploying content items, public access rules based on member groups are transferred. You can amend this behavior using this setting. ```json - "AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", +"AllowPublicAccessDeploymentOperations": "None|AddOrUpdate|Remove|All", ``` * `None` - no public access rules will be transferred @@ -320,13 +330,13 @@ When deploying content items, public access rules based on member groups are tra Webhooks may be considered environment specific or schema information that you would like to synchronize between environments. As such, by default, Umbraco Deploy does not include webhooks in schema deployment operations. ```json - "AllowWebhooksDeploymentOperations": "None|All", +"AllowWebhooksDeploymentOperations": "None|All", ``` If you would like you include them you can adjust this setting: -* `None` - webhooks are not deployed and are expected to be managed independently in each environment. -* `All` - webhooks included in schema deployments. +* `None` - webhooks are not deployed and are expected to be managed independently in each environment +* `All` - webhooks included in schema deployments ## Deployment of trashed content @@ -401,11 +411,11 @@ Deploy operations suspend scheduled publishing, Examine indexing, document cache Each setting within this section represents a Deploy operation. For each, the suspensions that are carried out can be amended with one or more of following values: -* `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -* `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All`, -* `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All`, -* `Deploy` - `None, ScheduledPublishing, All`, -* `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All`, +* `DiskRead` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `PartialRestore` - `None, ScheduledPublishing, Examine, DocumentCache, All` +* `Restore` - `None, ScheduledPublishing, Examine, DocumentCache, Signatures, All` +* `Deploy` - `None, ScheduledPublishing, All` +* `Import` - `None, ScheduledPublishing, Examine, DocumentCache, All` * `Export` - `None, ScheduledPublishing, All` The default value for all suspension settings is `All`. @@ -413,15 +423,15 @@ The default value for all suspension settings is `All`. So for example if you wanted to remove Examine indexing suspension and resumption during partial restore operations, you could set the following: ```json - "Suspensions": { - "PartialRestore": "ScheduledPublishing, DocumentCache" - } +"Suspensions": { + "PartialRestore": "ScheduledPublishing, DocumentCache" +}, ``` It's also possible to set the values for all operations by setting `Suspensions` to a value instead of an object, for example: ```json - "Suspensions": "ScheduledPublishing, DocumentCache, Signatures" +"Suspensions": "ScheduledPublishing, DocumentCache, Signatures", ``` If you prefer configuration in code, operators overloads on the settings class make this process straightforward, as shown in the following example: @@ -430,7 +440,7 @@ If you prefer configuration in code, operators overloads on the settings class m using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Core.Configuration.DeployConfiguration; -internal class DeploySuspensionComposer : IComposer +internal sealed class DeploySuspensionsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.Services.Configure(options => @@ -455,7 +465,28 @@ If set to `true` the configuration details shown on the setting's dashboard will If set to `true` the version details shown on the setting's dashboard will be hidden. -## Configuration Via Code +### ValidateDependenciesOnImport {#validate-dependencies-on-import} + +A default notification handler for the `ValidateArtifactImportNotification` is registered by Deploy that: + +* Adds warnings for dependencies that must match exactly, and are both not in the import and not with matching checksums in the target environment +* Adds warnings for all remaining content dependencies and errors for all schema dependencies that don't exist in the import + +To avoid this handler from being registered, you can set this setting to `false`. + +### Import on startup {#import-on-startup} + +Deploy can [import content and/or schema previously exported from another Umbraco installation on start-up](../deployment-workflow/import-on-startup.md). This can be customized by changing the `Umbraco:Deploy:ImportOnStartup` settings (note that this is directly below the `Deploy` section and not nested below `Settings`): + +* `Enabled` - this feature is enabled by default, but can be disabled (e.g. to prevent importing on specific environments) +* `Files` - the files that are imported on start-up (relative to the project content root, defaults to `umbraco\Deploy\import-on-startup.zip`), which are checked individually (files that do not exist are skipped and a warning will be logged) +* `FileAction` - `None` will leave the file on disk (and potentially import it again on the next start-up), `Archive` renames the file to end with `.imported` and `Delete` (the default) will remove the file on successful import +* `WarningsAsErrors` - indicates whether warnings should be considered as errors +* `EntityTypes` - sets the entity types to import, note that the default import validation will return warnings for entity types in the ZIP archive that are skipped due to this setting +* `Cultures` - the ISO codes of content variants that should be imported +* `Username` - the email address of the user that performs the import (used for auditing), uses the 'super-user' administrator account if not set + +## Configuration via code ### Webhook Events @@ -465,7 +496,7 @@ Umbraco Deploy can optionally register events that you can use with Umbraco webh using Umbraco.Cms.Core.Composing; using Umbraco.Deploy.Infrastructure.Extensions; -public class RegisterDeployWebhooksComposer : IComposer +internal sealed class DeployWebhookEventsComposer : IComposer { public void Compose(IUmbracoBuilder builder) => builder.WebhookEvents().AddDeploy(deployBuilder => deployBuilder.AddTask()); diff --git a/umbraco-cloud/deployment/README.md b/umbraco-cloud/deployment/README.md index f1ca14aa60b..0b2371f7d98 100644 --- a/umbraco-cloud/deployment/README.md +++ b/umbraco-cloud/deployment/README.md @@ -12,7 +12,7 @@ Umbraco Cloud uses a deployment model that relies on Git, Kudu, and Umbraco Depl If your project contains a Staging environment, deployments will be made from Development to Staging and then from Staging to Live. {% endhint %} -![Left to right model]() +![Left to right model](images/left-to-right.png) ## Deployment Approach @@ -75,7 +75,7 @@ From the Umbraco Cloud Portal, you can manually restart your environments. You might notice a file in your cloud project called `umbraco-cloud.json`. This file tells the deployment engine where to deploy to, it knows which environment you’re currently on (for example, local or staging) and chooses the next environment in the list to deploy to. -![clone dialog](<../../.gitbook/assets/Umbraco-cloud-json (1) (1) (1) (2).png>) +![Clone dialog](images/Umbraco-cloud-json.png) {% hint style="info" %} You are free to update the `name` attribute in the `umbraco-cloud.json` file to make it clear in the **Workspaces** dashboard where you’re deploying to. So if you want to name the _Development_ environment to “Everything goes here” then you can do that and the name will be displayed on the dashboard when deploying to that environment. diff --git a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1) (1).png b/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1) (1).png deleted file mode 100644 index 87783a4da0f..00000000000 Binary files a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1).png b/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1).png deleted file mode 100644 index 87783a4da0f..00000000000 Binary files a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1).png b/umbraco-cloud/deployment/images/Umbraco-cloud-json (1).png deleted file mode 100644 index 87783a4da0f..00000000000 Binary files a/umbraco-cloud/deployment/images/Umbraco-cloud-json (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (3).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (3).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1) (3).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (1).png b/umbraco-cloud/deployment/images/left-to-right (1) (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1) (2).png b/umbraco-cloud/deployment/images/left-to-right (1) (2).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/left-to-right (1).png b/umbraco-cloud/deployment/images/left-to-right (1).png deleted file mode 100644 index ffe8d03dd6c..00000000000 Binary files a/umbraco-cloud/deployment/images/left-to-right (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (2).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (2).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1) (2).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1) (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1) (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1) (1).png and /dev/null differ diff --git a/umbraco-cloud/deployment/images/schema-mismatch (1).png b/umbraco-cloud/deployment/images/schema-mismatch (1).png deleted file mode 100644 index 3ca384cb6cc..00000000000 Binary files a/umbraco-cloud/deployment/images/schema-mismatch (1).png and /dev/null differ