taskcluster-taskgraph 19.0.0__tar.gz → 19.2.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-19.0.0 → taskcluster_taskgraph-19.2.0}/CHANGELOG.md +19 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/PKG-INFO +4 -8
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/README.rst +0 -4
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/conf.py +5 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/pyproject.toml +19 -19
- taskcluster_taskgraph-19.2.0/src/taskgraph/config.py +170 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/decision.py +7 -7
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/docker.py +3 -1
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/base.py +2 -2
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/chunking.py +19 -38
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/docker_image.py +26 -83
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/fetch.py +87 -118
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/from_deps.py +41 -91
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/matrix.py +31 -48
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/notify.py +85 -62
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/__init__.py +91 -140
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/common.py +1 -1
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/index_search.py +10 -12
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/run_task.py +35 -90
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/run/toolchain.py +26 -76
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/task.py +290 -556
- taskcluster_taskgraph-19.2.0/src/taskgraph/transforms/task_context.py +94 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/dependencies.py +1 -2
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/docker.py +4 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/schema.py +40 -3
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/config.yml +1 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/codecov/kind.yml +1 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/complete/kind.yml +4 -0
- taskcluster_taskgraph-19.2.0/taskcluster/kinds/test/kind.yml +18 -0
- taskcluster_taskgraph-19.2.0/taskcluster/kinds/test/linux.yml +71 -0
- taskcluster_taskgraph-19.2.0/taskcluster/kinds/test/windows.yml +32 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +2 -2
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_docker.py +13 -3
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run_run_task.py +5 -4
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_task.py +34 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_schema.py +96 -47
- taskcluster_taskgraph-19.2.0/uv.lock +3370 -0
- taskcluster_taskgraph-19.0.0/src/taskgraph/config.py +0 -193
- taskcluster_taskgraph-19.0.0/src/taskgraph/transforms/task_context.py +0 -121
- taskcluster_taskgraph-19.0.0/taskcluster/kinds/test/kind.yml +0 -74
- taskcluster_taskgraph-19.0.0/uv.lock +0 -2744
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/dependabot.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pre-commit.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.github/workflows/pypi-publish.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.gitignore +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.pre-commit-config.yaml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.taskcluster.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/.yamllint +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/LICENSE +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/Makefile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/migrations.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/reference/transforms/task_context.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/make.bat +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/actions/util.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/create.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/generator.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/main.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/morph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/parameters.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/fetch-content +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/run-task/run-task +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/taskgraph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/vcs.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/fetch/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/package.json +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/index-task/yarn.lock +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/run-task/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/scripts/external_tools/tooltool.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/conftest.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_create.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_decision.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_generator.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_main.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_morph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_scripts_fetch_content.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_scripts_run_task.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_taskgraph.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transform_task_context.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_vcs.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/test/test_util_yaml.py +0 -0
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [19.2.0] - 2026-02-18
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Restore `payload_builder` wrapping for dict schemas
|
|
8
|
+
- Make nested struct fields optional to match voluptuous defaults
|
|
9
|
+
|
|
10
|
+
## [19.1.0] - 2026-02-17
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Converted all remaining voluptuous schemas to msgspec
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- Parent image name lookup in `build-image` now uses task ids
|
|
19
|
+
- Decision task environment now passes full ref names for chain-of-trust verification
|
|
20
|
+
- Exclude `__pycache__` directories when generating docker contexts
|
|
21
|
+
|
|
3
22
|
## [19.0.0] - 2026-02-06
|
|
4
23
|
|
|
5
24
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskcluster-taskgraph
|
|
3
|
-
Version: 19.
|
|
3
|
+
Version: 19.2.0
|
|
4
4
|
Summary: Build taskcluster taskgraphs
|
|
5
5
|
Project-URL: Repository, https://github.com/taskcluster/taskgraph
|
|
6
6
|
Project-URL: Issues, https://github.com/taskcluster/taskgraph/issues
|
|
@@ -20,7 +20,7 @@ Requires-Python: >=3.9
|
|
|
20
20
|
Requires-Dist: appdirs>=1.4
|
|
21
21
|
Requires-Dist: cookiecutter~=2.1
|
|
22
22
|
Requires-Dist: json-e>=2.7
|
|
23
|
-
Requires-Dist: mozilla-repo-urls
|
|
23
|
+
Requires-Dist: mozilla-repo-urls>=0.1.1
|
|
24
24
|
Requires-Dist: msgspec>=0.20.0
|
|
25
25
|
Requires-Dist: pyyaml>=5.3.1
|
|
26
26
|
Requires-Dist: redo>=2.0
|
|
@@ -30,9 +30,9 @@ Requires-Dist: taskcluster-urls>=11.0
|
|
|
30
30
|
Requires-Dist: taskcluster>=92.0
|
|
31
31
|
Requires-Dist: voluptuous>=0.12.1
|
|
32
32
|
Provides-Extra: load-image
|
|
33
|
-
Requires-Dist: zstandard; extra == 'load-image'
|
|
33
|
+
Requires-Dist: zstandard>=0.23.0; extra == 'load-image'
|
|
34
34
|
Provides-Extra: orjson
|
|
35
|
-
Requires-Dist: orjson; extra == 'orjson'
|
|
35
|
+
Requires-Dist: orjson>=3; extra == 'orjson'
|
|
36
36
|
Description-Content-Type: text/x-rst
|
|
37
37
|
|
|
38
38
|
|
|
@@ -40,10 +40,6 @@ Description-Content-Type: text/x-rst
|
|
|
40
40
|
:target: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/latest
|
|
41
41
|
:alt: Task Status
|
|
42
42
|
|
|
43
|
-
.. image:: https://results.pre-commit.ci/badge/github/taskcluster/taskgraph/main.svg
|
|
44
|
-
:target: https://results.pre-commit.ci/latest/github/taskcluster/taskgraph/main
|
|
45
|
-
:alt: pre-commit.ci status
|
|
46
|
-
|
|
47
43
|
.. image:: https://codecov.io/gh/taskcluster/taskgraph/branch/main/graph/badge.svg?token=GJIV52ZQNP
|
|
48
44
|
:target: https://codecov.io/gh/taskcluster/taskgraph
|
|
49
45
|
:alt: Code Coverage
|
|
@@ -3,10 +3,6 @@
|
|
|
3
3
|
:target: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/latest
|
|
4
4
|
:alt: Task Status
|
|
5
5
|
|
|
6
|
-
.. image:: https://results.pre-commit.ci/badge/github/taskcluster/taskgraph/main.svg
|
|
7
|
-
:target: https://results.pre-commit.ci/latest/github/taskcluster/taskgraph/main
|
|
8
|
-
:alt: pre-commit.ci status
|
|
9
|
-
|
|
10
6
|
.. image:: https://codecov.io/gh/taskcluster/taskgraph/branch/main/graph/badge.svg?token=GJIV52ZQNP
|
|
11
7
|
:target: https://codecov.io/gh/taskcluster/taskgraph
|
|
12
8
|
:alt: Code Coverage
|
|
@@ -43,6 +43,11 @@ templates_path = ["_templates"]
|
|
|
43
43
|
# This pattern also affects html_static_path and html_extra_path.
|
|
44
44
|
exclude_patterns = ["docs/_build", "Thumbs.db", ".DS_Store"]
|
|
45
45
|
|
|
46
|
+
# Suppress ambiguous cross-reference warnings from autodoc.
|
|
47
|
+
# Multiple Schema classes define fields with the same name (e.g. "path"),
|
|
48
|
+
# which Sphinx can't disambiguate.
|
|
49
|
+
suppress_warnings = ["ref.python"]
|
|
50
|
+
|
|
46
51
|
|
|
47
52
|
# -- Options for HTML output -------------------------------------------------
|
|
48
53
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
### Project
|
|
2
2
|
[project]
|
|
3
3
|
name = "taskcluster-taskgraph"
|
|
4
|
-
version = "19.
|
|
4
|
+
version = "19.2.0"
|
|
5
5
|
description = "Build taskcluster taskgraphs"
|
|
6
6
|
readme = "README.rst"
|
|
7
7
|
authors = [
|
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
|
24
24
|
"appdirs>=1.4",
|
|
25
25
|
"cookiecutter~=2.1",
|
|
26
26
|
"json-e>=2.7",
|
|
27
|
-
"mozilla-repo-urls",
|
|
27
|
+
"mozilla-repo-urls>=0.1.1",
|
|
28
28
|
"msgspec>=0.20.0",
|
|
29
29
|
"PyYAML>=5.3.1",
|
|
30
30
|
"redo>=2.0",
|
|
@@ -37,26 +37,26 @@ dependencies = [
|
|
|
37
37
|
|
|
38
38
|
[dependency-groups]
|
|
39
39
|
dev = [
|
|
40
|
-
"coverage",
|
|
41
|
-
"mock",
|
|
42
|
-
"pre-commit",
|
|
43
|
-
"pyright",
|
|
44
|
-
"pytest",
|
|
45
|
-
"pytest-mock",
|
|
46
|
-
"pytest-taskgraph",
|
|
47
|
-
"responses",
|
|
48
|
-
"sphinx",
|
|
49
|
-
"sphinx-autobuild",
|
|
50
|
-
"sphinx-argparse",
|
|
51
|
-
"sphinx-book-theme >=1",
|
|
52
|
-
"sphinx-taskgraph",
|
|
53
|
-
"sphinxcontrib-mermaid",
|
|
54
|
-
"zstandard",
|
|
40
|
+
"coverage>=7.10.7",
|
|
41
|
+
"mock>=5.2.0",
|
|
42
|
+
"pre-commit>=4.3.0",
|
|
43
|
+
"pyright>=1.1.406",
|
|
44
|
+
"pytest>=8.4.2",
|
|
45
|
+
"pytest-mock>=3.15.1",
|
|
46
|
+
"pytest-taskgraph>=0.2.0",
|
|
47
|
+
"responses>=0.25.8",
|
|
48
|
+
"sphinx>=7.4.7",
|
|
49
|
+
"sphinx-autobuild>=2024.04.16",
|
|
50
|
+
"sphinx-argparse>=0.4.0",
|
|
51
|
+
"sphinx-book-theme >=1.1.4",
|
|
52
|
+
"sphinx-taskgraph>=0.1.0",
|
|
53
|
+
"sphinxcontrib-mermaid>=1.0.0",
|
|
54
|
+
"zstandard>=0.25.0",
|
|
55
55
|
]
|
|
56
56
|
|
|
57
57
|
[project.optional-dependencies]
|
|
58
|
-
load-image = ["zstandard"]
|
|
59
|
-
orjson = ["orjson"]
|
|
58
|
+
load-image = ["zstandard>=0.23.0"]
|
|
59
|
+
orjson = ["orjson>=3"]
|
|
60
60
|
|
|
61
61
|
[project.scripts]
|
|
62
62
|
taskgraph = "taskgraph.main:main"
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Literal, Optional, Union
|
|
12
|
+
|
|
13
|
+
from .util.python_path import find_object
|
|
14
|
+
from .util.schema import Schema, TaskPriority, optionally_keyed_by, validate_schema
|
|
15
|
+
from .util.vcs import get_repository
|
|
16
|
+
from .util.yaml import load_yaml
|
|
17
|
+
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
CacheType = Literal["cargo", "checkout", "npm", "pip", "uv"]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class WorkerAlias(Schema):
|
|
24
|
+
provisioner: optionally_keyed_by("level", str, use_msgspec=True) # type: ignore
|
|
25
|
+
implementation: str
|
|
26
|
+
os: str
|
|
27
|
+
worker_type: optionally_keyed_by("level", str, use_msgspec=True) # type: ignore
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class WorkersConfig(Schema):
|
|
31
|
+
aliases: dict[str, WorkerAlias]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class RunConfig(Schema):
|
|
35
|
+
# List of caches to enable, or a boolean to enable/disable all of them.
|
|
36
|
+
use_caches: Optional[Union[bool, list[CacheType]]] = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class RepositoryConfig(Schema, forbid_unknown_fields=False, kw_only=True):
|
|
40
|
+
name: str
|
|
41
|
+
project_regex: Optional[str] = None
|
|
42
|
+
ssh_secret_name: Optional[str] = None
|
|
43
|
+
# FIXME: Extra keys allowed via forbid_unknown_fields=False
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class TaskgraphConfig(Schema):
|
|
47
|
+
repositories: dict[str, RepositoryConfig]
|
|
48
|
+
# Python function to call to register extensions.
|
|
49
|
+
register: Optional[str] = None
|
|
50
|
+
decision_parameters: Optional[str] = None
|
|
51
|
+
# The taskcluster index prefix to use for caching tasks.
|
|
52
|
+
# Defaults to `trust-domain`.
|
|
53
|
+
cached_task_prefix: Optional[str] = None
|
|
54
|
+
# Should tasks from pull requests populate the cache
|
|
55
|
+
cache_pull_requests: Optional[bool] = None
|
|
56
|
+
# Regular expressions matching index paths to be summarized.
|
|
57
|
+
index_path_regexes: Optional[list[str]] = None
|
|
58
|
+
# Configuration related to the 'run' transforms.
|
|
59
|
+
run: Optional[RunConfig] = None
|
|
60
|
+
|
|
61
|
+
def __post_init__(self):
|
|
62
|
+
# Validate repositories has at least 1 entry (was All(..., Length(min=1)))
|
|
63
|
+
if not self.repositories:
|
|
64
|
+
raise ValueError("'repositories' must have at least one entry")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
#: Schema for the graph config
|
|
68
|
+
class GraphConfigSchema(Schema, forbid_unknown_fields=False, kw_only=True):
|
|
69
|
+
# The trust-domain for this graph.
|
|
70
|
+
trust_domain: str
|
|
71
|
+
task_priority: optionally_keyed_by( # type: ignore
|
|
72
|
+
"project", "level", TaskPriority, use_msgspec=True
|
|
73
|
+
)
|
|
74
|
+
workers: WorkersConfig
|
|
75
|
+
taskgraph: TaskgraphConfig
|
|
76
|
+
# Name of the docker image kind (default: docker-image)
|
|
77
|
+
docker_image_kind: Optional[str] = None
|
|
78
|
+
# Default 'deadline' for tasks, in relative date format. Eg: '1 week'
|
|
79
|
+
task_deadline_after: Optional[
|
|
80
|
+
optionally_keyed_by("project", str, use_msgspec=True) # type: ignore
|
|
81
|
+
] = None
|
|
82
|
+
# Default 'expires-after' for level 1 tasks, in relative date format.
|
|
83
|
+
# Eg: '90 days'
|
|
84
|
+
task_expires_after: Optional[str] = None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
graph_config_schema = GraphConfigSchema
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@dataclass(frozen=True, eq=False)
|
|
91
|
+
class GraphConfig:
|
|
92
|
+
_config: dict
|
|
93
|
+
root_dir: str
|
|
94
|
+
|
|
95
|
+
_PATH_MODIFIED = False
|
|
96
|
+
|
|
97
|
+
def __post_init__(self):
|
|
98
|
+
# ensure we have an absolute path; this is required for assumptions
|
|
99
|
+
# made later, such as the `vcs_root` being a directory above `root_dir`
|
|
100
|
+
object.__setattr__(self, "root_dir", os.path.abspath(self.root_dir))
|
|
101
|
+
|
|
102
|
+
def __getitem__(self, name):
|
|
103
|
+
return self._config[name]
|
|
104
|
+
|
|
105
|
+
def __contains__(self, name):
|
|
106
|
+
return name in self._config
|
|
107
|
+
|
|
108
|
+
def get(self, name, default=None):
|
|
109
|
+
return self._config.get(name, default)
|
|
110
|
+
|
|
111
|
+
def register(self):
|
|
112
|
+
"""
|
|
113
|
+
Add the project's taskgraph directory to the python path, and register
|
|
114
|
+
any extensions present.
|
|
115
|
+
"""
|
|
116
|
+
if GraphConfig._PATH_MODIFIED:
|
|
117
|
+
if GraphConfig._PATH_MODIFIED == self.root_dir:
|
|
118
|
+
# Already modified path with the same root_dir.
|
|
119
|
+
# We currently need to do this to enable actions to call
|
|
120
|
+
# taskgraph_decision, e.g. relpro.
|
|
121
|
+
return
|
|
122
|
+
raise Exception("Can't register multiple directories on python path.")
|
|
123
|
+
GraphConfig._PATH_MODIFIED = self.root_dir
|
|
124
|
+
sys.path.insert(0, self.root_dir)
|
|
125
|
+
register_path = self["taskgraph"].get("register")
|
|
126
|
+
if register_path:
|
|
127
|
+
register = find_object(register_path)
|
|
128
|
+
assert callable(register)
|
|
129
|
+
register(self)
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def vcs_root(self):
|
|
133
|
+
try:
|
|
134
|
+
repo = get_repository(self.root_dir)
|
|
135
|
+
return Path(repo.path)
|
|
136
|
+
except RuntimeError:
|
|
137
|
+
root = Path(self.root_dir)
|
|
138
|
+
if root.parts[-1:] != ("taskcluster",):
|
|
139
|
+
raise Exception(
|
|
140
|
+
"Not guessing path to vcs root. Graph config in non-standard location."
|
|
141
|
+
)
|
|
142
|
+
return root.parent
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def taskcluster_yml(self):
|
|
146
|
+
return os.path.join(self.vcs_root, ".taskcluster.yml")
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def docker_dir(self):
|
|
150
|
+
return os.path.join(self.root_dir, "docker")
|
|
151
|
+
|
|
152
|
+
@property
|
|
153
|
+
def kinds_dir(self):
|
|
154
|
+
return os.path.join(self.root_dir, "kinds")
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def validate_graph_config(config):
|
|
158
|
+
validate_schema(graph_config_schema, config, "Invalid graph configuration:")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def load_graph_config(root_dir):
|
|
162
|
+
config_yml = os.path.join(root_dir, "config.yml")
|
|
163
|
+
if not os.path.exists(config_yml):
|
|
164
|
+
raise Exception(f"Couldn't find taskgraph configuration: {config_yml}")
|
|
165
|
+
|
|
166
|
+
logger.debug(f"loading config from `{config_yml}`")
|
|
167
|
+
config = load_yaml(config_yml)
|
|
168
|
+
|
|
169
|
+
validate_graph_config(config)
|
|
170
|
+
return GraphConfig(config, root_dir=root_dir)
|
|
@@ -9,9 +9,9 @@ import pathlib
|
|
|
9
9
|
import shutil
|
|
10
10
|
import time
|
|
11
11
|
from pathlib import Path
|
|
12
|
+
from typing import Optional
|
|
12
13
|
|
|
13
14
|
import yaml
|
|
14
|
-
from voluptuous import Optional
|
|
15
15
|
|
|
16
16
|
from taskgraph.actions import render_actions_json
|
|
17
17
|
from taskgraph.create import create_tasks
|
|
@@ -20,7 +20,7 @@ from taskgraph.parameters import Parameters, get_version
|
|
|
20
20
|
from taskgraph.taskgraph import TaskGraph
|
|
21
21
|
from taskgraph.util import json
|
|
22
22
|
from taskgraph.util.python_path import find_object
|
|
23
|
-
from taskgraph.util.schema import
|
|
23
|
+
from taskgraph.util.schema import Schema, validate_schema
|
|
24
24
|
from taskgraph.util.vcs import get_repository
|
|
25
25
|
from taskgraph.util.yaml import load_yaml
|
|
26
26
|
|
|
@@ -40,11 +40,11 @@ PER_PROJECT_PARAMETERS = {
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
#: Schema for try_task_config.json version 2
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
class TryTaskConfigSchemaV2(Schema, forbid_unknown_fields=True):
|
|
44
|
+
parameters: Optional[dict[str, object]] = None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
try_task_config_schema_v2 = TryTaskConfigSchemaV2
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def full_task_graph_to_runnable_tasks(full_task_json):
|
|
@@ -211,7 +211,9 @@ def build_image(
|
|
|
211
211
|
raise
|
|
212
212
|
|
|
213
213
|
# Parent id doesn't exist, needs to be re-built as well.
|
|
214
|
-
parent =
|
|
214
|
+
parent = next(
|
|
215
|
+
t for t in image_tasks if image_tasks[t].task_id == parent_id
|
|
216
|
+
).removeprefix("docker-image-")
|
|
215
217
|
parent_tar = temp_dir / "parent.tar"
|
|
216
218
|
build_image(graph_config, parent, save_image=str(parent_tar))
|
|
217
219
|
volumes.append((str(parent_tar), "/workspace/parent.tar"))
|
{taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/base.py
RENAMED
|
@@ -12,7 +12,7 @@ from taskgraph.task import Task
|
|
|
12
12
|
|
|
13
13
|
from ..config import GraphConfig
|
|
14
14
|
from ..parameters import Parameters
|
|
15
|
-
from ..util.schema import
|
|
15
|
+
from ..util.schema import Schema, validate_schema
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@dataclass(frozen=True)
|
|
@@ -138,7 +138,7 @@ class TransformSequence:
|
|
|
138
138
|
|
|
139
139
|
@dataclass
|
|
140
140
|
class ValidateSchema:
|
|
141
|
-
schema:
|
|
141
|
+
schema: Schema
|
|
142
142
|
|
|
143
143
|
def __call__(self, config, tasks):
|
|
144
144
|
for task in tasks:
|
{taskcluster_taskgraph-19.0.0 → taskcluster_taskgraph-19.2.0}/src/taskgraph/transforms/chunking.py
RENAMED
|
@@ -2,49 +2,30 @@
|
|
|
2
2
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
4
4
|
import copy
|
|
5
|
-
from
|
|
6
|
-
|
|
7
|
-
from voluptuous import ALLOW_EXTRA, Optional, Required
|
|
5
|
+
from typing import Optional
|
|
8
6
|
|
|
9
7
|
from taskgraph.transforms.base import TransformSequence
|
|
10
|
-
from taskgraph.util.schema import
|
|
8
|
+
from taskgraph.util.schema import Schema
|
|
11
9
|
from taskgraph.util.templates import substitute
|
|
12
10
|
|
|
11
|
+
|
|
12
|
+
class ChunkConfig(Schema):
|
|
13
|
+
# The total number of chunks to split the task into.
|
|
14
|
+
total_chunks: int
|
|
15
|
+
# A list of fields that need to have `{this_chunk}` and/or
|
|
16
|
+
# `{total_chunks}` replaced in them.
|
|
17
|
+
substitution_fields: list[str] = []
|
|
18
|
+
|
|
19
|
+
|
|
13
20
|
#: Schema for chunking transforms
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
tasks, substituting `this_chunk` and `total_chunks` into any
|
|
23
|
-
fields in `substitution-fields`.
|
|
24
|
-
""".lstrip()
|
|
25
|
-
),
|
|
26
|
-
): {
|
|
27
|
-
Required(
|
|
28
|
-
"total-chunks",
|
|
29
|
-
description=dedent(
|
|
30
|
-
"""
|
|
31
|
-
The total number of chunks to split the task into.
|
|
32
|
-
""".lstrip()
|
|
33
|
-
),
|
|
34
|
-
): int,
|
|
35
|
-
Optional(
|
|
36
|
-
"substitution-fields",
|
|
37
|
-
description=dedent(
|
|
38
|
-
"""
|
|
39
|
-
A list of fields that need to have `{this_chunk}` and/or
|
|
40
|
-
`{total_chunks}` replaced in them.
|
|
41
|
-
""".lstrip()
|
|
42
|
-
),
|
|
43
|
-
): [str],
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
extra=ALLOW_EXTRA,
|
|
47
|
-
)
|
|
21
|
+
class ChunkSchema(Schema, forbid_unknown_fields=False, kw_only=True):
|
|
22
|
+
# `chunk` can be used to split one task into `total-chunks`
|
|
23
|
+
# tasks, substituting `this_chunk` and `total_chunks` into any
|
|
24
|
+
# fields in `substitution-fields`.
|
|
25
|
+
chunk: Optional[ChunkConfig] = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
CHUNK_SCHEMA = ChunkSchema
|
|
48
29
|
|
|
49
30
|
transforms = TransformSequence()
|
|
50
31
|
transforms.add_validate(CHUNK_SCHEMA)
|
|
@@ -5,17 +5,13 @@
|
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
7
|
import re
|
|
8
|
-
from
|
|
9
|
-
|
|
10
|
-
from voluptuous import Optional, Required
|
|
8
|
+
from typing import Optional
|
|
11
9
|
|
|
12
10
|
import taskgraph
|
|
13
11
|
from taskgraph.transforms.base import TransformSequence
|
|
14
12
|
from taskgraph.util import json
|
|
15
13
|
from taskgraph.util.docker import create_context_tar, generate_context_hash
|
|
16
|
-
from taskgraph.util.schema import
|
|
17
|
-
|
|
18
|
-
from .task import task_description_schema
|
|
14
|
+
from taskgraph.util.schema import IndexSchema, Schema
|
|
19
15
|
|
|
20
16
|
logger = logging.getLogger(__name__)
|
|
21
17
|
|
|
@@ -31,84 +27,31 @@ IMAGE_BUILDER_IMAGE = (
|
|
|
31
27
|
|
|
32
28
|
transforms = TransformSequence()
|
|
33
29
|
|
|
30
|
+
|
|
34
31
|
#: Schema for docker_image transforms
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"""
|
|
59
|
-
).lstrip(),
|
|
60
|
-
): str,
|
|
61
|
-
Optional(
|
|
62
|
-
"task-from",
|
|
63
|
-
description=dedent(
|
|
64
|
-
"""
|
|
65
|
-
Relative path (from config.path) to the file the docker image was defined in.
|
|
66
|
-
"""
|
|
67
|
-
).lstrip(),
|
|
68
|
-
): str,
|
|
69
|
-
Optional(
|
|
70
|
-
"args",
|
|
71
|
-
description=dedent(
|
|
72
|
-
"""
|
|
73
|
-
Arguments to use for the Dockerfile.
|
|
74
|
-
"""
|
|
75
|
-
).lstrip(),
|
|
76
|
-
): {str: str},
|
|
77
|
-
Optional(
|
|
78
|
-
"definition",
|
|
79
|
-
description=dedent(
|
|
80
|
-
"""
|
|
81
|
-
Name of the docker image definition under taskcluster/docker, when
|
|
82
|
-
different from the docker image name.
|
|
83
|
-
"""
|
|
84
|
-
).lstrip(),
|
|
85
|
-
): str,
|
|
86
|
-
Optional(
|
|
87
|
-
"packages",
|
|
88
|
-
description=dedent(
|
|
89
|
-
"""
|
|
90
|
-
List of package tasks this docker image depends on.
|
|
91
|
-
"""
|
|
92
|
-
).lstrip(),
|
|
93
|
-
): [str],
|
|
94
|
-
Optional(
|
|
95
|
-
"index",
|
|
96
|
-
description=dedent(
|
|
97
|
-
"""
|
|
98
|
-
Information for indexing this build so its artifacts can be discovered.
|
|
99
|
-
"""
|
|
100
|
-
).lstrip(),
|
|
101
|
-
): task_description_schema["index"],
|
|
102
|
-
Optional(
|
|
103
|
-
"cache",
|
|
104
|
-
description=dedent(
|
|
105
|
-
"""
|
|
106
|
-
Whether this image should be cached based on inputs.
|
|
107
|
-
"""
|
|
108
|
-
).lstrip(),
|
|
109
|
-
): bool,
|
|
110
|
-
}
|
|
111
|
-
)
|
|
32
|
+
class DockerImageSchema(Schema):
|
|
33
|
+
# Name of the docker image.
|
|
34
|
+
name: str
|
|
35
|
+
# Name of the parent docker image.
|
|
36
|
+
parent: Optional[str] = None
|
|
37
|
+
# Treeherder symbol.
|
|
38
|
+
symbol: Optional[str] = None
|
|
39
|
+
# Relative path (from config.path) to the file the docker image was defined in.
|
|
40
|
+
task_from: Optional[str] = None
|
|
41
|
+
# Arguments to use for the Dockerfile.
|
|
42
|
+
args: Optional[dict[str, str]] = None
|
|
43
|
+
# Name of the docker image definition under taskcluster/docker, when
|
|
44
|
+
# different from the docker image name.
|
|
45
|
+
definition: Optional[str] = None
|
|
46
|
+
# List of package tasks this docker image depends on.
|
|
47
|
+
packages: Optional[list[str]] = None
|
|
48
|
+
# Information for indexing this build so its artifacts can be discovered.
|
|
49
|
+
index: Optional[IndexSchema] = None
|
|
50
|
+
# Whether this image should be cached based on inputs.
|
|
51
|
+
cache: Optional[bool] = None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
docker_image_schema = DockerImageSchema
|
|
112
55
|
|
|
113
56
|
|
|
114
57
|
transforms.add_validate(docker_image_schema)
|