argus-alm 0.13.0__tar.gz → 0.14.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: argus-alm
3
- Version: 0.13.0
3
+ Version: 0.14.0
4
4
  Summary: Argus
5
5
  Home-page: https://github.com/scylladb/argus
6
6
  License: Apache-2.0
@@ -34,15 +34,20 @@ class ArgusClient:
34
34
  FETCH_RESULTS = "/testrun/$type/$id/fetch_results"
35
35
  FINALIZE = "/testrun/$type/$id/finalize"
36
36
 
37
- def __init__(self, auth_token: str, base_url: str, api_version="v1") -> None:
37
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
38
38
  self._auth_token = auth_token
39
39
  self._base_url = base_url
40
40
  self._api_ver = api_version
41
+ self._extra_headers = extra_headers or {}
41
42
 
42
43
  @property
43
44
  def auth_token(self) -> str:
44
45
  return self._auth_token
45
46
 
47
+ @property
48
+ def extra_headers(self) -> dict:
49
+ return self._extra_headers
50
+
46
51
  def verify_location_params(self, endpoint: str, location_params: dict[str, str]) -> bool:
47
52
  required_params: list[str] = re.findall(r"\$[\w_]+", endpoint)
48
53
  for param in required_params:
@@ -88,6 +93,7 @@ class ArgusClient:
88
93
  "Authorization": f"token {self.auth_token}",
89
94
  "Accept": "application/json",
90
95
  "Content-Type": "application/json",
96
+ **self.extra_headers,
91
97
  }
92
98
 
93
99
  def get(self, endpoint: str, location_params: dict[str, str] = None, params: dict = None) -> requests.Response:
@@ -6,6 +6,7 @@ import logging
6
6
  from argus.common.enums import TestStatus
7
7
 
8
8
  from argus.client.driver_matrix_tests.client import ArgusDriverMatrixClient
9
+ from argus.client.generic.cli import validate_extra_headers
9
10
 
10
11
  LOGGER = logging.getLogger(__name__)
11
12
 
@@ -15,81 +16,87 @@ def cli():
15
16
  pass
16
17
 
17
18
 
18
- def _submit_driver_result_internal(api_key: str, base_url: str, run_id: str, metadata_path: str):
19
+ def _submit_driver_result_internal(api_key: str, base_url: str, run_id: str, metadata_path: str, extra_headers: dict):
19
20
  metadata = json.loads(Path(metadata_path).read_text(encoding="utf-8"))
20
21
  LOGGER.info("Submitting results for %s [%s/%s] to Argus...", run_id, metadata["driver_name"], metadata["driver_type"])
21
22
  raw_xml = (Path(metadata_path).parent / metadata["junit_result"]).read_bytes()
22
- client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url)
23
+ client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
23
24
  client.submit_driver_result(driver_name=metadata["driver_name"], driver_type=metadata["driver_type"], raw_junit_data=base64.encodebytes(raw_xml))
24
25
  LOGGER.info("Done.")
25
26
 
26
- def _submit_driver_failure_internal(api_key: str, base_url: str, run_id: str, metadata_path: str):
27
+ def _submit_driver_failure_internal(api_key: str, base_url: str, run_id: str, metadata_path: str, extra_headers: dict):
27
28
  metadata = json.loads(Path(metadata_path).read_text(encoding="utf-8"))
28
29
  LOGGER.info("Submitting failure for %s [%s/%s] to Argus...", run_id, metadata["driver_name"], metadata["driver_type"])
29
- client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url)
30
+ client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
30
31
  client.submit_driver_failure(driver_name=metadata["driver_name"], driver_type=metadata["driver_type"], failure_reason=metadata["failure_reason"])
31
32
  LOGGER.info("Done.")
32
33
 
33
34
 
34
35
  @click.command("submit-run")
35
- @click.option("--api-key", help="Argus API key for authorization", required=True)
36
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
37
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
36
38
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
37
39
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
38
40
  @click.option("--build-id", required=True, help="Unique job identifier in the build system, e.g. scylla-master/group/job for jenkins (The full path)")
39
41
  @click.option("--build-url", required=True, help="Job URL in the build system")
40
- def submit_driver_matrix_run(api_key: str, base_url: str, run_id: str, build_id: str, build_url: str):
42
+ def submit_driver_matrix_run(api_key: str, base_url: str, run_id: str, build_id: str, build_url: str, extra_headers: dict):
41
43
  LOGGER.info("Submitting %s (%s) to Argus...", build_id, run_id)
