From fdf4040aff83d79ba06869b05a52ee80bb21396b Mon Sep 17 00:00:00 2001
From: Ryan Gonzalez <ryan.gonzalez@collabora.com>
Date: Fri, 26 Aug 2022 09:24:39 -0500
Subject: [PATCH] Preserve trailing newlines during rebase

Bash likes to remove these, which meant the metadata that went inside
the new commit didn't actually match the file it was read from.

https://gitlab.apertis.org/infrastructure/apertis-issues/-/issues/170

Signed-off-by: Ryan Gonzalez <ryan.gonzalez@collabora.com>
---
 generate_pipeline.py                          |  4 +-
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 24 +++++++---
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 24 +++++++---
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 24 +++++++---
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 24 +++++++---
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 24 +++++++---
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 24 +++++++---
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 24 +++++++---
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 24 +++++++---
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 24 +++++++---
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 24 +++++++---
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 24 +++++++---
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 24 +++++++---
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 48 ++++++++++++++-----
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 48 ++++++++++++++-----
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 48 ++++++++++++++-----
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 48 ++++++++++++++-----
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 48 ++++++++++++++-----
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 48 ++++++++++++++-----
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 48 ++++++++++++++-----
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 48 ++++++++++++++-----
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 48 ++++++++++++++-----
 ...h_flatpakrepo.deps_sign_none.approved.yaml | 48 ++++++++++++++-----
 ...latpakrepo.deps_sign_ed25519.approved.yaml | 48 ++++++++++++++-----
 ...ut_flatpakrepo.deps_sign_gpg.approved.yaml | 48 ++++++++++++++-----
 tests/test_build_pipelines.py                 |  4 ++
 26 files changed, 655 insertions(+), 217 deletions(-)

diff --git a/generate_pipeline.py b/generate_pipeline.py
index 7a092d5..b5934d0 100755
--- a/generate_pipeline.py
+++ b/generate_pipeline.py
@@ -79,7 +79,9 @@ for ref in $refs; do
             message=$(ostree show "$prev" \\
                         | grep '^ ' \\
                         | sed 's/^ *//g')
-            metadata=$(ostree cat "$prev" metadata)
+            # Trick to preserve any trailing newlines:
+            # https://unix.stackexchange.com/a/383411/117660
+            IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
             echo 'Applying new changes on top of remote...'
             ostree commit -b "$ref" -m "$message" \\
