diff --git a/.github/workflows/moodle-ci.yml b/.github/workflows/moodle-ci.yml
index 8adbd0f63f54d6f99b969f458479a9fcc441eab4..4e2026f20f743f22c6ad1df4f0248483b702855c 100644
--- a/.github/workflows/moodle-ci.yml
+++ b/.github/workflows/moodle-ci.yml
@@ -8,8 +8,8 @@ jobs:
 
     strategy:
       matrix:
-        php: ['8.0']
-        moodle-branch: ['MOODLE_401_STABLE']
+        php: ['8.1']
+        moodle-branch: ['MOODLE_402_STABLE']
         database: ['pgsql']
 
     steps:
@@ -107,8 +107,8 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        php: ['8.0']
-        moodle-branch: ['MOODLE_311_STABLE', 'MOODLE_400_STABLE', 'MOODLE_401_STABLE']
+        php: ['8.0', '8.1']
+        moodle-branch: ['MOODLE_401_STABLE', 'MOODLE_402_STABLE']
         database: ['mariadb', 'pgsql']
         include:
           - php: '7.4'
@@ -117,6 +117,18 @@ jobs:
           - php: '7.4'
             moodle-branch: 'MOODLE_39_STABLE'
             database: 'pgsql'
+          - php: '8.0'
+            moodle-branch: 'MOODLE_311_STABLE'
+            database: 'mariadb'
+          - php: '8.0'
+            moodle-branch: 'MOODLE_311_STABLE'
+            database: 'pgsql'
+          - php: '8.0'
+            moodle-branch: 'MOODLE_400_STABLE'
+            database: 'mariadb'
+          - php: '8.0'
+            moodle-branch: 'MOODLE_400_STABLE'
+            database: 'pgsql'
 
     steps:
       - name: Start MariaDB
diff --git a/.github/workflows/moodle-release.yml b/.github/workflows/moodle-release.yml
index 8d1c5babfe61a6cfb1f67ef4d3523c1b458a1b09..766ef21d6089ebdd987bf37fd00799a8871aeb9b 100644
--- a/.github/workflows/moodle-release.yml
+++ b/.github/workflows/moodle-release.yml
@@ -44,7 +44,7 @@ jobs:
                                          --data-urlencode "altdownloadurl=${ZIPURL}" \
                                          --data-urlencode "releasenotes=${BODY}" \
                                          --data-urlencode "releasenotesformat=4")
-          echo "::set-output name=response::${RESPONSE}"
+          echo "response=${RESPONSE}" >> $GITHUB_OUTPUT
       - name: Evaluate the response
         id: evaluate-response
         env:
diff --git a/classes/local/backup/backup_lifecycle_workflow.php b/classes/local/backup/backup_lifecycle_workflow.php
index 743a05618d51d84ecc38b53389118e3945e67281..2e768894b9537c20284f0905957778ab012f46e6 100644
--- a/classes/local/backup/backup_lifecycle_workflow.php
+++ b/classes/local/backup/backup_lifecycle_workflow.php
@@ -107,7 +107,9 @@ class backup_lifecycle_workflow {
      */
     private function write_workflow() {
         foreach (get_object_vars($this->workflow) as $prop => $value) {
-            $this->writer->writeAttribute($prop, $value);
+            if (!is_null($value)) {
+                $this->writer->writeAttribute($prop, $value);
+            }
         }
     }
 
@@ -118,13 +120,17 @@ class backup_lifecycle_workflow {
         foreach ($this->trigger as $trigger) {
             $this->writer->startElement("trigger");
             foreach (get_object_vars($trigger) as $prop => $value) {
-                $this->writer->writeAttribute($prop, $value);
+                if (!is_null($value)) {
+                    $this->writer->writeAttribute($prop, $value);
+                }
             }
             $settings = settings_manager::get_settings($trigger->id, settings_type::TRIGGER);
             foreach ($settings as $name => $value) {
                 $this->writer->startElement("setting");
                 $this->writer->writeAttribute('name', $name);
-                $this->writer->writeAttribute('value', $value);
+                if (!is_null($value)) {
+                    $this->writer->writeAttribute('value', $value);
+                }
                 $this->writer->endElement();
             }
             $this->writer->endElement();
@@ -139,13 +145,17 @@ class backup_lifecycle_workflow {
         foreach ($this->steps as $step) {
             $this->writer->startElement("step");
             foreach (get_object_vars($step) as $prop => $value) {
-                $this->writer->writeAttribute($prop, $value);
+                if (!is_null($value)) {
+                    $this->writer->writeAttribute($prop, $value);
+                }
             }
             $settings = settings_manager::get_settings($step->id, settings_type::STEP);
             foreach ($settings as $name => $value) {
                 $this->writer->startElement("setting");
                 $this->writer->writeAttribute('name', $name);
-                $this->writer->writeAttribute('value', $value);
+                if (!is_null($value)) {
+                    $this->writer->writeAttribute('value', $value);
+                }
                 $this->writer->endElement();
             }
             $this->writer->endElement();
diff --git a/version.php b/version.php
index 76fb360051c549dbc4ee32243e263b568f4e9f6e..7fa410aee8c53e31aa6e44cd7b509dd6dccab0fb 100644
--- a/version.php
+++ b/version.php
@@ -25,7 +25,7 @@
 defined('MOODLE_INTERNAL') || die;
 
 $plugin->maturity = MATURITY_BETA;
-$plugin->version  = 2022112400;
+$plugin->version  = 2023050200;
 $plugin->component = 'tool_lifecycle';
 $plugin->requires = 2020061500; // Requires Moodle 3.9+.
-$plugin->release   = 'v4.1-r1';
+$plugin->release   = 'v4.2-r1';