12VERSION_STRING: str =
"1.0.0"
13VERSION_TAG: str =
"1.0.0"
14DOCKER_TAG: str =
"1.0.0"
15GIT_URL: str =
"unknown"
16GIT_BRANCH: str =
"unknown"
18logger = logging.getLogger(
"searx")
21 "PATH": os.environ[
"PATH"],
28 """Call :py:func:`subprocess.run` and return (striped) stdout. If returncode is
29 non-zero, raise a :py:func:`subprocess.CalledProcessError`.
31 if not isinstance(args, (list, tuple)):
32 args = shlex.split(args)
34 kwargs[
"env"] = kwargs.get(
"env", SUBPROCESS_RUN_ENV)
35 kwargs[
"encoding"] = kwargs.get(
"encoding",
"utf-8")
36 kwargs[
"stdout"] = subprocess.PIPE
37 kwargs[
"stderr"] = subprocess.PIPE
39 kwargs[
"check"] =
True
41 proc = subprocess.run(args, **kwargs)
42 return proc.stdout.strip()
47 if "GITHUB_REPOSITORY" in os.environ
and "GITHUB_REF_NAME" in os.environ:
48 git_url = f
"https://github.com/{os.environ['GITHUB_REPOSITORY']}"
49 git_branch = os.environ[
"GITHUB_REF_NAME"]
50 return git_url, git_branch
54 except subprocess.CalledProcessError:
55 ref =
subprocess_run(
"git rev-parse --abbrev-ref master@{upstream}")
56 origin, git_branch = ref.split(
"/", 1)
60 if git_url.startswith(
"git@"):
61 git_url = git_url.replace(
":",
"/", 2).replace(
"git@",
"https://", 1)
62 if git_url.endswith(
".git"):
63 git_url = git_url.replace(
".git",
"", 1)
65 return git_url, git_branch
69 git_commit_date_hash: str =
subprocess_run(
r"git show -s --date='format:%Y.%m.%d' --format='%cd+%h'")
72 git_commit_date_hash = git_commit_date_hash.replace(
'.0',
'.')
73 tag_version: str = git_commit_date_hash
74 git_version: str = git_commit_date_hash
75 docker_tag: str = git_commit_date_hash.replace(
"+",
"-")
79 subprocess_run(
"git diff --quiet -- . ':!searx/settings.yml' ':!utils/brand.env'")
80 except subprocess.CalledProcessError
as e:
82 git_version +=
"+dirty"
84 logger.warning(
'"%s" returns an unexpected return code %i', e.returncode, e.cmd)
86 return git_version, tag_version, docker_tag
90 version_string: str = VERSION_STRING
91 version_tag: str = VERSION_TAG
92 docker_tag: str = DOCKER_TAG
93 git_url: str = GIT_URL
94 git_branch: str = GIT_BRANCH
98 except subprocess.CalledProcessError
as ex:
99 logger.error(
"Error while getting the version: %s", ex.stderr)
102 except subprocess.CalledProcessError
as ex:
103 logger.error(
"Error while getting the git URL & branch: %s", ex.stderr)
105 return version_string, version_tag, docker_tag, git_url, git_branch
109 vf = importlib.import_module(
'searx.version_frozen')
110 VERSION_STRING, VERSION_TAG, DOCKER_TAG, GIT_URL, GIT_BRANCH = (
111 str(vf.VERSION_STRING),
118 VERSION_STRING, VERSION_TAG, DOCKER_TAG, GIT_URL, GIT_BRANCH =
get_information()
120logger.info(
"version: %s", VERSION_STRING)
122if __name__ ==
"__main__":
125 if len(sys.argv) >= 2
and sys.argv[1] ==
"freeze":
126 VERSION_STRING, VERSION_TAG, DOCKER_TAG, GIT_URL, GIT_BRANCH =
get_information()
129 python_code = f
"""# SPDX-License-Identifier: AGPL-3.0-or-later
130# pylint: disable=missing-module-docstring
131# this file is generated automatically by searx/version.py
133VERSION_STRING = "{VERSION_STRING}"
134VERSION_TAG = "{VERSION_TAG}"
135DOCKER_TAG = "{DOCKER_TAG}"
137GIT_BRANCH = "{GIT_BRANCH}"
139 path = os.path.join(os.path.dirname(__file__),
"version_frozen.py")
140 with open(path,
"w", encoding=
"utf8")
as f:
142 print(f
"{f.name} created")
146 os.utime(path, (commit_timestamp, commit_timestamp))
151VERSION_STRING="{VERSION_STRING}"
152VERSION_TAG="{VERSION_TAG}"
153DOCKER_TAG="{DOCKER_TAG}"
155GIT_BRANCH="{GIT_BRANCH}"
tuple[str, str, str] get_git_version()
tuple[str, str, str, str, str] get_information()
str subprocess_run(str|list[str]|tuple[str] args, **kwargs)