{"id":14968699,"url":"https://github.com/district09/robo-digipolis-drupal8","last_synced_at":"2025-06-20T06:04:51.757Z","repository":{"id":54835309,"uuid":"83670713","full_name":"district09/robo-digipolis-drupal8","owner":"district09","description":"The Drupal8 task runner implementation. Extends robo-digipolis-helpers and implements the abstract functions to make the entire flow Drupal 8 specific.","archived":false,"fork":false,"pushed_at":"2025-04-16T10:11:05.000Z","size":241,"stargazers_count":1,"open_issues_count":5,"forks_count":0,"subscribers_count":8,"default_branch":"develop","last_synced_at":"2025-06-17T22:03:36.380Z","etag":null,"topics":["d09check22","drupal8","robo","robo-digipolis-drupal8","robo-tasks","web"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/district09.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-03-02T11:32:22.000Z","updated_at":"2025-04-16T10:10:41.000Z","dependencies_parsed_at":"2024-03-27T15:54:05.467Z","dependency_job_id":"6cffcf63-ea57-4842-ac4c-80df1d4cdd1b","html_url":"https://github.com/district09/robo-digipolis-drupal8","commit_stats":{"total_commits":201,"total_committers":6,"mean_commits":33.5,"dds":"0.18905472636815923","last_synced_commit":"5a6d0c6d970ec92953168b215d488988a1a4f661"},"previous_names":[],"tags_count":86,"template":false,"template_full_name":null,"purl":"pkg:github/district09/robo-digipolis-drupal8","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/district09%2Frobo-digipolis-drupal8","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/district09%2Frobo-digipolis-drupal8/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/district09%2Frobo-digipolis-drupal8/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/district09%2Frobo-digipolis-drupal8/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/district09","download_url":"https://codeload.github.com/district09/robo-digipolis-drupal8/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/district09%2Frobo-digipolis-drupal8/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260891087,"owners_count":23077906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["d09check22","drupal8","robo","robo-digipolis-drupal8","robo-tasks","web"],"created_at":"2024-09-24T13:40:25.394Z","updated_at":"2025-06-20T06:04:46.743Z","avatar_url":"https://github.com/district09.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Robo Digipolis Drupal8\n\n[![Latest Stable Version](https://poser.pugx.org/digipolisgent/robo-digipolis-drupal8/v/stable)](https://packagist.org/packages/digipolisgent/robo-digipolis-drupal8)\n[![Latest Unstable Version](https://poser.pugx.org/digipolisgent/robo-digipolis-drupal8/v/unstable)](https://packagist.org/packages/digipolisgent/robo-digipolis-drupal8)\n[![Total Downloads](https://poser.pugx.org/digipolisgent/robo-digipolis-drupal8/downloads)](https://packagist.org/packages/digipolisgent/robo-digipolis-drupal8)\n[![License](https://poser.pugx.org/digipolisgent/robo-digipolis-drupal8/license)](https://packagist.org/packages/digipolisgent/robo-digipolis-drupal8)\n\n[![Build Status](https://travis-ci.org/digipolisgent/robo-digipolis-drupal8.svg?branch=develop)](https://travis-ci.org/digipolisgent/robo-digipolis-drupal8)\n[![Maintainability](https://api.codeclimate.com/v1/badges/f3b213f3d449af134290/maintainability)](https://codeclimate.com/github/digipolisgent/robo-digipolis-drupal8/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/f3b213f3d449af134290/test_coverage)](https://codeclimate.com/github/digipolisgent/robo-digipolis-drupal8/test_coverage)\n[![PHP 7 ready](https://php7ready.timesplinter.ch/digipolisgent/robo-digipolis-drupal8/develop/badge.svg)](https://travis-ci.org/digipolisgent/robo-digipolis-drupal8)\n\nUsed by digipolis, serving as an example.\n\nThis package contains a RoboFileBase class that can be used in your own\nRoboFile. All commands can be overwritten by overwriting the parent method.\n\n## Example\n\n```php\n\u003c?php\n\nuse DigipolisGent\\Robo\\Drupal8\\RoboFileBase;\n\nclass RoboFile extends RoboFileBase\n{\n    use \\Robo\\Task\\Base\\loadTasks;\n\n    /**\n     * @inheritdoc\n     */\n    public function digipolisDeployDrupal8(\n        array $arguments,\n        $opts = [\n            'app' =\u003e 'default',\n            'site-name' =\u003e 'Drupal',\n            'profile' =\u003e 'standard',\n            'force-install' =\u003e false,\n            'config-import' =\u003e false,\n            'existing-config' =\u003e false,\n            'worker' =\u003e null,\n        ]\n    ) {\n        $collection = parent::digipolisDeployDrupal8($arguments, $opts);\n        $collection-\u003etaskExec('/usr/bin/custom-post-release-script.sh');\n        return $collection;\n    }\n}\n\n```\n\n## Available commands\n\nFollowing the example above, these commands will be available:\n\n```bash\ndigipolis:backup-drupal8           Create a backup of files\n(sites/default/files) and database.\ndigipolis:build-drupal8            Build a Drupal 8 site and package it.\ndigipolis:clean-dir                Partially clean directories.\ndigipolis:clear-op-cache           Command digipolis:database-backup.\ndigipolis:database-backup          Command digipolis:database-backup.\ndigipolis:database-restore         Command digipolis:database-restore.\ndigipolis:deploy-drupal8           Build a Drupal 8 site and push it to the\nservers.\ndigipolis:download-backup-drupal8  Download a backup of files\n(sites/default/files) and database.\ndigipolis:init-drupal8-remote      Install or update a drupal 8 remote site.\ndigipolis:install-drupal8          Install the D8 site in the current folder.\ndigipolis:package-project          Package a directory into an archive.\ndigipolis:push-package             Command digipolis:push-package.\ndigipolis:restore-backup-drupal8   Restore a backup of files\n(sites/default/files) and database.\ndigipolis:sync-drupal8             Sync the database and files between two\nDrupal 8 sites.\ndigipolis:update-drupal8           Executes D8 database updates of the D8 site\nin the current folder.\ndigipolis:upload-backup-drupal8    Upload a backup of files\n(sites/default/files) and database to a server.\n```\n\n## Multisites / site aliases\n\nDrupal 8 multisites are supported. There are two ways to implement them:\n\n1. Use Drupal's `sites.php`\n\n  This script can parse the site aliases from sites.php, where the keys of the\n  `$sites` array are the urls and the values the folders (under the `sites/`\n  folder in the web root.\n\n2. Use `properties.yml`:\n\n  You can define you site aliases in `properties.yml` under the `remote` key in\n  the same manner: keys are the urls, values the folders. For example:\n\n```\nremote:\n  aliases:\n    example.com: default\n    alias1.example.com: alias1\n    alias2.example.com: alias2\n```\n\nYou can read more about the `properties.yml` file in the [Readme of the helpers\npackage](https://github.com/digipolisgent/robo-digipolis-helpers).\n\n### Multisite settings files\n\nIf you want to symlink the settings files of each of your multisite\ninstallations (which is recommended, since the alternative would be to have them\nin your repository), you'll have to add those symlinks to the `properties.yml`.\nSame goes for the files directories.\n\nUsing the example above, you'll have to add this to your properties.yml:\n\n```\nremote:\n  symlinks:\n    # Settings file symlinks.\n    - '${remote.configdir}/alias1/settings.php:${remote.webdir}/sites/alias1/settings.php'\n    - '${remote.configdir}/alias2/settings.php:${remote.webdir}/sites/alias2/settings.php'\n    # Files directories symlinks.\n    - '${remote.filesdir}/alias1/public:${remote.webdir}/sites/alias1/files'\n    - '${remote.filesdir}/alias2/public:${remote.webdir}/sites/alias2/files'\n```\n\n### Rollbacks on multisites\n\nSince backups are made at the beginning of the multisite deploy, every site of\nthe multisite is rolled back whenever there is an error in the deploy process,\neven when the error happens during the deploy of the first alias. So in the\nexample above, at the beginning of the deploy, a database backup is made for\n`default`, `alias1` and `alias2`. If the process fails during the deploy of\n`default`, the rollback process will restore the database backups of `default`,\n`alias1` and `alias2`. Some goes for when it fails during the deploy of\n`alias2`. Deploys are done in the order the aliases are defined.\n\n### Adding a new site to an existing setup\n\nWhen a new site is added to an existing installation, make sure all settings\nfiles and folders are in place (just like you would with a normal first time\ninstallation). The site that was newly added will go through the installation\nprocess, the sites that already existed will be left alone. This means you can't\nupdate one subsite, while adding another at the same time. You'll have to do\nthat in two separate deploys.\n\n## Installing from an existing database\n\nThis goes for both 'normal' and multisite installations. If for some reason you\nwould like to create a new site starting from an existing (meaning non-emtpy)\ndatabase (not recommended), you can. Just fill your database with the data you\nneed and trigger the deploy. The deploy will detect there is no site yet (since\nthere will be no code on your server) and trigger the install script. Once your\ncode is uploaded to your server, the install script will be able to connect to\nthe database. It will then detect there's allready data in it, and skip the\ninstall process. This way your code is uploaded to your server and it will use\nthe existing database. If your database is behind on you code (meaning you'll\nneed to trigger database updates), you'll have to execute a second deploy.\n\nThis is also the reason, that when adding a new site to your multisite\ninstallation, the existing ones will be left alone. We would have had to\noverwrite the entire base package (robo-digipolis-helpers) to detect which site\nof the multisite is a new one and which one is an existing one that might need\nan update. So instead, when the deploy script detects that at least one site of\nthe multisite installation needs an install from scratch, the install script is\ntriggered for all sites of the multisite installation. If then the install\nscript runs for one of the existing sites, it'll detect the existing data in its\ndatabase and leave it at that. For the newly added site there'll be no data\n(unless you manually entered it in the database) and it will trigger the\ninstallation for that specific site.\n\n## General gotchas\n\n- We assume the value of `$config_directories['sync']` is relative to the web\nroot. We prepend it with the path to the web root ourselves.\n- If multiple aliases point to the same folder, we only use the first alias in\nthe array. Keep this in mind for e.g. your sitemap.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistrict09%2Frobo-digipolis-drupal8","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdistrict09%2Frobo-digipolis-drupal8","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdistrict09%2Frobo-digipolis-drupal8/lists"}