diff --git a/src/image/prepare_single_image_build_matrix.py b/src/image/prepare_single_image_build_matrix.py index 52432701..0f4d0a98 100755 --- a/src/image/prepare_single_image_build_matrix.py +++ b/src/image/prepare_single_image_build_matrix.py @@ -228,7 +228,7 @@ def main(): # so let's remove this field since we don't need it for the builds del build["release"] - release_to = "true" if "release" in image_trigger else "" + release_to = "true" if builds else "" write_github_output(release_to, builds, args.revision_data_dir) diff --git a/tests/data/image_all_eol_tracks.yaml b/tests/data/image_all_eol_tracks.yaml new file mode 100644 index 00000000..cbba0afa --- /dev/null +++ b/tests/data/image_all_eol_tracks.yaml @@ -0,0 +1,45 @@ +version: 1 + +release: + latest: + end-of-life: "2030-05-01T00:00:00Z" + candidate: 1.2-22.04_beta + test: + end-of-life: "2030-05-01T00:00:00Z" + beta: 1.1-22.04_beta + +upload: + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.0 + release: + 1.0-22.04: + end-of-life: "2000-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.1 + release: + 1.1-22.04: + end-of-life: "2000-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + 1-22.04: + end-of-life: "2000-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.2 + release: + 1.2-22.04: + end-of-life: "2000-05-01T00:00:00Z" + risks: + - beta diff --git a/tests/data/image_with_release.yaml b/tests/data/image_with_release.yaml new file mode 100644 index 00000000..72382b32 --- /dev/null +++ b/tests/data/image_with_release.yaml @@ -0,0 +1,45 @@ +version: 1 + +release: + latest: + end-of-life: "2030-05-01T00:00:00Z" + candidate: 1.2-22.04_beta + test: + end-of-life: "2030-05-01T00:00:00Z" + beta: 1.1-22.04_beta + +upload: + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.0 + release: + 1.0-22.04: + end-of-life: "2024-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.1 + release: + 1.1-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + 1-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.2 + release: + 1.2-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - beta diff --git a/tests/data/image_without_release.yaml b/tests/data/image_without_release.yaml new file mode 100644 index 00000000..488174c5 --- /dev/null +++ b/tests/data/image_without_release.yaml @@ -0,0 +1,37 @@ +version: 1 + +upload: + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.0 + release: + 1.0-22.04: + end-of-life: "2024-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.1 + release: + 1.1-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + 1-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - candidate + - edge + - beta + - source: "canonical/rocks-toolbox" + commit: 17916dd5de270e61a6a3fd3f4661a6413a50fd6f + directory: mock_rock/1.2 + release: + 1.2-22.04: + end-of-life: "2030-05-01T00:00:00Z" + risks: + - beta diff --git a/tests/integration/test_prepare_single_image_build_matrix.py b/tests/integration/test_prepare_single_image_build_matrix.py new file mode 100644 index 00000000..2ba426e2 --- /dev/null +++ b/tests/integration/test_prepare_single_image_build_matrix.py @@ -0,0 +1,66 @@ +# from pathlib import Path +# import pytest + +# from src.image.utils.schema.triggers import ImageTriggerValidationError +# import yaml +# from glob import glob +from src.image.prepare_single_image_build_matrix import main as prepare_build_matrix +import pytest +import re +import shutil +import sys + +from .. import DATA_DIR + + +@pytest.fixture +def prep_execution(tmpdir, monkeypatch, request): + + image_trigger_sample = getattr(request, "param", None) + + # configure files/env requried for the test + github_output = tmpdir / "github_output" + monkeypatch.setenv("GITHUB_OUTPUT", str(github_output)) + + revision_data_dir = tmpdir / "revision-data" + revision_data_dir.mkdir() + + oci_trigger_dir = tmpdir / "image_trigger" + oci_trigger_dir.mkdir() + shutil.copy( + image_trigger_sample, + oci_trigger_dir / "image.yaml", + ) + + # patch the arv for the test. script.py can be anything + args = ( + f"--oci-path {oci_trigger_dir} --revision-data-dir {revision_data_dir}".split( + " " + ) + ) + monkeypatch.setattr(sys, "argv", ["script.py"] + args) + + return revision_data_dir, github_output + + +@pytest.mark.parametrize( + "prep_execution, release_to", + [ + (DATA_DIR / "image_with_release.yaml", True), + (DATA_DIR / "image_without_release.yaml", True), + (DATA_DIR / "image_all_eol_tracks.yaml", False), + ], + indirect=["prep_execution"], +) +def test_release_to(prep_execution, release_to): + """Test state of release-to in github output after running prepare_single_image_build_matrix""" + _, github_output = prep_execution + + # run main from prepare_single_image_build_matrix + prepare_build_matrix() + + github_output_content = github_output.read_text("utf8") + print(github_output_content) + assert re.search( + "^release-to=" + "true" if release_to else "", github_output_content, re.M + ), "Invalid release-to value"