All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Parse pull request body to find dependabot versions. (#845)
- Replaced
asyncio-redis
withredis-py
asyncio to improve network reliability. (#867)
- Delete subscriptions from web API db on cancellation. (#838)
- Add workaround for bug in GitHub GraphQL API. (#842)
- Retry on merge being blocked to workaround GitHub API consistency issues. (#846)
- Fix schema to handle null requestedReviewer. (#847)
- Add better support for required codeowner reviews. (#849)
- Fix HTTP performance with
httpx
by reusing the ssl context. (#852)
- Fix parsing a PR without an author / without commits / with null CheckRuns (#828, #831, #827)
- internal: remove FastAPI dependency and use Starlette (#826)
- Support m1 macos for development. (#824)
- Added
approve.auto_approve_labels
configuration option to auto approve PRs (#817). Thanks @paescuj!
- Fixed
merge.message.strip_html_comments
to correctly handle non-ascii pull request bodies. (#805)
-
Added
merge.block_on_neutral_required_check_runs
option to stop Kodiak from merging a pull request if a require check run has a neutral conclusion. (#785) -
Added
merge.message.cut_body_and_text
to remove separator when usingcut_body_after
orcut_body_before
(#771)
- Improved robustness for handling pull request required reviews. (#762, #763, #765)
- Added
merge.show_missing_automerge_label_message
option to toggle missing automerge label message. Thanks @paescuj! (#757)
- Fix Redis password auth support. Thanks @etiennetremel (#754)
- Improved webhook and merge queue latencies by reducing concurrent API requests made by raw webhook ingestion. (#744)
.github/
repository support for configuration. Create a repository named.github
with your.kodiak.toml
to centralize your.kodiak.toml
configuration. Thanks @LeoQuote! (#729)
merge.message.include_pull_request_url
to prefix URL withPR-URL:
. Thanks @jbergstroem! (#730)
- support GitHub Enterprise 3.0. (#734)
- Support Renovate for dependency updates by upgrade type. (#713, #715)
- TLS support for Redis connections. Thanks @zetaron! (#695)
- requiresConversationResolution branch protection support. (#692)
- fixed Kodiak incorrectly saying a PR was not mergeable when there were duplicated check runs. (#688)
- fixed Kodiak-breaking bug from release 0.42.0 (#676)
- fixed short HTTP timeouts for GitHub API requests negatively impacting Kodiak's reliability. (#678)
- use fixed IP addresses for sending GitHub API requests to support GitHub Enterprise Cloud IP address allow list. (#666, #673)
- fixed typo in config reference documentation. Thanks @AndersDJohnson! (#663)
- Configuration file (
.kodiak.toml
) is now read from a pull request's base branch instead of repository default branch. (#152, #634)
- fixed handling of "check run" webhooks to ignore pull requests from other repositories. (#644)
- When fetching open pull requests, Kodiak now loads up to 20 pages of 100 pull requests. Previously Kodiak would only fetch a single page of 30 pull requests. Thanks @wuub for the contribution! (#649)
- requested the repository "Workflow" permission to allow Kodiak to merge pull requests that modify GitHub Workflow files. (#641, #642)
- fix merge queues not displaying in dashboard and merging pull request not appearing. (#632, #623, #621, #635)
merge.message.include_pull_request_url
no longer overridesmerge.body = "github_default"
. (#622, #631)
- added
"rebase_fast_forward"
merge method to support fast forward rebase merges without rewriting commits. Thanks @brock8503 and @andrewhampton for the contribution! (#625) - added documentation for web dashboard. (#620)
- added a list of active merge queues to the dashboard. You can see the pull requests in each active queue. Queues are only displayed if they have pull requests. This information is at the bottom of the Activity page. (#617, #616)
- added
merge.automerge_dependencies
to support auto merging Dependabot pull requests by upgrade type ("major", "minor", "patch"). See the "Configuring automerge by upgrade type" recipe for more information.
- added
merge.message.cut_body_before
(thanks @scriptnull) andmerge.message.cut_body_after
config options. (#589, #595) - added better messaging for GitHub API failures. (#594)
- fixed typo in readme (thanks @scriptnull). (#587)
- fixed typo in docs (thanks @yowainwright). (#590)
- add new config option (
merge.priority_merge_label
) to place PR at front of merge queue. (#573, #555) - add merge queue per target branch (#572, #556)
- merge commits are now excluded when calculating pull request coauthors for
merge.message.include_coauthors
. (#581, #576) - coauthor trailers are now only prefixed with new lines if the commit message is non empty. (#578, #577)
- @rdmulford added support for GitHub Enterprise. Thanks! API paths can now be specified via environment variables. See the self hosting docs for more information. (#566)
merge.message.body
no longer overridesmerge.message.include_coauthors
. (#561)
update.ignored_usernames
now blocks all pull request updates.update.autoupdate_label
can be used to override this setting. (#544, #547, #537)
- Handle null pull request review author (#541)
- Added
update.autoupdate_label
configuration option to support immediate updates of specific PRs. (#529, #536, #538)
- Added support for specifying multiple automerge labels by setting
merge.automerge_label
to an array of strings instead of a string. (#516, #522) - Added GitHub CodeOwners support. (#509)
- Fixed Draft PR handling to support a breaking change being made to the GitHub GraphQL API on January 1st, 2021. Older versions of Kodiak will not handle Draft PRs correctly after Jan 1, 2021. (#531)
- Added ability to override
merge.method
with a label likekodiak:merge.method='rebase'
. (#476, #501, #504) - Added contact emails field to billing page to specify additional contact emails. (#499, #502)
- Fixed conflict between
merge.blocking_title_regex
and the trigger test commit logic that preventupdate.always
from working. (#482, #483)
- Added distinct "speed" and "efficiency" recipes to docs. (#480)
- Kodiak now sets a status check on merge ("merge complete 🎉"). Previously the last status check set by Kodiak would be unchanged ("⛴ attempting to merge PR (merging)"). (#469)
merge.method
now defaults to the first valid merge method in the list"merge"
,"squash"
, and"rebase"
. Previously the default was always"merge"
, even when that method was disabled on a repository. See the configuration reference for more information. (#464, #466)
- add annual subscription billing option. (#439, #451, #452)
- add option in dashboard to limit billing modifications to GitHub Owners. (#453)
- add new options to replace
blacklist_
-style options:merge.blacklist_title_regex
->merge.blocking_title_regex
,merge.blacklist_labels
->merge.blocking_labels
,update.blacklist_usernames
->update.ignored_usernames
. (#444, #454) - add more examples for using Kodiak with Dependabot to docs. (#448)
- better explain
merge.optimistic_updates
option in docs. (#449)
- add
merge.message.coauthors
configuration option to add commit authors as coauthors of a PR. See the Kodiak docs for more information. (#420, #434) - add UI to allow editing billing email, company name, and postal address. Company name and postal address will appear on invoices if provided. (#431, #432)
- Redesigned UI for subscriptions page to better present trial, subscription, and enterprise plans. (#427, #433)
- allow scrolling on margins in Kodiak dashboard
- disable Kodiak for a pull request when we encounter an internal server error from the GitHub API merge endpoint. (#398, #402)
- updated self-hosting documentation to include updated list of GitHub Events (#405)
- improved seat usage tracking to assign users to seats. Subscribers will be able to access their seats even if they have an overage. (#410)
- fix URL escaping of branch names and label names in API calls (#408)
- add link to billing history in dashboard. (#365)
- add alert to dashboard for subscription overages and trial expirations. (#373)
- add configuration error when "Restrict Pushes" branch protection setting is misconfigured. Kodiak needs to be added as an exception. (#379)
- Kodiak is now free for personal GitHub accounts (#367, #368)
- merge conflict notifications now takes priority over
merge.blacklist_title_regex
. (#371) - skip branch deletion if GitHub branch deletion is enabled on the repository (#382)
- fix trial/subscription expiration timezone to show correct timezone. Previously it was just saying "UTC". (#363)
- fix start subscription form to default to the current seat usage. Also display warning when user selects fewer seats than current usage. (#367)
- fixed dashboard oauth login flow not handling organization collaborators. (#375)
- fixed logic to queue pull request for reevaluation when UNKNOWN mergeability status check is received. (#380)
- fixed
merge.update_branch_immediately
logic causing merge loop to return unintentionally. (#381)
- removed invalid "quickstart" link from navbar (#370)
- add support for
requiresCommitSignatures
with the squash merge method (#275) - add documentation for billing at http://kodiakhq.com/docs/billing. (#348, #349, #358)
- fix handling of rare status checks. Treat
CANCELLED
as failure like GitHub. SupportSTALE
andSKIPPED
states. - fix order of account names on dashboard accounts page to be alphabetical.
- add billing support to bot and dashboard. More information can be found at https://kodiakhq.com/docs/billing. (#325, #337, #340, #339, #342)
- add ansible playbook for deploying web services (api, ui, crons, event ingestion) (#331)
- fix missing cache-control headers to disable caching of index.html for dashboard. (#334, #336)
- add
update.blacklist_usernames
to enable Kodiak to skip automatic updates for PRs opened by certain users. This is useful for making Kodiak play nicely with Dependabot. See the configuration reference and the Dependabot recipe for more information. This feature was contributed by Negan1911. (#327)
- add web dashboard accessible at https://app.kodiakhq.com. This website enables viewing Kodiak activity.
- add
merge.message.include_pull_request_author
configuration option to append pull request author information as a coauthor in the merge commit. (#301)
- add
approve.auto_approve_usernames
to enable Kodiak to auto approve PRs. This option enables bots like Dependabot to automatically merge PRs when the GitHub Branch Protection "Required approving reviews" is configured. See https://kodiakhq.com/docs/recipes#automated-dependency-updates-with-dependabot for an example. (#260)
- fixed status event handler triggering reevaluations of all PRs in a repository. Now we only trigger updates for PRs directly related to a status event. (#248)
- replaced inaccurate webhook event schemas with simplified versions to curtail parsing errors. Now we only parse the little information we need from each webhook event. This issue was preventing some webhook events from triggering reevaluations of PRs. (#262, #261)
- fixed
merge.delete_branch_on_merge
deleting branches that had open PRs against them. This fix eliminates a confusing bug where it would look like Kodiak closed the dependent PR. What happened was Kodiak deleted a branch on which that PR was dependent, so the PR was forced to be closed by GitHub. (#232) - fixed bug in webhook event handling where we wouldn't trigger evaluation for PRs when their dependent branch updated. We now use the
push
event to trigger evaluation of PRs that depend on the pushed ref. (#244)
- add support for placing
.kodiak.toml
at.github/.kodiak.toml
. (#227)
- updated warnings to allow commit signature branch protection setting when "merge" is configured as Kodiak's merge method. Kodiak is able to create signatures for merge commits, but not for squash and rebase merge methods (GitHub limitation). (#230)
- add handling to support reviews created by bots. A bot is not compatible with user API endpoints, so when a bot review was added Kodiak would fail when evaluating permissions on the bot. (#231)
- add
update.always
andupdate.require_automerge_label
configuration options. Whenupdate.always = true
, Kodiak will update a branch immediately, regardless of failing mergeability requirements (e.g. missing/failing checks, title blacklist regex, blacklist labels). Whenupdate.require_automerge_label = false
withupdate.always = true
, Kodiak will update a PR even if missing the automerge label defined inmerge.automerge_label
. (#174, #198, #213)
- discourage use of
merge.update_branch_immediately
configuration option. This setting will not be removed, but its use is discouraged because it can produce unexpected results. The behavior ofupdate.always
is easier to understand. (#198)
- refactored core update/merge eligibility logic. This was a large change and should make future features significantly easier to implement and test. (#207)
- removed potential Regex Denial of Service (ReDoS) vulnerability from
merge.blacklist_title_regex
by using a regex engine (rure) that guarantees linear time searching. (#211)
- updating of PRs made from forks. The merges API endpoint Kodiak had been using for updating branches didn't work across forks due to GitHub permissions. A new API endpoint was released in late May 2019 that avoided any permission issue, but wasn't noticed until 2019-12-12 🤦♀️. This change should make Kodiak more useful for public projects. (#104, #202)
GITHUB_PRIVATE_KEY_BASE64
environment variable to support configuring GitHub private key via base64. This is a workaround to support Docker's .env files, which do not allow multi-line or quoted values (#191, #192).merge.do_not_merge
configuration option to support updating PRs without merging them (#187).
- deprecate
merge.block_on_reviews_requested
, which is fundamentally broken and cannot be fixed (#180, #182).
- fixed travis-ci check compression to support deprecated travis-ci status check format (#166).
merge.prioritize_ready_to_merge
configuration option to immediately merge a PR if it's mergeable instead of placing it in the merge queue. This allows PRs to bypass those waiting to update in the queue if they are mergeable. See the README for more details.
merge.update_branch_immediately
configuration option to immediately update a PR when the target is updated instead of waiting until just before the PR is merged. See README.md#config-with-comments-and-all-options-set for a more detailed explanation of this feature and potential drawbacks (#120)
- fixed updating PR accidentally removing it from the merge queue (#148)
- fixed possible race condition when
dont_wait_on_status_checks
was configured that could accidentally remove a PR from the merge queue (#149)
- display requested reviewer names in status messages (#130)
- add warning that forks cannot be updated when PR is from fork (#135)
- add nicer error message for unknown block reason. The previous message erroneously indicated there was a problem with Kodiak (#139)
- add configuration to ignore select pending status checks. This is useful to prevent waiting indefinitely for the WIP GitHub App Check Run to complete (#141)
- ensure user has write permissions when counting their reviews towards mergeability. We previously checked the wrong field for this information. (#134)
- configuration for redis connection pool size (#57)
merge.optimistic_updates
configuration to prioritize updates over status checks (#64)- Internal rate limiting of API calls to Github (#70)
- Improve status check messages when PR is being merged (#72)
- Add queue position information to status messages (#74)
- Display more information in status checks (#77, #112)
- has blacklist labels reports the blacklist labels
- invalid merge method displays the configured merge method and the valid merge methods
- blocking review shows first blocking user
- missing required review count shows review count and required review count
- failing required status checks displays the failing status checks
- waiting on status checks now reports the status checks we are waiting for
- Display status messaging for missing branch protection (#78)
- Add
merge.message.strip_html_comments
configuration option to strip comments from (#80)- This is useful for stripping HTML comments created by PR templates when the
markdown
body_type
is used.
- This is useful for stripping HTML comments created by PR templates when the
- Add
require_automerge_label
to configure requirement ofautomerge_label
for working on PR (#82)- This overrides and disables
notify_on_conflict
(#86)
- This overrides and disables
- Add status message warning for unsupported
requiresCommitSignatures
branch protection configuration (#90, #91)- This is a limitation of the Github API as Kodiak is not able to created signed commits when merging a PR.
- Add status message reporting of update branch failures (#94)
- Add "Known issues" section to README (#105, #114)
- Add
'empty'
configuration option formerge.message.body
to truncate PR body on merge (#111) - Display configuration parsing errors with details page when kodiak cannot parse a configuration file (#116, #125)
- Support PRs in draft state (#68)
- Fix bug where
require_automerge_label
would trigger kodiak to make an infinite loop of comments (#86) - Fix poor status message templating on update branch failure case (#110)
- Add support for
include_pr_number
configuration. Enablinginclude_pr_number
with a non-default merge message option will append the pr number to the commit message, like the Github UI. - Make merge body style (plain text, markdown, or HTML) configurable via
merge.message.body_type
. - Add automatic deletion of branches on merge configurable via
merge.delete_branch_on_merge
. - Add support for running multiple kodiak instances on the same repo via the
app_id
configuration option. - Add redis-based persistence. Redis >=5 is now required.
- Add
merge.blacklist_title_regex
configuration to block merging PRs that match configured regex. - Display kodiak status information in Github CheckRun.
- Add docs for testing kodiak locally.
- Add automerge label removal and PR comment when a merge conflict occurs. This is configurable via
merge.notify_on_conflict
.
- move
block_on_reviews_requested
tomerge.block_on_reviews_requested
. - replace
merge.whitelist
array with singularmerge.automerge_label
. - rename
merge.blacklist
tomerge.blacklist_labels
.
- Add support for configuring merge messages. Current options are default Github style or using pull request title and body.
- Fix handling of
CHANGE_REQUESTED
reviews. We weren't nullifyingCHANGE_REQUESTED
reviews after the user placed another review.
- Fix incorrect calls to sentry client.
send_message
=>capture_message
- Fix missing handling for Github CheckRuns.
- Add
block_on_reviews_requested
configuration to block merging if there are unanswered review requests.
- Update mergeability evaluation to trigger branch update after all other mergeability tests are verified.
- Basic MVP