{"id":16907009,"url":"https://github.com/ashfurrow/twelease","last_synced_at":"2025-04-11T15:36:53.775Z","repository":{"id":66269846,"uuid":"105448490","full_name":"ashfurrow/twelease","owner":"ashfurrow","description":"🗣 A small Express server for automatically tweeting about new git tags","archived":false,"fork":false,"pushed_at":"2017-11-06T01:15:56.000Z","size":253,"stargazers_count":18,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T11:49:19.696Z","etag":null,"topics":["express","github","twitter","typescript","webhooks"],"latest_commit_sha":null,"homepage":"https://ashfurrow.com/blog/node-express-typescript/","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/ashfurrow.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-10-01T14:35:20.000Z","updated_at":"2020-08-29T16:29:45.000Z","dependencies_parsed_at":"2023-06-13T21:08:40.244Z","dependency_job_id":null,"html_url":"https://github.com/ashfurrow/twelease","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashfurrow%2Ftwelease","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashfurrow%2Ftwelease/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashfurrow%2Ftwelease/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashfurrow%2Ftwelease/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ashfurrow","download_url":"https://codeload.github.com/ashfurrow/twelease/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248432248,"owners_count":21102338,"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":["express","github","twitter","typescript","webhooks"],"created_at":"2024-10-13T18:45:36.095Z","updated_at":"2025-04-11T15:36:53.750Z","avatar_url":"https://github.com/ashfurrow.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/ashfurrow/twelease.svg?style=svg)](https://circleci.com/gh/ashfurrow/twelease)\n\nTwelease\n========\n\nTwelease is a small Express server that received GitHub webhooks and tweets about new tags pushed to the repo.\n\nSetup\n-----\n\nSetting up Twelease takes about 5 minutes. While logged in with the Twitter account you want the tweets to be sent from, you need to [register a new Twitter application](https://apps.twitter.com/app/new) to receive OAuth credentials. Make sure to generate an access token and secret for your account. With those four tokens in hand, next we'll deploy the server.\n\nI recommend using Heroku. Smash that deploy button!\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\nNote that Heroku creates a `WEBHOOK_SECRET_TOKEN`. Copy that – we'll need it to set up our GitHub webhook. You'll be prompted to enter in the tokens you got from Twitter, too.\n\nFor the tweet template, we use Mustache. Make sure to use triple-braces to avoid HTML escaping, and if you want a newline you need to actually press the return key (and *not* include `\\n`). There is a default provided for you, and you can customize it later in the Heroku environment variables settings.\n\nGot to the Settings page for whatever repo you want to add this integration to. Select the \"Webhooks\" section and click \"Add Webhook\". *Important*: for content type, select `application/json`. Paste in the secret from Heroku, as well as the Heroku URL. The URL should end with `/payload`, so if your Heroku URL is `http://example.herokuapp.com/`, then enter `http://example.herokuapp.com/payload` into GitHub.\n\n![Webhook settings](docs/webhook_settings.png)\n\nSelect \"Let me select individual events\" and select only the \"create\" event. This will save you Dyno hours on Heroku.\n\n![Webhook settings](docs/webhook_events.png)\n\nFinally, hit the green \"Add webhook\" button at the bottom of the screen.\n\nGreat job! And because the repo name is passed into the Mustache template, you can repeat the webhook setup process on as many repos as you like, using the same `WEBHOOK_SECRET_TOKEN`.\n\nDeveloping\n----------\n\nThis is a NodeJS Express server written in Typescript.\n\n```sh\ngit clone https://github.com/ashfurrow/twelease.git\ncd twelease\nyarn install\n```\n\nIf you have questions, [open an issue](https://github.com/ashfurrow/twelease/issues/new)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashfurrow%2Ftwelease","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashfurrow%2Ftwelease","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashfurrow%2Ftwelease/lists"}