Source code
Revision control
Copy as Markdown
Other Tools
Metadata-Version: 2.3
Name: taskcluster-taskgraph
Version: 12.1.0
Summary: Build taskcluster taskgraphs
Author-email: Mozilla Release Engineering <release+taskgraph@mozilla.com>
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Requires-Python: >=3.8
Requires-Dist: appdirs>=1.4
Requires-Dist: cookiecutter~=2.1
Requires-Dist: json-e>=2.7
Requires-Dist: mozilla-repo-urls
Requires-Dist: pyyaml>=5.3.1
Requires-Dist: redo>=2.0
Requires-Dist: requests>=2.25
Requires-Dist: slugid>=2.0
Requires-Dist: taskcluster-urls>=11.0
Requires-Dist: voluptuous>=0.12.1
Provides-Extra: load-image
Requires-Dist: zstandard; extra == 'load-image'
Description-Content-Type: text/x-rst
:alt: Task Status
:alt: pre-commit.ci status
:alt: Code Coverage
:alt: Pypi Version
:alt: Documentation Status
:alt: License
Taskgraph
=========
Taskgraph is a Python library to generate graphs of tasks for the `Taskcluster
CI`_ service. It is the recommended approach for configuring tasks once your
project outgrows a single `.taskcluster.yml`_ file and is what powers the over
30,000 tasks and counting that make up Firefox's CI.
For more information and usage instructions, `see the docs`_.
How It Works
------------
Taskgraph leverages the fact that Taskcluster is a generic task execution
platform. This means that tasks can be scheduled via its `comprehensive API`_,
and aren't limited to being triggered in response to supported events.
Taskgraph leverages this execution platform to allow CI systems to scale to any
size or complexity.
1. A *decision task* is created via Taskcluster's normal `.taskcluster.yml`_
file. This task invokes ``taskgraph``.
2. Taskgraph evaluates a series of yaml based task definitions (similar to
those other CI offerings provide).
3. Taskgraph applies transforms on top of these task definitions. Transforms
are Python functions that can programmatically alter or even clone a task
definition.
4. Taskgraph applies some optional optimization logic to remove unnecessary
tasks.
5. Taskgraph submits the resulting *task graph* to Taskcluster via its API.
Taskgraph's combination of declarative task configuration combined with
programmatic alteration are what allow it to support CI systems of any scale.
Taskgraph is the library that powers the 30,000+ tasks making up `Firefox's
CI`_.
.. _.taskcluster.yml: https://docs.taskcluster.net/docs/reference/integrations/github/taskcluster-yml-v1
Installation
------------
Taskgraph supports Python 3.8 and up, and can be installed from Pypi:
.. code-block::
pip install taskcluster-taskgraph
Alternatively, the repo can be cloned and installed directly:
.. code-block::
cd taskgraph
python setup.py install
In both cases, it's recommended to use a Python `virtual environment`_.
Get Involved
------------
If you'd like to get involved, please see our `contributing docs`_!