{"id":13542655,"url":"https://github.com/taskcluster/taskgraph","last_synced_at":"2026-02-17T23:13:06.766Z","repository":{"id":37945511,"uuid":"479044956","full_name":"taskcluster/taskgraph","owner":"taskcluster","description":"Generates task dependency graphs for Taskcluster CI","archived":false,"fork":false,"pushed_at":"2026-02-12T16:34:38.000Z","size":7264,"stargazers_count":22,"open_issues_count":80,"forks_count":49,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-02-13T00:39:00.903Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taskcluster.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-07T15:32:09.000Z","updated_at":"2026-02-12T16:36:30.000Z","dependencies_parsed_at":"2024-01-08T19:29:28.767Z","dependency_job_id":"a704de26-998c-4a6b-9e69-4016206c8ccf","html_url":"https://github.com/taskcluster/taskgraph","commit_stats":{"total_commits":663,"total_committers":40,"mean_commits":16.575,"dds":0.7073906485671191,"last_synced_commit":"8376154be17b2de8dbbbe7f6e4408f6a7d7523d7"},"previous_names":[],"tags_count":139,"template":false,"template_full_name":null,"purl":"pkg:github/taskcluster/taskgraph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskcluster%2Ftaskgraph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskcluster%2Ftaskgraph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskcluster%2Ftaskgraph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskcluster%2Ftaskgraph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taskcluster","download_url":"https://codeload.github.com/taskcluster/taskgraph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taskcluster%2Ftaskgraph/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29561820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T21:50:49.831Z","status":"ssl_error","status_checked_at":"2026-02-17T21:46:15.313Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T10:01:13.882Z","updated_at":"2026-02-17T23:13:06.761Z","avatar_url":"https://github.com/taskcluster.png","language":"Python","funding_links":[],"categories":["Python","others"],"sub_categories":[],"readme":"\n.. image:: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/badge.svg\n   :target: https://firefox-ci-tc.services.mozilla.com/api/github/v1/repository/taskcluster/taskgraph/main/latest\n   :alt: Task Status\n\n.. image:: https://codecov.io/gh/taskcluster/taskgraph/branch/main/graph/badge.svg?token=GJIV52ZQNP\n   :target: https://codecov.io/gh/taskcluster/taskgraph\n   :alt: Code Coverage\n\n.. image:: https://badge.fury.io/py/taskcluster-taskgraph.svg\n   :target: https://badge.fury.io/py/taskcluster-taskgraph\n   :alt: Pypi Version\n\n.. image:: https://readthedocs.org/projects/taskcluster-taskgraph/badge/?version=latest\n   :target: https://taskcluster-taskgraph.readthedocs.io/en/latest/?badge=latest\n   :alt: Documentation Status\n\n.. image:: https://img.shields.io/badge/license-MPL%202.0-orange.svg\n   :target: http://mozilla.org/MPL/2.0\n   :alt: License\n\nTaskgraph\n=========\n\nTaskgraph is a Python library to generate graphs of tasks for the `Taskcluster\nCI`_ service. It is the recommended approach for configuring tasks once your\nproject outgrows a single `.taskcluster.yml`_ file and is what powers the over\n30,000 tasks and counting that make up Firefox's CI.\n\nFor more information and usage instructions, `see the docs`_.\n\nHow It Works\n------------\n\nTaskgraph leverages the fact that Taskcluster is a generic task execution\nplatform. This means that tasks can be scheduled via its `comprehensive API`_,\nand aren't limited to being triggered in response to supported events.\n\nTaskgraph leverages this execution platform to allow CI systems to scale to any\nsize or complexity.\n\n1. A *decision task* is created via Taskcluster's normal `.taskcluster.yml`_\n   file. This task invokes ``taskgraph``.\n2. Taskgraph evaluates a series of yaml based task definitions (similar to\n   those other CI offerings provide).\n3. Taskgraph applies transforms on top of these task definitions. Transforms\n   are Python functions that can programmatically alter or even clone a task\n   definition.\n4. Taskgraph applies some optional optimization logic to remove unnecessary\n   tasks.\n5. Taskgraph submits the resulting *task graph* to Taskcluster via its API.\n\nTaskgraph's combination of declarative task configuration combined with\nprogrammatic alteration are what allow it to support CI systems of any scale.\nTaskgraph is the library that powers the 30,000+ tasks making up `Firefox's\nCI`_.\n\n.. _Taskcluster CI: https://taskcluster.net/\n.. _comprehensive API: https://docs.taskcluster.net/docs/reference/platform/queue/api\n.. _.taskcluster.yml: https://docs.taskcluster.net/docs/reference/integrations/github/taskcluster-yml-v1\n.. _Firefox's CI: https://treeherder.mozilla.org/jobs?repo=mozilla-central\n.. _see the docs: https://taskcluster-taskgraph.readthedocs.io\n\nInstallation\n------------\n\nTaskgraph supports Python 3.8 and up, and can be installed from Pypi:\n\n.. code-block::\n\n  pip install taskcluster-taskgraph\n\n\nAlternatively, the repo can be cloned and installed directly:\n\n.. code-block::\n\n  git clone https://github.com/taskcluster/taskgraph\n  cd taskgraph\n  pip install .\n\nIn both cases, it's recommended to use a Python `virtual environment`_.\n\n.. _virtual environment: https://docs.python.org/3/tutorial/venv.html\n\nGet Involved\n------------\n\nIf you'd like to get involved, please see our `contributing docs`_!\n\n.. _contributing docs: https://github.com/taskcluster/taskgraph/blob/main/CONTRIBUTING.rst\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaskcluster%2Ftaskgraph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaskcluster%2Ftaskgraph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaskcluster%2Ftaskgraph/lists"}