-
Notifications
You must be signed in to change notification settings - Fork 5.6k
/
Copy path__init__.py
120 lines (98 loc) · 4.2 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
"""Subcommand for multiversion config."""
import argparse
from typing import List, Optional
import yaml
from pydantic import BaseModel
from buildscripts.resmokelib import configure_resmoke
from buildscripts.resmokelib.multiversion.multiversion_service import (
MongoReleases,
MongoVersion,
MultiversionService,
)
from buildscripts.resmokelib.plugin import PluginInterface, Subcommand
MULTIVERSION_SUBCOMMAND = "multiversion-config"
class MultiversionConfig(BaseModel):
"""
Multiversion Configuration.
* last_versions: List of which "last" versions that should be tests against (lts, continuous).
* requires_fcv_tag: Which required_fcv tags should be used by default.
* requires_fcv_tag_lts: Which requires_fcv tags should be used when running in LTS mode.
* requires_fcv_tag_continuous: Which required_fcv tags should be used when running in continuous
mode.
* last_lts_fcv: LTS version that should be tested against.
* last_continuous_fcv: Continuous version that should be tested against.
"""
last_versions: List[str]
requires_fcv_tag: str
requires_fcv_tag_lts: str
requires_fcv_tag_continuous: str
last_lts_fcv: str
last_continuous_fcv: str
class MultiversionConfigSubcommand(Subcommand):
"""Subcommand for discovering multiversion configuration."""
def __init__(self, options: argparse.Namespace) -> None:
self.config_file_output = options.config_file_output
def execute(self):
"""Execute the subcommand."""
mv_config = self.determine_multiversion_config()
yaml_output = yaml.safe_dump(mv_config.dict())
print(yaml_output)
if self.config_file_output:
with open(self.config_file_output, "w") as file:
file.write(yaml_output)
@staticmethod
def determine_multiversion_config() -> MultiversionConfig:
"""Discover the current multiversion configuration."""
from buildscripts.resmokelib import multiversionconstants
multiversion_service = MultiversionService(
mongo_version=MongoVersion.from_yaml_file(multiversionconstants.MONGO_VERSION_YAML),
mongo_releases=MongoReleases.from_yaml_file(multiversionconstants.RELEASES_YAML),
)
version_constants = multiversion_service.calculate_version_constants()
return MultiversionConfig(
last_versions=multiversionconstants.OLD_VERSIONS,
requires_fcv_tag=version_constants.get_fcv_tag_list(),
requires_fcv_tag_lts=version_constants.get_lts_fcv_tag_list(),
requires_fcv_tag_continuous=version_constants.get_continuous_fcv_tag_list(),
last_lts_fcv=version_constants.get_last_lts_fcv(),
last_continuous_fcv=version_constants.get_last_continuous_fcv(),
)
class MultiversionPlugin(PluginInterface):
"""Multiversion plugin."""
def add_subcommand(self, subparsers: argparse._SubParsersAction) -> None:
"""
Add parser options for this plugin.
:param subparsers: argparse subparsers
"""
parser = subparsers.add_parser(
MULTIVERSION_SUBCOMMAND, help="Display configuration for multiversion testing"
)
parser.add_argument(
"--config-file-output",
"-f",
action="store",
type=str,
default=None,
help="File to write the multiversion config to.",
)
def parse(
self,
subcommand: str,
parser: argparse.ArgumentParser,
parsed_args: argparse.Namespace,
should_configure_otel=True,
**kwargs,
) -> Optional[Subcommand]:
"""
Resolve command-line options to a Subcommand or None.
:param subcommand: equivalent to parsed_args.command.
:param parser: parser used.
:param parsed_args: output of parsing.
:param kwargs: additional args.
:return: None or a Subcommand.
"""
if subcommand == MULTIVERSION_SUBCOMMAND:
configure_resmoke.detect_evergreen_config(parsed_args)
configure_resmoke.validate_and_update_config(parser, parsed_args, should_configure_otel)
return MultiversionConfigSubcommand(parsed_args)
return None