{"id":13465021,"url":"https://github.com/greenkeeperio/greenkeeper","last_synced_at":"2025-05-15T08:09:28.390Z","repository":{"id":36487889,"uuid":"40793484","full_name":"greenkeeperio/greenkeeper","owner":"greenkeeperio","description":":robot: :palm_tree: Real-time automated dependency updates for npm and GitHub","archived":false,"fork":false,"pushed_at":"2021-07-11T06:35:58.000Z","size":1941,"stargazers_count":1598,"open_issues_count":107,"forks_count":96,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-04-07T05:01:43.523Z","etag":null,"topics":["dependencies","dependency-manager","github","greenkeeper","npm"],"latest_commit_sha":null,"homepage":"https://greenkeeper.io/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greenkeeperio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-16T00:16:58.000Z","updated_at":"2025-04-04T02:41:56.000Z","dependencies_parsed_at":"2022-07-15T20:17:03.681Z","dependency_job_id":null,"html_url":"https://github.com/greenkeeperio/greenkeeper","commit_stats":null,"previous_names":[],"tags_count":341,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenkeeperio%2Fgreenkeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenkeeperio%2Fgreenkeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenkeeperio%2Fgreenkeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greenkeeperio%2Fgreenkeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greenkeeperio","download_url":"https://codeload.github.com/greenkeeperio/greenkeeper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248909557,"owners_count":21181736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dependencies","dependency-manager","github","greenkeeper","npm"],"created_at":"2024-07-31T14:00:55.267Z","updated_at":"2025-04-14T15:49:57.408Z","avatar_url":"https://github.com/greenkeeperio.png","language":"JavaScript","funding_links":[],"categories":["Table of Contents","JavaScript"],"sub_categories":["Example Projects"],"readme":"***\n☝️ **Important announcement:** Greenkeeper will be saying goodbye 👋 and passing the torch to Snyk on June 3rd, 2020! New installations are no longer possible. [Find out how to migrate to Snyk and more at greenkeeper.io](https://greenkeeper.io)\n***\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/391124/36849148-8a73f484-1d63-11e8-8f2b-d7ffa940cb31.jpg\" alt=\"Greenkeeper\" align=\"center\" /\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://greenkeeper.io/\"\u003e\n    \u003cimg src=\"https://badges.greenkeeper.io/greenkeeperio/greenkeeper.svg\"\n      alt=\"Greenkeeper badge\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://greenkeeper-slack.herokuapp.com/\"\u003e\n    \u003cimg src=\"https://greenkeeper-slack.herokuapp.com/badge.svg\"\n      alt=\"Slack\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/greenkeeperio/greenkeeper\"\u003e\n    \u003cimg src=\"https://travis-ci.org/greenkeeperio/greenkeeper.svg?branch=master\"\n      alt=\"Build Status\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://david-dm.org/greenkeeperio/greenkeeper/master\"\u003e\n    \u003cimg src=\"https://david-dm.org/greenkeeperio/greenkeeper/master.svg\"\n      alt=\"Dependency Status\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://david-dm.org/greenkeeperio/greenkeeper/master?type=dev\"\u003e\n    \u003cimg src=\"https://david-dm.org/greenkeeperio/greenkeeper/master/dev-status.svg\"\n      alt=\"devDependency Status\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/feross/standard\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat\"\n      alt=\"js-standard-style\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/semantic-release/semantic-release\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg\"\n      alt=\"semantic-release\" /\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    \u003ca href=\"https://greenkeeper.io/\"\u003e\n      Website\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://blog.greenkeeper.io/\"\u003e\n      Blog\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://github.com/greenkeeperio/greenkeeper/blob/master/CONTRIBUTING.md\"\u003e\n      Contributing\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://greenkeeper.io/faq.html\"\u003e\n      FAQ\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://greenkeeper.io/docs.html\"\u003e\n      General Documentation\n    \u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003eGreenkeeper brings you safety \u0026 consistency with automatic updates and **real-time monitoring for npm dependencies**. Let a bot send you informative and actionable issues so you can easily keep your software up to date and in working condition.\u003c/strong\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  Join over **10000 projects on GitHub that trust Greenkeeper** to warn them before dependency updates break their builds.\n\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWho else is using it? Anyone I know?\u003c/summary\u003e\n\nWell, we’re helping out these fine folks, for example:\n\n- [lodash](https://lodash.com)\n- [PouchDB](https://pouchdb.com/)\n- [Karma](https:/github.com/karma-runner/karma)\n- [request](https://www.npmjs.com/package/request)\n- [Google’s AMP](https://github.com/ampproject/amphtml)\n- [Modernizr](https://modernizr.com)\n- [standard](https://www.npmjs.com/package/standard)\n- [webtorrent](https://www.npmjs.com/package/webtorrent)\n- [mustache.js](https://github.com/janl/mustache.js)\n- [FreeCodeCamp](https://freecodecamp.com)\n- [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate)\n\nAnd many thousands more!\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eTell me more about how Greenkeeper works, please!\u003c/summary\u003e\n\nNo problem! Greenkeeper sits between npm and GitHub, observing all of the modules you depend on. When they get updated, your project gets a new branch with that update. Your CI tests kick in, and we watch them to see whether they pass.\n\nBased on the test results and your current version definitions we will open up clear, actionable issues for you. If there’s nothing for you to do, we won’t nag you, but if a dependency *does* break your software, you’ll know immediately, and can get started on fixing the problem.\n\nAnd if a you’ve got stuff to do, we understand. Sometimes you simply have to make a pragmatic trade-off between fixing your build for the breaking update or just pinning the working version so you can get back to it later. Our bot can respect that, and will let you pin the last working version of the dependency in the issue thread:\n\n| **Screenshot - Pinning dependencies** |\n|---|\n| ![Choosing repositories](https://cdn-images-1.medium.com/max/1600/0*T11jS2wNKlbQVbgC.) |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eI found a critical bug, who do I talk to?\u003c/summary\u003e\n\nIf you’ve discovered a security-related bug in Greenkeeper or related services, **please disclose it to us confidentially** by emailing us at support@greenkeeper.io\n\nIf you find any, **don’t share security vulnerabilities publicly** (in a GitHub issue for example), always keep these conversations with us confidential so we have a chance to get things fixed before anyone exploits the bug.\n\u003c/details\u003e\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eJobs Service Documentation\u003c/summary\u003e\n\nThis is the core service of Greenkeeper. It takes care of the dependency update logic and the related pull request/issue creation.\n\n## Job Types\n\u003e 🚨🚧 The following documentation might be outdated. We are currently working on improving this section.\n\n### github-event\n\nThe `github-event` job gets created by our [hooks](https://github.com/greenkeeperio/hooks) service.\nIt's answering all incoming webhooks from GitHub and creates this job with the full payload from github as `job.data`.\nIt only adds one additional `type` property to it with the name of the webhook event.\n\n#### github-event:integration_installation\n\nDepending on `action` a new entry is added/removed to/from the installations database.\nAll repositories are requested from GitHub to sync them with our database.\nAll repositories with a package.json receive their initial pull request (`create-initial-branch`).\n\n#### github-event:integration_installation_repositories\n\nDepending on `action` entries are added/removed to/from the repositories database.\nAdded repositories with a package.json receive their initial pull request (`create-initial-branch`).\n\n#### github-event:push\n\nThe package.json contents are retrieved, parsed and synced to our database.\n\n#### github-event:status\n\nIf the status affects a Greenkeeper pull_request the results are recorded in our repositories database with all metadata.\n\nIf the status of a branch is `failing`, it will create a new branch to pin to the last working version `create-pin-branch`.\nWhen the status for that pin branch is coming, an issue is created with `create-issue`.\nIf that issue already exists and it's still failing it will comment `comment-issue`, but if it's\nsucceeding it will close that issue with `close-issue`.\n\n#### github-event:pull_request\n\nWhen an initial Greenkeeper pull request is merged the repository gets enabled (`enable-repository`).\n\nWhen a Greenkeeper pull request is merged older/included pull requests for the same dependency are closed (`delete-older-branches`).\nUnmergeable Greenkeeper pull requests get \"rebased\" (`rebase-unmergeable-branches`).\n\n### registry-change\n\nThe `registry-change` job gets created by our [changes](https://github.com/greenkeeperio/changes) service.\nIt's listening for changes from npm and creates this job with the full payload from npm as `job.data`.\n\nIt figures out whether the change actually contains a new version, and on which dist-tag. It stores the versions in our npm database.\n\nIt figures out who is depending on the dependency that changed and schedules branch creation jobs for enabled ones. (`create-version-branch`)\n\n### create-pin-branch\n\nCreates a branch for a dependency, pinning to the version before.\n\n### create-issue\n\nCreates an issue with the information that a dependency is failing.\n\n### comment-issue\n\nComments to an issue that a dependency is still failing.\n\n### close-issue\n\nCloses an issue because the dependency is no longer failing.\n\n### create-version-branch\n\nUsed to be package-bump with our oAuth App.\n\nIf there are no tests detected, or the update is outside of the version range triggers `create-version-pr` right away.\n\n### create-version-pr\n\nUsed to be package-send-pr with our oAuth App.\n\n### delete-branches\n\nDeletes all branches related to a dependency which version is less or equal to the specified one.\n\n### create-initial-branch\n\nUsed to be package-pin with our oAuth App.\n\n### enable-repository\n\nUsed to happen inside webservice with our oAuth App.\n\n### delete-older-branches\n\nUsed to happen inside pull-request-close with our oAuth App.\n\n### rebase-unmergeable-branches\n\nUsed to happen inside pull-request-close with our oAuth App.\n\n## documents\n\n### installations\n```js\n{\n  _id: '8422',  // github account id\n  installation: 10, // installation id,\n  plan: 'free', // plan\n  login: 'finnp', // github name\n  type: 'User' // 'User' or 'Organization'\n}\n```\n\n###  repositories\n#### type: repository\n```js\n{\n    _id: '111', // String(repo.id),\n    type: 'repository',\n    enabled: false,\n    accountId: '8422', // account id (key for installations)\n    fullName: 'greenkeeperio/jobs',\n    private: true,\n    fork: false,\n    hasIssues: true,\n    packages: {\n          'package.json': {}\n    }\n}\n```\n\n#### type:branch\n```js\n{\n  _id: '111:branch:deadbeefdeadbeef', // repositoryId + sha\n  type: 'branch',\n  purpose: undefined, // can be 'pin', otherwise not defined\n  sha: 'deadbeefdeadbeef',\n  base: 'master', // base branch\n  head: 'greenkeeper-lodash-8.0.0', // branch name\n  dependency: 'lodash',\n  version: '8.0.0',\n  oldVersion: '~7.0.0',\n  oldVersionResolved: '7.0.0',\n  dependencyType: 'devDependencies',\n  repositoryId: '111',\n  accountId: '8422',\n  processed: true, // the branch was processed\n  referenceDeleted: true, // the branch reference was deleted\n  state: 'failure', // ci status\n  updated_at: '2016-09-28T15:07:03.022Z'\n}\n```\n\n#### type:pr\n```js\n{\n  _id: '111:pr:6', // repositoryId, PrId\n  type: 'pr',\n  repositoryId: 11,\n  accountId: 42\n  initial: true, // is this an initial pull request?\n  number: 6,\n  head: 'greenkeeper-lodash-8.0.0', // branch name\n  state: 'open', // 'closed'\n  merged: true,\n  updated_at, '2016-09-28T15:07:03.022Z'\n}\n```\n\n#### type:issue\n```js\n{\n  _id: '111:issue:6',\n  type: 'issue',\n  repositoryId: '111',\n  dependency: 'lodash',\n  version: '1.0.0',\n  number: 6,\n  state: 'open',\n  updated_at\n}\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenkeeperio%2Fgreenkeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreenkeeperio%2Fgreenkeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreenkeeperio%2Fgreenkeeper/lists"}