{"id":38258393,"url":"https://github.com/homedepot/github-webhook-resource","last_synced_at":"2026-01-17T01:33:33.968Z","repository":{"id":34203139,"uuid":"155738381","full_name":"homedepot/github-webhook-resource","owner":"homedepot","description":"Concourse resource for remotely managing GitHub webhooks","archived":false,"fork":false,"pushed_at":"2024-07-02T20:48:15.000Z","size":1013,"stargazers_count":12,"open_issues_count":6,"forks_count":20,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-13T14:54:14.110Z","etag":null,"topics":["ci-cd","concourse","concourse-resource","github-webhooks","nodejs","pipeline"],"latest_commit_sha":null,"homepage":"","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/homedepot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-01T15:45:50.000Z","updated_at":"2023-12-26T21:51:20.000Z","dependencies_parsed_at":"2023-01-15T05:15:53.636Z","dependency_job_id":null,"html_url":"https://github.com/homedepot/github-webhook-resource","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/homedepot/github-webhook-resource","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homedepot%2Fgithub-webhook-resource","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homedepot%2Fgithub-webhook-resource/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homedepot%2Fgithub-webhook-resource/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homedepot%2Fgithub-webhook-resource/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/homedepot","download_url":"https://codeload.github.com/homedepot/github-webhook-resource/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/homedepot%2Fgithub-webhook-resource/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28491601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"ssl_error","status_checked_at":"2026-01-17T00:43:11.982Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["ci-cd","concourse","concourse-resource","github-webhooks","nodejs","pipeline"],"created_at":"2026-01-17T01:33:33.894Z","updated_at":"2026-01-17T01:33:33.957Z","avatar_url":"https://github.com/homedepot.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Github Webhook Resource\n===================================\n\n[![Build Status](https://travis-ci.org/homedepot/github-webhook-resource.svg?branch=master)](https://travis-ci.org/homedepot/github-webhook-resource) [![Docker Pulls](https://img.shields.io/docker/pulls/homedepottech/github-webhook-resource.svg)](https://hub.docker.com/r/homedepottech/github-webhook-resource)\n\nBy default, Concourse will `check` your resources once per minute to see if they have updated. In order to reduce excessive `checks`, you must configure webhooks to trigger Concourse externally. This resource automatically configures your GitHub respoitories to send webhooks to your Concourse pipeline the instant a change happens.\n\nResource Type Configuration\n---------------------------\n\n```yaml\nresource_types:\n- name: github-webhook-resource\n  type: docker-image\n  source:\n    repository: homedepottech/github-webhook-resource\n    tag: latest\n```\nSource Configuration\n--------------------\n\n```yaml\nresources:\n- name: github-webhook\n  type: github-webhook-resource\n  source:\n    github_api: https://github.example.com/api\n    github_token: ((github-token))\n```\n\n- `github_api`: *Required.* The Github API URL for your repo.\n- `github_token`: *Required.* [A Github token with the `admin:repo_hook` scope.](https://github.com/settings/tokens/new?scopes=admin:repo_hook) Additionally, the token's account must [be an administrator of your repo](https://help.github.com/en/articles/managing-an-individuals-access-to-an-organization-repository) to manage the repo's webhooks.\n\nBehavior\n--------\n\n### `out`: Manipulate a Github webhook\n\nCreate or delete a webhook using the configured parameters.\n\n#### Parameters\n\n```yaml\n- put: create-webhook\n  resource: github-webhook\n  params:\n    org: github-org-name\n    repo: github-repo-name\n    resource_name: your-resource-name\n    webhook_token: your-token\n    operation: create\n    events: [push, pull_request]\n    pipeline: pipeline-name\n    pipeline_instance_vars: {\n        your_instance_var_name: value\n    }\n    payload_base_url: your-payload-base-url\n    payload_content_type: json\n    payload_secret: your-payload-secret\n```\n\n- `org`: *Required.* Your github organization.\n- `repo`: *Required.* Your github repository.\n- `resource_name`: *Required.* Name of the resource to be associated with your webhook.\n- `webhook_token`: *Required.* Arbitrary string to identify your webhook. Must match the `webhook_token` property of the resource your webhook points to.\n- `operation`: *Required.*\n  - `create` to create a new webhook. Updates existing webhook if your configuration differs from remote.\n  - `delete` to delete an existing webhook. Outputs current timestamp on non-existing webhooks.\n- `events`: *Optional*. An array of [events](https://developer.github.com/webhooks/#events) which will trigger your webhook. Default: `push`\n- `pipeline`: *Optional.* Defaults to the name of the pipeline executing the task\n- `pipeline_instance_vars`: *Optional.* Instance vars to append to the webhook url. These help Concourse identify which [instance pipeline](https://concourse-ci.org/resources.html#schema.resource.webhook_token) it should invoke\n- `payload_base_url`: *Optional.* The base URL to send the webhook payload to. Defaults to the external Concourse URL of the pipeline executing the task.\n- `payload_content_type`: *Optional.* Default: `json`\n  - `json` to serialize payloads to JSON.\n  - `form` to serialize payloads to x-www-form-urlencoded.\n- `payload_secret`: *Optional.* Secret that is used as the key to generate [delivery signature headers](https://docs.github.com/en/webhooks/webhook-events-and-payloads#delivery-headers), if the destination requires it for delivery validation.\n\n## Example\nInclude the github-webhook-resource in your pipeline.yml file\n\n```yaml\nresource_types:\n  - name: github-webhook-resource\n    type: docker-image\n    source:\n      repository: homedepottech/github-webhook-resource\n      tag: latest \n```\n\nNow when you set your pipeline, you can optionally include instance variables that will be picked up by the resource. Here is a sample script that sets the pipeline for you. \n\n```bash\n#!/bin/sh\n\nfly -t {your team name} sp -c pipeline.yml -p {your pipeline name} --instance-var {you instance variables}\n\n\n```\n\n## Development\n\n### Prerequisites\n- [Node.js](https://nodejs.org/)\n- [Docker](https://www.docker.com/)\n\n### Making changes\nThe Concourse entrypoints are in `bin/check`, `bin/in`, and `bin/out.js`. You can add functionality to these files directly, or you can `require` additional supporing files.\n\nSee the [Reference](#Reference) section for some helpful information related to this project's implementation.\n\n### Running the tests\n```shell\nnpm install\nnpm test\n```\nBefore submitting your changes for review, ensure all tests are passing.\n\n### Building your changes\n```shell\ndocker build -t github-webhook-resource .\n```\n\nTo use the newly built image, push it to a Docker repository which your Concourse pipeline can access and configure your pipeline to use it:\n\n```shell\ndocker tag github-webhook-resource example.com/github-webhook-resource\ndocker push example.com/github-webhook-resource\n```\n\n```yaml\nresource_types:\n- name: github-webhook-resource\n  type: docker-image\n  source:\n    repository: example.com/github-webhook-resource\n    tag: latest\n\nresources:\n- name: github-webhook\n  type: github-webhook-resource\n  ...\n```\n\n### Contributing\nPlease read the [CONTRIBUTING.md](CONTRIBUTING.md) file to learn the process for submitting changes to this repo.\n\n## License\nThis project is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) - see the [LICENSE](LICENSE) file for details.\n\n## Reference\n- [Implementing a Concourse Resource](https://concourse-ci.org/implementing-resource-types.html)\n- [What is a Webhook?](https://help.github.com/articles/about-webhooks/)\n- [GitHub's Webhook REST API](https://developer.github.com/v3/repos/hooks/)\n- [Concourse Community Resources](https://github.com/concourse/concourse/wiki/Resource-Types)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhomedepot%2Fgithub-webhook-resource","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhomedepot%2Fgithub-webhook-resource","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhomedepot%2Fgithub-webhook-resource/lists"}