{"id":13989711,"url":"https://github.com/getsentry/probot-report","last_synced_at":"2025-09-29T08:31:58.232Z","repository":{"id":26111633,"uuid":"104314785","full_name":"getsentry/probot-report","owner":"getsentry","description":"Probot app that sends periodic reminder emails for outstanding PR reviews","archived":true,"fork":false,"pushed_at":"2023-10-10T00:18:31.000Z","size":724,"stargazers_count":28,"open_issues_count":36,"forks_count":7,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-01-15T03:54:34.787Z","etag":null,"topics":["github-app","probot","probot-app","tag-archived"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/getsentry.png","metadata":{"funding":{"custom":["https://sentry.io/pricing/","https://sentry.io/"]},"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-09-21T07:18:35.000Z","updated_at":"2023-12-04T16:06:43.000Z","dependencies_parsed_at":"2024-09-16T19:16:11.212Z","dependency_job_id":null,"html_url":"https://github.com/getsentry/probot-report","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Fprobot-report","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Fprobot-report/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Fprobot-report/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/getsentry%2Fprobot-report/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/getsentry","download_url":"https://codeload.github.com/getsentry/probot-report/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234604488,"owners_count":18859164,"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":["github-app","probot","probot-app","tag-archived"],"created_at":"2024-08-09T13:01:59.339Z","updated_at":"2025-09-29T08:31:52.883Z","avatar_url":"https://github.com/getsentry.png","language":"JavaScript","readme":"# Probot: Report\n\n\u003e a GitHub App built with [probot](https://github.com/probot/probot) that sends\n\u003e out periodic reports\n\n![](https://user-images.githubusercontent.com/1433023/32178159-57580bd0-bd8c-11e7-9dfd-995ff69d446b.png)\n\n**Disclaimer: This report Bot is heavily focused on our setup, so in order to\nuse it you probably need to fork it or help us make it more general purpose.**\n\n## Usage\n\nThe bot is activated by the file `.github/report.yml` in the settings\nrepository. If not configured otherwise, this is the `probot-settings`\nrepository in your organization.\n\nThe file can be empty, or it can override any of these default settings:\n\n```yaml\n# Local times at which the bot will send automatic reports\nreportTimes:\n  - 09:00\n  - 12:30\n# Timezone offset for all users where the timezone cannot be inferred\n# Defaults to PDT (UTC-07:00)\ndefaultTimezone: -420\n# Maximum number of days to report new issues\nnewIssueDays: 7\n# Ignores all issues that match this regular expression in their title\nignoreRegex: \"\\\\bwip\\\\b\"\n# Ignores all issues with these lables\nignoreLabels:\n  - duplicate\n  - wontfix\n  - invalid\n# Mailer configuration, can be omitted to disable email\nemail:\n  # Name of the email sender\n  sender: '\"🤖 Eos - Github Bot\" \u003cnoreply@md.getsentry.com\u003e'\n  # E-Mail subject\n  subject: \"Github needs your attention\"\n  # Template for the entire email body\n  bodyTemplate: \u003e\n    Hi \u003c%- user.name %\u003e,\n    \u003c%= toReview %\u003e\n    \u003c%= toComplete %\u003e\n    \u003c%= newIssues %\u003e\n  # Template to render a single issue\n  issueTemplate: \u003e\n    \u003c% _.forEach(issues, function (issue) { %\u003e\n      \u003cli\u003e\n          \u003cb\u003e\u003ca href=\"\u003c%= issue.html_url %\u003e\"\u003e\n            \u003c%- issue.repository_url.match('[^/]+/[^/]+$')[0] %\u003e#\u003c%- issue.number %\u003e\n          \u003c/a\u003e\u003c/b\u003e:\n          \u003c%- issue.title %\u003e\u003cbr /\u003e\n          \u003csmall\u003e\n            opened \u003c%- moment(issue.created_at).fromNow() %\u003e,\n            updated \u003c%- moment(issue.updated_at).fromNow() %\u003e\n            by \u003ca href=\"\u003c%= issue.user.html_url %\u003e\"\u003e\u003c%- issue.user.login %\u003e\u003c/a\u003e\n          \u003c/small\u003e\n      \u003c/li\u003e\n    \u003c% }) %\u003e\n  # Template to format the section of PRs to review\n  toReviewTemplate: \u003e\n    \u003cp\u003eThese pull requests need to be \u003cb\u003ereviewed\u003c/b\u003e:\u003c/p\u003e\n    \u003cul\u003e\n      \u003c%= issues %\u003e\n    \u003c/ul\u003e\n  # Template to format the section of PRs to complete\n  toCompleteTemplate: \u003e\n    \u003cp\u003eThese pull requests need to be \u003cb\u003ehandled\u003c/b\u003e:\u003c/p\u003e\n    \u003cul\u003e\n      \u003c%= issues %\u003e\n    \u003c/ul\u003e\n  # Template to format the section of new issues\n  newIssuesTemplate: \u003e\n    \u003cp\u003eThere are issues you could \u003cb\u003elabel and assign\u003c/b\u003e:\u003c/p\u003e\n    \u003cul\u003e\n      \u003c%= issues %\u003e\n    \u003c/ul\u003e\n```\n\n## Setup\n\nThis Probot app requires authentication tokens and credentials for third party\napps in environment variables. The project contains a template for environment\nvariables located at `.env.example`. Copy this file to `.env` in the project\nroot and adjust all environment variables.\n\n### Github App\n\nFirst, create a GitHub App by following the instructions\n[here](https://probot.github.io/docs/deployment/#create-the-github-app). Then,\nmake sure to download the private key and place it in the root directory of this\napplication or set it via the `PRIVATE_KEY` environment variable. Finally, set\nthe following environment variables:\n\n| Name             | Description                                          |\n| ---------------- | ---------------------------------------------------- |\n| `APP_ID`         | Unique ID of the GitHub App                          |\n| `WEBHOOK_SECRET` | Random webhook secret configured during app creation |\n| `SETTINGS_REPO`  | **optional**. Repository to store configs in.        |\n\nWithin your organization, create a repository to store the configuration file.\nIf not configured otherwise, it defaults to `probot-settings`.\n\n### Sendgrid mailing\n\nThe bot can send report emails to all organization members with configured email\naddresses (defaulting to their public email address). This requires a\n[Sendgrid](https://sendgrid.com/) account. Once created, configure the API token\nas `SENDGRID_TOKEN` environment variable.\n\nLeave this value empty to skip report emails.\n\n### Slack\n\nThe bot can connect to a Slack team and send summaries there. To do so, it needs\nto be registered as Slack bot. Once it has been created, configure its token in\nthe `SLACK_TOKEN` environment variable.\n\nLeave this value empty to skip connection to Slack.\n\n### Development\n\nTo start the development server, make sure the following environment variables\nare set:\n\n| Name        | Description                                       |\n| ----------- | ------------------------------------------------- |\n| `DRY_RUN`   | Disables actual releases. Set to `true`           |\n| `SUBDOMAIN` | Subdomain for localtunnel to receive webhooks     |\n| `LOG_LEVEL` | Sets the loggers output verbosity. Set to `debug` |\n\nThen, install dependencies and run the bot with:\n\n```sh\n# Install dependencies\nyarn\n\n# Run the bot\nyarn start\n\n# Run test watchers\nyarn test:watch\n```\n\nWe highly recommend to use VSCode and install the recommended extensions. They\nwill configure your IDE to match the coding style, invoke auto formatters every\ntime you save and run tests in the background for you. No need to run the\nwatchers manually.\n\n### Testing\n\nThe bot includes an automated test suite that includes unit tests, linting and\nformating checks. Additionally, this command generates a coverage report in\n`coverage/`. You can run it with npm:\n\n```sh\nyarn test\n```\n\nWe use [prettier](https://prettier.io/) for auto-formatting and\n[eslint](https://eslint.org/) as linter. Both tools can automatically fix most\nissues for you. To invoke them, simply run:\n\n```sh\nyarn fix\n```\n\n## Deployment\n\nIf you would like to run your own instance of this app, see the\n[docs for deployment](https://probot.github.io/docs/deployment/).\n\nThis app requires these **Permissions** for the GitHub App:\n\n* **Repository contents**: Read \u0026 write\n* **Organization members**: Read-only\n\nAlso, the following **Events** need to be subscribed:\n\n* **Push**: Git push to a repository\n* **Membership**: Team membership added or removed\n\nAlso, make sure all required environment variables are present in the production\nenvironment.\n","funding_links":["https://sentry.io/pricing/","https://sentry.io/"],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetsentry%2Fprobot-report","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgetsentry%2Fprobot-report","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgetsentry%2Fprobot-report/lists"}