taskcluster-taskgraph 24.1.0__tar.gz → 24.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-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/workflows/codspeed.yml +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/workflows/pypi-publish.yml +6 -6
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.pre-commit-config.yaml +2 -2
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/CHANGELOG.md +19 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/PKG-INFO +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/bootstrap-taskgraph.rst +10 -17
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/pyproject.toml +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/create.py +13 -8
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/main.py +18 -18
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/morph.py +3 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/parameters.py +13 -10
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/fetch-content +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/run-task +150 -83
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/docker_image.py +2 -2
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/fetch/Dockerfile +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/index-task/Dockerfile +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/index-task/insert-indexes.js +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/index-task/package.json +3 -2
- taskcluster_taskgraph-24.2.0/taskcluster/docker/index-task/yarn.lock +245 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/run-task/Dockerfile +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/skopeo/Dockerfile +3 -3
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster/docker/linux/Dockerfile +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/conftest.py +8 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_create.py +42 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_graph_perf.py +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_morph.py +1 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_scripts_fetch_content.py +2 -1
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_scripts_run_task.py +72 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/uv.lock +235 -235
- taskcluster_taskgraph-24.1.0/taskcluster/docker/index-task/yarn.lock +0 -293
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.codespell-ignore-words.txt +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/CODEOWNERS +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/workflows/codeql-analysis.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.gitignore +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.readthedocs.yaml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.taskcluster.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.yamllint +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/CODE_OF_CONDUCT.md +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/CONTRIBUTING.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/LICENSE +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/Makefile +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/README.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/kind.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/loading.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/optimization.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/overview.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/scopes.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/task-graphs.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/concepts/transforms.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/conf.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/contributing.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/glossary.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/create-actions.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/create-tasks.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/debugging.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/define-schemas.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/docker.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/load-task-locally.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/resolve-keyed-by.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/run-locally.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/send-notifications.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/use-fetches.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/cli.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/migrations.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/optimization-strategies.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/parameters.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/modules.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.actions.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.loader.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.optimize.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.transforms.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.transforms.run.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/source/taskgraph.util.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/transforms/chunking.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/transforms/from_deps.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/transforms/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/transforms/matrix.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/reference/transforms/task_context.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/tutorials/connecting-taskcluster.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/tutorials/creating-a-task-graph.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/tutorials/example-taskcluster.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/tutorials/getting-started.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/tutorials/index.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/make.bat +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/pytest-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/pytest-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/gen.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/pytest-taskgraph/src/pytest_taskgraph/fixtures/vcs.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/sphinx-taskgraph/README.md +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/sphinx-taskgraph/pyproject.toml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/packages/sphinx-taskgraph/src/sphinx_taskgraph/autoschema.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/renovate.json +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/add_new_jobs.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/cancel.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/cancel_all.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/registry.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/retrigger.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/actions/util.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/config.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/decision.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/docker.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/filter_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/generator.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/graph.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/loader/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/loader/default.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/loader/transform.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/optimize/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/optimize/base.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/optimize/strategies.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/hgrc +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/robustcheckout.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/target_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/task.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/taskgraph.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/base.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/chunking.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/code_review.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/fetch.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/from_deps.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/matrix.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/notify.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/run/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/run/common.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/run/index_search.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/run/run_task.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/run/toolchain.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/task.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/transforms/task_context.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/archive.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/attributes.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/caches.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/copy.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/dependencies.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/docker.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/hash.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/json.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/keyed_by.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/parameterization.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/path.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/python_path.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/readonlydict.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/schema.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/set_name.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/shell.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/task_context.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/taskcluster.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/taskgraph.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/templates.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/time.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/treeherder.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/vcs.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/verify.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/workertypes.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/util/yaml.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/REGISTRY +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/decision/Dockerfile +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/decision/HASH +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/decision/README.md +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/decision/VERSION +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/decision/system-setup.sh +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/image_builder/README.rst +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/index-task/README +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/python/Dockerfile +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/run-task/system-setup.sh +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/skopeo/policy.json +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/docker/skopeo/push_image.sh +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/check/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/codecov/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/complete/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/doc/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/fetch/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/push-image/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/test/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/test/linux.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/kinds/test/windows.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/scripts/codecov-upload.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/self_taskgraph/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/self_taskgraph/custom_parameters.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/self_taskgraph/custom_target_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/self_taskgraph/transforms/add_pr_route.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/self_taskgraph/transforms/push_image.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/test/params/main-repo-pull-request-untrusted.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/test/params/main-repo-pull-request.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/test/params/main-repo-push.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/test/params/main-repo-release-pytest-taskgraph.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/taskcluster/test/params/main-repo-release-taskcluster-taskgraph.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/cookiecutter.json +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/hooks/post_gen_project.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster/kinds/hello/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster/{{cookiecutter.project_slug}}_taskgraph/transforms/hello.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/template/{{cookiecutter.project_name}}/taskcluster.github.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/__init__.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/automationrelevance.json +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/task_context.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/config.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/docker/hello-world/Dockerfile +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/docker/hello-world-tag/Dockerfile +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/docker/hello-world-tag/REGISTRY +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/docker/hello-world-tag/VERSION +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/kinds/docker-image/kind.yml +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/scripts/toolchain/run.ps1 +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/scripts/toolchain/run.sh +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/taskcluster/test_taskgraph/transforms/foo.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/data/testmod/thing.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/mockedopen.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_actions_rebuild_cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_actions_registry.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_config.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_decision.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_docker.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_generator.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_graph.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_main.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_optimize.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_optimize_strategies.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_parameters.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_target_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_taskgraph.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transform_chunking.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transform_docker_image.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transform_task_context.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_base.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_fetch.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_from_deps.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_matrix.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_notify.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_run.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_run_run_task.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_run_toolchain.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_transforms_task.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_archive.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_attributes.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_cached_tasks.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_copy.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_dependencies.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_docker.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_json.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_keyed_by.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_parameterization.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_path.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_python_path.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_readonlydict.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_schema.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_taskcluster.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_templates.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_time.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_treeherder.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_vcs.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_verify.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_workertypes.py +0 -0
- {taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/test/test_util_yaml.py +0 -0
{taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/workflows/codspeed.yml
RENAMED
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
- name: Install dependencies
|
|
26
26
|
run: uv sync
|
|
27
27
|
- name: Run benchmarks
|
|
28
|
-
uses: CodSpeedHQ/action@
|
|
28
|
+
uses: CodSpeedHQ/action@a4a36bb07c0638b0b4ca52bf1f3dad1b4289e52f # v4.18.1
|
|
29
29
|
with:
|
|
30
30
|
mode: simulation
|
|
31
31
|
run: uv run pytest test/ --codspeed
|
{taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/.github/workflows/pypi-publish.yml
RENAMED
|
@@ -13,9 +13,9 @@ jobs:
|
|
|
13
13
|
steps:
|
|
14
14
|
- name: Checkout sources
|
|
15
15
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
16
|
-
- uses: actions/setup-python@
|
|
16
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
17
17
|
with:
|
|
18
|
-
python-version: '3.
|
|
18
|
+
python-version: '3.14'
|
|
19
19
|
cache: 'pip'
|
|
20
20
|
- name: Build taskcluster-taskgraph package distributions
|
|
21
21
|
run: |
|
|
@@ -39,9 +39,9 @@ jobs:
|
|
|
39
39
|
steps:
|
|
40
40
|
- name: Checkout sources
|
|
41
41
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
42
|
-
- uses: actions/setup-python@
|
|
42
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
43
43
|
with:
|
|
44
|
-
python-version: '3.
|
|
44
|
+
python-version: '3.14'
|
|
45
45
|
cache: 'pip'
|
|
46
46
|
- name: Build pytest-taskgraph package distributions
|
|
47
47
|
working-directory: packages/pytest-taskgraph
|
|
@@ -62,9 +62,9 @@ jobs:
|
|
|
62
62
|
steps:
|
|
63
63
|
- name: Checkout sources
|
|
64
64
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
65
|
-
- uses: actions/setup-python@
|
|
65
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
66
66
|
with:
|
|
67
|
-
python-version: '3.
|
|
67
|
+
python-version: '3.14'
|
|
68
68
|
cache: 'pip'
|
|
69
69
|
- name: Build sphinx-taskgraph package distributions
|
|
70
70
|
working-directory: packages/sphinx-taskgraph
|
|
@@ -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.20
|
|
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.26
|
|
23
23
|
hooks:
|
|
24
24
|
- id: uv-lock
|
|
25
25
|
- repo: https://github.com/adrienverge/yamllint.git
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [24.2.0] - 2026-07-15
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Included profile data for `run-task` VCS operations in the log
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Ensure `INDEX_RANK` env is cast to a string for index tasks
|
|
12
|
+
- Properly capture all exceptions in `taskgraph.create.create_tasks`
|
|
13
|
+
- Send `Accept-Encoding` header in `fetch-content` script
|
|
14
|
+
- Release graphs from memory upon completion when using `taskgraph <phase> --diff`
|
|
15
|
+
|
|
16
|
+
## [24.1.1] - 2026-06-11
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- Use proper `comm` parameters in Git repos as well
|
|
21
|
+
|
|
3
22
|
## [24.1.0] - 2026-06-04
|
|
4
23
|
|
|
5
24
|
### Added
|
{taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/docs/howto/bootstrap-taskgraph.rst
RENAMED
|
@@ -73,22 +73,15 @@ This section outlines the recommended way to do that.
|
|
|
73
73
|
Define Requirements
|
|
74
74
|
~~~~~~~~~~~~~~~~~~~
|
|
75
75
|
|
|
76
|
-
We'll use
|
|
77
|
-
|
|
78
|
-
including Taskgraph itself.
|
|
76
|
+
We'll use `uv`_ to help generate the ``requirements.txt`` that will contain our
|
|
77
|
+
Decision task dependencies, including Taskgraph itself.
|
|
79
78
|
|
|
80
79
|
.. note::
|
|
81
80
|
|
|
82
81
|
You may use other tools to create the ``requirements.txt``, such as
|
|
83
|
-
`hashin`_. As long as package hashes are included.
|
|
82
|
+
`pip-compile`_ or `hashin`_. As long as package hashes are included.
|
|
84
83
|
|
|
85
|
-
First make sure you
|
|
86
|
-
|
|
87
|
-
.. code-block:: bash
|
|
88
|
-
|
|
89
|
-
pip install pip-tools
|
|
90
|
-
|
|
91
|
-
Next, create the ``requirements.in`` file. For this example, let's pretend that
|
|
84
|
+
First make sure you `install uv`_. Next, create the ``requirements.in`` file. For this example, let's pretend that
|
|
92
85
|
in addition to ``taskcluster-taskgraph`` we also want to depend on
|
|
93
86
|
``requests``:
|
|
94
87
|
|
|
@@ -100,9 +93,7 @@ in addition to ``taskcluster-taskgraph`` we also want to depend on
|
|
|
100
93
|
requests
|
|
101
94
|
EOF
|
|
102
95
|
|
|
103
|
-
|
|
104
|
-
# image (currently 3.13).
|
|
105
|
-
pip-compile --generate-hashes --output-file requirements.txt requirements.in
|
|
96
|
+
uv pip compile --universal --generate-hashes --output-file requirements.txt requirements.in
|
|
106
97
|
|
|
107
98
|
.. note::
|
|
108
99
|
|
|
@@ -113,6 +104,8 @@ in addition to ``taskcluster-taskgraph`` we also want to depend on
|
|
|
113
104
|
If you end up creating transforms that require additional packages, add them to
|
|
114
105
|
``requirements.in`` and re-generate the lock file.
|
|
115
106
|
|
|
107
|
+
.. _uv: https://docs.astral.sh/uv/
|
|
108
|
+
.. _install uv: https://docs.astral.sh/uv/getting-started/installation/
|
|
116
109
|
.. _pip-compile: https://github.com/jazzband/pip-tools
|
|
117
110
|
.. _hashin: https://github.com/peterbe/hashin
|
|
118
111
|
.. _version specifiers: https://pip.pypa.io/en/stable/cli/pip_install/#requirement-specifiers
|
|
@@ -186,7 +179,7 @@ file:
|
|
|
186
179
|
.. code-block:: shell
|
|
187
180
|
|
|
188
181
|
cd taskcluster
|
|
189
|
-
pip
|
|
182
|
+
uv pip compile --universal --generate-hashes --output-file requirements.txt requirements.in
|
|
190
183
|
|
|
191
184
|
If you pinned the package to a specific version don't forget to update
|
|
192
185
|
``requirements.in`` first.
|
|
@@ -209,7 +202,7 @@ accomplished using `pip's version control support`_:
|
|
|
209
202
|
|
|
210
203
|
cd taskcluster
|
|
211
204
|
echo "taskcluster-taskgraph@git+https://github.com/taskcluster/taskgraph@refs/pull/123/head" > requirements.in
|
|
212
|
-
pip
|
|
205
|
+
uv pip compile --universal --output-file requirements.txt requirements.in
|
|
213
206
|
|
|
214
207
|
Next edit your ``.taskcluster.yml`` to disable hashing since pip does not
|
|
215
208
|
support `hashes with url requirements`_:
|
|
@@ -222,7 +215,7 @@ support `hashes with url requirements`_:
|
|
|
222
215
|
|
|
223
216
|
.. note::
|
|
224
217
|
|
|
225
|
-
Be sure to omit the ``--generate-hashes`` argument to ``pip
|
|
218
|
+
Be sure to omit the ``--generate-hashes`` argument to ``uv pip compile``
|
|
226
219
|
otherwise ``pip`` will implicitly turn hashing back on.
|
|
227
220
|
|
|
228
221
|
This way you can push an experimental change to a PR and then install it in
|
|
@@ -64,7 +64,6 @@ def create_tasks(graph_config, taskgraph, label_to_taskid, params, decision_task
|
|
|
64
64
|
fs = {}
|
|
65
65
|
fs_to_task = {}
|
|
66
66
|
skipped = set()
|
|
67
|
-
errors = {}
|
|
68
67
|
|
|
69
68
|
# We can't submit a task until its dependencies have been submitted.
|
|
70
69
|
# So our strategy is to walk the graph and submit tasks once all
|
|
@@ -72,12 +71,6 @@ def create_tasks(graph_config, taskgraph, label_to_taskid, params, decision_task
|
|
|
72
71
|
tasklist = set(taskgraph.graph.visit_postorder())
|
|
73
72
|
alltasks = tasklist.copy()
|
|
74
73
|
|
|
75
|
-
def handle_exception(fut):
|
|
76
|
-
if exc := fut.exception():
|
|
77
|
-
task_id, label = fs_to_task[fut]
|
|
78
|
-
skipped.add(task_id)
|
|
79
|
-
errors[label] = exc
|
|
80
|
-
|
|
81
74
|
def schedule_tasks():
|
|
82
75
|
to_remove = set()
|
|
83
76
|
new = set()
|
|
@@ -87,7 +80,13 @@ def create_tasks(graph_config, taskgraph, label_to_taskid, params, decision_task
|
|
|
87
80
|
new.add(fut)
|
|
88
81
|
fs[task_id] = fut
|
|
89
82
|
fs_to_task[fut] = (task_id, label)
|
|
90
|
-
|
|
83
|
+
|
|
84
|
+
def mark_failed_as_skipped(fut):
|
|
85
|
+
if fut.exception():
|
|
86
|
+
task_id, _ = fs_to_task[fut]
|
|
87
|
+
skipped.add(task_id)
|
|
88
|
+
|
|
89
|
+
fut.add_done_callback(mark_failed_as_skipped)
|
|
91
90
|
|
|
92
91
|
for task_id in tasklist:
|
|
93
92
|
task_def = taskgraph.tasks[task_id].task
|
|
@@ -127,6 +126,12 @@ def create_tasks(graph_config, taskgraph, label_to_taskid, params, decision_task
|
|
|
127
126
|
# Wait for all futures to complete.
|
|
128
127
|
futures.wait(fs.values())
|
|
129
128
|
|
|
129
|
+
# Collect errors.
|
|
130
|
+
errors = {}
|
|
131
|
+
for fut, (task_id, label) in fs_to_task.items():
|
|
132
|
+
if exc := fut.exception():
|
|
133
|
+
errors[label] = exc
|
|
134
|
+
|
|
130
135
|
if errors:
|
|
131
136
|
raise CreateTasksException(errors)
|
|
132
137
|
|
|
@@ -222,6 +222,7 @@ def generate_taskgraph(options, parameters, overrides, logdir):
|
|
|
222
222
|
return 0
|
|
223
223
|
|
|
224
224
|
futures = {}
|
|
225
|
+
returncode = 0
|
|
225
226
|
with ProcessPoolExecutor(max_workers=options["max_workers"]) as executor:
|
|
226
227
|
for spec in parameters:
|
|
227
228
|
f = executor.submit(
|
|
@@ -229,25 +230,24 @@ def generate_taskgraph(options, parameters, overrides, logdir):
|
|
|
229
230
|
)
|
|
230
231
|
futures[f] = spec
|
|
231
232
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
out = future.result()
|
|
233
|
+
for future in as_completed(futures):
|
|
234
|
+
output_file = options["output_file"]
|
|
235
|
+
spec = futures.pop(future)
|
|
236
|
+
e = future.exception()
|
|
237
|
+
if e:
|
|
238
|
+
returncode = 1
|
|
239
|
+
out = "".join(traceback.format_exception(type(e), e, e.__traceback__))
|
|
240
|
+
if options["diff"]:
|
|
241
|
+
# Dump to console so we don't accidentally diff the tracebacks.
|
|
242
|
+
output_file = None
|
|
243
|
+
else:
|
|
244
|
+
out = future.result()
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
246
|
+
dump_output(
|
|
247
|
+
out,
|
|
248
|
+
path=output_file,
|
|
249
|
+
params_spec=spec if len(parameters) > 1 else None,
|
|
250
|
+
)
|
|
251
251
|
|
|
252
252
|
return returncode
|
|
253
253
|
|
|
@@ -147,7 +147,9 @@ def make_index_task(parent_task, taskgraph, label_to_taskid, parameters, graph_c
|
|
|
147
147
|
task.task["payload"]["command"] = ["insert-indexes.js"] + index_paths
|
|
148
148
|
task.task["payload"]["env"] = {
|
|
149
149
|
"TARGET_TASKID": parent_task.task_id,
|
|
150
|
-
"INDEX_RANK":
|
|
150
|
+
"INDEX_RANK": str(
|
|
151
|
+
parent_task.task.get("extra", {}).get("index", {}).get("rank", 0)
|
|
152
|
+
),
|
|
151
153
|
}
|
|
152
154
|
return task, taskgraph, label_to_taskid
|
|
153
155
|
|
|
@@ -291,30 +291,33 @@ class Parameters(ReadOnlyDict):
|
|
|
291
291
|
|
|
292
292
|
:return str: The URL displaying the given path.
|
|
293
293
|
"""
|
|
294
|
+
if "comm/" in path:
|
|
295
|
+
path = path.split("comm/")[1]
|
|
296
|
+
repo_key = "comm_head_repository"
|
|
297
|
+
rev_key = "comm_head_rev"
|
|
298
|
+
else:
|
|
299
|
+
repo_key = "head_repository"
|
|
300
|
+
rev_key = "head_rev"
|
|
301
|
+
|
|
294
302
|
if self["repository_type"] == "hg":
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
repo = self["comm_head_repository"]
|
|
298
|
-
rev = self["comm_head_rev"]
|
|
299
|
-
else:
|
|
300
|
-
repo = self["head_repository"]
|
|
301
|
-
rev = self["head_rev"]
|
|
303
|
+
repo = self[repo_key]
|
|
304
|
+
rev = self[rev_key]
|
|
302
305
|
endpoint = "file" if pretty else "raw-file"
|
|
303
306
|
return f"{repo}/{endpoint}/{rev}/{path}"
|
|
304
307
|
elif self["repository_type"] == "git":
|
|
305
308
|
# For getting the file URL for git repositories, we only support a Github HTTPS remote
|
|
306
|
-
repo = self[
|
|
309
|
+
repo = self[repo_key]
|
|
307
310
|
if repo.startswith("https://github.com/"):
|
|
308
311
|
if repo.endswith("/"):
|
|
309
312
|
repo = repo[:-1]
|
|
310
313
|
|
|
311
|
-
rev = self[
|
|
314
|
+
rev = self[rev_key]
|
|
312
315
|
endpoint = "blob" if pretty else "raw"
|
|
313
316
|
return f"{repo}/{endpoint}/{rev}/{path}"
|
|
314
317
|
elif repo.startswith("git@github.com:"):
|
|
315
318
|
if repo.endswith(".git"):
|
|
316
319
|
repo = repo[:-4]
|
|
317
|
-
rev = self[
|
|
320
|
+
rev = self[rev_key]
|
|
318
321
|
endpoint = "blob" if pretty else "raw"
|
|
319
322
|
return "{}/{}/{}/{}".format(
|
|
320
323
|
repo.replace("git@github.com:", "https://github.com/"),
|
{taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/fetch-content
RENAMED
|
@@ -181,7 +181,7 @@ def stream_download(url, sha256=None, size=None, headers=None):
|
|
|
181
181
|
length = 0
|
|
182
182
|
|
|
183
183
|
t0 = time.time()
|
|
184
|
-
req_headers = {}
|
|
184
|
+
req_headers = {"Accept-Encoding": "gzip"}
|
|
185
185
|
for header in headers:
|
|
186
186
|
key, val = header.split(":")
|
|
187
187
|
req_headers[key.strip()] = val.strip()
|
{taskcluster_taskgraph-24.1.0 → taskcluster_taskgraph-24.2.0}/src/taskgraph/run-task/run-task
RENAMED
|
@@ -14,6 +14,7 @@ current time to improve log usefulness.
|
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
import argparse
|
|
17
|
+
import contextlib
|
|
17
18
|
import datetime
|
|
18
19
|
import errno
|
|
19
20
|
import io
|
|
@@ -567,6 +568,61 @@ def configure_volume_posix(volume, user, group, running_as_root):
|
|
|
567
568
|
set_dir_permissions(volume, user.pw_uid, group.gr_gid)
|
|
568
569
|
|
|
569
570
|
|
|
571
|
+
class PerfRecorder:
|
|
572
|
+
"""Collects operation timings and emits them as PERFHERDER_DATA."""
|
|
573
|
+
|
|
574
|
+
def __init__(self, framework: str):
|
|
575
|
+
self.framework = framework
|
|
576
|
+
self.optimes = []
|
|
577
|
+
self._stack = []
|
|
578
|
+
|
|
579
|
+
def start(self, *names: str):
|
|
580
|
+
self._stack.append((time.time(), names))
|
|
581
|
+
|
|
582
|
+
def stop(self, errored: bool = False):
|
|
583
|
+
start, names = self._stack.pop()
|
|
584
|
+
elapsed = time.time() - start
|
|
585
|
+
suffix = "_errored" if errored else ""
|
|
586
|
+
for name in names:
|
|
587
|
+
self.optimes.append((name + suffix, elapsed))
|
|
588
|
+
|
|
589
|
+
@contextlib.contextmanager
|
|
590
|
+
def record(self, *names: str):
|
|
591
|
+
self.start(*names)
|
|
592
|
+
try:
|
|
593
|
+
yield
|
|
594
|
+
except BaseException:
|
|
595
|
+
self.stop(errored=True)
|
|
596
|
+
raise
|
|
597
|
+
else:
|
|
598
|
+
self.stop()
|
|
599
|
+
|
|
600
|
+
def emit(self):
|
|
601
|
+
instance_type = os.environ.get("TASKCLUSTER_INSTANCE_TYPE")
|
|
602
|
+
if not instance_type or not self.optimes:
|
|
603
|
+
return
|
|
604
|
+
|
|
605
|
+
suites = []
|
|
606
|
+
for op, duration in self.optimes:
|
|
607
|
+
suites.append(
|
|
608
|
+
{
|
|
609
|
+
"name": op,
|
|
610
|
+
"value": duration,
|
|
611
|
+
"lowerIsBetter": True,
|
|
612
|
+
"shouldAlert": False,
|
|
613
|
+
"extraOptions": [instance_type],
|
|
614
|
+
"subtests": [],
|
|
615
|
+
}
|
|
616
|
+
)
|
|
617
|
+
|
|
618
|
+
perfherder = {"framework": {"name": self.framework}, "suites": suites}
|
|
619
|
+
sys.stdout.write(
|
|
620
|
+
"PERFHERDER_DATA: {}\n".format(json.dumps(perfherder, sort_keys=True))
|
|
621
|
+
)
|
|
622
|
+
sys.stdout.flush()
|
|
623
|
+
self.optimes = []
|
|
624
|
+
|
|
625
|
+
|
|
570
626
|
def git_fetch(
|
|
571
627
|
destination_path: str,
|
|
572
628
|
*targets: str,
|
|
@@ -668,105 +724,114 @@ def git_checkout(
|
|
|
668
724
|
"Must specify both ssh_key_file and ssh_known_hosts_file, if either are specified",
|
|
669
725
|
)
|
|
670
726
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
"
|
|
675
|
-
|
|
676
|
-
"--global",
|
|
677
|
-
"--add",
|
|
678
|
-
"safe.directory",
|
|
679
|
-
Path(destination_path).as_posix(),
|
|
680
|
-
]
|
|
681
|
-
retry_required_command(b"vcs", args, extra_env=env)
|
|
682
|
-
|
|
683
|
-
if not os.path.exists(destination_path):
|
|
684
|
-
# Repository doesn't already exist, needs to be cloned
|
|
727
|
+
has_repo = os.path.exists(destination_path)
|
|
728
|
+
perf = PerfRecorder("vcs")
|
|
729
|
+
with perf.record("overall", "overall_pull" if has_repo else "overall_clone"):
|
|
730
|
+
# Bypass Git's "safe directory" feature as the destination could be
|
|
731
|
+
# coming from a cache and therefore cloned by a different user.
|
|
685
732
|
args = [
|
|
686
733
|
"git",
|
|
687
|
-
"
|
|
734
|
+
"config",
|
|
735
|
+
"--global",
|
|
736
|
+
"--add",
|
|
737
|
+
"safe.directory",
|
|
738
|
+
Path(destination_path).as_posix(),
|
|
688
739
|
]
|
|
689
|
-
|
|
690
|
-
if shallow:
|
|
691
|
-
args.extend(["--depth=1", "--no-checkout"])
|
|
692
|
-
|
|
693
|
-
args.extend(
|
|
694
|
-
[
|
|
695
|
-
base_repo if base_repo else head_repo,
|
|
696
|
-
destination_path,
|
|
697
|
-
]
|
|
698
|
-
)
|
|
699
|
-
|
|
700
740
|
retry_required_command(b"vcs", args, extra_env=env)
|
|
701
741
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
git_fetch(destination_path, base_rev, shallow=shallow, env=env)
|
|
709
|
-
|
|
710
|
-
# If a head_ref was provided, it might be tag, so we need to make sure we fetch
|
|
711
|
-
# those. This is explicitly only done when base and head repo match,
|
|
712
|
-
# because it is the only scenario where tags could be present. (PRs, for
|
|
713
|
-
# example, always include an explicit rev.) Failure to do this could result
|
|
714
|
-
# in not having a tag, or worse: having an outdated version of one.
|
|
715
|
-
tags = False
|
|
716
|
-
if head_ref and not head_ref.startswith("refs/heads/") and base_repo == head_repo:
|
|
717
|
-
tags = True
|
|
718
|
-
|
|
719
|
-
# Fetch head_ref and/or head_rev
|
|
720
|
-
targets = []
|
|
721
|
-
if head_ref:
|
|
722
|
-
targets.append(head_ref)
|
|
723
|
-
if not head_ref or (shallow and head_rev):
|
|
724
|
-
# If head_ref wasn't provided, we fallback to head_rev. If we have a
|
|
725
|
-
# shallow clone, head_rev needs to be fetched independently regardless.
|
|
726
|
-
targets.append(head_rev)
|
|
727
|
-
|
|
728
|
-
git_fetch(
|
|
729
|
-
destination_path,
|
|
730
|
-
*targets,
|
|
731
|
-
remote=head_repo,
|
|
732
|
-
tags=tags,
|
|
733
|
-
shallow=shallow,
|
|
734
|
-
env=env,
|
|
735
|
-
)
|
|
736
|
-
|
|
737
|
-
args = [
|
|
738
|
-
"git",
|
|
739
|
-
"checkout",
|
|
740
|
-
"-f",
|
|
741
|
-
]
|
|
742
|
+
if not has_repo:
|
|
743
|
+
# Repository doesn't already exist, needs to be cloned
|
|
744
|
+
args = [
|
|
745
|
+
"git",
|
|
746
|
+
"clone",
|
|
747
|
+
]
|
|
742
748
|
|
|
743
|
-
|
|
744
|
-
|
|
749
|
+
if shallow:
|
|
750
|
+
args.extend(["--depth=1", "--no-checkout"])
|
|
745
751
|
|
|
746
|
-
|
|
747
|
-
|
|
752
|
+
args.extend(
|
|
753
|
+
[
|
|
754
|
+
base_repo if base_repo else head_repo,
|
|
755
|
+
destination_path,
|
|
756
|
+
]
|
|
757
|
+
)
|
|
748
758
|
|
|
749
|
-
|
|
759
|
+
with perf.record("clone"):
|
|
760
|
+
retry_required_command(b"vcs", args, extra_env=env)
|
|
761
|
+
|
|
762
|
+
# For Github based repos, base_rev often doesn't refer to an ancestor of
|
|
763
|
+
# head_rev simply due to Github not providing that information in their
|
|
764
|
+
# webhook events. Therefore we fetch it independently from `head_rev` so
|
|
765
|
+
# that consumers can compute the merge-base or files modified between the
|
|
766
|
+
# two as needed.
|
|
767
|
+
if base_rev and base_rev != NULL_REVISION:
|
|
768
|
+
with perf.record("fetch_base"):
|
|
769
|
+
git_fetch(destination_path, base_rev, shallow=shallow, env=env)
|
|
770
|
+
|
|
771
|
+
# If a head_ref was provided, it might be tag, so we need to make sure we fetch
|
|
772
|
+
# those. This is explicitly only done when base and head repo match,
|
|
773
|
+
# because it is the only scenario where tags could be present. (PRs, for
|
|
774
|
+
# example, always include an explicit rev.) Failure to do this could result
|
|
775
|
+
# in not having a tag, or worse: having an outdated version of one.
|
|
776
|
+
tags = False
|
|
777
|
+
if head_ref and not head_ref.startswith("refs/heads/") and base_repo == head_repo:
|
|
778
|
+
tags = True
|
|
779
|
+
|
|
780
|
+
# Fetch head_ref and/or head_rev
|
|
781
|
+
targets = []
|
|
782
|
+
if head_ref:
|
|
783
|
+
targets.append(head_ref)
|
|
784
|
+
if not head_ref or (shallow and head_rev):
|
|
785
|
+
# If head_ref wasn't provided, we fallback to head_rev. If we have a
|
|
786
|
+
# shallow clone, head_rev needs to be fetched independently regardless.
|
|
787
|
+
targets.append(head_rev)
|
|
788
|
+
|
|
789
|
+
with perf.record("pull"):
|
|
790
|
+
git_fetch(
|
|
791
|
+
destination_path,
|
|
792
|
+
*targets,
|
|
793
|
+
remote=head_repo,
|
|
794
|
+
tags=tags,
|
|
795
|
+
shallow=shallow,
|
|
796
|
+
env=env,
|
|
797
|
+
)
|
|
750
798
|
|
|
751
|
-
if os.path.exists(os.path.join(destination_path, ".gitmodules")):
|
|
752
799
|
args = [
|
|
753
800
|
"git",
|
|
754
|
-
"
|
|
755
|
-
"
|
|
801
|
+
"checkout",
|
|
802
|
+
"-f",
|
|
756
803
|
]
|
|
757
804
|
|
|
758
|
-
|
|
805
|
+
if head_ref:
|
|
806
|
+
args.extend(["-B", shortref(head_ref)])
|
|
759
807
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
"
|
|
765
|
-
]
|
|
808
|
+
# `git fetch` set `FETCH_HEAD` reference to the last commit of the desired branch
|
|
809
|
+
args.append(head_rev if head_rev else "FETCH_HEAD")
|
|
810
|
+
|
|
811
|
+
with perf.record("update"):
|
|
812
|
+
run_required_command(b"vcs", args, cwd=destination_path)
|
|
766
813
|
|
|
767
|
-
|
|
814
|
+
if os.path.exists(os.path.join(destination_path, ".gitmodules")):
|
|
815
|
+
args = [
|
|
816
|
+
"git",
|
|
817
|
+
"submodule",
|
|
818
|
+
"init",
|
|
819
|
+
]
|
|
768
820
|
|
|
769
|
-
|
|
821
|
+
run_required_command(b"vcs", args, cwd=destination_path)
|
|
822
|
+
|
|
823
|
+
args = [
|
|
824
|
+
"git",
|
|
825
|
+
"submodule",
|
|
826
|
+
"update",
|
|
827
|
+
"--force", # Overrides any potential local changes
|
|
828
|
+
]
|
|
829
|
+
|
|
830
|
+
with perf.record("submodule_update"):
|
|
831
|
+
run_required_command(b"vcs", args, cwd=destination_path)
|
|
832
|
+
|
|
833
|
+
with perf.record("purge"):
|
|
834
|
+
_clean_git_checkout(destination_path)
|
|
770
835
|
|
|
771
836
|
args = ["git", "rev-parse", "--verify", "HEAD"]
|
|
772
837
|
|
|
@@ -793,6 +858,8 @@ def git_checkout(
|
|
|
793
858
|
|
|
794
859
|
print_line(b"vcs", msg.encode("utf-8"))
|
|
795
860
|
|
|
861
|
+
perf.emit()
|
|
862
|
+
|
|
796
863
|
return commit_hash
|
|
797
864
|
|
|
798
865
|
|
|
@@ -20,9 +20,9 @@ CONTEXTS_DIR = "docker-contexts"
|
|
|
20
20
|
DIGEST_RE = re.compile("^[0-9a-f]{64}$")
|
|
21
21
|
|
|
22
22
|
IMAGE_BUILDER_IMAGE = (
|
|
23
|
-
"mozillareleases/image_builder:6.
|
|
23
|
+
"mozillareleases/image_builder:6.2.0"
|
|
24
24
|
"@sha256:"
|
|
25
|
-
"
|
|
25
|
+
"f7df722770d6caadea79b2de458e072d8b3d93e59675b34dffb32c3e7e30f5b9"
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
transforms = TransformSequence()
|