diff --git a/docs/recipe/craftcms.md b/docs/recipe/craftcms.md
index 9ba91c749..5142b9dfe 100644
--- a/docs/recipe/craftcms.md
+++ b/docs/recipe/craftcms.md
@@ -99,10 +99,18 @@ Overrides [writable_dirs](/docs/recipe/deploy/writable.md#writable_dirs) from `r
## Tasks
+### craft:gc
+[Source](https://github.com/deployphp/deployer/blob/master/recipe/craftcms.php#L120)
+
+Runs garbage collection.
+
+
+
+
### deploy
-[Source](https://github.com/deployphp/deployer/blob/master/recipe/craftcms.php#L64)
+[Source](https://github.com/deployphp/deployer/blob/master/recipe/craftcms.php#L127)
-deploy.
+Deploys Craft CMS.
diff --git a/recipe/craftcms.php b/recipe/craftcms.php
index 96c5e7596..4a6530e8c 100644
--- a/recipe/craftcms.php
+++ b/recipe/craftcms.php
@@ -22,14 +22,16 @@
'web/cpresources',
]);
-
/**
* Run a craft command.
*
* Supported options:
+ * - 'showOutput': Show the output of the command if given.
+ * - 'interactive': Don't append the --interactive=0 flag to the command.
*
* @param string $command The craft command (with cli options if any).
* @param array $options The options that define the behaviour of the command.
+ *
* @return callable A function that can be used as a task.
*/
function craft($command, $options = [])
@@ -39,34 +41,96 @@ function craft($command, $options = [])
throw new \Exception('Your .env file is empty! Cannot proceed.');
}
- try {
- $output = run("cd {{release_path}} && {{bin/php}} craft $command");
+ // By default we don't want any command to be interactive
+ if(! in_array('interactive', $options)) {
+ $command .= ' --interactive=0';
+ }
+
+ $output = run("{{bin/php}} {{release_path}}/craft $command");
- if (in_array('showOutput', $options)) {
- writeln("$output");
- }
- } catch (\Throwable $e) {
- writeln("{$e->getMessage()}");
+ if (in_array('showOutput', $options)) {
+ writeln("$output");
}
};
}
-desc('Execute craft migrate/all');
-task('craft:migrate/all', craft('migrate/all --interactive=0'))->once();
+/*
+ * Migrations
+ */
+
+desc('Runs all pending Craft, plugin, and content migrations');
+task('craft:migrate/all', craft('migrate/all'));
+
+desc('Upgrades Craft by applying new migrations');
+task('craft:migrate/up', craft('migrate/up'));
+
+/*
+ * Generate keys
+ */
+
+desc('Generates a new application ID and saves it in the `.env` file');
+task('craft:setup/app-id', craft('setup/app-id'));
+
+desc('Generates a new security key and saves it in the `.env` file');
+task('craft:setup/security-key', craft('setup/security-key'));
+
+/*
+ * Project config
+ */
+
+desc('Applies project config file changes.');
+task('craft:project-config/apply', craft('project-config/apply'));
+
+/*
+ * Caches
+ */
-desc('Execute craft project-config/apply');
-task('craft:project-config/apply', craft('project-config/apply --interactive=0'))->once();
+desc('Flushes all caches registered in the system');
+task('craft:cache/flush-all', craft('cache/flush-all'));
-desc('Execute craft clear-caches/all');
-task('craft:clear-caches/all', craft('clear-caches/all --interactive=0'))->once();
+desc('Clear all caches');
+task('craft:clear-caches/all', craft('clear-caches/all'));
-desc('deploy');
+desc('Clear all Asset caches');
+task('craft:clear-caches/asset', craft('clear-caches/asset'));
+
+desc('Clear all Asset indexing data');
+task('craft:clear-caches/asset-indexing-data', craft('clear-caches/asset-indexing-data'));
+
+desc('Clear all compiled classes');
+task('craft:clear-caches/compiled-classes', craft('clear-caches/compiled-classes'));
+
+desc('Clear all compiled templates');
+task('craft:clear-caches/compiled-templates', craft('clear-caches/compiled-templates'));
+
+desc('Clear all control panel resources');
+task('craft:clear-caches/cp-resources', craft('clear-caches/cp-resources'));
+
+desc('Clear all data caches');
+task('craft:clear-caches/data', craft('clear-caches/data'));
+
+desc('Clear all temp files');
+task('craft:clear-caches/temp-files', craft('clear-caches/temp-files'));
+
+/*
+ * Garbage collection
+ */
+
+desc('Runs garbage collection');
+task('craft:gc', craft('gc --delete-all-trashed=1 --silent-exit-on-exception=1', ['showOutput']));
+
+/*
+ * Main deploy
+ */
+
+desc('Deploys Craft CMS');
task('deploy', [
'deploy:prepare',
'deploy:vendors',
- 'craft:clear-caches/all',
+ 'craft:clear-caches/compiled-classes',
'craft:migrate/all',
'craft:project-config/apply',
+ 'craft:gc',
+ 'craft:clear-caches/all',
'deploy:publish',
]);
-