c2cciutils 1.7.3.dev2__tar.gz → 1.8.0.dev45__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.
Potentially problematic release.
This version of c2cciutils might be problematic. Click here for more details.
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/PKG-INFO +3 -3
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/__init__.py +15 -10
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/applications-versions.yaml +2 -2
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/applications_definition.py +3 -5
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/configuration.py +2 -4
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/env.py +8 -24
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/lib/docker.py +2 -6
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/lib/oidc.py +2 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/package-lock.json +45 -111
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/package.json +1 -1
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/publish.py +17 -30
- c2cciutils-1.8.0.dev45/c2cciutils/scripts/__init__.py +1 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/clean.py +4 -10
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/docker_logs.py +4 -4
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/env.py +2 -6
- c2cciutils-1.8.0.dev45/c2cciutils/scripts/k8s/__init__.py +1 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/main.py +2 -6
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/publish.py +19 -22
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/trigger_image_update.py +3 -7
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/version.py +5 -3
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/pyproject.toml +11 -11
- c2cciutils-1.7.3.dev2/c2cciutils/scripts/__init__.py +0 -3
- c2cciutils-1.7.3.dev2/c2cciutils/scripts/k8s/__init__.py +0 -3
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/LICENSE +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/README.md +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/applications.yaml +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/branches.graphql +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/commits.graphql +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/default_branch.graphql +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/schema-applications.json +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/schema.json +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/docker_versions_gen.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/download_applications.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/k8s/db.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/k8s/install.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/k8s/logs.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/k8s/wait.py +0 -0
- {c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/pin_pipenv.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: c2cciutils
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.8.0.dev45
|
|
4
4
|
Summary: Common utilities for Camptocamp CI
|
|
5
5
|
Home-page: https://github.com/camptocamp/c2cciutils
|
|
6
6
|
License: FreeBSD
|
|
@@ -38,8 +38,8 @@ Requires-Dist: id (>=1.0.0,<2.0.0) ; extra == "publish"
|
|
|
38
38
|
Requires-Dist: multi-repo-automation (>=1.0.0,<2.0.0) ; extra == "version"
|
|
39
39
|
Requires-Dist: requests (>=2.0.0,<3.0.0)
|
|
40
40
|
Requires-Dist: ruamel.yaml (>=0.0.0,<1.0.0)
|
|
41
|
-
Requires-Dist: security-md (>=
|
|
42
|
-
Requires-Dist: twine (>=
|
|
41
|
+
Requires-Dist: security-md (>=1.0.0,<2.0.0)
|
|
42
|
+
Requires-Dist: twine (>=6.0.0,<7.0.0) ; extra == "publish"
|
|
43
43
|
Project-URL: Repository, https://github.com/camptocamp/c2cciutils
|
|
44
44
|
Description-Content-Type: text/markdown
|
|
45
45
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
c2cciutils shared utils function.
|
|
3
|
-
"""
|
|
1
|
+
"""c2cciutils shared utils function."""
|
|
4
2
|
|
|
5
3
|
import glob
|
|
6
4
|
import json
|
|
@@ -18,9 +16,7 @@ import c2cciutils.configuration
|
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
def get_repository() -> str:
|
|
21
|
-
"""
|
|
22
|
-
Get the current GitHub repository like `organization/project`.
|
|
23
|
-
"""
|
|
19
|
+
"""Get the current GitHub repository like `organization/project`."""
|
|
24
20
|
if "GITHUB_REPOSITORY" in os.environ:
|
|
25
21
|
return os.environ["GITHUB_REPOSITORY"]
|
|
26
22
|
|
|
@@ -44,11 +40,12 @@ def merge(default_config: Any, config: Any) -> Any:
|
|
|
44
40
|
Arguments:
|
|
45
41
|
default_config: The default config that will be applied
|
|
46
42
|
config: The base config, will be modified
|
|
43
|
+
|
|
47
44
|
"""
|
|
48
45
|
if not isinstance(default_config, dict) or not isinstance(config, dict):
|
|
49
46
|
return config
|
|
50
47
|
|
|
51
|
-
for key in default_config
|
|
48
|
+
for key in default_config:
|
|
52
49
|
if key not in config:
|
|
53
50
|
config[key] = default_config[key]
|
|
54
51
|
else:
|
|
@@ -73,9 +70,7 @@ def get_master_branch(repo: list[str]) -> tuple[str, bool]:
|
|
|
73
70
|
|
|
74
71
|
|
|
75
72
|
def get_config() -> c2cciutils.configuration.Configuration:
|
|
76
|
-
"""
|
|
77
|
-
Get the configuration, with project and auto detections.
|
|
78
|
-
"""
|
|
73
|
+
"""Get the configuration, with project and auto detections."""
|
|
79
74
|
config: c2cciutils.configuration.Configuration = {}
|
|
80
75
|
if os.path.exists("ci/config.yaml"):
|
|
81
76
|
with open("ci/config.yaml", encoding="utf-8") as open_file:
|
|
@@ -155,6 +150,7 @@ def error(
|
|
|
155
150
|
line: The line number of the error
|
|
156
151
|
col: The column number of the error
|
|
157
152
|
error_type: The kind of error (error or warning)
|
|
153
|
+
|
|
158
154
|
"""
|
|
159
155
|
result = ""
|
|
160
156
|
on_ci = os.environ.get("CI", "false").lower() == "true"
|
|
@@ -197,6 +193,7 @@ def compile_re(config: c2cciutils.configuration.VersionTransform, prefix: str =
|
|
|
197
193
|
prefix: The version prefix
|
|
198
194
|
|
|
199
195
|
Return the compiled transform config.
|
|
196
|
+
|
|
200
197
|
"""
|
|
201
198
|
result = []
|
|
202
199
|
for conf in config:
|
|
@@ -226,6 +223,7 @@ def match(
|
|
|
226
223
|
|
|
227
224
|
Returns the re match object, the matched config and the value as a tuple
|
|
228
225
|
On no match it returns None, value
|
|
226
|
+
|
|
229
227
|
"""
|
|
230
228
|
for conf in config:
|
|
231
229
|
matched = conf["from"].match(value)
|
|
@@ -243,6 +241,7 @@ def does_match(value: str, config: list[VersionTransform]) -> bool:
|
|
|
243
241
|
config: The result of `compile`
|
|
244
242
|
|
|
245
243
|
Returns True it it does match else False
|
|
244
|
+
|
|
246
245
|
"""
|
|
247
246
|
matched, _, _ = match(value, config)
|
|
248
247
|
return matched is not None
|
|
@@ -262,6 +261,7 @@ def get_value(matched: Optional[Match[str]], config: Optional[VersionTransform],
|
|
|
262
261
|
value: The default value on returned no match
|
|
263
262
|
|
|
264
263
|
Return the value
|
|
264
|
+
|
|
265
265
|
"""
|
|
266
266
|
return matched.expand(config.get("to", r"\1")) if matched is not None and config is not None else value
|
|
267
267
|
|
|
@@ -272,6 +272,7 @@ def print_versions(config: c2cciutils.configuration.PrintVersions) -> bool:
|
|
|
272
272
|
|
|
273
273
|
Arguments:
|
|
274
274
|
config: The print configuration
|
|
275
|
+
|
|
275
276
|
"""
|
|
276
277
|
for version in config.get("versions", c2cciutils.configuration.PRINT_VERSIONS_VERSIONS_DEFAULT):
|
|
277
278
|
try:
|
|
@@ -310,6 +311,7 @@ def gopass(key: str, default: Optional[str] = None) -> Optional[str]:
|
|
|
310
311
|
default: the value to return if gopass is not found
|
|
311
312
|
|
|
312
313
|
Return the value
|
|
314
|
+
|
|
313
315
|
"""
|
|
314
316
|
try:
|
|
315
317
|
return subprocess.check_output(["gopass", "show", key]).strip().decode()
|
|
@@ -326,6 +328,7 @@ def gopass_put(secret: str, key: str) -> None:
|
|
|
326
328
|
Arguments:
|
|
327
329
|
secret: The secret value
|
|
328
330
|
key: The key
|
|
331
|
+
|
|
329
332
|
"""
|
|
330
333
|
subprocess.check_output(["gopass", "insert", "--force", key], input=secret.encode())
|
|
331
334
|
|
|
@@ -338,6 +341,7 @@ def add_authorization_header(headers: dict[str, str]) -> dict[str, str]:
|
|
|
338
341
|
headers: The headers
|
|
339
342
|
|
|
340
343
|
Return the headers (to be chained)
|
|
344
|
+
|
|
341
345
|
"""
|
|
342
346
|
try:
|
|
343
347
|
token = (
|
|
@@ -375,6 +379,7 @@ def graphql(query_file: str, variables: dict[str, Any], default: Any = None) ->
|
|
|
375
379
|
|
|
376
380
|
Return the data result
|
|
377
381
|
In case of error it throw an exception
|
|
382
|
+
|
|
378
383
|
"""
|
|
379
384
|
with open(os.path.join(os.path.dirname(__file__), query_file), encoding="utf-8") as query_open:
|
|
380
385
|
query = query_open.read()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
# https://docs.renovatebot.com/modules/datasource/#github-releases-datasource
|
|
2
2
|
k3d-io/k3d: v5.7.5 # github-releases
|
|
3
|
-
postgresql: 16.
|
|
4
|
-
helm/chart-releaser: v1.
|
|
3
|
+
postgresql: 16.3.5 # helm - https://charts.bitnami.com/bitnami
|
|
4
|
+
helm/chart-releaser: v1.7.0 # github-releases
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Automatically generated file from a JSON schema.
|
|
3
|
-
"""
|
|
1
|
+
"""Automatically generated file from a JSON schema."""
|
|
4
2
|
|
|
5
|
-
from typing import Literal, TypedDict
|
|
3
|
+
from typing import Literal, TypedDict
|
|
6
4
|
|
|
7
5
|
# | Application configuration.
|
|
8
6
|
# |
|
|
@@ -43,7 +41,7 @@ All the applications configuration
|
|
|
43
41
|
"""
|
|
44
42
|
|
|
45
43
|
|
|
46
|
-
TheTypeOfFile =
|
|
44
|
+
TheTypeOfFile = Literal["tar"]
|
|
47
45
|
"""
|
|
48
46
|
The type of file.
|
|
49
47
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Automatically generated file from a JSON schema.
|
|
3
|
-
"""
|
|
1
|
+
"""Automatically generated file from a JSON schema."""
|
|
4
2
|
|
|
5
3
|
from typing import Any, Literal, TypedDict, Union
|
|
6
4
|
|
|
@@ -721,7 +719,7 @@ default:
|
|
|
721
719
|
|
|
722
720
|
|
|
723
721
|
class _PublishDockerConfigSnyk(TypedDict, total=False):
|
|
724
|
-
"""Checks the published images with Snyk"""
|
|
722
|
+
"""Checks the published images with Snyk."""
|
|
725
723
|
|
|
726
724
|
monitor_args: Union["_PublishDockerSnykMonitorArgsOneof0", "_PublishDockerSnykMonitorArgsOneof1"]
|
|
727
725
|
"""
|
|
@@ -10,9 +10,7 @@ import c2cciutils.configuration
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class PrintVersions:
|
|
13
|
-
"""
|
|
14
|
-
Print some tools versions.
|
|
15
|
-
"""
|
|
13
|
+
"""Print some tools versions."""
|
|
16
14
|
|
|
17
15
|
def __init__(self, config: c2cciutils.configuration.PrintVersions) -> None:
|
|
18
16
|
"""Construct."""
|
|
@@ -24,9 +22,7 @@ class PrintVersions:
|
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
class PrintConfig:
|
|
27
|
-
"""
|
|
28
|
-
Print the configuration.
|
|
29
|
-
"""
|
|
25
|
+
"""Print the configuration."""
|
|
30
26
|
|
|
31
27
|
def __init__(self, config: c2cciutils.configuration.Configuration) -> None:
|
|
32
28
|
"""Construct."""
|
|
@@ -40,49 +36,37 @@ class PrintConfig:
|
|
|
40
36
|
|
|
41
37
|
|
|
42
38
|
def print_environment_variables() -> None:
|
|
43
|
-
"""
|
|
44
|
-
Print the environment variables.
|
|
45
|
-
"""
|
|
39
|
+
"""Print the environment variables."""
|
|
46
40
|
for name, value in sorted(os.environ.items()):
|
|
47
41
|
if name != "GITHUB_EVENT":
|
|
48
42
|
print(f"{name}: {value}")
|
|
49
43
|
|
|
50
44
|
|
|
51
45
|
def print_github_event_file() -> None:
|
|
52
|
-
"""
|
|
53
|
-
Print the GitHub event file.
|
|
54
|
-
"""
|
|
46
|
+
"""Print the GitHub event file."""
|
|
55
47
|
if "GITHUB_EVENT_PATH" in os.environ:
|
|
56
48
|
with open(os.environ["GITHUB_EVENT_PATH"], encoding="utf-8") as event:
|
|
57
49
|
print(event.read())
|
|
58
50
|
|
|
59
51
|
|
|
60
52
|
def print_github_event_object() -> None:
|
|
61
|
-
"""
|
|
62
|
-
Print the GitHub event object.
|
|
63
|
-
"""
|
|
53
|
+
"""Print the GitHub event object."""
|
|
64
54
|
github_event = json.loads(os.environ["GITHUB_EVENT"])
|
|
65
55
|
print(yaml.dump(github_event, indent=2))
|
|
66
56
|
|
|
67
57
|
|
|
68
58
|
def print_python_package_version() -> None:
|
|
69
|
-
"""
|
|
70
|
-
Print the version of the Python packages.
|
|
71
|
-
"""
|
|
59
|
+
"""Print the version of the Python packages."""
|
|
72
60
|
subprocess.run(["python3", "-m", "pip", "freeze", "--all"]) # pylint: disable=subprocess-run-check
|
|
73
61
|
|
|
74
62
|
|
|
75
63
|
def print_node_package_version() -> None:
|
|
76
|
-
"""
|
|
77
|
-
Print the version of the Python packages.
|
|
78
|
-
"""
|
|
64
|
+
"""Print the version of the Python packages."""
|
|
79
65
|
subprocess.run(["npm", "list", "--global"]) # pylint: disable=subprocess-run-check
|
|
80
66
|
|
|
81
67
|
|
|
82
68
|
def print_debian_package_version() -> None:
|
|
83
|
-
"""
|
|
84
|
-
Print the version of the Python packages.
|
|
85
|
-
"""
|
|
69
|
+
"""Print the version of the Python packages."""
|
|
86
70
|
subprocess.run(["dpkg", "--list"]) # pylint: disable=subprocess-run-check
|
|
87
71
|
|
|
88
72
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Some utility functions for Docker images.
|
|
3
|
-
"""
|
|
1
|
+
"""Some utility functions for Docker images."""
|
|
4
2
|
|
|
5
3
|
import os
|
|
6
4
|
import subprocess # nosec: B404
|
|
@@ -102,9 +100,7 @@ def get_dpkg_packages_versions(
|
|
|
102
100
|
|
|
103
101
|
|
|
104
102
|
def get_versions_config() -> tuple[dict[str, dict[str, str]], bool]:
|
|
105
|
-
"""
|
|
106
|
-
Get the versions from the config file.
|
|
107
|
-
"""
|
|
103
|
+
"""Get the versions from the config file."""
|
|
108
104
|
if os.path.exists("ci/dpkg-versions.yaml"):
|
|
109
105
|
with open("ci/dpkg-versions.yaml", encoding="utf-8") as versions_file:
|
|
110
106
|
return (
|
|
@@ -154,8 +154,10 @@ def pypi_login() -> None:
|
|
|
154
154
|
Connect to PyPI using OpenID Connect and mint a token for the user.
|
|
155
155
|
|
|
156
156
|
See Also
|
|
157
|
+
--------
|
|
157
158
|
- https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/about-security-hardening-with-openid-connect
|
|
158
159
|
- https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-pypi
|
|
160
|
+
|
|
159
161
|
"""
|
|
160
162
|
pypirc_filename = os.path.expanduser("~/.pypirc")
|
|
161
163
|
|
|
@@ -8,45 +8,45 @@
|
|
|
8
8
|
"name": "c2ccicheck",
|
|
9
9
|
"version": "1.0.0",
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"snyk": "1.
|
|
11
|
+
"snyk": "1.1294.3"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"node_modules/@sentry-internal/tracing": {
|
|
15
|
-
"version": "7.
|
|
16
|
-
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.
|
|
17
|
-
"integrity": "sha512-
|
|
15
|
+
"version": "7.120.2",
|
|
16
|
+
"resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.120.2.tgz",
|
|
17
|
+
"integrity": "sha512-eo2F8cP6X+vr54Mp6vu+NoQEDz0M5O24Tz8jPY0T1CpiWdwCmHb7Sln+oLXeQ3/LlWdVQihBfKDBZfBdUfsBTg==",
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@sentry/core": "7.
|
|
21
|
-
"@sentry/types": "7.
|
|
22
|
-
"@sentry/utils": "7.
|
|
20
|
+
"@sentry/core": "7.120.2",
|
|
21
|
+
"@sentry/types": "7.120.2",
|
|
22
|
+
"@sentry/utils": "7.120.2"
|
|
23
23
|
},
|
|
24
24
|
"engines": {
|
|
25
25
|
"node": ">=8"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"node_modules/@sentry/core": {
|
|
29
|
-
"version": "7.
|
|
30
|
-
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.
|
|
31
|
-
"integrity": "sha512-
|
|
29
|
+
"version": "7.120.2",
|
|
30
|
+
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.120.2.tgz",
|
|
31
|
+
"integrity": "sha512-eurLBFQJC7WWWYoEna25Z9I/GJjqAmH339tv52XP8sqXV7B5hRcHDcfrsT/UGHpU316M24p3lWhj0eimtCZ0SQ==",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@sentry/types": "7.
|
|
35
|
-
"@sentry/utils": "7.
|
|
34
|
+
"@sentry/types": "7.120.2",
|
|
35
|
+
"@sentry/utils": "7.120.2"
|
|
36
36
|
},
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=8"
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"node_modules/@sentry/integrations": {
|
|
42
|
-
"version": "7.
|
|
43
|
-
"resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.
|
|
44
|
-
"integrity": "sha512-
|
|
42
|
+
"version": "7.120.2",
|
|
43
|
+
"resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.120.2.tgz",
|
|
44
|
+
"integrity": "sha512-bMvL2fD3TGLM5YAUoQ2Qz6bYeVU8f7YRFNSjKNxK4EbvFgAU9j1FD6EKg0V0RNOJYnJjGIZYMmcWTXBbVTJL6w==",
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@sentry/core": "7.
|
|
48
|
-
"@sentry/types": "7.
|
|
49
|
-
"@sentry/utils": "7.
|
|
47
|
+
"@sentry/core": "7.120.2",
|
|
48
|
+
"@sentry/types": "7.120.2",
|
|
49
|
+
"@sentry/utils": "7.120.2",
|
|
50
50
|
"localforage": "^1.8.1"
|
|
51
51
|
},
|
|
52
52
|
"engines": {
|
|
@@ -54,37 +54,37 @@
|
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
56
|
"node_modules/@sentry/node": {
|
|
57
|
-
"version": "7.
|
|
58
|
-
"resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.
|
|
59
|
-
"integrity": "sha512-
|
|
57
|
+
"version": "7.120.2",
|
|
58
|
+
"resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.120.2.tgz",
|
|
59
|
+
"integrity": "sha512-ZnW9gpIGaoU+vYZyVZca9dObfmWYiXEWIMUM/JXaFb8AhP1OXvYweNiU0Pe/gNrz4oGAogU8scJc70ar7Vj0ww==",
|
|
60
60
|
"license": "MIT",
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@sentry-internal/tracing": "7.
|
|
63
|
-
"@sentry/core": "7.
|
|
64
|
-
"@sentry/integrations": "7.
|
|
65
|
-
"@sentry/types": "7.
|
|
66
|
-
"@sentry/utils": "7.
|
|
62
|
+
"@sentry-internal/tracing": "7.120.2",
|
|
63
|
+
"@sentry/core": "7.120.2",
|
|
64
|
+
"@sentry/integrations": "7.120.2",
|
|
65
|
+
"@sentry/types": "7.120.2",
|
|
66
|
+
"@sentry/utils": "7.120.2"
|
|
67
67
|
},
|
|
68
68
|
"engines": {
|
|
69
69
|
"node": ">=8"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"node_modules/@sentry/types": {
|
|
73
|
-
"version": "7.
|
|
74
|
-
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.
|
|
75
|
-
"integrity": "sha512-
|
|
73
|
+
"version": "7.120.2",
|
|
74
|
+
"resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.120.2.tgz",
|
|
75
|
+
"integrity": "sha512-FWVoiblHQJ892GaOqdXx/5/n5XDLF28z81vJ0lCY49PMh8waz8LJ0b9RSmt9tasSDl0OQ7eUlPl1xu1jTrv1NA==",
|
|
76
76
|
"license": "MIT",
|
|
77
77
|
"engines": {
|
|
78
78
|
"node": ">=8"
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
81
|
"node_modules/@sentry/utils": {
|
|
82
|
-
"version": "7.
|
|
83
|
-
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.
|
|
84
|
-
"integrity": "sha512-
|
|
82
|
+
"version": "7.120.2",
|
|
83
|
+
"resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.120.2.tgz",
|
|
84
|
+
"integrity": "sha512-jgnQlw11mRfQrQRAXbq4zEd+tbYwHel5eqeS/oU6EImXRjmHNtS79nB8MHvJeQu1FMCpFs1Ymrrs5FICwS6VeQ==",
|
|
85
85
|
"license": "MIT",
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@sentry/types": "7.
|
|
87
|
+
"@sentry/types": "7.120.2"
|
|
88
88
|
},
|
|
89
89
|
"engines": {
|
|
90
90
|
"node": ">=8"
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"version": "3.2.0",
|
|
95
95
|
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
|
|
96
96
|
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
|
|
97
|
+
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
|
|
97
98
|
"license": "MIT"
|
|
98
99
|
},
|
|
99
100
|
"node_modules/define-data-property": {
|
|
@@ -137,13 +138,10 @@
|
|
|
137
138
|
"license": "MIT"
|
|
138
139
|
},
|
|
139
140
|
"node_modules/es-define-property": {
|
|
140
|
-
"version": "1.0.
|
|
141
|
-
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.
|
|
142
|
-
"integrity": "sha512-
|
|
141
|
+
"version": "1.0.1",
|
|
142
|
+
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
|
143
|
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
|
143
144
|
"license": "MIT",
|
|
144
|
-
"dependencies": {
|
|
145
|
-
"get-intrinsic": "^1.2.4"
|
|
146
|
-
},
|
|
147
145
|
"engines": {
|
|
148
146
|
"node": ">= 0.4"
|
|
149
147
|
}
|
|
@@ -175,34 +173,6 @@
|
|
|
175
173
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
176
174
|
}
|
|
177
175
|
},
|
|
178
|
-
"node_modules/function-bind": {
|
|
179
|
-
"version": "1.1.2",
|
|
180
|
-
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
|
181
|
-
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
|
182
|
-
"license": "MIT",
|
|
183
|
-
"funding": {
|
|
184
|
-
"url": "https://github.com/sponsors/ljharb"
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
"node_modules/get-intrinsic": {
|
|
188
|
-
"version": "1.2.4",
|
|
189
|
-
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
|
|
190
|
-
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
|
|
191
|
-
"license": "MIT",
|
|
192
|
-
"dependencies": {
|
|
193
|
-
"es-errors": "^1.3.0",
|
|
194
|
-
"function-bind": "^1.1.2",
|
|
195
|
-
"has-proto": "^1.0.1",
|
|
196
|
-
"has-symbols": "^1.0.3",
|
|
197
|
-
"hasown": "^2.0.0"
|
|
198
|
-
},
|
|
199
|
-
"engines": {
|
|
200
|
-
"node": ">= 0.4"
|
|
201
|
-
},
|
|
202
|
-
"funding": {
|
|
203
|
-
"url": "https://github.com/sponsors/ljharb"
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
176
|
"node_modules/global-agent": {
|
|
207
177
|
"version": "3.0.0",
|
|
208
178
|
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
|
|
@@ -237,12 +207,12 @@
|
|
|
237
207
|
}
|
|
238
208
|
},
|
|
239
209
|
"node_modules/gopd": {
|
|
240
|
-
"version": "1.0
|
|
241
|
-
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.
|
|
242
|
-
"integrity": "sha512-
|
|
210
|
+
"version": "1.2.0",
|
|
211
|
+
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
|
212
|
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
|
243
213
|
"license": "MIT",
|
|
244
|
-
"
|
|
245
|
-
"
|
|
214
|
+
"engines": {
|
|
215
|
+
"node": ">= 0.4"
|
|
246
216
|
},
|
|
247
217
|
"funding": {
|
|
248
218
|
"url": "https://github.com/sponsors/ljharb"
|
|
@@ -260,42 +230,6 @@
|
|
|
260
230
|
"url": "https://github.com/sponsors/ljharb"
|
|
261
231
|
}
|
|
262
232
|
},
|
|
263
|
-
"node_modules/has-proto": {
|
|
264
|
-
"version": "1.0.3",
|
|
265
|
-
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
|
|
266
|
-
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
|
|
267
|
-
"license": "MIT",
|
|
268
|
-
"engines": {
|
|
269
|
-
"node": ">= 0.4"
|
|
270
|
-
},
|
|
271
|
-
"funding": {
|
|
272
|
-
"url": "https://github.com/sponsors/ljharb"
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
"node_modules/has-symbols": {
|
|
276
|
-
"version": "1.0.3",
|
|
277
|
-
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
|
278
|
-
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
|
279
|
-
"license": "MIT",
|
|
280
|
-
"engines": {
|
|
281
|
-
"node": ">= 0.4"
|
|
282
|
-
},
|
|
283
|
-
"funding": {
|
|
284
|
-
"url": "https://github.com/sponsors/ljharb"
|
|
285
|
-
}
|
|
286
|
-
},
|
|
287
|
-
"node_modules/hasown": {
|
|
288
|
-
"version": "2.0.2",
|
|
289
|
-
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
|
290
|
-
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
|
291
|
-
"license": "MIT",
|
|
292
|
-
"dependencies": {
|
|
293
|
-
"function-bind": "^1.1.2"
|
|
294
|
-
},
|
|
295
|
-
"engines": {
|
|
296
|
-
"node": ">= 0.4"
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
233
|
"node_modules/immediate": {
|
|
300
234
|
"version": "3.0.6",
|
|
301
235
|
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
|
|
@@ -398,9 +332,9 @@
|
|
|
398
332
|
}
|
|
399
333
|
},
|
|
400
334
|
"node_modules/snyk": {
|
|
401
|
-
"version": "1.
|
|
402
|
-
"resolved": "https://registry.npmjs.org/snyk/-/snyk-1.
|
|
403
|
-
"integrity": "sha512-
|
|
335
|
+
"version": "1.1294.3",
|
|
336
|
+
"resolved": "https://registry.npmjs.org/snyk/-/snyk-1.1294.3.tgz",
|
|
337
|
+
"integrity": "sha512-ZF+F2bv293HmpFxZCV0x8hT3rQGOl6rPDoJq/TqBT1i5/nZypfn8v4A1Q4m6zUSUs1g6WJsS8QR5wTlR/eSvMQ==",
|
|
404
338
|
"hasInstallScript": true,
|
|
405
339
|
"license": "Apache-2.0",
|
|
406
340
|
"dependencies": {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The publishing functions.
|
|
3
|
-
"""
|
|
1
|
+
"""The publishing functions."""
|
|
4
2
|
|
|
5
3
|
import argparse
|
|
6
4
|
import datetime
|
|
@@ -10,11 +8,11 @@ import pickle # nosec
|
|
|
10
8
|
import re
|
|
11
9
|
import subprocess # nosec
|
|
12
10
|
import sys
|
|
13
|
-
import tomllib
|
|
14
11
|
import uuid
|
|
15
12
|
from typing import Optional
|
|
16
13
|
|
|
17
14
|
import ruamel.yaml
|
|
15
|
+
import tomllib
|
|
18
16
|
from google.auth.transport.requests import Request
|
|
19
17
|
from google.oauth2.credentials import Credentials
|
|
20
18
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
@@ -24,17 +22,13 @@ import c2cciutils.configuration
|
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
class GoogleCalendar:
|
|
27
|
-
"""
|
|
28
|
-
Interact with the Google Calendar API.
|
|
29
|
-
"""
|
|
25
|
+
"""Interact with the Google Calendar API."""
|
|
30
26
|
|
|
31
27
|
# pylint: disable=too-many-instance-attributes
|
|
32
28
|
def __init__(self) -> None:
|
|
33
|
-
"""
|
|
34
|
-
Initialize.
|
|
35
|
-
"""
|
|
29
|
+
"""Initialize."""
|
|
36
30
|
self.scopes = ["https://www.googleapis.com/auth/calendar"] # in fact it is better to hard-code this
|
|
37
|
-
self.credentials_pickle_file = os.environ.get("TMP_CREDS_FILE", f"/tmp/{uuid.uuid4()}.pickle")
|
|
31
|
+
self.credentials_pickle_file = os.environ.get("TMP_CREDS_FILE", f"/tmp/{uuid.uuid4()}.pickle") # noqa: S108
|
|
38
32
|
self.credentials_json_file = os.environ.get(
|
|
39
33
|
"GOOGLE_CREDS_JSON_FILE", "~/google-credentials-c2cibot.json"
|
|
40
34
|
) # used to refresh the refresh_token or to initialize the credentials the first time
|
|
@@ -62,15 +56,13 @@ class GoogleCalendar:
|
|
|
62
56
|
self.service = build("calendar", "v3", credentials=self.creds)
|
|
63
57
|
|
|
64
58
|
def init_calendar_service(self) -> Credentials: # type: ignore
|
|
65
|
-
"""
|
|
66
|
-
Initialize the calendar service.
|
|
67
|
-
"""
|
|
59
|
+
"""Initialize the calendar service."""
|
|
68
60
|
# The file token pickle stores the user's access and refresh tokens, and is
|
|
69
61
|
# created automatically when the authorization flow completes for the first
|
|
70
62
|
# time.
|
|
71
63
|
if os.path.exists(self.credentials_pickle_file):
|
|
72
64
|
with open(self.credentials_pickle_file, "rb") as token:
|
|
73
|
-
creds = pickle.load(token) #
|
|
65
|
+
creds = pickle.load(token) # noqa: S301
|
|
74
66
|
# If there are no (valid) credentials available, let the user log in.
|
|
75
67
|
if not creds or not creds.valid: # pylint: disable=possibly-used-before-assignment
|
|
76
68
|
if creds and creds.expired and creds.refresh_token:
|
|
@@ -95,9 +87,7 @@ class GoogleCalendar:
|
|
|
95
87
|
pickle.dump(creds, token)
|
|
96
88
|
|
|
97
89
|
def _update_creds(self) -> None:
|
|
98
|
-
"""
|
|
99
|
-
Update the credentials.
|
|
100
|
-
"""
|
|
90
|
+
"""Update the credentials."""
|
|
101
91
|
self.client_id = self.creds.client_id
|
|
102
92
|
self.client_secret = self.creds.client_secret
|
|
103
93
|
self.token = self.creds.token
|
|
@@ -105,9 +95,7 @@ class GoogleCalendar:
|
|
|
105
95
|
self.refresh_token = self.creds.refresh_token
|
|
106
96
|
|
|
107
97
|
def print_all_calendars(self) -> None:
|
|
108
|
-
"""
|
|
109
|
-
Print all calendar events.
|
|
110
|
-
"""
|
|
98
|
+
"""Print all calendar events."""
|
|
111
99
|
# list all the calendars that the user has access to.
|
|
112
100
|
# used to debug credentials
|
|
113
101
|
print("Getting list of calendars")
|
|
@@ -129,6 +117,7 @@ class GoogleCalendar:
|
|
|
129
117
|
|
|
130
118
|
Arguments:
|
|
131
119
|
time_min: The time to be considered.
|
|
120
|
+
|
|
132
121
|
"""
|
|
133
122
|
now = datetime.datetime.utcnow()
|
|
134
123
|
if not time_min:
|
|
@@ -163,6 +152,7 @@ class GoogleCalendar:
|
|
|
163
152
|
Arguments:
|
|
164
153
|
summary: The event summary
|
|
165
154
|
description: The event description
|
|
155
|
+
|
|
166
156
|
"""
|
|
167
157
|
now = datetime.datetime.now()
|
|
168
158
|
start = now.isoformat()
|
|
@@ -178,9 +168,7 @@ class GoogleCalendar:
|
|
|
178
168
|
print(f"Created event with id: {event_result['id']}")
|
|
179
169
|
|
|
180
170
|
def save_credentials_to_gopass(self) -> None:
|
|
181
|
-
"""
|
|
182
|
-
Save the calendar credentials to gopass.
|
|
183
|
-
"""
|
|
171
|
+
"""Save the calendar credentials to gopass."""
|
|
184
172
|
objects_to_save = {
|
|
185
173
|
"gs/ci/google_calendar/calendarId": self.calendar_id,
|
|
186
174
|
"gs/ci/google_calendar/token": self.token,
|
|
@@ -194,17 +182,13 @@ class GoogleCalendar:
|
|
|
194
182
|
c2cciutils.gopass_put(secret, key)
|
|
195
183
|
|
|
196
184
|
def __del__(self) -> None:
|
|
197
|
-
"""
|
|
198
|
-
Delete the credentials file.
|
|
199
|
-
"""
|
|
185
|
+
"""Delete the credentials file."""
|
|
200
186
|
if os.path.exists(self.credentials_pickle_file):
|
|
201
187
|
os.remove(self.credentials_pickle_file)
|
|
202
188
|
|
|
203
189
|
|
|
204
190
|
def main_calendar() -> None:
|
|
205
|
-
"""
|
|
206
|
-
Run the calendar main function.
|
|
207
|
-
"""
|
|
191
|
+
"""Run the calendar main function."""
|
|
208
192
|
parser = argparse.ArgumentParser(
|
|
209
193
|
description="Interact with google API for the Docker publishing calendar"
|
|
210
194
|
)
|
|
@@ -254,6 +238,7 @@ def pip(
|
|
|
254
238
|
version_branch, feature_branch, feature_tag (for pull request)
|
|
255
239
|
publish: If False only check the package
|
|
256
240
|
package: The package configuration
|
|
241
|
+
|
|
257
242
|
"""
|
|
258
243
|
print(f"::group::{'Publishing' if publish else 'Checking'} '{package.get('path')}' to pypi")
|
|
259
244
|
sys.stdout.flush()
|
|
@@ -352,6 +337,7 @@ def docker(
|
|
|
352
337
|
tag_src: The source tag (usually latest)
|
|
353
338
|
dst_tags: Publish using the provided tags
|
|
354
339
|
images_full: The list of published images (with tag), used to build the dispatch event
|
|
340
|
+
|
|
355
341
|
"""
|
|
356
342
|
print(
|
|
357
343
|
f"::group::Publishing {image_config['name']} to the server {name} using the tags {', '.join(dst_tags)}"
|
|
@@ -411,6 +397,7 @@ def helm(folder: str, version: str, owner: str, repo: str, commit_sha: str, toke
|
|
|
411
397
|
repo: The GitHub repository name
|
|
412
398
|
commit_sha: The sha of the current commit
|
|
413
399
|
token: The GitHub token
|
|
400
|
+
|
|
414
401
|
"""
|
|
415
402
|
print(f"::group::Publishing Helm chart from '{folder}' to GitHub release")
|
|
416
403
|
sys.stdout.flush()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""The scripts main functions."""
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
The clean main function.
|
|
5
|
-
"""
|
|
3
|
+
"""The clean main function."""
|
|
6
4
|
|
|
7
5
|
import argparse
|
|
8
6
|
import json
|
|
@@ -24,6 +22,7 @@ def clean(image: str, tag: str, token: str) -> None:
|
|
|
24
22
|
image: The image name that should be deleted (<organization>/<name>)
|
|
25
23
|
tag: The tag that should be deleted
|
|
26
24
|
token: The token used to be authenticated on Docker hub
|
|
25
|
+
|
|
27
26
|
"""
|
|
28
27
|
print(f"Delete image '{image}:{tag}'.")
|
|
29
28
|
|
|
@@ -51,9 +50,7 @@ def clean(image: str, tag: str, token: str) -> None:
|
|
|
51
50
|
|
|
52
51
|
|
|
53
52
|
def main() -> None:
|
|
54
|
-
"""
|
|
55
|
-
Run the main function.
|
|
56
|
-
"""
|
|
53
|
+
"""Run the main function."""
|
|
57
54
|
parser = argparse.ArgumentParser(
|
|
58
55
|
description=(
|
|
59
56
|
"Clean the Docker images on Docker Hub for the branch we delete "
|
|
@@ -87,10 +84,7 @@ def main() -> None:
|
|
|
87
84
|
with open(os.environ["GITHUB_EVENT_PATH"], encoding="utf-8") as event_file:
|
|
88
85
|
event = json.loads(event_file.read())
|
|
89
86
|
print(yaml.dump(event))
|
|
90
|
-
if "pull_request" in event
|
|
91
|
-
ref = str(event["number"])
|
|
92
|
-
else:
|
|
93
|
-
ref = event["ref"]
|
|
87
|
+
ref = str(event["number"]) if "pull_request" in event else event["ref"]
|
|
94
88
|
|
|
95
89
|
ref = ref.replace("/", "_")
|
|
96
90
|
|
|
@@ -21,7 +21,7 @@ def main() -> None:
|
|
|
21
21
|
|
|
22
22
|
if os.path.exists("docker-compose.yaml"):
|
|
23
23
|
_print("::group::Docker Compose ps")
|
|
24
|
-
subprocess.run(["docker", "compose", "ps"], check=False)
|
|
24
|
+
subprocess.run(["docker", "compose", "ps", "--all"], check=False)
|
|
25
25
|
_print("::endgroup::")
|
|
26
26
|
|
|
27
27
|
_print("::group::Docker ps")
|
|
@@ -30,11 +30,11 @@ def main() -> None:
|
|
|
30
30
|
|
|
31
31
|
# Store in /tmp/docker-logs-timestamp the current timestamp to avoid printing same logs multiple times.
|
|
32
32
|
timestamp_args = []
|
|
33
|
-
if os.path.exists("/tmp/docker-logs-timestamp"):
|
|
34
|
-
with open("/tmp/docker-logs-timestamp", encoding="utf-8") as timestamp_file:
|
|
33
|
+
if os.path.exists("/tmp/docker-logs-timestamp"): # noqa: S108
|
|
34
|
+
with open("/tmp/docker-logs-timestamp", encoding="utf-8") as timestamp_file: # noqa: S108
|
|
35
35
|
timestamp_args = [f"--since={timestamp_file.read().strip()}Z"]
|
|
36
36
|
|
|
37
|
-
with open("/tmp/docker-logs-timestamp", "w", encoding="utf-8") as timestamp_file:
|
|
37
|
+
with open("/tmp/docker-logs-timestamp", "w", encoding="utf-8") as timestamp_file: # noqa: S108
|
|
38
38
|
timestamp_file.write(datetime.utcnow().isoformat())
|
|
39
39
|
|
|
40
40
|
for name in (
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
The checker main function.
|
|
5
|
-
"""
|
|
3
|
+
"""The checker main function."""
|
|
6
4
|
|
|
7
5
|
import argparse
|
|
8
6
|
|
|
@@ -10,9 +8,7 @@ import c2cciutils.env
|
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
def main() -> None:
|
|
13
|
-
"""
|
|
14
|
-
Run the checks.
|
|
15
|
-
"""
|
|
11
|
+
"""Run the checks."""
|
|
16
12
|
parser = argparse.ArgumentParser(description="Print the environment information.")
|
|
17
13
|
parser.parse_args()
|
|
18
14
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""The commands that can be used to test a chart on Kubernetes."""
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
The main function of some utilities.
|
|
5
|
-
"""
|
|
3
|
+
"""The main function of some utilities."""
|
|
6
4
|
|
|
7
5
|
import argparse
|
|
8
6
|
|
|
@@ -13,9 +11,7 @@ import c2cciutils
|
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
def main() -> None:
|
|
16
|
-
"""
|
|
17
|
-
Run the utilities.
|
|
18
|
-
"""
|
|
14
|
+
"""Run the utilities."""
|
|
19
15
|
parser = argparse.ArgumentParser(description="Some utils of c2cciutils.")
|
|
20
16
|
parser.add_argument("--get-config", action="store_true", help="display the current config")
|
|
21
17
|
parser.add_argument("--version", action="store_true", help="display the current version")
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
The publish script.
|
|
5
|
-
"""
|
|
3
|
+
"""The publish script."""
|
|
6
4
|
|
|
7
5
|
import argparse
|
|
8
6
|
import os
|
|
@@ -34,6 +32,7 @@ def match(tpe: str, base_re: str) -> Optional[Match[str]]:
|
|
|
34
32
|
Arguments:
|
|
35
33
|
tpe: The type of ref we want to match (heads, tag, ...)
|
|
36
34
|
base_re: The regular expression to match the value
|
|
35
|
+
|
|
37
36
|
"""
|
|
38
37
|
if base_re[0] == "^":
|
|
39
38
|
base_re = base_re[1:]
|
|
@@ -50,6 +49,7 @@ def to_version(full_config: c2cciutils.configuration.Configuration, value: str,
|
|
|
50
49
|
full_config: The full configuration
|
|
51
50
|
value: The value to be transformed
|
|
52
51
|
kind: The name of the transformer in the configuration
|
|
52
|
+
|
|
53
53
|
"""
|
|
54
54
|
item_re = c2cciutils.compile_re(
|
|
55
55
|
cast(
|
|
@@ -63,9 +63,7 @@ def to_version(full_config: c2cciutils.configuration.Configuration, value: str,
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
def main() -> None:
|
|
66
|
-
"""
|
|
67
|
-
Run the publish.
|
|
68
|
-
"""
|
|
66
|
+
"""Run the publish."""
|
|
69
67
|
parser = argparse.ArgumentParser(description="Publish the project.")
|
|
70
68
|
parser.add_argument("--group", default="default", help="The publishing group")
|
|
71
69
|
parser.add_argument("--version", help="The version to publish to")
|
|
@@ -311,23 +309,22 @@ def main() -> None:
|
|
|
311
309
|
conf, name, image_conf, tag_src, tags, images_full
|
|
312
310
|
)
|
|
313
311
|
|
|
314
|
-
if google_calendar_publish
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
[
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
)
|
|
312
|
+
if google_calendar_publish and version_type in google_calendar_config.get(
|
|
313
|
+
"on", c2cciutils.configuration.PUBLISH_GOOGLE_CALENDAR_ON_DEFAULT
|
|
314
|
+
):
|
|
315
|
+
if not google_calendar:
|
|
316
|
+
google_calendar = GoogleCalendar()
|
|
317
|
+
summary = f"{image_conf['name']}:{', '.join(tags_calendar)}"
|
|
318
|
+
description = "\n".join(
|
|
319
|
+
[
|
|
320
|
+
f"Published the image {image_conf['name']}",
|
|
321
|
+
f"Published on: {', '.join(docker_config['repository'].keys())}",
|
|
322
|
+
f"With tags: {', '.join(tags_calendar)}",
|
|
323
|
+
f"For version type: {version_type}",
|
|
324
|
+
]
|
|
325
|
+
)
|
|
329
326
|
|
|
330
|
-
|
|
327
|
+
google_calendar.create_event(summary, description)
|
|
331
328
|
|
|
332
329
|
if args.dry_run:
|
|
333
330
|
sys.exit(0)
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
|
-
"""
|
|
4
|
-
Trigger an image update on the argocd repository.
|
|
5
|
-
"""
|
|
3
|
+
"""Trigger an image update on the argocd repository."""
|
|
6
4
|
|
|
7
5
|
import argparse
|
|
8
6
|
import os.path
|
|
@@ -60,10 +58,8 @@ def main() -> None:
|
|
|
60
58
|
|
|
61
59
|
|
|
62
60
|
def dispatch(repository: str, event_type: str, images_full: list[str]) -> None:
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
"""
|
|
66
|
-
id_ = random.randint(1, 100000) # nosec
|
|
61
|
+
"""Trigger an image update on the argocd repository."""
|
|
62
|
+
id_ = random.randint(1, 100000) # noqa: S311
|
|
67
63
|
print(f"Triggering {event_type}:{id_} on {repository} with {','.join(images_full)}")
|
|
68
64
|
|
|
69
65
|
response = requests.post(
|
|
@@ -149,9 +149,11 @@ If you run the tool without any version it will check that everything is OK rega
|
|
|
149
149
|
stabilization_branches_with_master = [*stabilization_branches, repo.get("master_branch", "master")]
|
|
150
150
|
|
|
151
151
|
for labels in mra.gh_json("label", ["name"], "list"):
|
|
152
|
-
if
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
if (
|
|
153
|
+
labels["name"].startswith("backport ")
|
|
154
|
+
and labels["name"].replace("backport ", "") not in stabilization_branches_with_master
|
|
155
|
+
):
|
|
156
|
+
mra.gh("label", "delete", labels["name"], "--yes")
|
|
155
157
|
|
|
156
158
|
for branch in stabilization_branches_with_master:
|
|
157
159
|
mra.gh(
|
|
@@ -19,7 +19,7 @@ strict = true
|
|
|
19
19
|
|
|
20
20
|
[tool.poetry]
|
|
21
21
|
name = "c2cciutils"
|
|
22
|
-
version = "1.
|
|
22
|
+
version = "1.8.0.dev45"
|
|
23
23
|
description = "Common utilities for Camptocamp CI"
|
|
24
24
|
readme = "README.md"
|
|
25
25
|
authors = ["Camptocamp <info@camptocamp.com>"]
|
|
@@ -65,17 +65,17 @@ c2cciutils-docker-versions-gen = "c2cciutils.scripts.docker_versions_gen:main"
|
|
|
65
65
|
[tool.poetry.dependencies]
|
|
66
66
|
python = ">=3.9,<4.0"
|
|
67
67
|
requests = "2.32.3"
|
|
68
|
-
google-api-python-client = { version = "2.
|
|
68
|
+
google-api-python-client = { version = "2.157.0", optional = true }
|
|
69
69
|
google-auth-httplib2 = { version = "0.2.0", optional = true }
|
|
70
70
|
google-auth-oauthlib = { version = "1.2.1", optional = true }
|
|
71
|
-
"ruamel.yaml" = "0.18.
|
|
71
|
+
"ruamel.yaml" = "0.18.9"
|
|
72
72
|
defusedxml = "0.7.1"
|
|
73
|
-
twine = { version = "
|
|
73
|
+
twine = { version = "6.0.1", optional = true }
|
|
74
74
|
debian-inspector = "31.1.0"
|
|
75
75
|
PyYAML = "6.0.2"
|
|
76
|
-
multi-repo-automation = { version="1.
|
|
77
|
-
security-md = "0.
|
|
78
|
-
id = { version="1.
|
|
76
|
+
multi-repo-automation = { version="1.5.0", optional = true }
|
|
77
|
+
security-md = "1.0.0"
|
|
78
|
+
id = { version="1.5.0", optional = true }
|
|
79
79
|
|
|
80
80
|
[tool.poetry.extras]
|
|
81
81
|
audit = []
|
|
@@ -86,11 +86,11 @@ pr_checks = []
|
|
|
86
86
|
version = ["multi-repo-automation"]
|
|
87
87
|
|
|
88
88
|
[tool.poetry.group.dev.dependencies]
|
|
89
|
-
prospector = { version = "1.
|
|
90
|
-
prospector-profile-duplicated = "1.
|
|
91
|
-
prospector-profile-utils = "1.
|
|
89
|
+
prospector = { version = "1.13.3", extras = ["with-bandit", "with-mypy", "with-pyroma", "with-ruff"] }
|
|
90
|
+
prospector-profile-duplicated = "1.10.4"
|
|
91
|
+
prospector-profile-utils = "1.15.1"
|
|
92
92
|
types-requests = "2.32.0.20241016"
|
|
93
|
-
types-pyyaml = "6.0.12.
|
|
93
|
+
types-pyyaml = "6.0.12.20241230"
|
|
94
94
|
types-markdown = "3.7.0.20241204"
|
|
95
95
|
|
|
96
96
|
[build-system]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{c2cciutils-1.7.3.dev2 → c2cciutils-1.8.0.dev45}/c2cciutils/scripts/download_applications.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|