scriptworker 63.2.0__tar.gz → 63.3.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.
- {scriptworker-63.2.0 → scriptworker-63.3.0}/HISTORY.rst +22 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/PKG-INFO +1 -1
- {scriptworker-63.2.0 → scriptworker-63.3.0}/pyproject.toml +1 -1
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/config.py +13 -2
- scriptworker-63.3.0/src/scriptworker/constants.py +840 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/context.py +11 -3
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/utils.py +65 -14
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/worker.py +4 -2
- scriptworker-63.2.0/src/scriptworker/constants.py +0 -822
- {scriptworker-63.2.0 → scriptworker-63.3.0}/.gitignore +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/CONTRIBUTING.rst +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/LICENSE +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/README.rst +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/renovate.json +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/scripts/gen_ed25519_key.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/scriptworker.yaml.tmpl +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/__init__.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/artifacts.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/client.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/cot/__init__.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/cot/generate.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/cot/verify.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/data/cot_v1_schema.json +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/data/scriptworker_task_schema.json +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/ed25519.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/exceptions.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/github.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/log.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/task.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/src/scriptworker/task_process.py +0 -0
- {scriptworker-63.2.0 → scriptworker-63.3.0}/tox.ini +0 -0
|
@@ -4,6 +4,28 @@ Change Log
|
|
|
4
4
|
All notable changes to this project will be documented in this file.
|
|
5
5
|
This project adheres to `Semantic Versioning <http://semver.org/>`__.
|
|
6
6
|
|
|
7
|
+
63.3.0 - 2026-08-05
|
|
8
|
+
-------------------
|
|
9
|
+
|
|
10
|
+
Added
|
|
11
|
+
~~~~~
|
|
12
|
+
|
|
13
|
+
- `cot_product` is now optional. When unset, `by-cot-product` mappings resolve to
|
|
14
|
+
`None`, and `check_config` requires `verify_chain_of_trust` to be off (#810)
|
|
15
|
+
- `download_file` accepts an optional `expected_content_type` kwarg that rejects
|
|
16
|
+
`text/html` responses when another type was requested (#791)
|
|
17
|
+
|
|
18
|
+
Fixed
|
|
19
|
+
~~~~~
|
|
20
|
+
|
|
21
|
+
- Event loop creation in a fresh process, which raised a `RuntimeError` on
|
|
22
|
+
Python 3.14 since `asyncio.get_event_loop()` no longer creates a loop (#811)
|
|
23
|
+
- JSON/YAML load failures now include the file path and, for downloaded
|
|
24
|
+
artifacts, the source URL in the error message (#791)
|
|
25
|
+
- `load_json_or_yaml_from_url` retries the download when the cached file fails
|
|
26
|
+
to parse, turning transient artifact-server glitches into self-healing
|
|
27
|
+
retries instead of hard failures (#791)
|
|
28
|
+
|
|
7
29
|
63.2.0 - 2026-06-18
|
|
8
30
|
-------------------
|
|
9
31
|
|
|
@@ -125,11 +125,17 @@ def check_config(config, path):
|
|
|
125
125
|
if key not in DEFAULT_CONFIG:
|
|
126
126
|
messages.append("Unknown key {} in {}!".format(key, path))
|
|
127
127
|
continue
|
|
128
|
+
is_by_cot_product = isinstance(DEFAULT_CONFIG[key], Mapping) and "by-cot-product" in DEFAULT_CONFIG[key]
|
|
128
129
|
if value is None:
|
|
129
|
-
|
|
130
|
+
if key != "cot_product" and not is_by_cot_product:
|
|
131
|
+
messages.append(_VALUE_UNDEFINED_MESSAGE.format(path=path, key=key))
|
|
130
132
|
else:
|
|
131
133
|
value_type = type(value)
|
|
132
|
-
if
|
|
134
|
+
if key == "cot_product":
|
|
135
|
+
# `cot_product`'s own default is `None`, so its type can't be
|
|
136
|
+
# inferred from `DEFAULT_CONFIG` the way other keys' can.
|
|
137
|
+
default_type = str
|
|
138
|
+
elif is_by_cot_product:
|
|
133
139
|
default_type = type(DEFAULT_CONFIG[key]["by-cot-product"][config["cot_product"]])
|
|
134
140
|
else:
|
|
135
141
|
default_type = type(DEFAULT_CONFIG[key])
|
|
@@ -139,6 +145,8 @@ def check_config(config, path):
|
|
|
139
145
|
messages.append(_VALUE_UNDEFINED_MESSAGE.format(path=path, key=key))
|
|
140
146
|
if key in ("provisioner_id", "worker_group", "worker_type", "worker_id") and not _is_id_valid(value):
|
|
141
147
|
messages.append('{} doesn\'t match "{}" (required by Taskcluster)'.format(key, _GENERIC_ID_REGEX.pattern))
|
|
148
|
+
if config.get("cot_product") is None and config.get("verify_chain_of_trust"):
|
|
149
|
+
messages.append("{} verify_chain_of_trust can't be True when cot_product is not set!".format(path))
|
|
142
150
|
return messages
|
|
143
151
|
|
|
144
152
|
|
|
@@ -161,6 +169,9 @@ def apply_product_config(config):
|
|
|
161
169
|
|
|
162
170
|
for key in config:
|
|
163
171
|
if isinstance(config[key], Mapping) and "by-cot-product" in config[key]:
|
|
172
|
+
if cot_product is None:
|
|
173
|
+
config[key] = None
|
|
174
|
+
continue
|
|
164
175
|
try:
|
|
165
176
|
config[key] = config[key]["by-cot-product"][cot_product]
|
|
166
177
|
except KeyError:
|