[GitHub] Dependabot version updates のジョブが「Errored with the message "Dependabot cancelled the update as there is an existing edited pull request for 'プルリクエスト名'"」というエラーで失敗し、プルリクエストがオープンされなくなっていたので対処してみた

[GitHub] Dependabot version updates のジョブが「Errored with the message "Dependabot cancelled the update as there is an existing edited pull request for 'プルリクエスト名'"」というエラーで失敗し、プルリクエストがオープンされなくなっていたので対処してみた

Clock Icon2024.07.30

こんにちは、製造ビジネステクノロジー部の若槻です。

今回は、GitHub で Dependabot version updates のジョブが Errored with the message "Dependabot cancelled the update as there is an existing edited pull request for <プルリクエスト名> というエラーで失敗し、プルリクエストがオープンされなくなっていたので対処してみました。

Dependabot コンフィグ

今回の環境で使用している Dependabot コンフィグは次の通りです。

.github/dependabot.yml
version: 2
updates:
  - package-ecosystem: npm
    directory: /
    schedule:
      interval: weekly
    groups:
      minor-and-patch:
        patterns:
          - '*'
        update-types:
          - minor
          - patch

事象

Dependabot version updates によるプルリクエスト作成および更新のためのジョブが、次のように自動および手動に関わらずエラーで失敗するようになりました。

エラーメッセージによると、既存のプルリクエストが影響しているようです。

Errored with the message "Dependabot cancelled the update as there is an existing edited pull request for @aws-lambda-powertools/parameters" and 1 other error

調査、原因

ジョブのログを開いてみると、さらに詳細なエラーメッセージが表示されていました。

@aws-lambda-powertools/parameters をアップデートするためのプルリクエストが編集されているため、クローズかマージをするように、とあります。

Dependabot cancelled the update as there is an existing edited pull request for @aws-lambda-powertools/parameters
There is an existing open pull request for @aws-lambda-powertools/parameters that has been edited by someone other than Dependabot: https://github.com/classmethod-internal/icasu-cdk-serverless-api-sample/pull/320

You can retry this update once the edited pull request is closed or merged.
Troubleshoot Dependabot errors

リンクからプルリクエストを開いてみると、コンフリクトが発生していました。

コンフリクトの内容を確認すると、過去にマージした Dependabot が作成したプルリクエストのアップデート内容と、このプルリクエストのアップデート内容が競合しているようでした。これが原因のようです。通常はリベースが自動で行われるはずなんですけどね。

対処、解決

このプルリクエストはメジャーバージョンアップデートであり大きな変更が予想されるため、動作検証を行うために敢えてマージせずにオープンしていたものでした。よってマージやクローズはせずにコンフリクト解消で対処できるか試してみたいと思います。

プルリクエストのコンフリクトを解消しました。

Dependabot の更新を再度手動実行してみます。

すると今度は別のパッケージを更新するプルリクエストが原因で同じエラーが発生しました。

プルリクエストのコンフリクトを解決します。

他にコンフリクトが発生しているプルリクエストが無いことを確認した上で、Dependabot の更新を再度手動実行してみます。

すると今度は Dependabot がこれ以上のプルリクエストを作成できないというエラーメッセージが表示されています。

Errored with the message "Dependabot cannot open any more pull requests"

これは Dependabot では同時にオープンできるプルリクエスト数が既定では 5 件に制限されているためです。

https://docs.github.com/ja/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#open-pull-requests-limit

プルリクエスト一覧を見るとすでに 5 件の Dependabot によるプルリクエストがオープンされていました。

そして紛らわしいことに、ジョブの完了を待つと、プルリクエスト数の超過ではなく、また冒頭と同じ Errored with the message "Dependabot cancelled the update as there is an existing edited pull request for @aws-lambda-powertools/parameters" and 1 other error というエラーが発生していました。

そこで Dependabot のプルリクエストを 1 件マージし、プルリクエスト数を 4 件に減らしてみます。他のプルリクエストのりベースが完了し、コンフリクトが発生していないことを確認したら、再度 Dependabot の更新を手動実行してみます。

ジョブの実行結果ではまた同じエラーが発生しました。

しかし今度はプルリクエストは新規にオープンされていました。

エラー自体の解決は既存の Dependabot のプルリクエストのクローズが必要そうですが、プルリクエストのオープン自体は再度行えるようになりました。

まとめ

  • Dependabot によりオープンされた他のプルリクエストの中に手動編集されたものがあれば、ジョブ実行で Dependabot cancelled the update as there is an existing edited pull request for 〜というエラーが発生する。
    • このエラーが発生した場合でもプルリクエストの作成や更新は行われる。
    • プルリクエストのオープン上限に達している場合は、プルリクエストは作成されない。

結論として、今回の「Dependabot のジョブがエラーで失敗し、プルリクエストがオープンされなくなっていた」という事象は、2 つの事象が重なって発生していたことによるものでした。

しかしジョブのエラーの根本的な解決のためには、しばらくマージしないプルリクエストの依存関係を Dependabot のコンフィグで ignore するなどの対応が必要です。

https://docs.github.com/ja/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#ignore

どなたかの参考になれば幸いです。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.