{"id":13929056,"url":"https://github.com/kaxil/boring-cyborg","last_synced_at":"2025-04-05T19:14:41.479Z","repository":{"id":36992216,"uuid":"231842441","full_name":"kaxil/boring-cyborg","owner":"kaxil","description":"🤖 A Github bot to automatically label PRs, issues and perform all the boring operations that you don't want to do.","archived":false,"fork":false,"pushed_at":"2025-02-14T23:49:52.000Z","size":8703,"stargazers_count":99,"open_issues_count":8,"forks_count":16,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T18:09:07.598Z","etag":null,"topics":["github-app","labelling","probot","probot-app"],"latest_commit_sha":null,"homepage":"https://github.com/apps/boring-cyborg","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kaxil.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-04T23:24:32.000Z","updated_at":"2025-02-01T18:56:42.000Z","dependencies_parsed_at":"2023-12-18T21:55:10.422Z","dependency_job_id":"68b545a3-5f73-48cf-887b-32be2650e25e","html_url":"https://github.com/kaxil/boring-cyborg","commit_stats":{"total_commits":76,"total_committers":9,"mean_commits":8.444444444444445,"dds":"0.48684210526315785","last_synced_commit":"8ff675308166bcbaeae3a511d07898ec9cdaedbe"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaxil%2Fboring-cyborg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaxil%2Fboring-cyborg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaxil%2Fboring-cyborg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaxil%2Fboring-cyborg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kaxil","download_url":"https://codeload.github.com/kaxil/boring-cyborg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247386266,"owners_count":20930619,"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","labelling","probot","probot-app"],"created_at":"2024-08-07T18:02:04.922Z","updated_at":"2025-04-05T19:14:41.455Z","avatar_url":"https://github.com/kaxil.png","language":"JavaScript","funding_links":[],"categories":["others"],"sub_categories":[],"readme":"# Boring Cyborg\n\n🤖 A GitHub App built with [Probot](https://github.com/probot/probot) that automatically label PRs, issues and\nperforms all the boring operations that you don't want to do.\n\n![Using Boring Cyborg Probot to add new labels](./assets/usage-screenshot-1.png)\n\n![Congratulate user on first merged PR](./assets/usage-first-merged-pr.gif)\n\n![Verifies that commit title matches regexp (single commit)](./assets/usage-wrong-commit-title.png)\n\n![Verifies that PR title matches regexp (multiple commits)](./assets/usage-wrong-PR-title.png)\n\n![Add reviewers based on label](./assets/usage-add-reviewer-on-label.png)\n\n## Features\n\n* Add labels based on the path of the file that are modified in the PR.\n* Welcome new users to your project when they open their first Issue/PR or first merged PR by an\nautomated comment.\n* Insert Issue (Jira/Github etc) link in PR description based on the Issue ID in PR title.\n* Verifies if commits/PR titles match the regular expression specified\n* Check if a branch is up to date with the master when specific files are modified in the PR.\nThis is helpful when you desire the changes to be applied sequentially, for example, alembic migrations.\n* Add reviewers to PR based on labels present on the PR. This is especially helpful if you are auto-assigning labels based on functional areas of ownership.\n\n## Usage\n\n1. **[Configure the Github App](https://github.com/apps/boring-cyborg)**\n2. After installing the Github app, create `.github/boring-cyborg.yml` in the default branch to enable it\n3. It will start scanning for pull requests within few minutes.\n\n```yaml\n##### Labeler ##########################################################################################################\n# Enable \"labeler\" for your PR that would add labels to PRs based on the paths that are modified in the PR.\nlabelPRBasedOnFilePath:\n  # Add 'label1' to any changes within 'example' folder or any subfolders\n  label1:\n    - example/**/*\n\n  # Add 'label2' to any file changes within 'example2' folder\n  label2:\n    - example2/*\n\n  # Complex: Add 'area/core' label to any change within the 'core' package\n  area/core:\n    - src/core/*\n    - src/core/**/*\n\n  # Add 'test' label to any change to *.spec.js files within the source dir\n  test:\n    - src/**/*.spec.js\n\n# Various Flags to control behaviour of the \"Labeler\"\nlabelerFlags:\n  # If this flag is changed to 'false', labels would only be added when the PR is first created and not when existing\n  # PR is updated.\n  # The default is 'true' which means the labels would be added when PR is updated even if they were removed by the user\n  labelOnPRUpdates: true\n\n##### Reviewer #########################################################################################################\n# Enable \"Reviewer\" for your PR that would add reviewers to PRs based on the lables that exist on the PR. You have the option to set a default reviewer that gets added to every PR, or you can omit that config variable to skip it.\naddReviewerBasedOnLabel:\n  # add list of reviewers to add by default to all PRs\n  defaultReviewers:\n    - tyler-mairose-sp\n  # specify PR labels that you want to auto assign reviewers based on\n  labels:\n    label1:\n      - tyler-mairose-sp\n      - jordan-violet-sp\n    label2:\n      - kaxil\n\n##### Greetings ########################################################################################################\n# Comment to be posted to welcome users when they open their first PR\nfirstPRWelcomeComment: \u003e\n  Thanks for opening this pull request! Please check out our contributing guidelines.\n\n# Comment to be posted to congratulate user on their first merged PR\nfirstPRMergeComment: \u003e\n  Awesome work, congrats on your first merged pull request!\n\n# Comment to be posted to on first time issues\nfirstIssueWelcomeComment: \u003e\n  Thanks for opening your first issue here! Be sure to follow the issue template!\n\n###### IssueLink Adder #################################################################################################\n# Insert Issue (Jira/Github etc) link in PR description based on the Issue ID in PR title.\ninsertIssueLinkInPrDescription:\n   # specify the placeholder for the issue link that should be present in the description\n  descriptionIssuePlaceholderRegexp: \"^Issue link: (.*)$\"\n  matchers:\n    # you can have several matches - for different types of issues\n    # only the first matching entry is replaced\n    jiraIssueMatch:\n      # specify the regexp of issue id that you can find in the title of the PR\n      # the match groups can be used to build the issue id (${1}, ${2}, etc.).\n      titleIssueIdRegexp: \\[(AIRFLOW-[0-9]{4})\\]\n      # the issue link to be added. ${1}, ${2} ... are replaced with the match groups from the\n      # title match (remember to use quotes)\n      descriptionIssueLink: \"[${1}](https://issues.apache.org/jira/browse/${1}/)\"\n    docOnlyIssueMatch:\n      titleIssueIdRegexp: \\[(AIRFLOW-X{4})\\]\n      descriptionIssueLink: \"`Document only change, no JIRA issue`\"\n\n###### Title Validator #################################################################################################\n# Verifies if commit/PR titles match the regexp specified\nverifyTitles:\n  # Regular expression that should be matched by titles of commits or PR\n  titleRegexp: ^\\[AIRFLOW-[0-9]{4}\\].*$|^\\[AIRFLOW-XXXX\\].*$\n  # If set to true, it will always check the PR title (as opposed to the individual commits).\n  alwaysUsePrTitle: true\n  # If set to true, it will only check the commit in case there is a single commit.\n  # In case of multiple commits it will check PR title.\n  # This reflects the standard behaviour of Github that for `Squash \u0026 Merge` GitHub\n  # uses the PR title rather than commit messages for the squashed commit ¯\\_(ツ)_/¯\n  # For single-commit PRs it takes the squashed commit message from the commit as expected.\n  #\n  # If set to false it will check all commit messages. This is useful when you do not squash commits at merge.\n  validateEitherPrOrSingleCommitTitle: true\n  # The title the GitHub status should appear from.\n  statusTitle: \"Title Validator\"\n  # A custom message to be displayed when the title passes validation.\n  successMessage: \"Validation successful!\"\n  # A custom message to be displayed when the title fails validation.\n  # Allows insertion of ${type} (commit/PR), ${title} (the title validated) and ${regex} (the titleRegexp above).\n  failureMessage: \"Wrong ${type} title: ${title}\"\n\n###### PR/Branch Up-To-Date Checker ####################################################################################\n# Check if the branch is up to date with master when certain files are modified\ncheckUpToDate:\n  # The default branch is \"master\", change the branch if you want to check against a different target branch\n  targetBranch: master\n  files:\n  # File paths that you want to check for\n  # In this example, it checks if the branch is up to date when alembic migrations are modified in the PR.\n  # It helps avoid multiple heads in alembic migrations in a collaborative development project.\n    - airflow/migrations/*\n    - airflow/migrations/**/*\n    - airflow/alembic.ini\n```\n\nAll the features are optional. Simply add the config for the feature you want to use.\n\n## Setup\n\n```sh\n# Install dependencies\nnpm install\n\n# Run the bot\nnpm start\n```\n\n## Contributing\n\nIf you have suggestions for how boring-cyborg could be improved, or want to report a bug, open an issue! We'd love all and any contributions.\n\nFor more, check out the [Contributing Guide](CONTRIBUTING.md).\n\n## License\n\n[ISC](LICENSE) © 2020 Kaxil Naik\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaxil%2Fboring-cyborg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkaxil%2Fboring-cyborg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaxil%2Fboring-cyborg/lists"}