{"id":17169623,"url":"https://github.com/jb3/ff_bot","last_synced_at":"2026-02-15T16:09:07.934Z","repository":{"id":244480935,"uuid":"814850502","full_name":"jb3/ff_bot","owner":"jb3","description":"A GitHub bot to fast-forward merge PRs onto the default branch.","archived":false,"fork":false,"pushed_at":"2024-09-02T13:55:04.000Z","size":64,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-05T16:03:24.870Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elixir","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/jb3.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"jb3"}},"created_at":"2024-06-13T20:55:15.000Z","updated_at":"2024-09-02T13:55:09.000Z","dependencies_parsed_at":"2025-10-09T00:49:19.377Z","dependency_job_id":null,"html_url":"https://github.com/jb3/ff_bot","commit_stats":null,"previous_names":["jb3/ff_bot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jb3/ff_bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jb3%2Fff_bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jb3%2Fff_bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jb3%2Fff_bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jb3%2Fff_bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jb3","download_url":"https://codeload.github.com/jb3/ff_bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jb3%2Fff_bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29483592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T15:33:17.885Z","status":"ssl_error","status_checked_at":"2026-02-15T15:32:53.698Z","response_time":118,"last_error":"SSL_read: 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":[],"created_at":"2024-10-14T23:26:48.323Z","updated_at":"2026-02-15T16:09:07.918Z","avatar_url":"https://github.com/jb3.png","language":"Elixir","funding_links":["https://github.com/sponsors/jb3"],"categories":[],"sub_categories":[],"readme":"# Fast Forward Bot\n\nA GitHub bot allowing for quick and easy fast-forward merges triggered by PR\ncomments.\n\nYou may want to use this application if you want to rebase your commits to your\nmaster branch from within GitHub whilst preserving author signature information\nand avoiding the rewriting of commits.\n\n## Deployment\n\n\n### Creating the application\n\nFollow the guide [here](https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app) to create a new GitHub app.\n\nThe following permissions are required:\n- Contents: Read \u0026 Write\n- Issues: Read \u0026 Write\n- Pull Requests: Read \u0026 Write\n\nThe following webhook events must be selected:\n- Issue comment\n\nSet the webhook URL to `https://your-prod-domain.com/hook` and select a secure\nclient secret.\n\nOnce created, generate a client secret and keep a hold of this value for later.\n\n### Deployment\n\nA Docker image is published at [`ghcr.io/jb3/ff_bot:latest`](https://ghcr.io/jb3/ff_bot) which can be used to\ndeploy this application.\n\nThe following environment variables must be set:\n\n| Variable                | Description                                                                                                         |\n|-------------------------|---------------------------------------------------------------------------------------------------------------------|\n| `GITHUB_WEBHOOK_SECRET` | A secure secret configured in GitHub and your app to validate webhook payloads. Same as the preference set earlier. |\n| `GITHUB_CLIENT_ID`      | The client ID of your created GitHub app                                                                            |\n| `GITHUB_CLIENT_SECRET`  | The client secret certificate of your GitHub app used to sign token requests.                                       |\n\nYou can also optionally set these variables:\n\n| Variable           | Description                                                                              | Default              |\n|--------------------|------------------------------------------------------------------------------------------|----------------------|\n| `FF_POLICY_FILE`   | The file to read for policy on who can perform merges                                    | `.github/ff-bot.yml` |\n| `FF_LISTEN_PORT`   | The HTTP port for the service to listen on                                               | 4000                 |\n| `FF_NO_PROPAGANDA` | Disable all team encouragement messages generated by the bot.                            |                      |\n\n## Usage\n\nOnce deployed, follow GitHub's instructions to install to your own\naccount/organisation and select the repositories to use.\n\nFor a repository to use it, it must have a review policy at `.github/ff-bot.yml`\n(or whatever you have set `FF_POLICY_FILE` to).\n\nAn example policy looks like this:\n\n``` yaml\nusers:\n- jb3\nteams:\n- python-discord/devops\n```\n\nOnce a user wants to merge a PR, all they have to do is run `/merge` in the PR\ncomments. If the branch is up to date the merge will take place, if not then the\nbot will reply with the branch status.\n\nFor the merge to complete, the user must be in the policy file directly or in a\nteam mentioned in the policy file.\n\nProviding the user is in the policy file and the branch in question is up to\ndate with main (i.e. is only \"ahead\" of main, no divergence), the merge will\ntake place and GitHub will automatically close the Pull Request as all commits\nare now present on your primary branch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjb3%2Fff_bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjb3%2Fff_bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjb3%2Fff_bot/lists"}