chore: add new releases.py script

Part-of: <https://dev.funkwhale.audio/funkwhale/funkwhale/-/merge_requests/2348>
environments/review-docs-docs-ox2r7i/deployments/18559
jo 2023-01-31 19:06:53 +01:00 zatwierdzone przez Marge
rodzic accf261683
commit c5dd88a2e2
2 zmienionych plików z 263 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,90 @@
#!/usr/bin/env python3
import json
import logging
from argparse import ArgumentParser
from functools import reduce
from operator import getitem
from subprocess import check_output
from typing import Dict, List
from packaging.version import InvalidVersion, Version
logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())
def get_releases() -> List[Dict[str, str]]:
"""
Gather all releases from git tags, sorted by version.
Do not include pre releases.
"""
output = check_output(
[
*("git", "tag", "-l"),
"--format=%(creatordate:iso-strict)|%(refname:short)",
"--sort=v:refname", # sort by refname (version sort, not lexicographic)
],
text=True,
)
result = []
for line in output.splitlines():
date, _, ref = line.partition("|")
try:
version = Version(ref)
if version.pre is not None:
logger.warning("ignoring pre release: %s", version)
continue
except InvalidVersion as exception:
logger.error("ignoring invalid release: %s", exception)
continue
result.append({"id": ref, "date": date})
return list(reversed(result))
def resolve_query(haystack, needle: str):
if isinstance(haystack, list):
needle = int(needle)
return getitem(haystack, needle)
def main(query: str = None, raw: bool = False) -> int:
releases = get_releases()
data = {
"count": len(releases),
"latest": releases[0],
"releases": releases,
}
if query is not None:
parts = query.split(".")
result = reduce(resolve_query, parts, data)
else:
result = data
if raw:
print(result)
else:
print(json.dumps(result, indent=2))
return 0
if __name__ == "__main__":
parser = ArgumentParser("Compile releases data")
parser.add_argument(
"-q",
"--query",
help="Query a specific data",
)
parser.add_argument(
"-r",
"--raw",
action="store_true",
help="Output raw data",
)
args = parser.parse_args()
raise SystemExit(main(query=args.query, raw=args.raw))

Wyświetl plik

