funkwhale/scripts/build_metadata_test.py

237 wiersze
8.3 KiB
Python

from unittest import mock
import pytest
from build_metadata import (
AUTHORS,
DOCUMENTATION_URL,
LICENSE,
PROJECT_DESCRIPTION,
PROJECT_NAME,
SOURCE_URL,
WEBSITE_URL,
bake_output,
env_output,
extract_metadata,
)
common_docker_labels = {
"org.opencontainers.image.title": PROJECT_NAME,
"org.opencontainers.image.description": PROJECT_DESCRIPTION,
"org.opencontainers.image.url": WEBSITE_URL,
"org.opencontainers.image.source": SOURCE_URL,
"org.opencontainers.image.documentation": DOCUMENTATION_URL,
"org.opencontainers.image.licenses": LICENSE,
"org.opencontainers.image.vendor": AUTHORS,
}
test_cases = [
{ # On a random feature branch
"environ": {
"CI": "true",
"CI_COMMIT_TAG": "",
"CI_COMMIT_BRANCH": "ci_build_metadata",
"CI_COMMIT_SHA": "de206ac559a171b68fb894b2d61db298fc386705",
"CI_COMMIT_TIMESTAMP": "2023-01-31T13:31:13+01:00",
"CI_COMMIT_REF_NAME": "ci_build_metadata",
},
"metadata": {
"commit_tag": "",
"commit_branch": "ci_build_metadata",
"commit_sha": "de206ac559a171b68fb894b2d61db298fc386705",
"commit_timestamp": "2023-01-31T13:31:13+01:00",
"commit_ref_name": "ci_build_metadata",
"version": "",
"tags": [],
"latest": False,
},
"bake_output": {
"target": {
"api": {
"tags": [],
"labels": {
**common_docker_labels,
"org.opencontainers.image.version": "ci_build_metadata",
"org.opencontainers.image.created": "2023-01-31T13:31:13+01:00",
"org.opencontainers.image.revision": "de206ac559a171b68fb894b2d61db298fc386705",
},
}
}
},
"env_output": [
"BUILD_COMMIT_TAG=",
"BUILD_COMMIT_BRANCH=ci_build_metadata",
"BUILD_COMMIT_SHA=de206ac559a171b68fb894b2d61db298fc386705",
"BUILD_COMMIT_TIMESTAMP=2023-01-31T13:31:13+01:00",
"BUILD_COMMIT_REF_NAME=ci_build_metadata",
"BUILD_VERSION=",
"BUILD_TAGS=",
"BUILD_LATEST=false",
],
},
{ # On the develop (or stable) branch
"environ": {
"CI": "true",
"CI_COMMIT_TAG": "",
"CI_COMMIT_BRANCH": "develop",
"CI_COMMIT_SHA": "de206ac559a171b68fb894b2d61db298fc386705",
"CI_COMMIT_TIMESTAMP": "2023-01-31T13:31:13+01:00",
"CI_COMMIT_REF_NAME": "develop",
},
"metadata": {
"commit_tag": "",
"commit_branch": "develop",
"commit_sha": "de206ac559a171b68fb894b2d61db298fc386705",
"commit_timestamp": "2023-01-31T13:31:13+01:00",
"commit_ref_name": "develop",
"version": "1.7.2-dev+de206ac",
"tags": ["develop"],
"latest": False,
},
"bake_output": {
"target": {
"api": {
"tags": ["funkwhale/api:develop"],
"labels": {
**common_docker_labels,
"org.opencontainers.image.version": "develop",
"org.opencontainers.image.created": "2023-01-31T13:31:13+01:00",
"org.opencontainers.image.revision": "de206ac559a171b68fb894b2d61db298fc386705",
},
}
}
},
"env_output": [
"BUILD_COMMIT_TAG=",
"BUILD_COMMIT_BRANCH=develop",
"BUILD_COMMIT_SHA=de206ac559a171b68fb894b2d61db298fc386705",
"BUILD_COMMIT_TIMESTAMP=2023-01-31T13:31:13+01:00",
"BUILD_COMMIT_REF_NAME=develop",
"BUILD_VERSION=1.7.2-dev+de206ac",
"BUILD_TAGS=develop",
"BUILD_LATEST=false",
],
},
{ # A release tag
"environ": {
"CI": "true",
"CI_COMMIT_TAG": "1.2.9",
"CI_COMMIT_BRANCH": "",
"CI_COMMIT_SHA": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841",
"CI_COMMIT_TIMESTAMP": "2022-11-25T17:59:23+01:00",
"CI_COMMIT_REF_NAME": "1.2.9",
},
"metadata": {
"commit_tag": "1.2.9",
"commit_branch": "",
"commit_sha": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841",
"commit_timestamp": "2022-11-25T17:59:23+01:00",
"commit_ref_name": "1.2.9",
"version": "1.2.9",
"tags": ["1.2.9", "1.2", "1", "latest"],
"latest": True,
},
"bake_output": {
"target": {
"api": {
"tags": [
"funkwhale/api:1.2.9",
"funkwhale/api:1.2",
"funkwhale/api:1",
"funkwhale/api:latest",
],
"labels": {
**common_docker_labels,
"org.opencontainers.image.version": "1.2.9",
"org.opencontainers.image.created": "2022-11-25T17:59:23+01:00",
"org.opencontainers.image.revision": "817c8fbcaa0706ccc9b724da8546f44ba7d2d841",
},
}
}
},
"env_output": [
"BUILD_COMMIT_TAG=1.2.9",
"BUILD_COMMIT_BRANCH=",
"BUILD_COMMIT_SHA=817c8fbcaa0706ccc9b724da8546f44ba7d2d841",
"BUILD_COMMIT_TIMESTAMP=2022-11-25T17:59:23+01:00",
"BUILD_COMMIT_REF_NAME=1.2.9",
"BUILD_VERSION=1.2.9",
"BUILD_TAGS=1.2.9,1.2,1,latest",
"BUILD_LATEST=true",
],
},
{ # A prerelease tag
"environ": {
"CI": "true",
"CI_COMMIT_TAG": "1.3.0-rc3",
"CI_COMMIT_BRANCH": "",
"CI_COMMIT_SHA": "e04a1b188d3f463e7b3e2484578d63d754b09b9d",
"CI_COMMIT_TIMESTAMP": "2023-01-23T14:24:46+01:00",
"CI_COMMIT_REF_NAME": "1.3.0-rc3",
},
"metadata": {
"commit_tag": "1.3.0-rc3",
"commit_branch": "",
"commit_sha": "e04a1b188d3f463e7b3e2484578d63d754b09b9d",
"commit_timestamp": "2023-01-23T14:24:46+01:00",
"commit_ref_name": "1.3.0-rc3",
"version": "1.3.0-rc3",
"tags": ["1.3.0-rc3"],
"latest": False,
},
"bake_output": {
"target": {
"api": {
"tags": ["funkwhale/api:1.3.0-rc3"],
"labels": {
**common_docker_labels,
"org.opencontainers.image.version": "1.3.0-rc3",
"org.opencontainers.image.created": "2023-01-23T14:24:46+01:00",
"org.opencontainers.image.revision": "e04a1b188d3f463e7b3e2484578d63d754b09b9d",
},
}
}
},
"env_output": [
"BUILD_COMMIT_TAG=1.3.0-rc3",
"BUILD_COMMIT_BRANCH=",
"BUILD_COMMIT_SHA=e04a1b188d3f463e7b3e2484578d63d754b09b9d",
"BUILD_COMMIT_TIMESTAMP=2023-01-23T14:24:46+01:00",
"BUILD_COMMIT_REF_NAME=1.3.0-rc3",
"BUILD_VERSION=1.3.0-rc3",
"BUILD_TAGS=1.3.0-rc3",
"BUILD_LATEST=false",
],
},
]
@pytest.mark.parametrize(
"environ, expected_metadata, expected_bake_output, expected_env_output",
map(
lambda i: (i["environ"], i["metadata"], i["bake_output"], i["env_output"]),
test_cases,
),
)
def test_extract_metadata(
environ,
expected_metadata,
expected_bake_output,
expected_env_output,
):
with mock.patch("build_metadata.latest_tag_on_branch") as latest_tag_on_branch_mock:
latest_tag_on_branch_mock.return_value = "1.7.2-rc5"
with mock.patch.dict("os.environ", environ, clear=True):
found_metadata = extract_metadata()
assert found_metadata == expected_metadata
found_bake_output = bake_output(
metadata=found_metadata,
target="api",
images=["funkwhale/api"],
)
assert found_bake_output == expected_bake_output
found_env_output = env_output(metadata=found_metadata)
assert found_env_output == expected_env_output