|
| 1 | +use std assert |
| 2 | +use tap.nu |
| 3 | + |
| 4 | +tap begin "verify bootc upgrade --check succeeds after upgrade" |
| 5 | + |
| 6 | +# After an upgrade (bootc switch), verify that the running system can |
| 7 | +# still query for further upgrades. This catches regressions where |
| 8 | +# on-disk state created by an older bootc is incompatible with the |
| 9 | +# new bootc's upgrade machinery (e.g. #2074). |
| 10 | +# Only meaningful when we actually performed an upgrade. |
| 11 | +let upgrade_image = $env.BOOTC_test_upgrade_image? | default "" |
| 12 | +if $upgrade_image == "" { |
| 13 | + print "# skip: not an upgrade test (BOOTC_test_upgrade_image not set)" |
| 14 | + tap ok |
| 15 | + exit 0 |
| 16 | +} |
| 17 | + |
| 18 | +# Read the pre-upgrade bootc version saved during first boot. |
| 19 | +let old_version_str = (open /var/bootc-pre-upgrade-version | str trim) |
| 20 | +let old_ver = ($old_version_str | split row "." | each { into int }) |
| 21 | +print $"Pre-upgrade bootc version: ($old_version_str)" |
| 22 | + |
| 23 | +let is_composefs = (tap is_composefs) |
| 24 | + |
| 25 | +print "Running bootc upgrade --check to verify upgrade machinery works..." |
| 26 | +let result = do -i { bootc upgrade --check } | complete |
| 27 | +if $result.exit_code == 0 { |
| 28 | + print "bootc upgrade --check succeeded" |
| 29 | +} else { |
| 30 | + print $"bootc upgrade --check failed: ($result.stderr)" |
| 31 | + # Known failure: composefs upgrades from bootc <= 1.13 have |
| 32 | + # incompatible on-disk state (see #2074). |
| 33 | + let old_bootc_le_1_13 = ($old_ver.0 < 1) or (($old_ver.0 == 1) and ($old_ver.1 <= 13)) |
| 34 | + if $is_composefs and $old_bootc_le_1_13 { |
| 35 | + print $"# known failure: composefs upgrade --check from bootc ($old_version_str) \(see #2074\)" |
| 36 | + } else { |
| 37 | + error make { msg: $"bootc upgrade --check failed unexpectedly: ($result.stderr)" } |
| 38 | + } |
| 39 | +} |
| 40 | + |
| 41 | +tap ok |
0 commit comments