42
- client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url)
44
+ client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
43
45
  client.submit_driver_matrix_run(job_name=build_id, job_url=build_url)
44
46
  LOGGER.info("Done.")
45
47
 
46
48
 
47
49
  @click.command("submit-driver")
48
- @click.option("--api-key", help="Argus API key for authorization", required=True)
50
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
51
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
49
52
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
50
53
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
51
54
  @click.option("--metadata-path", required=True, help="Path to the metadata .json file that contains path to junit xml and other required information")
52
- def submit_driver_result(api_key: str, base_url: str, run_id: str, metadata_path: str):
53
- _submit_driver_result_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path)
55
+ def submit_driver_result(api_key: str, base_url: str, run_id: str, metadata_path: str, extra_headers: dict):
56
+ _submit_driver_result_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path, extra_headers=extra_headers)
54
57
 
55
58
 
56
59
  @click.command("fail-driver")
57
- @click.option("--api-key", help="Argus API key for authorization", required=True)
60
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
61
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
58
62
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
59
63
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
60
64
  @click.option("--metadata-path", required=True, help="Path to the metadata .json file that contains path to junit xml and other required information")
61
- def submit_driver_failure(api_key: str, base_url: str, run_id: str, metadata_path: str):
62
- _submit_driver_failure_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path)
65
+ def submit_driver_failure(api_key: str, base_url: str, run_id: str, metadata_path: str, extra_headers: dict):
66
+ _submit_driver_failure_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path, extra_headers=extra_headers)
63
67
 
64
68
 
65
69
  @click.command("submit-or-fail-driver")
66
- @click.option("--api-key", help="Argus API key for authorization", required=True)
70
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
71
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
67
72
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
68
73
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
69
74
  @click.option("--metadata-path", required=True, help="Path to the metadata .json file that contains path to junit xml and other required information")
70
- def submit_or_fail_driver(api_key: str, base_url: str, run_id: str, metadata_path: str):
75
+ def submit_or_fail_driver(api_key: str, base_url: str, run_id: str, metadata_path: str, extra_headers: dict):
71
76
  metadata = json.loads(Path(metadata_path).read_text(encoding="utf-8"))
72
77
  if metadata.get("failure_reason"):
73
- _submit_driver_failure_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path)
78
+ _submit_driver_failure_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path, extra_headers=extra_headers)
74
79
  else:
75
- _submit_driver_result_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path)
80
+ _submit_driver_result_internal(api_key=api_key, base_url=base_url, run_id=run_id, metadata_path=metadata_path, extra_headers=extra_headers)
76
81
 
77
82
 
78
83
  @click.command("submit-env")
79
- @click.option("--api-key", help="Argus API key for authorization", required=True)
84
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
85
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
80
86
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
81
87
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
82
88
  @click.option("--env-path", required=True, help="Path to the Build-00.txt file that contains environment information about Scylla")
83
- def submit_driver_env(api_key: str, base_url: str, run_id: str, env_path: str):
89
+ def submit_driver_env(api_key: str, base_url: str, run_id: str, env_path: str, extra_headers: dict):
84
90
  LOGGER.info("Submitting environment for run %s to Argus...", run_id)
85
91
  raw_env = Path(env_path).read_text()
