{"id":13485154,"url":"https://github.com/areller/denogent","last_synced_at":"2026-02-18T20:32:10.131Z","repository":{"id":47134451,"uuid":"300134031","full_name":"areller/denogent","owner":"areller","description":"A TypeScript build system","archived":false,"fork":false,"pushed_at":"2021-09-13T00:50:23.000Z","size":230,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-22T23:37:37.767Z","etag":null,"topics":["build","build-tool","ci","deno","pipelines","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/areller.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-01T03:52:37.000Z","updated_at":"2025-10-12T17:24:50.000Z","dependencies_parsed_at":"2022-08-24T20:42:02.715Z","dependency_job_id":null,"html_url":"https://github.com/areller/denogent","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/areller/denogent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/areller%2Fdenogent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/areller%2Fdenogent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/areller%2Fdenogent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/areller%2Fdenogent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/areller","download_url":"https://codeload.github.com/areller/denogent/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/areller%2Fdenogent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29594259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T18:54:29.675Z","status":"ssl_error","status_checked_at":"2026-02-18T18:50:50.517Z","response_time":162,"last_error":"SSL_read: 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":["build","build-tool","ci","deno","pipelines","typescript"],"created_at":"2024-07-31T17:01:48.174Z","updated_at":"2026-02-18T20:32:10.102Z","avatar_url":"https://github.com/areller.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# denogent\n\n**Disclaimer: This tool is in active development.**\n\n\u003cdiv align=\"center\"\u003e\n\n[![Actions Status](https://github.com/areller/denogent/workflows/denogent-build/badge.svg)](https://github.com/areller/denogent/actions)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/0a2779fd560245e8adf327a0542b5590)](https://app.codacy.com/gh/areller/denogent?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=areller/denogent\u0026utm_campaign=Badge_Grade)\n\n\u003c/div\u003e\n\n[denogent](https://github.com/areller/denogent) is a tool for creating and running build pipelines.\n\n## Installation\n\nTo install the latest version of the `denogent` CLI tool, run\n\n```bash\ndeno install -A --unstable https://deno.land/x/denogent/denogent.ts\n```\n\n## The Build File\n\nThe `build file` is the place where you define your build pipeline. To create one, run\n\n```bash\ndenogent create\n```\n\nBy default, `denogent create` will create the build file at `build/build.ts`. To create the file at a different path, run\n\n```bash\ndenogent create --file path/to/buid/file.ts\n```\n\nOnce you open the newly created build file, you'll see  \n\n```typescript\nimport { createBuilder, task } from \"https://deno.land/x/denogent/mod.ts\";\n\nconst someTask = task('some task')\n    .does(async ctx =\u003e {\n        // do something here\n        ctx?.logger.info('doing something');\n    });\n\ncreateBuilder({\n    name: 'build',\n    targetTasks: someTask,\n    ciIntegrations: [] // define CI integrations here\n});\n```\n\n### Task\n\nA task is a function that executes code inside of the build pipeline.\n\n#### Dependencies\n\nTasks can have dependencies on other tasks. For example,  \n\n```typescript\nconst compile = task('compile')\n    .does(async ctx =\u003e {\n        // compile program\n    });\n\nconst test = task('test')\n    .dependsOn(compile)\n    .does(async ctx =\u003e {\n        // run tests\n    });\n\nconst buildImage = task('build image')\n    .dependsOn(compile)\n    .does(async ctx =\u003e {\n        // build image\n    });\n\nconst publishImage = task('publish image')\n    .dependsOn([test, buildImage])\n    .does(async ctx =\u003e {\n        // publish image\n    });\n```\n\nIn this scenario, task `compile` will run at the beginning and then will triggers tasks `test` and `buildImage` which will run in parallel and will then trigger the `publush image` task.\n\n#### Conditions\n\nTasks can define conditions for their run. For example,  \n\n```typescript\nimport { git } from \"https://deno.land/x/denogent/mod.ts\";\n\n...\n\nconst publishImage = task('publish image')\n    .dependsOn([test, buildImage])\n    .when(async ctx =\u003e await git.isTagged({ logger: false }))\n    .does(async ctx =\u003e {\n        // publish image\n    });\n```\n\nIn this scenario, we tell the `publish image` to run only when the the commit that has triggered the build is tagged.\n\n## Execute Build Pipeline\n\nTo execute the build pipeline locally, run \n\n```bash\ndenogent run --file build/build.ts\n```\n\n## CI Systems Integration\n\nAlthough `denogent` provides a tool for executing build pipelines, it's no a CI system.\nHowever, you can run `denogent` pipelines from a CI system, and `denogent` provides convenient way to integrate with popular CI systems.\n\nIn the `build.ts` file, in the call to `createBuilder`, you can add a CI system integration. Once you've defined your CI system integration in the build file, run\n\n```bash\ndenogent generate --file build/build.ts --ci {the name of the CI system}\n```\n\nto generate manifests files for said CI system.\n\n### GitHub Actions\n\nHere's an example of integrating with GitHub Actions.  \n\nIn `build.ts`  \n\n```typescript\nimport { createGitHubActions } from \"https://deno.land/x/denogent/mod.ts\";\n\n...\n\ncreateBuilder({\n    name: 'build',\n    targetTasks: someTask,\n    ciIntegrations: [\n        createGitHubActions({\n            image: 'ubuntu-latest',\n            onPRBranches: ['master'] // run pipeline on PR that merges to master\n        })\n    ]\n});\n```\n\n```bash\ndenogent generate --file build/build.ts --ci gh-actions\n```\n\n## Task Extensions\n\nTask extensions allow you to declare dependency on certain environmental components.\n\n### `docker.service` extension\n\nYou can use the `docker.service` extension to declare dependency on a service that needs to run alongside your task.  \n\nFor example, if you have a task that runs integration tests which depend on Redis, you can use `docker.service` do declare a dependency on Redis.\n\n```typescript\nimport { docker } from \"https://deno.land/x/denogent/mod.ts\";\n\n...\n\nconst test = task('test')\n    .dependsOn(docker.service({ name: 'redis', image: 'redis', ports: [6379] }))\n    .does(async ctx =\u003e {\n        // run tests...\n    });\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fareller%2Fdenogent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fareller%2Fdenogent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fareller%2Fdenogent/lists"}