@ -0,0 +1,173 @@
#!/usr/bin/env python3
from textwrap import dedent
from unittest import mock
from releases import get_releases
GIT_TAGS = dedent(
"""
2017-06-26T22:31:52+02:00|0.1
2017-07-09T11:37:55+02:00|0.2
2017-07-17T22:08:58+02:00|0.2.1
2017-12-11T21:16:02+01:00|0.2.2
2017-12-12T23:55:09+01:00|0.2.3
2017-12-14T23:08:49+01:00|0.2.4
2017-12-16T16:15:42+01:00|0.2.5
2017-12-16T16:40:52+01:00|0.2.6
2017-12-26T21:29:05+01:00|0.3
2017-12-27T23:36:54+01:00|0.3.1
2017-12-27T23:44:11+01:00|0.3.2
2018-01-07T22:27:43+01:00|0.3.3
2018-01-07T22:52:04+01:00|0.3.4
2018-01-07T23:08:10+01:00|0.3.5
2018-02-18T14:48:53+01:00|0.4
2018-02-24T15:37:50+01:00|0.5
2018-02-24T18:08:07+01:00|0.5.1
2018-02-26T21:39:41+01:00|0.5.2
2018-02-27T23:10:45+01:00|0.5.3
2018-02-28T19:29:47+01:00|0.5.4
2018-03-04T15:16:57+01:00|0.6
2018-03-06T21:56:21+01:00|0.6.1
2018-03-21T21:05:15+01:00|0.7
2018-04-02T20:04:53+02:00|0.8
2018-04-17T21:31:49+02:00|0.9
2018-04-17T23:20:48+02:00|0.9.1
2018-04-23T19:44:48+02:00|0.10
2018-05-06T16:24:23+02:00|0.11
2018-05-09T23:46:23+02:00|0.12
2018-05-19T11:43:36+02:00|0.13
2018-06-02T18:11:24+02:00|0.14
2018-06-06T22:03:42+02:00|0.14.1
2018-06-16T15:04:57+02:00|0.14.2
2018-06-24T16:00:40+02:00|0.15
2018-07-22T22:44:16+02:00|0.16
2018-08-19T19:05:22+02:00|0.16.1
2018-08-21T19:03:14+02:00|0.16.2
2018-08-21T20:34:15+02:00|0.16.3
2018-10-07T11:53:35+02:00|0.17
2019-01-22T12:05:12+01:00|0.18
2019-01-29T14:25:50+01:00|0.18.1
2019-02-13T09:28:23+01:00|0.18.2
2019-03-21T10:41:32+01:00|0.18.3
2019-05-16T12:30:38+02:00|0.19.0
2019-05-02T14:26:46+02:00|0.19.0-rc1
2019-05-10T10:05:26+02:00|0.19.0-rc2
2019-06-28T10:25:35+02:00|0.19.1
2019-10-04T10:42:33+02:00|0.20.0
2019-09-24T15:28:11+02:00|0.20.0-rc1
2019-10-28T10:54:39+01:00|0.20.1
2020-04-24T10:11:25+02:00|0.21
2020-04-09T09:57:16+02:00|0.21-rc1
2020-04-22T11:10:55+02:00|0.21-rc2
2020-06-11T10:44:20+02:00|0.21.1
2020-07-27T11:21:40+02:00|0.21.2
2020-09-09T07:48:14+02:00|1.0
2020-08-23T15:21:29+02:00|1.0-rc1
2020-10-31T12:43:37+01:00|1.0.1
2021-03-10T10:25:28+01:00|1.1
2021-02-24T08:18:56+01:00|1.1-rc1
2021-03-01T19:21:36+01:00|1.1-rc2
2021-04-13T10:27:07+02:00|1.1.1
2021-05-19T15:30:51+02:00|1.1.2
2021-08-01T22:04:02+02:00|1.1.3
2021-08-02T20:47:50+02:00|1.1.4
2021-12-27T20:56:03+01:00|1.2.0
2021-12-08T20:15:55+01:00|1.2.0-rc1
2021-12-21T09:12:57+00:00|1.2.0-rc2
2021-11-05T09:24:36+00:00|1.2.0-testing
2021-11-05T09:31:10+00:00|1.2.0-testing2
2021-11-05T09:43:30+00:00|1.2.0-testing3
2021-11-05T12:00:26+00:00|1.2.0-testing4
2022-01-06T17:35:53+01:00|1.2.1
2022-02-04T12:49:11+01:00|1.2.2
2022-03-18T10:57:16+01:00|1.2.3
2022-04-23T13:40:06+02:00|1.2.4
2022-05-07T13:48:31+02:00|1.2.5
2022-07-04T17:03:19+02:00|1.2.6
2022-07-05T15:43:08+02:00|1.2.6-1
2022-07-14T12:53:53+02:00|1.2.7
2022-09-12T10:51:44+02:00|1.2.8
2022-11-25T17:59:23+01:00|1.2.9
2023-01-20T09:40:58+01:00|1.3.0-rc1
2023-01-23T10:41:22+01:00|1.3.0-rc2
2023-01-23T14:24:46+01:00|1.3.0-rc3
"""
)
def test_get_releases():
with mock.patch("releases.check_output") as check_output_mock:
check_output_mock.return_value = GIT_TAGS
assert get_releases() == [
{"id": "1.2.9", "date": "2022-11-25T17:59:23+01:00"},
{"id": "1.2.8", "date": "2022-09-12T10:51:44+02:00"},
{"id": "1.2.7", "date": "2022-07-14T12:53:53+02:00"},
{"id": "1.2.6-1", "date": "2022-07-05T15:43:08+02:00"},
{"id": "1.2.6", "date": "2022-07-04T17:03:19+02:00"},
{"id": "1.2.5", "date": "2022-05-07T13:48:31+02:00"},
{"id": "1.2.4", "date": "2022-04-23T13:40:06+02:00"},
{"id": "1.2.3", "date": "2022-03-18T10:57:16+01:00"},
{"id": "1.2.2", "date": "2022-02-04T12:49:11+01:00"},
{"id": "1.2.1", "date": "2022-01-06T17:35:53+01:00"},
{"id": "1.2.0", "date": "2021-12-27T20:56:03+01:00"},
{"id": "1.1.4", "date": "2021-08-02T20:47:50+02:00"},
{"id": "1.1.3", "date": "2021-08-01T22:04:02+02:00"},
{"id": "1.1.2", "date": "2021-05-19T15:30:51+02:00"},
{"id": "1.1.1", "date": "2021-04-13T10:27:07+02:00"},
{"id": "1.1", "date": "2021-03-10T10:25:28+01:00"},
{"id": "1.0.1", "date": "2020-10-31T12:43:37+01:00"},
{"id": "1.0", "date": "2020-09-09T07:48:14+02:00"},
{"id": "0.21.2", "date": "2020-07-27T11:21:40+02:00"},
{"id": "0.21.1", "date": "2020-06-11T10:44:20+02:00"},
{"id": "0.21", "date": "2020-04-24T10:11:25+02:00"},
{"id": "0.20.1", "date": "2019-10-28T10:54:39+01:00"},
{"id": "0.20.0", "date": "2019-10-04T10:42:33+02:00"},
{"id": "0.19.1", "date": "2019-06-28T10:25:35+02:00"},
{"id": "0.19.0", "date": "2019-05-16T12:30:38+02:00"},
{"id": "0.18.3", "date": "2019-03-21T10:41:32+01:00"},
{"id": "0.18.2", "date": "2019-02-13T09:28:23+01:00"},
{"id": "0.18.1", "date": "2019-01-29T14:25:50+01:00"},
{"id": "0.18", "date": "2019-01-22T12:05:12+01:00"},
{"id": "0.17", "date": "2018-10-07T11:53:35+02:00"},
{"id": "0.16.3", "date": "2018-08-21T20:34:15+02:00"},
{"id": "0.16.2", "date": "2018-08-21T19:03:14+02:00"},
{"id": "0.16.1", "date": "2018-08-19T19:05:22+02:00"},
{"id": "0.16", "date": "2018-07-22T22:44:16+02:00"},
{"id": "0.15", "date": "2018-06-24T16:00:40+02:00"},
{"id": "0.14.2", "date": "2018-06-16T15:04:57+02:00"},
{"id": "0.14.1", "date": "2018-06-06T22:03:42+02:00"},
{"id": "0.14", "date": "2018-06-02T18:11:24+02:00"},
{"id": "0.13", "date": "2018-05-19T11:43:36+02:00"},
{"id": "0.12", "date": "2018-05-09T23:46:23+02:00"},
{"id": "0.11", "date": "2018-05-06T16:24:23+02:00"},
{"id": "0.10", "date": "2018-04-23T19:44:48+02:00"},
{"id": "0.9.1", "date": "2018-04-17T23:20:48+02:00"},
{"id": "0.9", "date": "2018-04-17T21:31:49+02:00"},
{"id": "0.8", "date": "2018-04-02T20:04:53+02:00"},
{"id": "0.7", "date": "2018-03-21T21:05:15+01:00"},
{"id": "0.6.1", "date": "2018-03-06T21:56:21+01:00"},
{"id": "0.6", "date": "2018-03-04T15:16:57+01:00"},
{"id": "0.5.4", "date": "2018-02-28T19:29:47+01:00"},
{"id": "0.5.3", "date": "2018-02-27T23:10:45+01:00"},
{"id": "0.5.2", "date": "2018-02-26T21:39:41+01:00"},
{"id": "0.5.1", "date": "2018-02-24T18:08:07+01:00"},
{"id": "0.5", "date": "2018-02-24T15:37:50+01:00"},
{"id": "0.4", "date": "2018-02-18T14:48:53+01:00"},
{"id": "0.3.5", "date": "2018-01-07T23:08:10+01:00"},
{"id": "0.3.4", "date": "2018-01-07T22:52:04+01:00"},
{"id": "0.3.3", "date": "2018-01-07T22:27:43+01:00"},
{"id": "0.3.2", "date": "2017-12-27T23:44:11+01:00"},
{"id": "0.3.1", "date": "2017-12-27T23:36:54+01:00"},
{"id": "0.3", "date": "2017-12-26T21:29:05+01:00"},
{"id": "0.2.6", "date": "2017-12-16T16:40:52+01:00"},
{"id": "0.2.5", "date": "2017-12-16T16:15:42+01:00"},
{"id": "0.2.4", "date": "2017-12-14T23:08:49+01:00"},
{"id": "0.2.3", "date": "2017-12-12T23:55:09+01:00"},
{"id": "0.2.2", "date": "2017-12-11T21:16:02+01:00"},
{"id": "0.2.1", "date": "2017-07-17T22:08:58+02:00"},
{"id": "0.2", "date": "2017-07-09T11:37:55+02:00"},
{"id": "0.1", "date": "2017-06-26T22:31:52+02:00"},
]