diff --git a/src/dockerflow/version.py b/src/dockerflow/version.py index 724e92b..3cf5fb3 100644 --- a/src/dockerflow/version.py +++ b/src/dockerflow/version.py @@ -9,7 +9,8 @@ def get_version(root): """ - Load and return the contents of version.json. + Load and return the contents of version.json. If a DOCKERFLOW_VERSION + env var is set, sets the "version" attribute to the env var value. :param root: The root path that the ``version.json`` file will be opened :type root: str @@ -17,7 +18,13 @@ def get_version(root): :rtype: dict or None """ version_json = os.path.join(root, "version.json") + version_env_var = os.getenv("DOCKERFLOW_VERSION") if os.path.exists(version_json): with open(version_json, "r") as version_json_file: - return json.load(version_json_file) + version_info = json.load(version_json_file) + if version_env_var != None: + version_info["version"] = version_env_var + return version_info + if version_env_var != None: + return { "version": version_env_var } return None diff --git a/tests/core/test_version.py b/tests/core/test_version.py index e6af147..7b3a3a0 100644 --- a/tests/core/test_version.py +++ b/tests/core/test_version.py @@ -2,6 +2,7 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, you can obtain one at http://mozilla.org/MPL/2.0/. import json +import os from dockerflow.version import get_version @@ -18,3 +19,22 @@ def test_get_version(tmpdir): def test_no_version_json(tmpdir): version = get_version(str(tmpdir)) assert version is None + +def test_env_var_override(tmpdir, mocker): + content = {"spam": "eggs"} + mocker.patch.dict(os.environ, { "DOCKERFLOW_VERSION": "foo"}) + version_json = tmpdir.join("version.json") + version_json.write(json.dumps(content)) + + version = get_version(str(tmpdir)) + assert version == { + "spam": "eggs", + "version": "foo" + } + +def test_env_var_override_with_no_json(tmpdir, mocker): + mocker.patch.dict(os.environ, { "DOCKERFLOW_VERSION": "foo"}) + version = get_version(str(tmpdir)) + assert version == { + "version": "foo" + }