5

I've got CiviCRM installed and working Wirth Drupal 8 using Composer via https://gitlab.com/roundearth/drupal-civicrm-project

What I'm not clear on is how best to update CiviCRM using Composer. Is it as straightforward as runnning something like:

composer require roundearth/civicrm-composer-plugin civicrm/civicrm-drupal-8 civicrm/civicrm-core:5.19.3

I can't find any documentation on updating.

3

I've been updating it using the following:

  • composer require civicrm/civicrm-core
  • composer civicrm
  • cv upgrade:db

That is after making a backup first.

Has worked for my installation.

| improve this answer | |
  • You probably mean "composer update" in the second item, since "civicrm" is not a composer command. I'm not sure this adds anything new compared to the previous answer? – Alan Dixon Dec 4 '19 at 19:35
  • I've been using 'composer civicrm' and it works. I can't for sure tell you what it's doing behind the scenes (more a site builder than a dev/sysadmin), but it's what was provided to me via our outside vendor. I'm sure it's not 100% correct (I recall being told this was going to change), but have never run into any issues. – Corey Brown Dec 4 '19 at 19:43
  • Try "composer help civicrm" and you'll see what it does (it says " Run all the tasks usually run after civicrm/civicrm-core is installed"). It looks like it will do the various non-composer-ish downloads after the composer update. So, yes, that looks like a good method. – Alan Dixon Dec 4 '19 at 19:48
  • That's interesting. One of the (many) problems I often ran into was whatever is supposed to trigger the plugin to do its thing only seemed to fire on new installs or if I deleted folders first. So composer civicrm sounds like it might be useful. – Demerit Dec 4 '19 at 20:54
  • This appeared to work for me (although I ran the database update via the front end). If I have the l10n localization files installed, how can I update those at the same time using composer? – Graham Dec 7 '19 at 20:31
3

My experience with anything composer-ish seems to be:

  1. Struggle with it for a while until the site becomes messed up beyond repair.
  2. Restore from backup and struggle some more until it's messed up again.
  3. Create a brand new install and then copy over the sites/default folder and .htaccess and such.
  4. Replace the database with my backup.
  5. Run the upgrades.
| improve this answer | |
  • 3
    Points for honesty and a useful warning. Composer tends to be too smart for my taste, hiding subtleties to be "simple" to use, but hard to figure out when what you want isn't what it wants. There is a --dry-run flag that should help you try things without breaking it immediately. – Alan Dixon Dec 4 '19 at 19:33
  • I had a literal laugh out lout moment at this. – David Hayes Feb 18 at 20:39
2

In practice it's as simple as doing a composer update for the most part - assuming you're configured "sensibly" - the RoundEarth setup makes (or at least made!) some assumptions re: versioning that are not helpful for upgrading. So here goes:

  1. You should declare both civicrm-core and civicrm-drupal-8 in your composer json file. In the require section you should have something that looks like this:

    "civicrm/civicrm-core": "^5.23",
    "civicrm/civicrm-drupal-8": "^5.23"
    

    Note: When upgrading to a new "minor" release of CiviCRM you should change your version constraints e.g. "^5.24" or to automatically get the latest CiviCRM stable version when you run composer update use "^5" as your version constraint.

  2. You should have the same version against both of these (^5.23 as an example.)

You should install CV to manage database upgrades so that your upgrade process becomes the following commands (for the most part!):

composer update && cv up:db

When using a composer-based workflow you can install CV using composer require civicrm/cv which will place the cv binary in vendor/bin

Note that using the dev-master version of civicrm-drupal-8 has the potential to cause issues as it's developed alongside civicrm-core - you should use the same version number as you use for civicrm-core.

| improve this answer | |
  • 1
    You can set the specific civi version with e.g. "composer require --no-update civicrm-core:^5.19", before running the update. You can also use the ~5 version for civicrm-core and dev-master for civicrm-drupal-8 and then it will update to the latest stable. Note that for 5.19, you need to update the roundearth plugin first (leave it on dev-master). – Alan Dixon Dec 4 '19 at 19:30
  • It's absolutely not recommended to use dev-master of civicrm-drupal-8 you should peg this to the same version as civicrm-core this has already caused issues and may do so again in future! – HomoTechsual Dec 4 '19 at 20:08
  • Okay, thanks, will update my installs. Apropros of nothing, the Drupal composer installation seems to have changed slightly in the last days, but the CiviCRM install still worked! – Alan Dixon Dec 6 '19 at 19:26
  • What does it mean to "declare" civicrm-core and civicrm-drupal-8 in your composer.json file? Can you please provide code examples? – CiviTeacher Mar 27 at 16:52
  • I've added an example. – HomoTechsual Mar 27 at 20:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.