taskcluster-taskgraph 23.1.0__tar.gz → 23.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-23.1.0 → taskcluster_taskgraph-23.2.0}/.pre-commit-config.yaml +2 -2
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.taskcluster.yml +2 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/CHANGELOG.md +6 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/PKG-INFO +1 -1
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/transforms/task_context.rst +34 -7
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/pyproject.toml +1 -1
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/task_context.py +20 -5
- taskcluster_taskgraph-23.2.0/test/test_transform_task_context.py +222 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/uv.lock +132 -132
- 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-23.2.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.github/workflows/pypi-publish.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.gitignore +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/.yamllint +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/LICENSE +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/Makefile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/README.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/conf.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/bootstrap-taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/define-schemas.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/migrations.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/make.bat +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/renovate.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/actions/util.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/config.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/create.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/decision.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/generator.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/main.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/morph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/parameters.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/run-task/fetch-content +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/run-task/run-task +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/chunking.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/docker_image.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/fetch.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/from_deps.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/matrix.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/notify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/run/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/run/common.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/run/index_search.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/run/run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/transforms/task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/dependencies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/schema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/fetch/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/index-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/index-task/insert-indexes.js +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/index-task/package.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/index-task/yarn.lock +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/run-task/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/skopeo/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/codecov/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/complete/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/test/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/test/linux.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/kinds/test/windows.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/conftest.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_create.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_decision.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_generator.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_main.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_morph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_scripts_fetch_content.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_scripts_run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_taskgraph.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_run_run_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_transforms_task.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_schema.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_vcs.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-23.1.0 → taskcluster_taskgraph-23.2.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.
|
|
@@ -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
|
|
@@ -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
|
+
}
|