86
- client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url)
92
+ client = ArgusDriverMatrixClient(run_id=run_id, auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
87
93
  client.submit_env(raw_env)
88
94
  LOGGER.info("Done.")
89
95
 
90
96
 
91
97
  @click.command("finish-run")
92
- @click.option("--api-key", help="Argus API key for authorization", required=True)
98
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
99
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
93
100
  @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
94
101
  @click.option("--id", "run_id", required=True, help="UUID (v4 or v1) unique to the job")
95
102
  @click.option("--status", required=True, help="Resulting job status")
@@ -12,8 +12,8 @@ class ArgusDriverMatrixClient(ArgusClient):
12
12
  SUBMIT_DRIVER_FAILURE = "/driver_matrix/result/fail"
13
13
  SUBMIT_ENV = "/driver_matrix/env/submit"
14
14
 
15
- def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1") -> None:
16
- super().__init__(auth_token, base_url, api_version)
15
+ def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
16
+ super().__init__(auth_token, base_url, api_version, extra_header=extra_headers)
17
17
  self.run_id = run_id
18
18
 
19
19
  def submit_driver_matrix_run(self, job_name: str, job_url: str) -> None:
@@ -0,0 +1,80 @@
1
+ import json
2
+ from json.decoder import JSONDecodeError
3
+ from pathlib import Path
4
+ import click
5
+ import logging
6
+
7
+ from argus.client.base import TestStatus
8
+ from argus.client.generic.client import ArgusGenericClient
9
+
10
+ LOGGER = logging.getLogger(__name__)
11
+
12
+ def validate_extra_headers(ctx, param, value):
13
+ if isinstance(value, dict):
14
+ return value
15
+
16
+ try:
17
+ return json.loads(value)
18
+ except JSONDecodeError as ex:
19
+ raise click.BadParameter(f"--extra-headers should be in json format:\n\n{value}\n\n{ex}")
20
+
21
+
22
+ @click.group
23
+ def cli():
24
+ pass
25
+
26
+
27
+ @click.command("submit")
28
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
29
+ @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
30
+ @click.option("--id", required=True, help="UUID (v4 or v1) unique to the job")
31
+ @click.option("--build-id", required=True, help="Unique job identifier in the build system, e.g. scylla-master/group/job for jenkins (The full path)")
32
+ @click.option("--build-url", required=True, help="Job URL in the build system")
33
+ @click.option("--started-by", required=True, help="Username of the user who started the job")
34
+ @click.option("--scylla-version", required=False, default=None, help="Version of Scylla used for this job")
35
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
36
+ def submit_run(api_key: str, base_url: str, id: str, build_id: str, build_url: str, started_by: str, scylla_version: str = None, extra_headers: dict | None = None):
37
+ LOGGER.info("Submitting %s (%s) to Argus...", build_id, id)
38
+ client = ArgusGenericClient(auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
39
+ client.submit_generic_run(build_id=build_id, run_id=id, started_by=started_by, build_url=build_url, scylla_version=scylla_version)
40
+ LOGGER.info("Done.")
41
+
42
+
43
+ @click.command("finish")
44
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
45
+ @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
46
+ @click.option("--id", required=True, help="UUID (v4 or v1) unique to the job")
47
+ @click.option("--status", required=True, help="Resulting job status")
48
+ @click.option("--scylla-version", required=False, default=None, help="Version of Scylla used for this job")
49
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
50
+ def finish_run(api_key: str, base_url: str, id: str, status: str, scylla_version: str = None, extra_headers: dict | None = None):
51
+ client = ArgusGenericClient(auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
52
+ status = TestStatus(status)
53
+ client.finalize_generic_run(run_id=id, status=status, scylla_version=scylla_version)
54
+
55
+
56
+ @click.command("trigger-jobs")
57
+ @click.option("--api-key", help="Argus API key for authorization", required=True, envvar='ARGUS_AUTH_TOKEN')
58
+ @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
59
+ @click.option("--version", help="Scylla version to filter plans by", default=None, required=False)
60
+ @click.option("--plan-id", help="Specific plan id for filtering", default=None, required=False)
61
+ @click.option("--release", help="Release name to filter plans by", default=None, required=False)
62
+ @click.option("--job-info-file", required=True, help="JSON file with trigger information (see detailed docs)")
63
+ @click.option("--extra-headers", default={}, type=click.UNPROCESSED, callback=validate_extra_headers, help="extra headers to pass to argus, should be in json format", envvar='ARGUS_EXTRA_HEADERS')
64
+ def trigger_jobs(api_key: str, base_url: str, job_info_file: str, version: str, plan_id: str, release: str, extra_headers: dict | None = None):
65
+ client = ArgusGenericClient(auth_token=api_key, base_url=base_url, extra_headers=extra_headers)
66
+ path = Path(job_info_file)
67
+ if not path.exists():
68
+ LOGGER.error("File not found: %s", job_info_file)
69
+ exit(128)
70
+ payload = json.load(path.open("rt", encoding="utf-8"))
71
+ client.trigger_jobs({ "release": release, "version": version, "plan_id": plan_id, **payload })
72
+
73
+
74
+ cli.add_command(submit_run)
75
+ cli.add_command(finish_run)
76
+ cli.add_command(trigger_jobs)
77
+
78
+
79
+ if __name__ == "__main__":
80
+ cli()
@@ -7,8 +7,12 @@ LOGGER = logging.getLogger(__name__)
7
7
  class ArgusGenericClient(ArgusClient):
8
8
  test_type = "generic"
9
9
  schema_version: None = "v1"
10
- def __init__(self, auth_token: str, base_url: str, api_version="v1") -> None:
11
- super().__init__(auth_token, base_url, api_version)
10
+
11
+ class Routes(ArgusClient.Routes):
12
+ TRIGGER_JOBS = "/planning/plan/trigger"
13
+
14
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
15
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
12
16
 
13
17
  def submit_generic_run(self, build_id: str, run_id: str, started_by: str, build_url: str, scylla_version: str | None = None):
14
18
  request_body = {
@@ -22,10 +26,28 @@ class ArgusGenericClient(ArgusClient):
22
26
  response = self.submit_run(run_type=self.test_type, run_body=request_body)
23
27
  self.check_response(response)
24
28
 
29
+ def trigger_jobs(self, common_params: dict[str, str], params: list[dict[str, str]], version: str = None, release: str = None, plan_id: str = None):
30
+ request_body = {
31
+ "common_params": common_params,
32
+ "params": params,
33
+ "version": version,
34
+ "release": release,
35
+ "plan_id": plan_id,
36
+ }
37
+ response = self.post(
38
+ endpoint=self.Routes.TRIGGER_JOBS,
39
+ location_params={},
40
+ body={
41
+ **self.generic_body,
42
+ **request_body,
43
+ }
44
+ )
45
+ self.check_response(response)
46
+ return response.json()
25
47
 
26
48
  def finalize_generic_run(self, run_id: str, status: str, scylla_version: str | None = None):
27
49
  response = self.finalize_run(run_type=self.test_type, run_id=run_id, body={
28
50
  "status": status,
29
51
  "scylla_version": scylla_version,
30
52
  })
31
- self.check_response(response)
53
+ self.check_response(response)
@@ -62,6 +62,7 @@ class ResultTableMeta(type):
62
62
  cls_instance.description = meta.description
63
63
  cls_instance.columns = meta.Columns
64
64
  cls_instance.column_types = {column.name: column.type for column in cls_instance.columns}
65
+ cls_instance.sut_package_name = getattr(meta, 'sut_package_name', '')
65
66
  cls_instance.rows = []
66
67
  validation_rules = getattr(meta, 'ValidationRules', {})
67
68
  for col_name, rule in validation_rules.items():
@@ -98,7 +99,6 @@ class GenericResultTable(metaclass=ResultTableMeta):
98
99
  Base class for all Generic Result Tables in Argus. Use it as a base class for your result table.
99
100
  """
100
101
  sut_timestamp: int = 0 # automatic timestamp based on SUT version. Works only with SCT and refers to Scylla version.
101
- sut_details: str = ""
102
102
  results: list[Cell] = field(default_factory=list)
103
103
 
104
104
  def as_dict(self) -> dict:
@@ -112,12 +112,12 @@ class GenericResultTable(metaclass=ResultTableMeta):
112
112
  "description": self.description,
113
113
  "columns_meta": [column.as_dict() for column in self.columns],
114
114
  "rows_meta": rows,
115
- "validation_rules": {k: v.as_dict() for k, v in self.validation_rules.items()}
115
+ "validation_rules": {k: v.as_dict() for k, v in self.validation_rules.items()},
116
+ "sut_package_name": self.sut_package_name,
116
117
  }
117
118
  return {
118
119
  "meta": meta_info,
119
120
  "sut_timestamp": self.sut_timestamp,
120
- "sut_details": self.sut_details,
121
121
  "results": [result.as_dict() for result in self.results]
122
122
  }
123
123
 
@@ -27,8 +27,8 @@ class ArgusSCTClient(ArgusClient):
27
27
  SUBMIT_EVENTS = "/sct/$id/events/submit"
28
28
  SUBMIT_JUNIT_REPORT = "/sct/$id/junit/submit"
29
29
 
30
- def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1") -> None:
31
- super().__init__(auth_token, base_url, api_version)
30
+ def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
31
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
32
32
  self.run_id = run_id
33
33
 
34
34
  def submit_sct_run(self, job_name: str, job_url: str, started_by: str, commit_id: str,
@@ -56,7 +56,7 @@ class ArgusSCTClient(ArgusClient):
56
56
  response = super().set_status(run_type=self.test_type, run_id=self.run_id, new_status=new_status)
57
57
  self.check_response(response)
58
58
 
59
- def set_sct_runner(self, public_ip: str, private_ip: str, region: str, backend: str) -> None:
59
+ def set_sct_runner(self, public_ip: str, private_ip: str, region: str, backend: str, name: str = None) -> None:
60
60
  """
61
61
  Sets runner information for an SCT run.
62
62
  """
@@ -69,6 +69,7 @@ class ArgusSCTClient(ArgusClient):
69
69
  "private_ip": private_ip,
70
70
  "region": region,
71
71
  "backend": backend,
72
+ "name": name,
72
73
  }
73
74
  )
74
75
  self.check_response(response)
@@ -43,9 +43,9 @@ class ArgusSirenadaClient(ArgusClient):
43
43
  "skipped": "skipped"
44
44
  }
45
45
 
46
- def __init__(self, auth_token: str, base_url: str, api_version="v1") -> None:
46
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
47
47
  self.results_path: Path | None = None
48
- super().__init__(auth_token, base_url, api_version)
48
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
49
49
 
50
50
  def _verify_required_files_exist(self, results_path: Path):
51
51
  assert (results_path / self._junit_xml_filename).exists(), "Missing jUnit XML results file!"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "argus-alm"
3
- version = "0.13.0"
3
+ version = "0.14.0"
4
4
  description = "Argus"
5
5
  authors = ["Alexey Kartashov <alexey.kartashov@scylladb.com>", "Łukasz Sójka <lukasz.sojka@scylladb.com>"]
6
6
  license = "Apache-2.0"
@@ -44,6 +44,7 @@ python-slugify = "^6.1.1"
44
44
  supervisor = "^4.2.4"
45
45
 
46
46
  [tool.poetry.dev-dependencies]
47
+ black = "^24.10.0"
47
48
  coverage = "5.5"
48
49
  docker = "7.1.0"
49
50
  pytest = "6.2.5"
@@ -54,3 +55,7 @@ pre-commit = "^1.14.0"
54
55
  [build-system]
55
56
  requires = ["poetry-core>=1.0.0"]
56
57
  build-backend = "poetry.core.masonry.api"
58
+
59
+ [tool.black]
60
+ line-length = 110
61
+ target-version = ["py312"]
@@ -1,47 +0,0 @@
1
- import click
2
- import logging
3
-
4
- from argus.client.base import TestStatus
5
- from argus.client.generic.client import ArgusGenericClient
6
-
7
- LOGGER = logging.getLogger(__name__)
8
-
9
-
10
- @click.group
11
- def cli():
12
- pass
13
-
14
-
15
- @click.command("submit")
16
- @click.option("--api-key", help="Argus API key for authorization", required=True)
17
- @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
18
- @click.option("--id", required=True, help="UUID (v4 or v1) unique to the job")
19
- @click.option("--build-id", required=True, help="Unique job identifier in the build system, e.g. scylla-master/group/job for jenkins (The full path)")
20
- @click.option("--build-url", required=True, help="Job URL in the build system")
21
- @click.option("--started-by", required=True, help="Username of the user who started the job")
22
- @click.option("--scylla-version", required=False, default=None, help="Version of Scylla used for this job")
23
- def submit_run(api_key: str, base_url: str, id: str, build_id: str, build_url: str, started_by: str, scylla_version: str = None):
24
- LOGGER.info("Submitting %s (%s) to Argus...", build_id, id)
25
- client = ArgusGenericClient(auth_token=api_key, base_url=base_url)
26
- client.submit_generic_run(build_id=build_id, run_id=id, started_by=started_by, build_url=build_url, scylla_version=scylla_version)
27
- LOGGER.info("Done.")
28
-
29
-
30
- @click.command("finish")
31
- @click.option("--api-key", help="Argus API key for authorization", required=True)
32
- @click.option("--base-url", default="https://argus.scylladb.com", help="Base URL for argus instance")
33
- @click.option("--id", required=True, help="UUID (v4 or v1) unique to the job")
34
- @click.option("--status", required=True, help="Resulting job status")
35
- @click.option("--scylla-version", required=False, default=None, help="Version of Scylla used for this job")
36
- def finish_run(api_key: str, base_url: str, id: str, status: str, scylla_version: str = None):
37
- client = ArgusGenericClient(auth_token=api_key, base_url=base_url)
38
- status = TestStatus(status)
39
- client.finalize_generic_run(run_id=id, status=status, scylla_version=scylla_version)
40
-
41
-
42
- cli.add_command(submit_run)
43
- cli.add_command(finish_run)
44
-
45
-
46
- if __name__ == "__main__":
47
- cli()
File without changes
File without changes
File without changes