taskcluster-taskgraph 23.0.0__tar.gz → 23.1.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.
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/CHANGELOG.md +13 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/PKG-INFO +1 -1
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/pyproject.toml +1 -1
- taskcluster_taskgraph-23.1.0/renovate.json +6 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/util.py +1 -1
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/generator.py +14 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/main.py +5 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/taskgraph.py +3 -1
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/schema.py +15 -7
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/config.yml +1 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/index-task/package.json +1 -1
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/index-task/yarn.lock +67 -74
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/test/linux.yml +20 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +3 -3
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/conftest.py +18 -2
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_generator.py +46 -3
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_main.py +40 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_taskgraph.py +36 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_schema.py +40 -5
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/uv.lock +1283 -608
- taskcluster_taskgraph-23.0.0/.github/dependabot.yml +0 -19
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.github/workflows/pre-commit.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.github/workflows/pypi-publish.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.gitignore +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.pre-commit-config.yaml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.taskcluster.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/.yamllint +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/LICENSE +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/Makefile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/README.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/conf.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/define-schemas.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/migrations.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/reference/transforms/task_context.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/make.bat +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/config.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/create.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/decision.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/docker.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/morph.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/parameters.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/run-task/fetch-content +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/run-task/run-task +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/base.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/chunking.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/docker_image.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/fetch.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/from_deps.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/matrix.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/notify.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/run/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/run/common.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/run/index_search.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/run/run_task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/transforms/task_context.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/dependencies.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/docker.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/vcs.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/fetch/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/index-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/run-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/codecov/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/complete/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/test/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/test/windows.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_create.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_decision.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_docker.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_morph.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_scripts_fetch_content.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_scripts_run_task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transform_task_context.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_run_run_task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_transforms_task.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_vcs.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/test/test_util_yaml.py +0 -0
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [23.1.0] - 2026-05-26
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Updated worker types in the `.taskcluster.yml` template for the d2g migration
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `TaskGraph.from_json` now skips dependencies pointing at external taskIds (e.g. from replaced or cached tasks) when rebuilding edges, instead of producing edges to non-existent graph nodes
|
|
12
|
+
- Schema validation errors now display a clean message instead of a noisy traceback
|
|
13
|
+
- Pinned `taskcluster-client` to work around an upstream issue
|
|
14
|
+
- `fetch_graph_and_labels` now handles `HTTPError` instances where `response` is `None`
|
|
15
|
+
|
|
3
16
|
## [23.0.0] - 2026-05-04
|
|
4
17
|
|
|
5
18
|
### Added
|
|
@@ -85,7 +85,7 @@ def fetch_graph_and_labels(parameters, graph_config, task_group_id=None):
|
|
|
85
85
|
run_label_to_id = get_artifact(task_id, "public/label-to-taskid.json")
|
|
86
86
|
label_to_taskid.update(run_label_to_id) # type: ignore
|
|
87
87
|
except HTTPError as e:
|
|
88
|
-
if e.response.status_code != 404:
|
|
88
|
+
if e.response is None or e.response.status_code != 404:
|
|
89
89
|
raise
|
|
90
90
|
logger.debug(f"No label-to-taskid.json found for {task_id}: {e}")
|
|
91
91
|
|
|
@@ -27,6 +27,7 @@ from .task import Task
|
|
|
27
27
|
from .taskgraph import TaskGraph
|
|
28
28
|
from .transforms.base import TransformConfig, TransformSequence
|
|
29
29
|
from .util.python_path import find_object
|
|
30
|
+
from .util.schema import SchemaValidationError
|
|
30
31
|
from .util.verify import verifications
|
|
31
32
|
from .util.yaml import load_yaml
|
|
32
33
|
|
|
@@ -303,6 +304,9 @@ class TaskGraphGenerator:
|
|
|
303
304
|
},
|
|
304
305
|
self._write_artifacts,
|
|
305
306
|
)
|
|
307
|
+
except SchemaValidationError as exc:
|
|
308
|
+
logger.error(f"Error loading tasks for kind {kind_name}:\n{exc}")
|
|
309
|
+
raise
|
|
306
310
|
except Exception:
|
|
307
311
|
logger.exception(f"Error loading tasks for kind {kind_name}:")
|
|
308
312
|
raise
|
|
@@ -358,6 +362,16 @@ class TaskGraphGenerator:
|
|
|
358
362
|
for future in done:
|
|
359
363
|
if exc := future.exception():
|
|
360
364
|
executor.shutdown(wait=False, cancel_futures=True)
|
|
365
|
+
kind_name = futures_to_kind.get(future, "?")
|
|
366
|
+
if isinstance(exc, SchemaValidationError):
|
|
367
|
+
logger.error(
|
|
368
|
+
f"Error loading tasks for kind {kind_name}:\n{exc}"
|
|
369
|
+
)
|
|
370
|
+
else:
|
|
371
|
+
logger.error(
|
|
372
|
+
f"Error loading tasks for kind {kind_name}:",
|
|
373
|
+
exc_info=(type(exc), exc, exc.__traceback__),
|
|
374
|
+
)
|
|
361
375
|
raise exc
|
|
362
376
|
kind = futures_to_kind.pop(future)
|
|
363
377
|
futures.remove(future)
|
|
@@ -22,6 +22,8 @@ from urllib.parse import urlparse
|
|
|
22
22
|
import appdirs
|
|
23
23
|
import yaml
|
|
24
24
|
|
|
25
|
+
from taskgraph.util.schema import SchemaValidationError
|
|
26
|
+
|
|
25
27
|
Command = namedtuple("Command", ["func", "args", "kwargs", "defaults"])
|
|
26
28
|
commands = {}
|
|
27
29
|
|
|
@@ -1207,6 +1209,9 @@ def main(args=sys.argv[1:]):
|
|
|
1207
1209
|
args = parser.parse_args(args)
|
|
1208
1210
|
try:
|
|
1209
1211
|
return args.command(vars(args))
|
|
1212
|
+
except SchemaValidationError:
|
|
1213
|
+
# Message was already logged; skip the traceback for user input errors.
|
|
1214
|
+
sys.exit(1)
|
|
1210
1215
|
except Exception:
|
|
1211
1216
|
traceback.print_exc()
|
|
1212
1217
|
sys.exit(1)
|
|
@@ -63,6 +63,8 @@ class TaskGraph:
|
|
|
63
63
|
if "task_id" in value:
|
|
64
64
|
tasks[key].task_id = value["task_id"]
|
|
65
65
|
for depname, dep in value["dependencies"].items():
|
|
66
|
-
|
|
66
|
+
# Task filtering can cause dependencies to be removed from the graph.
|
|
67
|
+
if dep in tasks_dict:
|
|
68
|
+
edges.add((key, dep, depname))
|
|
67
69
|
task_graph = cls(tasks, Graph(frozenset(tasks), edges))
|
|
68
70
|
return tasks, task_graph
|
|
@@ -23,6 +23,14 @@ TaskPriority = Literal[
|
|
|
23
23
|
]
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
class SchemaValidationError(Exception):
|
|
27
|
+
"""Raised when user-supplied data fails schema validation.
|
|
28
|
+
|
|
29
|
+
Callers should display the message without a Python traceback, since
|
|
30
|
+
these reflect input errors rather than programmer bugs.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
|
|
26
34
|
def validate_schema(schema, obj, msg_prefix):
|
|
27
35
|
"""
|
|
28
36
|
Validate that object satisfies schema. If not, generate a useful exception
|
|
@@ -65,9 +73,13 @@ def validate_schema(schema, obj, msg_prefix):
|
|
|
65
73
|
msg = [msg_prefix]
|
|
66
74
|
for error in exc.errors:
|
|
67
75
|
msg.append(str(error))
|
|
68
|
-
raise
|
|
76
|
+
raise SchemaValidationError(
|
|
77
|
+
"\n".join(msg) + "\n" + pprint.pformat(obj)
|
|
78
|
+
) from None
|
|
69
79
|
else:
|
|
70
|
-
raise
|
|
80
|
+
raise SchemaValidationError(
|
|
81
|
+
f"{msg_prefix}\n{str(exc)}\n{pprint.pformat(obj)}"
|
|
82
|
+
) from None
|
|
71
83
|
|
|
72
84
|
|
|
73
85
|
class OptionallyKeyedBy:
|
|
@@ -456,11 +468,7 @@ class Schema(
|
|
|
456
468
|
"""Validate data against this schema."""
|
|
457
469
|
if taskgraph.fast:
|
|
458
470
|
return data
|
|
459
|
-
|
|
460
|
-
try:
|
|
461
|
-
msgspec.convert(data, cls)
|
|
462
|
-
except (msgspec.ValidationError, msgspec.DecodeError) as e:
|
|
463
|
-
raise msgspec.ValidationError(str(e))
|
|
471
|
+
msgspec.convert(data, cls)
|
|
464
472
|
|
|
465
473
|
|
|
466
474
|
class IndexSchema(Schema):
|
|
@@ -41,26 +41,21 @@
|
|
|
41
41
|
defer-to-connect "^2.0.0"
|
|
42
42
|
|
|
43
43
|
"@types/cacheable-request@^6.0.1":
|
|
44
|
-
version "6.0.
|
|
45
|
-
resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.
|
|
46
|
-
integrity sha512-
|
|
44
|
+
version "6.0.3"
|
|
45
|
+
resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
|
|
46
|
+
integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
|
|
47
47
|
dependencies:
|
|
48
48
|
"@types/http-cache-semantics" "*"
|
|
49
|
-
"@types/keyv" "
|
|
49
|
+
"@types/keyv" "^3.1.4"
|
|
50
50
|
"@types/node" "*"
|
|
51
|
-
"@types/responselike" "
|
|
51
|
+
"@types/responselike" "^1.0.0"
|
|
52
52
|
|
|
53
53
|
"@types/http-cache-semantics@*":
|
|
54
|
-
version "4.0
|
|
55
|
-
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.
|
|
56
|
-
integrity sha512-
|
|
57
|
-
|
|
58
|
-
"@types/json-buffer@~3.0.0":
|
|
59
|
-
version "3.0.0"
|
|
60
|
-
resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64"
|
|
61
|
-
integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==
|
|
54
|
+
version "4.2.0"
|
|
55
|
+
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#f6a7788f438cbfde15f29acad46512b4c01913b3"
|
|
56
|
+
integrity sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==
|
|
62
57
|
|
|
63
|
-
"@types/keyv
|
|
58
|
+
"@types/keyv@^3.1.4":
|
|
64
59
|
version "3.1.4"
|
|
65
60
|
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
|
|
66
61
|
integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
|
|
@@ -68,14 +63,16 @@
|
|
|
68
63
|
"@types/node" "*"
|
|
69
64
|
|
|
70
65
|
"@types/node@*":
|
|
71
|
-
version "
|
|
72
|
-
resolved "https://registry.yarnpkg.com/@types/node/-/node-
|
|
73
|
-
integrity sha512-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
version "25.9.1"
|
|
67
|
+
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.1.tgz#3bda556db500ae4319c08e7fc9ab94f19013ba0b"
|
|
68
|
+
integrity sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==
|
|
69
|
+
dependencies:
|
|
70
|
+
undici-types ">=7.24.0 <7.24.7"
|
|
71
|
+
|
|
72
|
+
"@types/responselike@^1.0.0":
|
|
73
|
+
version "1.0.3"
|
|
74
|
+
resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
|
|
75
|
+
integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
|
|
79
76
|
dependencies:
|
|
80
77
|
"@types/node" "*"
|
|
81
78
|
|
|
@@ -85,9 +82,9 @@ cacheable-lookup@^5.0.3:
|
|
|
85
82
|
integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
|
|
86
83
|
|
|
87
84
|
cacheable-request@^7.0.2:
|
|
88
|
-
version "7.0.
|
|
89
|
-
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.
|
|
90
|
-
integrity sha512-
|
|
85
|
+
version "7.0.4"
|
|
86
|
+
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
|
|
87
|
+
integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
|
|
91
88
|
dependencies:
|
|
92
89
|
clone-response "^1.0.2"
|
|
93
90
|
get-stream "^5.1.0"
|
|
@@ -98,26 +95,18 @@ cacheable-request@^7.0.2:
|
|
|
98
95
|
responselike "^2.0.0"
|
|
99
96
|
|
|
100
97
|
clone-response@^1.0.2:
|
|
101
|
-
version "1.0.
|
|
102
|
-
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.
|
|
103
|
-
integrity sha512-
|
|
98
|
+
version "1.0.3"
|
|
99
|
+
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
|
|
100
|
+
integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
|
|
104
101
|
dependencies:
|
|
105
102
|
mimic-response "^1.0.0"
|
|
106
103
|
|
|
107
|
-
compress-brotli@^1.3.8:
|
|
108
|
-
version "1.3.8"
|
|
109
|
-
resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db"
|
|
110
|
-
integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==
|
|
111
|
-
dependencies:
|
|
112
|
-
"@types/json-buffer" "~3.0.0"
|
|
113
|
-
json-buffer "~3.0.1"
|
|
114
|
-
|
|
115
104
|
debug@^4.1.1:
|
|
116
|
-
version "4.3
|
|
117
|
-
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.
|
|
118
|
-
integrity sha512-
|
|
105
|
+
version "4.4.3"
|
|
106
|
+
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
|
|
107
|
+
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
|
|
119
108
|
dependencies:
|
|
120
|
-
ms "2.1.
|
|
109
|
+
ms "^2.1.3"
|
|
121
110
|
|
|
122
111
|
decompress-response@^6.0.0:
|
|
123
112
|
version "6.0.0"
|
|
@@ -132,9 +121,9 @@ defer-to-connect@^2.0.0:
|
|
|
132
121
|
integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
|
|
133
122
|
|
|
134
123
|
end-of-stream@^1.1.0:
|
|
135
|
-
version "1.4.
|
|
136
|
-
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.
|
|
137
|
-
integrity sha512
|
|
124
|
+
version "1.4.5"
|
|
125
|
+
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
|
|
126
|
+
integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
|
|
138
127
|
dependencies:
|
|
139
128
|
once "^1.4.0"
|
|
140
129
|
|
|
@@ -146,9 +135,9 @@ get-stream@^5.1.0:
|
|
|
146
135
|
pump "^3.0.0"
|
|
147
136
|
|
|
148
137
|
got@^11.8.1:
|
|
149
|
-
version "11.8.
|
|
150
|
-
resolved "https://registry.yarnpkg.com/got/-/got-11.8.
|
|
151
|
-
integrity sha512-
|
|
138
|
+
version "11.8.6"
|
|
139
|
+
resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
|
|
140
|
+
integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
|
|
152
141
|
dependencies:
|
|
153
142
|
"@sindresorhus/is" "^4.0.0"
|
|
154
143
|
"@szmarczak/http-timer" "^4.0.5"
|
|
@@ -163,9 +152,9 @@ got@^11.8.1:
|
|
|
163
152
|
responselike "^2.0.0"
|
|
164
153
|
|
|
165
154
|
hawk@^9.0.1:
|
|
166
|
-
version "9.0.
|
|
167
|
-
resolved "https://registry.yarnpkg.com/hawk/-/hawk-9.0.
|
|
168
|
-
integrity sha512-
|
|
155
|
+
version "9.0.2"
|
|
156
|
+
resolved "https://registry.yarnpkg.com/hawk/-/hawk-9.0.2.tgz#64b18c109d86b3a4b3174a76169f2c868297d0c0"
|
|
157
|
+
integrity sha512-EJMLBZAWg+EoI/aAJWDhrYGvucWYvY37CdGXolkol0ITGswkDHtDnjbFcPBaIv3jbtpfWqYjXMm4KhfXPOLCRg==
|
|
169
158
|
dependencies:
|
|
170
159
|
"@hapi/b64" "5.x.x"
|
|
171
160
|
"@hapi/boom" "9.x.x"
|
|
@@ -173,9 +162,9 @@ hawk@^9.0.1:
|
|
|
173
162
|
"@hapi/hoek" "9.x.x"
|
|
174
163
|
|
|
175
164
|
http-cache-semantics@^4.0.0:
|
|
176
|
-
version "4.
|
|
177
|
-
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.
|
|
178
|
-
integrity sha512-
|
|
165
|
+
version "4.2.0"
|
|
166
|
+
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5"
|
|
167
|
+
integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==
|
|
179
168
|
|
|
180
169
|
http2-wrapper@^1.0.0-beta.5.2:
|
|
181
170
|
version "1.0.3"
|
|
@@ -185,23 +174,22 @@ http2-wrapper@^1.0.0-beta.5.2:
|
|
|
185
174
|
quick-lru "^5.1.1"
|
|
186
175
|
resolve-alpn "^1.0.0"
|
|
187
176
|
|
|
188
|
-
json-buffer@3.0.1
|
|
177
|
+
json-buffer@3.0.1:
|
|
189
178
|
version "3.0.1"
|
|
190
179
|
resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
|
|
191
180
|
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
|
|
192
181
|
|
|
193
182
|
keyv@^4.0.0:
|
|
194
|
-
version "4.
|
|
195
|
-
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.
|
|
196
|
-
integrity sha512-
|
|
183
|
+
version "4.5.4"
|
|
184
|
+
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
|
185
|
+
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
|
|
197
186
|
dependencies:
|
|
198
|
-
compress-brotli "^1.3.8"
|
|
199
187
|
json-buffer "3.0.1"
|
|
200
188
|
|
|
201
189
|
lodash@^4.17.4:
|
|
202
|
-
version "4.
|
|
203
|
-
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.
|
|
204
|
-
integrity sha512-
|
|
190
|
+
version "4.18.1"
|
|
191
|
+
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
|
|
192
|
+
integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
|
|
205
193
|
|
|
206
194
|
lowercase-keys@^2.0.0:
|
|
207
195
|
version "2.0.0"
|
|
@@ -218,10 +206,10 @@ mimic-response@^3.1.0:
|
|
|
218
206
|
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
|
219
207
|
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
|
|
220
208
|
|
|
221
|
-
ms
|
|
222
|
-
version "2.1.
|
|
223
|
-
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.
|
|
224
|
-
integrity sha512-
|
|
209
|
+
ms@^2.1.3:
|
|
210
|
+
version "2.1.3"
|
|
211
|
+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
|
212
|
+
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
|
225
213
|
|
|
226
214
|
normalize-url@^6.0.1:
|
|
227
215
|
version "6.1.0"
|
|
@@ -241,9 +229,9 @@ p-cancelable@^2.0.0:
|
|
|
241
229
|
integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
|
|
242
230
|
|
|
243
231
|
pump@^3.0.0:
|
|
244
|
-
version "3.0.
|
|
245
|
-
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.
|
|
246
|
-
integrity sha512-
|
|
232
|
+
version "3.0.4"
|
|
233
|
+
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c"
|
|
234
|
+
integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==
|
|
247
235
|
dependencies:
|
|
248
236
|
end-of-stream "^1.1.0"
|
|
249
237
|
once "^1.3.1"
|
|
@@ -259,9 +247,9 @@ resolve-alpn@^1.0.0:
|
|
|
259
247
|
integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
|
|
260
248
|
|
|
261
249
|
responselike@^2.0.0:
|
|
262
|
-
version "2.0.
|
|
263
|
-
resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.
|
|
264
|
-
integrity sha512-
|
|
250
|
+
version "2.0.1"
|
|
251
|
+
resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
|
|
252
|
+
integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
|
|
265
253
|
dependencies:
|
|
266
254
|
lowercase-keys "^2.0.0"
|
|
267
255
|
|
|
@@ -272,7 +260,7 @@ slugid@^4.0.0:
|
|
|
272
260
|
dependencies:
|
|
273
261
|
uuid "^9.0.0"
|
|
274
262
|
|
|
275
|
-
taskcluster-client
|
|
263
|
+
taskcluster-client@55.3.2:
|
|
276
264
|
version "55.3.2"
|
|
277
265
|
resolved "https://registry.yarnpkg.com/taskcluster-client/-/taskcluster-client-55.3.2.tgz#1b518dee818a58ac3a325dfda3772449e5a331c8"
|
|
278
266
|
integrity sha512-EmPpIaNQsciBbitOC78QvV9MOjUnrDIShBjdJZOxn7NyHXeZIR3m4nZt9M/FeoyEOpm7EHYaij/lABF7GLMjWA==
|
|
@@ -285,9 +273,14 @@ taskcluster-client@^55.3:
|
|
|
285
273
|
taskcluster-lib-urls "^13.0.0"
|
|
286
274
|
|
|
287
275
|
taskcluster-lib-urls@^13.0.0:
|
|
288
|
-
version "13.0.
|
|
289
|
-
resolved "https://registry.yarnpkg.com/taskcluster-lib-urls/-/taskcluster-lib-urls-13.0.
|
|
290
|
-
integrity sha512-
|
|
276
|
+
version "13.0.2"
|
|
277
|
+
resolved "https://registry.yarnpkg.com/taskcluster-lib-urls/-/taskcluster-lib-urls-13.0.2.tgz#27b1ad7bdc1b7bc96b700d876c4e0d5021ee0fa1"
|
|
278
|
+
integrity sha512-onspRpWupIjB15vkvvSAXdtpvgWsKNOCRhcjg1p9GrxodJeW45Os7BK7azMlX7aNqi8uOj4zqB6cokxsLp2uFw==
|
|
279
|
+
|
|
280
|
+
"undici-types@>=7.24.0 <7.24.7":
|
|
281
|
+
version "7.24.6"
|
|
282
|
+
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91"
|
|
283
|
+
integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==
|
|
291
284
|
|
|
292
285
|
uuid@^9.0.0:
|
|
293
286
|
version "9.0.1"
|
{taskcluster_taskgraph-23.0.0 → taskcluster_taskgraph-23.1.0}/taskcluster/kinds/test/linux.yml
RENAMED
|
@@ -70,6 +70,26 @@ unit-multithread:
|
|
|
70
70
|
command: >-
|
|
71
71
|
uv run coverage run --data-file /builds/worker/artifacts/coverage --context=py{matrix[python]} -m pytest -vv
|
|
72
72
|
|
|
73
|
+
unit-serial:
|
|
74
|
+
description: "Run unit tests with py{matrix[python]} on Linux in serial mode"
|
|
75
|
+
matrix:
|
|
76
|
+
set-name: "unit-serial-py{matrix[python]}"
|
|
77
|
+
substitution-fields: [description, run.command, treeherder, worker, attributes]
|
|
78
|
+
python: ["314"]
|
|
79
|
+
worker:
|
|
80
|
+
docker-image: {in-tree: python}
|
|
81
|
+
env:
|
|
82
|
+
TASKGRAPH_SERIAL: "1"
|
|
83
|
+
artifacts:
|
|
84
|
+
- type: file
|
|
85
|
+
path: "/builds/worker/artifacts/coverage"
|
|
86
|
+
name: "public/coverage.py{matrix[python]}"
|
|
87
|
+
treeherder:
|
|
88
|
+
symbol: unit-serial(py{matrix[python]})
|
|
89
|
+
run:
|
|
90
|
+
command: >-
|
|
91
|
+
uv run coverage run --data-file /builds/worker/artifacts/coverage --context=py{matrix[python]} -m pytest -vv
|
|
92
|
+
|
|
73
93
|
integration:
|
|
74
94
|
description: "Run unit tests with py{matrix[python]} on Linux with resolution {matrix[resolution]}"
|
|
75
95
|
attributes:
|
|
@@ -14,14 +14,14 @@ workers:
|
|
|
14
14
|
provisioner: '{trust-domain}-{level}'
|
|
15
15
|
implementation: docker-worker
|
|
16
16
|
os: linux
|
|
17
|
-
worker-type: '{alias}
|
|
17
|
+
worker-type: '{alias}'
|
|
18
18
|
images:
|
|
19
19
|
provisioner: '{trust-domain}-{level}'
|
|
20
20
|
implementation: docker-worker
|
|
21
21
|
os: linux
|
|
22
|
-
worker-type: '{alias}
|
|
22
|
+
worker-type: '{alias}'
|
|
23
23
|
t-linux-large:
|
|
24
24
|
provisioner: '{trust-domain}-t'
|
|
25
25
|
implementation: docker-worker
|
|
26
26
|
os: linux
|
|
27
|
-
worker-type: '{alias}
|
|
27
|
+
worker-type: '{alias}'
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import platform
|
|
3
|
+
import subprocess
|
|
3
4
|
import tempfile
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
|
|
@@ -20,11 +21,26 @@ os.environ["GIT_CONFIG_NOSYSTEM"] = "1"
|
|
|
20
21
|
|
|
21
22
|
@pytest.fixture(scope="session", autouse=True)
|
|
22
23
|
def git_global_config():
|
|
23
|
-
#
|
|
24
|
-
#
|
|
24
|
+
# Until https://github.com/taskcluster/taskcluster/issues/6561 we need to
|
|
25
|
+
# preserved the safe directories that `run-task` sets to keep tests
|
|
26
|
+
# working in CI when workers run subsequent tasks.
|
|
27
|
+
existing_safe_dirs = subprocess.run(
|
|
28
|
+
["git", "config", "--global", "--get-all", "safe.directory"],
|
|
29
|
+
capture_output=True,
|
|
30
|
+
text=True,
|
|
31
|
+
check=False,
|
|
32
|
+
).stdout.splitlines()
|
|
33
|
+
|
|
25
34
|
fd, path = tempfile.mkstemp(prefix="taskgraph-gitconfig-")
|
|
26
35
|
os.close(fd)
|
|
27
36
|
os.environ["GIT_CONFIG_GLOBAL"] = path
|
|
37
|
+
|
|
38
|
+
for entry in existing_safe_dirs:
|
|
39
|
+
subprocess.run(
|
|
40
|
+
["git", "config", "--global", "--add", "safe.directory", entry],
|
|
41
|
+
check=False,
|
|
42
|
+
)
|
|
43
|
+
|
|
28
44
|
yield
|
|
29
45
|
del os.environ["GIT_CONFIG_GLOBAL"]
|
|
30
46
|
os.unlink(path)
|
|
@@ -13,13 +13,16 @@ from pytest_taskgraph import WithFakeKind, fake_load_graph_config
|
|
|
13
13
|
from taskgraph import generator, graph
|
|
14
14
|
from taskgraph.generator import Kind, load_tasks_for_kind, load_tasks_for_kinds
|
|
15
15
|
from taskgraph.loader.default import loader as default_loader
|
|
16
|
+
from taskgraph.util.schema import SchemaValidationError
|
|
16
17
|
|
|
17
18
|
linuxonly = pytest.mark.skipif(
|
|
18
|
-
platform.system() != "Linux"
|
|
19
|
-
|
|
19
|
+
platform.system() != "Linux"
|
|
20
|
+
or os.environ.get("TASKGRAPH_USE_THREADS")
|
|
21
|
+
or os.environ.get("TASKGRAPH_SERIAL"),
|
|
22
|
+
reason="requires Linux multiprocessing support",
|
|
20
23
|
)
|
|
21
24
|
threadsonly = pytest.mark.skipif(
|
|
22
|
-
not os.environ.get("TASKGRAPH_USE_THREADS"),
|
|
25
|
+
not os.environ.get("TASKGRAPH_USE_THREADS") or os.environ.get("TASKGRAPH_SERIAL"),
|
|
23
26
|
reason="requires multithreading to be enabled",
|
|
24
27
|
)
|
|
25
28
|
|
|
@@ -70,6 +73,46 @@ def test_kind_ordering_multithread(mocker, maketgg):
|
|
|
70
73
|
assert mocked_tpe.loaded_kinds == ["_fake1", "_fake2", "_fake3"]
|
|
71
74
|
|
|
72
75
|
|
|
76
|
+
def test_schema_validation_error_logged_without_traceback(mocker, caplog, maketgg):
|
|
77
|
+
"""SchemaValidationError from a kind is logged at ERROR level with no
|
|
78
|
+
traceback attached (it's user input, not a programmer bug)."""
|
|
79
|
+
|
|
80
|
+
def fail_load_tasks(self, *args, **kwargs):
|
|
81
|
+
raise SchemaValidationError("bad task data")
|
|
82
|
+
|
|
83
|
+
mocker.patch.object(Kind, "load_tasks", fail_load_tasks)
|
|
84
|
+
tgg = maketgg()
|
|
85
|
+
|
|
86
|
+
with caplog.at_level("ERROR"):
|
|
87
|
+
with pytest.raises(SchemaValidationError):
|
|
88
|
+
tgg._run_until("full_task_set")
|
|
89
|
+
|
|
90
|
+
schema_records = [r for r in caplog.records if "Error loading tasks" in r.message]
|
|
91
|
+
assert len(schema_records) == 1
|
|
92
|
+
# logger.error attaches no exc_info — that's the whole point.
|
|
93
|
+
assert schema_records[0].exc_info is None
|
|
94
|
+
assert "bad task data" in schema_records[0].message
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_other_exceptions_still_log_traceback(mocker, caplog, maketgg):
|
|
98
|
+
"""Non-SchemaValidationError exceptions still go through logger.exception
|
|
99
|
+
so real programmer bugs surface their traceback."""
|
|
100
|
+
|
|
101
|
+
def fail_load_tasks(self, *args, **kwargs):
|
|
102
|
+
raise RuntimeError("unexpected bug")
|
|
103
|
+
|
|
104
|
+
mocker.patch.object(Kind, "load_tasks", fail_load_tasks)
|
|
105
|
+
tgg = maketgg()
|
|
106
|
+
|
|
107
|
+
with caplog.at_level("ERROR"):
|
|
108
|
+
with pytest.raises(RuntimeError):
|
|
109
|
+
tgg._run_until("full_task_set")
|
|
110
|
+
|
|
111
|
+
records = [r for r in caplog.records if "Error loading tasks" in r.message]
|
|
112
|
+
assert len(records) == 1
|
|
113
|
+
assert records[0].exc_info is not None
|
|
114
|
+
|
|
115
|
+
|
|
73
116
|
def test_full_task_set(maketgg):
|
|
74
117
|
"The full_task_set property has all tasks"
|
|
75
118
|
tgg = maketgg()
|
|
@@ -11,11 +11,13 @@ import pytest
|
|
|
11
11
|
|
|
12
12
|
import taskgraph
|
|
13
13
|
from taskgraph.actions import registry
|
|
14
|
+
from taskgraph.generator import Kind
|
|
14
15
|
from taskgraph.graph import Graph
|
|
15
16
|
from taskgraph.main import format_kind_graph_mermaid, get_filtered_taskgraph
|
|
16
17
|
from taskgraph.main import main as taskgraph_main
|
|
17
18
|
from taskgraph.task import Task
|
|
18
19
|
from taskgraph.taskgraph import TaskGraph
|
|
20
|
+
from taskgraph.util.schema import SchemaValidationError
|
|
19
21
|
from taskgraph.util.vcs import GitRepository, HgRepository
|
|
20
22
|
from taskgraph.util.yaml import load_yaml
|
|
21
23
|
|
|
@@ -70,6 +72,44 @@ def test_show_taskgraph_parallel(run_taskgraph):
|
|
|
70
72
|
assert res == 0
|
|
71
73
|
|
|
72
74
|
|
|
75
|
+
def test_main_schema_validation_error_no_traceback(
|
|
76
|
+
mocker, run_taskgraph, capsys, caplog
|
|
77
|
+
):
|
|
78
|
+
"""main() exits 1 without printing a Python traceback when a kind raises
|
|
79
|
+
SchemaValidationError — the message was already logged."""
|
|
80
|
+
|
|
81
|
+
def fail_load_tasks(self, *args, **kwargs):
|
|
82
|
+
raise SchemaValidationError("bad task data")
|
|
83
|
+
|
|
84
|
+
mocker.patch.object(Kind, "load_tasks", fail_load_tasks)
|
|
85
|
+
|
|
86
|
+
with caplog.at_level("ERROR"):
|
|
87
|
+
res = run_taskgraph(["full"])
|
|
88
|
+
|
|
89
|
+
assert res == 1
|
|
90
|
+
captured = capsys.readouterr()
|
|
91
|
+
assert "Traceback" not in captured.err
|
|
92
|
+
assert "Traceback" not in captured.out
|
|
93
|
+
assert any("bad task data" in r.message for r in caplog.records)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_main_other_exception_prints_traceback(mocker, run_taskgraph, capsys):
|
|
97
|
+
"""main() still prints a traceback for unexpected exceptions —
|
|
98
|
+
schema-error suppression must not swallow real bugs."""
|
|
99
|
+
|
|
100
|
+
def fail_load_tasks(self, *args, **kwargs):
|
|
101
|
+
raise RuntimeError("real bug")
|
|
102
|
+
|
|
103
|
+
mocker.patch.object(Kind, "load_tasks", fail_load_tasks)
|
|
104
|
+
|
|
105
|
+
res = run_taskgraph(["full"])
|
|
106
|
+
assert res == 1
|
|
107
|
+
|
|
108
|
+
captured = capsys.readouterr()
|
|
109
|
+
assert "Traceback" in captured.err
|
|
110
|
+
assert "RuntimeError: real bug" in captured.err
|
|
111
|
+
|
|
112
|
+
|
|
73
113
|
def test_show_taskgraph_parallel_bad_params(tmp_path):
|
|
74
114
|
# Create parameter files that will cause processing errors
|
|
75
115
|
bad_params_dir = tmp_path / "bad_params"
|