taskcluster-taskgraph 23.1.0__tar.gz → 24.0.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.1.0 → taskcluster_taskgraph-24.0.0}/.pre-commit-config.yaml +2 -2
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.taskcluster.yml +2 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/CHANGELOG.md +17 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/PKG-INFO +1 -1
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/migrations.rst +11 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/transforms/task_context.rst +34 -7
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -3
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/pyproject.toml +1 -1
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/decision.py +37 -42
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/parameters.py +0 -7
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/docker_image.py +1 -1
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/task.py +3 -5
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/task_context.py +20 -5
- taskcluster_taskgraph-24.0.0/test/test_transform_task_context.py +222 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/uv.lock +133 -133
- taskcluster_taskgraph-23.1.0/.github/workflows/pre-commit-autoupdate.yml +0 -15
- taskcluster_taskgraph-23.1.0/.github/workflows/pre-commit.yml +0 -12
- taskcluster_taskgraph-23.1.0/test/test_transform_task_context.py +0 -94
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.github/workflows/pypi-publish.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.gitignore +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/.yamllint +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/LICENSE +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/Makefile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/README.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/conf.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/define-schemas.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/make.bat +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/renovate.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/actions/util.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/config.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/create.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/generator.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/main.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/morph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/run-task/fetch-content +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/run-task/run-task +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/chunking.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/fetch.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/from_deps.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/matrix.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/notify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/run/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/run/common.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/run/index_search.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/run/run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/dependencies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/schema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/fetch/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/index-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/index-task/package.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/index-task/yarn.lock +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/run-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/codecov/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/complete/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/test/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/test/linux.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/kinds/test/windows.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/conftest.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_create.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_decision.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_generator.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_main.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_morph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_scripts_fetch_content.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_scripts_run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_run_run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_transforms_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_schema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/test/test_util_yaml.py +0 -0
|
@@ -13,13 +13,13 @@ repos:
|
|
|
13
13
|
exclude: template
|
|
14
14
|
- id: check-added-large-files
|
|
15
15
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
16
|
-
rev: v0.15.
|
|
16
|
+
rev: v0.15.15
|
|
17
17
|
hooks:
|
|
18
18
|
- id: ruff
|
|
19
19
|
args: [--fix, --exit-non-zero-on-fix]
|
|
20
20
|
- id: ruff-format
|
|
21
21
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
22
|
-
rev: 0.11.
|
|
22
|
+
rev: 0.11.17
|
|
23
23
|
hooks:
|
|
24
24
|
- id: uv-lock
|
|
25
25
|
- repo: https://github.com/adrienverge/yamllint.git
|
|
@@ -9,6 +9,8 @@ reporting: checks-v1
|
|
|
9
9
|
autoCancelPreviousChecks: true
|
|
10
10
|
policy:
|
|
11
11
|
pullRequests: public_restricted
|
|
12
|
+
hooks:
|
|
13
|
+
- name: lint/pre-commit-v1
|
|
12
14
|
tasks:
|
|
13
15
|
# NOTE: support for actions in ci-admin requires that the `tasks` property be an array *before* JSON-e rendering
|
|
14
16
|
# takes place.
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [24.0.0] - 2026-06-03
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- BREAKING CHANGE: Must pass in `--allow-parameter-override` if using try_task_config
|
|
8
|
+
- BREAKING CHANGE: Default level 1 artifact expiry changed from 1 year to 28 days
|
|
9
|
+
|
|
10
|
+
### Removed
|
|
11
|
+
|
|
12
|
+
- BREAKING CHANGE: Removed `Parameters.is_try()` helper method
|
|
13
|
+
|
|
14
|
+
## [23.2.0] - 2026-06-03
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `task-context` now calls `resolve_keyed_by` on `substitution-fields` (#968)
|
|
19
|
+
|
|
3
20
|
## [23.1.0] - 2026-05-26
|
|
4
21
|
|
|
5
22
|
### Added
|
|
@@ -3,6 +3,17 @@ Migration Guide
|
|
|
3
3
|
|
|
4
4
|
This page can help when migrating Taskgraph across major versions.
|
|
5
5
|
|
|
6
|
+
23.x -> 24.x
|
|
7
|
+
------------
|
|
8
|
+
|
|
9
|
+
* You must now pass in `--allow-parameter-override` into Decision tasks that
|
|
10
|
+
need to load the `try_task_config.json` file at the root of the repo.
|
|
11
|
+
* `taskgraph.parameters.Parameters.is_try()` is removed. Either in-line the old
|
|
12
|
+
method to a utility or use alternative logic.
|
|
13
|
+
* Level 1 artifacts' default expiry changed from "1 year" to "28 days". If
|
|
14
|
+
needed, set `task-expires-after` in `taskcluster/config.yml` to adjust the
|
|
15
|
+
default back.
|
|
16
|
+
|
|
6
17
|
22.x -> 23.x
|
|
7
18
|
------------
|
|
8
19
|
|
|
@@ -4,8 +4,8 @@ Task Context Transforms
|
|
|
4
4
|
=======================
|
|
5
5
|
|
|
6
6
|
The :mod:`taskgraph.transforms.task_context` transform can be used to
|
|
7
|
-
substitute values into any field in a task with data
|
|
8
|
-
until ``taskgraph`` runs.
|
|
7
|
+
resolve keys and/or substitute values into any field in a task with data
|
|
8
|
+
that is not known until ``taskgraph`` runs.
|
|
9
9
|
|
|
10
10
|
This data can be provided in a few ways, as described below.
|
|
11
11
|
|
|
@@ -37,7 +37,10 @@ Then create a ``task-context`` section in your task definition, e.g:
|
|
|
37
37
|
|
|
38
38
|
tasks:
|
|
39
39
|
build:
|
|
40
|
-
description:
|
|
40
|
+
description:
|
|
41
|
+
by-foo:
|
|
42
|
+
bar: super special description for bar tasks
|
|
43
|
+
default: my description of {foo}
|
|
41
44
|
task-context:
|
|
42
45
|
from-parameters:
|
|
43
46
|
foo: foo
|
|
@@ -50,9 +53,30 @@ are used:
|
|
|
50
53
|
|
|
51
54
|
.. code-block:: yaml
|
|
52
55
|
|
|
53
|
-
foo:
|
|
56
|
+
foo: bar
|
|
57
|
+
|
|
58
|
+
...the description will end up with a value of "super special description for bar tasks".
|
|
54
59
|
|
|
55
|
-
|
|
60
|
+
When ``foo`` is set to any other value (eg: ``bar``) the description will end with the
|
|
61
|
+
``default`` value with the value of ``foo`` substituted in (eg: ``my description of bar``).
|
|
62
|
+
|
|
63
|
+
This pattern is often used to configure things vary based on how tasks are created. For example, the following can be used to adjust the scopes a task is given depending on the GitHub event that created the decision task:
|
|
64
|
+
|
|
65
|
+
.. code-block:: yaml
|
|
66
|
+
|
|
67
|
+
tasks:
|
|
68
|
+
build:
|
|
69
|
+
task-context:
|
|
70
|
+
from-parameters:
|
|
71
|
+
tasks_for: tasks_for
|
|
72
|
+
substitution-fields:
|
|
73
|
+
- scopes
|
|
74
|
+
|
|
75
|
+
scopes:
|
|
76
|
+
by-tasks-for:
|
|
77
|
+
github-push:
|
|
78
|
+
- secrets:get:project/foo/api_token
|
|
79
|
+
default: []
|
|
56
80
|
|
|
57
81
|
When using ``from-parameters`` you may also provide an ordered list of keys to
|
|
58
82
|
look for in the parameters, with the first one found being used. For example,
|
|
@@ -154,8 +178,11 @@ Finally, the name of the task is added to the context implicitly. For example:
|
|
|
154
178
|
This will evaluate the description correctly, even though there are no
|
|
155
179
|
``task-context`` keys defined on the individual tasks.
|
|
156
180
|
|
|
157
|
-
Precedence
|
|
158
|
-
|
|
181
|
+
Order of Operations & Precedence
|
|
182
|
+
--------------------------------
|
|
183
|
+
|
|
184
|
+
Keys will be resolved on ``substitution-fields`` first, then substitution
|
|
185
|
+
will be performed on the resolved value.
|
|
159
186
|
|
|
160
187
|
If the same key is found in multiple places the order of precedence is as
|
|
161
188
|
follows: ``from-parameters``, ``from-object`` keys, ``from-file`` and finally
|
|
@@ -252,31 +252,27 @@ def get_decision_parameters(graph_config, options):
|
|
|
252
252
|
assert callable(decision_params)
|
|
253
253
|
decision_params(graph_config, parameters)
|
|
254
254
|
|
|
255
|
-
if
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
f"
|
|
276
|
-
)
|
|
277
|
-
parameters.update(note_params)
|
|
278
|
-
except ValueError as e:
|
|
279
|
-
raise Exception(f"Failed to parse {note_ref} as JSON: {e}") from e
|
|
255
|
+
# load extra parameters from file or vcs note if able
|
|
256
|
+
if options.get("allow_parameter_override"):
|
|
257
|
+
note_ref = "refs/notes/decision-parameters"
|
|
258
|
+
if options.get("try_task_config_file"):
|
|
259
|
+
task_config_file = os.path.abspath(options.get("try_task_config_file"))
|
|
260
|
+
else:
|
|
261
|
+
# if try_task_config.json is present, load it
|
|
262
|
+
task_config_file = os.path.join(os.getcwd(), "try_task_config.json")
|
|
263
|
+
|
|
264
|
+
if os.path.isfile(task_config_file):
|
|
265
|
+
set_try_config(parameters, task_config_file)
|
|
266
|
+
|
|
267
|
+
elif note_params := repo.get_note(note_ref, parameters["head_repository"]):
|
|
268
|
+
try:
|
|
269
|
+
note_params = json.loads(note_params)
|
|
270
|
+
logger.info(
|
|
271
|
+
f"Overriding parameters from {note_ref}:\n{json.dumps(note_params, indent=2)}"
|
|
272
|
+
)
|
|
273
|
+
parameters.update(note_params)
|
|
274
|
+
except ValueError as e:
|
|
275
|
+
raise Exception(f"Failed to parse {note_ref} as JSON: {e}") from e
|
|
280
276
|
|
|
281
277
|
result = Parameters(**parameters)
|
|
282
278
|
result.check()
|
|
@@ -284,23 +280,22 @@ def get_decision_parameters(graph_config, options):
|
|
|
284
280
|
|
|
285
281
|
|
|
286
282
|
def set_try_config(parameters, task_config_file):
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
)
|
|
283
|
+
logger.info(f"using try tasks from {task_config_file}")
|
|
284
|
+
with open(task_config_file) as fh:
|
|
285
|
+
task_config = json.load(fh)
|
|
286
|
+
task_config_version = task_config.pop("version")
|
|
287
|
+
if task_config_version == 2:
|
|
288
|
+
validate_schema(
|
|
289
|
+
try_task_config_schema_v2,
|
|
290
|
+
task_config,
|
|
291
|
+
"Invalid v2 `try_task_config.json`.",
|
|
292
|
+
)
|
|
293
|
+
parameters.update(task_config["parameters"])
|
|
294
|
+
return
|
|
295
|
+
else:
|
|
296
|
+
raise Exception(
|
|
297
|
+
f"Unknown `try_task_config.json` version: {task_config_version}"
|
|
298
|
+
)
|
|
304
299
|
|
|
305
300
|
|
|
306
301
|
def write_artifact(filename, data):
|
|
@@ -273,13 +273,6 @@ class Parameters(ReadOnlyDict):
|
|
|
273
273
|
except KeyError:
|
|
274
274
|
raise KeyError(f"taskgraph parameter {k!r} not found")
|
|
275
275
|
|
|
276
|
-
def is_try(self):
|
|
277
|
-
"""
|
|
278
|
-
Determine whether this graph is being built on a try project or for
|
|
279
|
-
`mach try fuzzy`.
|
|
280
|
-
"""
|
|
281
|
-
return "try" in self["project"] or self["tasks_for"] == "github-pull-request"
|
|
282
|
-
|
|
283
276
|
@property
|
|
284
277
|
def moz_build_date(self):
|
|
285
278
|
# XXX self["moz_build_date"] is left as a string because:
|
|
@@ -130,7 +130,7 @@ def fill_template(config, tasks):
|
|
|
130
130
|
"artifact_prefix": "public",
|
|
131
131
|
},
|
|
132
132
|
"always-target": True,
|
|
133
|
-
"expires-after": expires if config.params
|
|
133
|
+
"expires-after": expires if config.params["level"] == "1" else "1 year",
|
|
134
134
|
"scopes": [],
|
|
135
135
|
"run-on-projects": [],
|
|
136
136
|
"worker-type": "images",
|
{taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-24.0.0}/src/taskgraph/transforms/task.py
RENAMED
|
@@ -457,12 +457,10 @@ def build_docker_worker_payload(config, task, task_def):
|
|
|
457
457
|
else:
|
|
458
458
|
suffix = cache_version
|
|
459
459
|
|
|
460
|
-
skip_untrusted = config.params.is_try() or level == 1
|
|
461
|
-
|
|
462
460
|
for cache in worker["caches"]:
|
|
463
461
|
# Some caches aren't enabled in environments where we can't
|
|
464
462
|
# guarantee certain behavior. Filter those out.
|
|
465
|
-
if cache.get("skip-untrusted") and
|
|
463
|
+
if cache.get("skip-untrusted") and level == 1:
|
|
466
464
|
continue
|
|
467
465
|
|
|
468
466
|
name = "{trust_domain}-level-{level}-{name}-{suffix}".format(
|
|
@@ -484,7 +482,7 @@ def build_docker_worker_payload(config, task, task_def):
|
|
|
484
482
|
if run_task and worker.get("volumes"):
|
|
485
483
|
payload["env"]["TASKCLUSTER_VOLUMES"] = ";".join(sorted(worker["volumes"]))
|
|
486
484
|
|
|
487
|
-
if payload.get("cache") and
|
|
485
|
+
if payload.get("cache") and level == 1: # type: ignore
|
|
488
486
|
payload["env"]["TASKCLUSTER_UNTRUSTED_CACHES"] = "1"
|
|
489
487
|
|
|
490
488
|
if features:
|
|
@@ -999,7 +997,7 @@ def build_task(config, tasks):
|
|
|
999
997
|
if "expires-after" not in task:
|
|
1000
998
|
task["expires-after"] = (
|
|
1001
999
|
config.graph_config._config.get("task-expires-after", "28 days")
|
|
1002
|
-
if config.params
|
|
1000
|
+
if config.params["level"] == "1"
|
|
1003
1001
|
else "1 year"
|
|
1004
1002
|
)
|
|
1005
1003
|
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
from typing import Optional, Union
|
|
2
2
|
|
|
3
3
|
from taskgraph.transforms.base import TransformSequence
|
|
4
|
-
from taskgraph.util.schema import Schema
|
|
4
|
+
from taskgraph.util.schema import Schema, resolve_keyed_by
|
|
5
5
|
from taskgraph.util.templates import deep_get, substitute_task_fields
|
|
6
6
|
from taskgraph.util.yaml import load_yaml
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
class ResolveKeyedByConfigOptions(Schema):
|
|
10
|
+
# forwarded to `resolve_keyed_by`; see that function for details
|
|
11
|
+
defer: Optional[list[str]] = None
|
|
12
|
+
enforce_single_match: Optional[bool] = None
|
|
13
|
+
|
|
14
|
+
|
|
9
15
|
class TaskContextConfig(Schema):
|
|
10
16
|
# A list of fields in the task to substitute the provided values
|
|
11
|
-
# into.
|
|
17
|
+
# into and/or resolve keys in.
|
|
12
18
|
substitution_fields: list[str]
|
|
13
19
|
# Retrieve task context values from parameters. A single
|
|
14
20
|
# parameter may be provided or a list of parameters in
|
|
@@ -22,13 +28,15 @@ class TaskContextConfig(Schema):
|
|
|
22
28
|
from_file: Optional[str] = None
|
|
23
29
|
# Key/value pairs to be used as task context
|
|
24
30
|
from_object: Optional[object] = None
|
|
31
|
+
resolve_keyed_by_options: Optional[ResolveKeyedByConfigOptions] = None
|
|
25
32
|
|
|
26
33
|
|
|
27
34
|
#: Schema for the task_context transforms
|
|
28
35
|
class TaskContextSchema(Schema, forbid_unknown_fields=False, kw_only=True):
|
|
29
36
|
name: Optional[str] = None
|
|
30
|
-
# `task-context` can be used to substitute values into any field
|
|
31
|
-
# task with data that is not known until `taskgraph`
|
|
37
|
+
# `task-context` can be used to substitute values into any field or resolve
|
|
38
|
+
# keys in a field in a task with data that is not known until `taskgraph`
|
|
39
|
+
# runs.
|
|
32
40
|
#
|
|
33
41
|
# This data can be provided via `from-parameters` or `from-file`,
|
|
34
42
|
# which can pull in values from parameters and a defined yml file
|
|
@@ -46,6 +54,9 @@ class TaskContextSchema(Schema, forbid_unknown_fields=False, kw_only=True):
|
|
|
46
54
|
# - File
|
|
47
55
|
#
|
|
48
56
|
# That is to say: parameters will always override anything else.
|
|
57
|
+
#
|
|
58
|
+
# Each entry in `substitution-fields` will first have `resolved_keyed_by`
|
|
59
|
+
# called on it, and then substitutions will be performed.
|
|
49
60
|
task_context: Optional[TaskContextConfig] = None
|
|
50
61
|
|
|
51
62
|
|
|
@@ -89,6 +100,10 @@ def render_task(config, tasks):
|
|
|
89
100
|
if "name" in task:
|
|
90
101
|
subs.setdefault("name", task["name"])
|
|
91
102
|
|
|
92
|
-
# Now that we have our combined context, we can substitute.
|
|
103
|
+
# Now that we have our combined context, we can resolve keys and substitute.
|
|
104
|
+
task_name = task.get("name", task.get("label", "?"))
|
|
105
|
+
resolve_keyed_by_options = sub_config.get("resolve-keyed-by-options") or {}
|
|
106
|
+
for field in fields:
|
|
107
|
+
resolve_keyed_by(task, field, task_name, **resolve_keyed_by_options, **subs)
|
|
93
108
|
substitute_task_fields(task, fields, **subs)
|
|
94
109
|
yield task
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tests for the 'task_context' transforms.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import os.path
|
|
6
|
+
from copy import deepcopy
|
|
7
|
+
from pprint import pprint
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
from pytest_taskgraph import FakeParameters
|
|
11
|
+
|
|
12
|
+
from taskgraph.transforms import task_context
|
|
13
|
+
from taskgraph.transforms.base import TransformConfig
|
|
14
|
+
|
|
15
|
+
here = os.path.abspath(os.path.dirname(__file__))
|
|
16
|
+
|
|
17
|
+
BASE_PARAMS = {
|
|
18
|
+
"base_repository": "http://hg.example.com",
|
|
19
|
+
"build_date": 0,
|
|
20
|
+
"build_number": 1,
|
|
21
|
+
"enable_always_target": True,
|
|
22
|
+
"head_repository": "http://hg.example.com",
|
|
23
|
+
"head_rev": "abcdef",
|
|
24
|
+
"head_ref": "default",
|
|
25
|
+
"level": "1",
|
|
26
|
+
"moz_build_date": 0,
|
|
27
|
+
"next_version": "1.0.1",
|
|
28
|
+
"owner": "some-owner",
|
|
29
|
+
"project": "some-project",
|
|
30
|
+
"pushlog_id": 1,
|
|
31
|
+
"repository_type": "hg",
|
|
32
|
+
"target_tasks_method": "test_method",
|
|
33
|
+
"tasks_for": "hg-push",
|
|
34
|
+
"try_mode": None,
|
|
35
|
+
"version": "1.0.0",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def make_config(graph_config, extra_params=None):
|
|
40
|
+
params_data = dict(BASE_PARAMS)
|
|
41
|
+
if extra_params:
|
|
42
|
+
params_data.update(extra_params)
|
|
43
|
+
params = FakeParameters(params_data)
|
|
44
|
+
return TransformConfig(
|
|
45
|
+
"test", str(here), {}, params, {}, graph_config, write_artifacts=False
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
TASK_DEFAULTS = {
|
|
50
|
+
"description": "fake description {object} {file} {param} {object_and_file} "
|
|
51
|
+
"{object_and_param} {file_and_param} {object_file_and_param} {param_fallback} {name}",
|
|
52
|
+
"name": "fake-task-name",
|
|
53
|
+
"task-context": {
|
|
54
|
+
"from-parameters": {
|
|
55
|
+
"param": "param",
|
|
56
|
+
"object_and_param": "object_and_param",
|
|
57
|
+
"file_and_param": "file_and_param",
|
|
58
|
+
"object_file_and_param": "object_file_and_param",
|
|
59
|
+
"param_fallback": ["missing-param", "default"],
|
|
60
|
+
},
|
|
61
|
+
"from-file": f"{here}/data/task_context.yml",
|
|
62
|
+
"from-object": {
|
|
63
|
+
"object": "object",
|
|
64
|
+
"object_and_param": "shouldn't be used",
|
|
65
|
+
"object_and_file": "object-overrides-file",
|
|
66
|
+
"object_file_and_param": "shouldn't be used",
|
|
67
|
+
},
|
|
68
|
+
"substitution-fields": [
|
|
69
|
+
"description",
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
EXPECTED_DESCRIPTION = (
|
|
74
|
+
"fake description object file param object-overrides-file "
|
|
75
|
+
"param-overrides-object param-overrides-file param-overrides-all default fake-task-name"
|
|
76
|
+
)
|
|
77
|
+
NO_CONTEXT = deepcopy(TASK_DEFAULTS)
|
|
78
|
+
del NO_CONTEXT["task-context"]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
@pytest.mark.parametrize(
|
|
82
|
+
"task,description",
|
|
83
|
+
(
|
|
84
|
+
pytest.param(deepcopy(TASK_DEFAULTS), EXPECTED_DESCRIPTION, id="with-context"),
|
|
85
|
+
pytest.param(
|
|
86
|
+
deepcopy(NO_CONTEXT), TASK_DEFAULTS["description"], id="no-context"
|
|
87
|
+
),
|
|
88
|
+
),
|
|
89
|
+
)
|
|
90
|
+
def test_transforms(request, run_transform, graph_config, task, description):
|
|
91
|
+
config = make_config(
|
|
92
|
+
graph_config,
|
|
93
|
+
{
|
|
94
|
+
"param": "param",
|
|
95
|
+
"object_and_param": "param-overrides-object",
|
|
96
|
+
"file_and_param": "param-overrides-file",
|
|
97
|
+
"object_file_and_param": "param-overrides-all",
|
|
98
|
+
"default": "default",
|
|
99
|
+
},
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
task = run_transform(task_context.transforms, task, config=config)[0]
|
|
103
|
+
print("Dumping task:")
|
|
104
|
+
pprint(task, indent=2)
|
|
105
|
+
|
|
106
|
+
assert task["description"] == description
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def test_resolve_keyed_by_from_parameters(run_transform, graph_config):
|
|
110
|
+
task = {
|
|
111
|
+
"name": "fake-task-name",
|
|
112
|
+
"description": {
|
|
113
|
+
"by-platform": {
|
|
114
|
+
"linux": "resolved-from-parameters",
|
|
115
|
+
"default": "default-value",
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
"task-context": {
|
|
119
|
+
"from-parameters": {"platform": "platform"},
|
|
120
|
+
"substitution-fields": ["description"],
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
config = make_config(graph_config, {"platform": "linux"})
|
|
124
|
+
|
|
125
|
+
task = run_transform(task_context.transforms, task, config=config)[0]
|
|
126
|
+
pprint(task, indent=2)
|
|
127
|
+
|
|
128
|
+
assert task["description"] == "resolved-from-parameters"
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_resolve_keyed_by_from_file(run_transform, graph_config):
|
|
132
|
+
task = {
|
|
133
|
+
"name": "fake-task-name",
|
|
134
|
+
"description": {
|
|
135
|
+
"by-file": {
|
|
136
|
+
"file": "resolved-from-file",
|
|
137
|
+
"default": "default-value",
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
"task-context": {
|
|
141
|
+
"from-file": f"{here}/data/task_context.yml",
|
|
142
|
+
"substitution-fields": ["description"],
|
|
143
|
+
},
|
|
144
|
+
}
|
|
145
|
+
config = make_config(graph_config)
|
|
146
|
+
|
|
147
|
+
task = run_transform(task_context.transforms, task, config=config)[0]
|
|
148
|
+
pprint(task, indent=2)
|
|
149
|
+
|
|
150
|
+
assert task["description"] == "resolved-from-file"
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def test_resolve_keyed_by_from_object(run_transform, graph_config):
|
|
154
|
+
task = {
|
|
155
|
+
"name": "fake-task-name",
|
|
156
|
+
"description": {
|
|
157
|
+
"by-flavor": {
|
|
158
|
+
"chocolate": "resolved-from-object",
|
|
159
|
+
"default": "default-value",
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
"task-context": {
|
|
163
|
+
"from-object": {"flavor": "chocolate"},
|
|
164
|
+
"substitution-fields": ["description"],
|
|
165
|
+
},
|
|
166
|
+
}
|
|
167
|
+
config = make_config(graph_config)
|
|
168
|
+
|
|
169
|
+
task = run_transform(task_context.transforms, task, config=config)[0]
|
|
170
|
+
pprint(task, indent=2)
|
|
171
|
+
|
|
172
|
+
assert task["description"] == "resolved-from-object"
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def test_resolve_keyed_by_missing_context_no_defer(run_transform, graph_config):
|
|
176
|
+
task = {
|
|
177
|
+
"name": "fake-task-name",
|
|
178
|
+
"description": {
|
|
179
|
+
"by-missing": {
|
|
180
|
+
"linux": "should-not-resolve",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
"task-context": {
|
|
184
|
+
"substitution-fields": ["description"],
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
config = make_config(graph_config)
|
|
188
|
+
|
|
189
|
+
with pytest.raises(Exception):
|
|
190
|
+
run_transform(task_context.transforms, task, config=config)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def test_resolve_keyed_by_missing_context_with_defer(run_transform, graph_config):
|
|
194
|
+
task = {
|
|
195
|
+
"name": "fake-task-name",
|
|
196
|
+
"description": {
|
|
197
|
+
"by-flavor": {
|
|
198
|
+
"chocolate": {
|
|
199
|
+
"by-missing": {
|
|
200
|
+
"linux": "should-not-resolve",
|
|
201
|
+
"default": "also-should-not-resolve",
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
"task-context": {
|
|
207
|
+
"from-object": {"flavor": "chocolate"},
|
|
208
|
+
"resolve-keyed-by-options": {"defer": ["missing"]},
|
|
209
|
+
"substitution-fields": ["description"],
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
config = make_config(graph_config)
|
|
213
|
+
|
|
214
|
+
task = run_transform(task_context.transforms, task, config=config)[0]
|
|
215
|
+
pprint(task, indent=2)
|
|
216
|
+
|
|
217
|
+
assert task["description"] == {
|
|
218
|
+
"by-missing": {
|
|
219
|
+
"linux": "should-not-resolve",
|
|
220
|
+
"default": "also-should-not-resolve",
|
|
221
|
+
},
|
|
222
|
+
}
|