diff --git a/tests/approved_files/test_approval.test_apps.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_apps.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index b1b05df..392c7f2 100644
--- a/tests/approved_files/test_approval.test_apps.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -406,7 +408,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -487,7 +491,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -568,7 +574,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -649,7 +657,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -730,7 +740,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index a519b33..07a05af 100644
--- a/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -405,7 +407,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -485,7 +489,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -565,7 +571,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -645,7 +653,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -725,7 +735,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index ce01a9f..6c12058 100644
--- a/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -192,7 +192,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -272,7 +274,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -352,7 +356,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -432,7 +438,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -512,7 +520,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -592,7 +602,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_apps.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index dfd2255..e1eca0b 100644
--- a/tests/approved_files/test_approval.test_apps.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -406,7 +408,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -487,7 +491,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -568,7 +574,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -649,7 +657,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -730,7 +740,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index 34d70f3..a35c57d 100644
--- a/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -405,7 +407,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -485,7 +489,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -565,7 +571,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -645,7 +653,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -725,7 +735,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index 933414e..7f60bfd 100644
--- a/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -192,7 +192,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -272,7 +274,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -352,7 +356,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -432,7 +438,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -512,7 +520,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -592,7 +602,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_apps.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index a1daab1..d0c229d 100644
--- a/tests/approved_files/test_approval.test_apps.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -406,7 +408,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -487,7 +491,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -568,7 +574,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -649,7 +657,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -730,7 +740,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index 00ebfe1..b2dd269 100644
--- a/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -405,7 +407,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -485,7 +489,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -565,7 +571,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -645,7 +653,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -725,7 +735,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index 86e2c3f..8452a45 100644
--- a/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -192,7 +192,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -272,7 +274,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -352,7 +356,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -432,7 +438,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -512,7 +520,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -592,7 +602,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_apps.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index c928a44..aac2f00 100644
--- a/tests/approved_files/test_approval.test_apps.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -406,7 +408,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -487,7 +491,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -568,7 +574,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -649,7 +657,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -730,7 +740,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index 1c3e58b..ddfc073 100644
--- a/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -325,7 +325,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -405,7 +407,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -485,7 +489,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -565,7 +571,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -645,7 +653,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -725,7 +735,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index aa84756..b21ab05 100644
--- a/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_apps.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -192,7 +192,9 @@ publish app org.test.Test-1 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -272,7 +274,9 @@ publish app org.test.Test-1 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -352,7 +356,9 @@ publish app org.test.Test-1 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -432,7 +438,9 @@ publish app org.test.Test-2 (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -512,7 +520,9 @@ publish app org.test.Test-2 (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -592,7 +602,9 @@ publish app org.test.Test-2 (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index a763b3b..38dcee0 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -570,7 +570,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -651,7 +653,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -732,7 +736,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -813,7 +819,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -897,7 +905,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -981,7 +991,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1065,7 +1077,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1149,7 +1163,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1233,7 +1249,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1317,7 +1335,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1401,7 +1421,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1485,7 +1507,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index 03fa67b..06e5ae2 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -558,7 +558,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -638,7 +640,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -718,7 +722,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -798,7 +804,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -881,7 +889,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -964,7 +974,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1047,7 +1059,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1130,7 +1144,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1213,7 +1229,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1296,7 +1314,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1379,7 +1399,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1462,7 +1484,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index 8ad2488..88bfa96 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -371,7 +371,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -451,7 +453,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -531,7 +535,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -611,7 +617,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -691,7 +699,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -771,7 +781,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -851,7 +863,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -931,7 +945,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1011,7 +1027,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1091,7 +1109,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1171,7 +1191,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1251,7 +1273,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index 4616a09..a4b9cd1 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -570,7 +570,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -651,7 +653,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -732,7 +736,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -813,7 +819,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -897,7 +905,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -981,7 +991,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1065,7 +1077,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1149,7 +1163,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1233,7 +1249,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1317,7 +1335,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1401,7 +1421,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1485,7 +1507,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index 27f9273..b9db4e8 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -558,7 +558,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -638,7 +640,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -718,7 +722,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -798,7 +804,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -881,7 +889,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -964,7 +974,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1047,7 +1059,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1130,7 +1144,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1213,7 +1229,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1296,7 +1314,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1379,7 +1399,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1462,7 +1484,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index 637db65..2afff22 100644
--- a/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.main.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -371,7 +371,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -451,7 +453,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -531,7 +535,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -611,7 +617,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -691,7 +699,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -771,7 +781,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -851,7 +863,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -931,7 +945,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1011,7 +1027,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1091,7 +1109,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1171,7 +1191,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1251,7 +1273,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index 5d9787c..a1200e3 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.main_only.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -564,7 +564,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -645,7 +647,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -726,7 +730,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -807,7 +813,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -891,7 +899,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -975,7 +985,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1059,7 +1071,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1143,7 +1157,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1227,7 +1243,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1311,7 +1329,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1395,7 +1415,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1479,7 +1501,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index f99e49b..1f10849 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -552,7 +552,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -632,7 +634,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -712,7 +716,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -792,7 +798,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -875,7 +883,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -958,7 +968,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1041,7 +1053,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1124,7 +1138,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1207,7 +1223,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1290,7 +1308,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1373,7 +1393,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1456,7 +1478,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index b59a74b..b25e3a0 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.main_only.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -365,7 +365,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -445,7 +447,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -525,7 +529,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -605,7 +611,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -685,7 +693,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -765,7 +775,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -845,7 +857,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -925,7 +939,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1005,7 +1021,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1085,7 +1103,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1165,7 +1185,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1245,7 +1267,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
index 22f273d..f46d805 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.versioned.with_sign.with_tests.with_flatpakrepo.deps_sign_none.approved.yaml
@@ -570,7 +570,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -651,7 +653,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -732,7 +736,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -813,7 +819,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -897,7 +905,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -981,7 +991,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1065,7 +1077,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1149,7 +1163,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1233,7 +1249,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1317,7 +1335,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1401,7 +1421,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1485,7 +1507,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
index e2ff1b2..262a269 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.with_tests.with_flatpakrepo.deps_sign_ed25519.approved.yaml
@@ -558,7 +558,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -638,7 +640,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -718,7 +722,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -798,7 +804,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -881,7 +889,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -964,7 +974,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1047,7 +1059,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1130,7 +1144,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1213,7 +1229,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1296,7 +1314,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1379,7 +1399,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1462,7 +1484,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml b/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
index edb3119..6cbd8ca 100644
--- a/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
+++ b/tests/approved_files/test_approval.test_runtimes.test.versioned.without_sign.without_tests.without_flatpakrepo.deps_sign_gpg.approved.yaml
@@ -371,7 +371,9 @@ publish runtime org.test.bar (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -451,7 +453,9 @@ publish runtime org.test.bar (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -531,7 +535,9 @@ publish runtime org.test.bar (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -611,7 +617,9 @@ publish runtime org.test.foo (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -691,7 +699,9 @@ publish runtime org.test.foo (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -771,7 +781,9 @@ publish runtime org.test.foo (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -851,7 +863,9 @@ publish app org.test.foo.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -931,7 +945,9 @@ publish app org.test.foo.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1011,7 +1027,9 @@ publish app org.test.foo.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1091,7 +1109,9 @@ publish app org.test.bar.Test (x86_64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1171,7 +1191,9 @@ publish app org.test.bar.Test (aarch64):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
@@ -1251,7 +1273,9 @@ publish app org.test.bar.Test (arm):
                   message=$(ostree show "$prev" \
                               | grep '^ ' \
                               | sed 's/^ *//g')
-                  metadata=$(ostree cat "$prev" metadata)
+                  # Trick to preserve any trailing newlines:
+                  # https://unix.stackexchange.com/a/383411/117660
+                  IFS= read -rd '' metadata < <(ostree cat "$prev" metadata)
 
                   echo 'Applying new changes on top of remote...'
                   ostree commit -b "$ref" -m "$message" \
diff --git a/tests/test_build_pipelines.py b/tests/test_build_pipelines.py
index 85ba50c..a53ed97 100644
--- a/tests/test_build_pipelines.py
+++ b/tests/test_build_pipelines.py
@@ -497,6 +497,10 @@ def test_subsummaries_flatpak_metadata(subsummaries):
 
         for ref, (_commit_size, _commit_checksum, ref_metadata) in refs:
             flatpak_metadata = ref_metadata['xa.data'][2]
+            # The metadata file should have a single trailing newline.
+            assert flatpak_metadata.endswith('\n')
+            assert not flatpak_metadata.endswith('\n\n')
+
             keyfile = GLib.KeyFile.new()
             keyfile.load_from_bytes(GLib.Bytes.new(flatpak_metadata.encode('ascii')), 0)
 
-- 
GitLab