1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Renovateを導入していないリポジトリでRenovateを1回だけ手元で動かす

Last updated at Posted at 2025-09-04

最近様々なGitHub Actionsのactionsで更新があり、いちいちバージョンを調べるのが大変なので自動でやって欲しい、でもリポジトリにRenovateを本格的に設定するのは少し面倒でやりたくない人向けのメモです。
DockerでRenovateを動作させ、PRを作成させます。

  • この記事は人の手で書かれています
  • AI(Gemini)に校正をお願いし人手で修正しています
  • コードは人手で書き、動作確認したものを整形して掲載しています

事前準備

Dockerのインストール

公式サイトのドキュメントなどを参考に、お使いの環境にインストールしてください。

使うイメージは ghcr.io/renovatebot/renovate:latest なので、pullしておきましょう。

docker pull ghcr.io/renovatebot/renovate:latest

GitHubリポジトリへの権限

該当リポジトリに対するコミット権限やPRを作成する権限が必須です。

GitHubのトークンの準備

repoworkflow のスコープのあるトークンが必要です。

PATの発行は公式ドキュメントを参照してください。

PATは漏出すると大変大きな被害につながります。十分注意してください。

ghコマンドをインストールしている場合

gh auth token でトークンを取得できます。
gh auth status で有効になっているスコープを確認できます。

github.com
  ✓ Logged in to github.com account k-kojima-yumemi (keyring)
  - Active account: true
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:user', 'repo', 'workflow'

Token scopesの箇所に有効になっているスコープが記載されています。

もしスコープが有効になっていない場合は gh auth refresh -s workflow,repo で再ログインすると有効にできます。

署名設定 (必要な場合)

Renovateを手元から動かす場合には、クラウドで動作しているRenovateのようにgitのコミットに署名してはくれません。
そのため、署名が必須のリポジトリでは手元のRenovateでも署名させる必要があります。

こちらに gitPrivateKey オプションについての記載があります。
dockerでRenovateを実行しGPGでの署名の場合、上記docsに記載の通りパスワードによる保護がかかっている場合は使用できません。(かかってない場合は使用できます)
headlessでない環境では使用できるようですが、試してはいないです。

自分はGPGにパスワードの保護をかけているため、新しくSSHによるコミット署名の設定をGitHubに追加しました。

の方法でコミット署名用のSSHキーを追加しています。

Dry run

いきなり実行して意図しないPRが作成されてしまうと掃除が大変です。
Dry runして更新される内容を確認しましょう。

以下コマンドでDry runできます。

docker run -it --rm \
  -e LOG_LEVEL=info \
  ghcr.io/renovatebot/renovate:latest \
  --dry-run="full" \
  --token="$(gh auth token)" \
  --onboarding=false \
  --platform="github" \
  --require-config="optional" \
  <対象リポジトリ>

Pythonのプロジェクトで動かした場合以下の結果が得られました。

INFO: Repository started (repository=k-kojima-yumemi/test_repo)
       "renovateVersion": "41.93.3"
 INFO: Dependency extraction complete (repository=k-kojima-yumemi/test_repo, baseBranch=develop)
       "stats": {
         "managers": {
           "docker-compose": {"fileCount": 1, "depCount": 0},
           "dockerfile": {"fileCount": 1, "depCount": 1},
           "github-actions": {"fileCount": 4, "depCount": 13},
           "pip_requirements": {"fileCount": 2, "depCount": 6}
         },
         "total": {"fileCount": 8, "depCount": 20}
       }
 INFO: DRY-RUN: Would commit files to branch renovate/pytest-7.x (repository=k-kojima-yumemi/test_repo, branch=renovate/pytest-7.x)
 INFO: DRY-RUN: Would commit files to branch renovate/black-24.x (repository=k-kojima-yumemi/test_repo, branch=renovate/black-24.x)
 INFO: DRY-RUN: Would commit files to branch renovate/isort-5.x (repository=k-kojima-yumemi/test_repo, branch=renovate/isort-5.x)
 INFO: DRY-RUN: Would commit files to branch renovate/pyproject-flake8-6.x (repository=k-kojima-yumemi/test_repo, branch=renovate/pyproject-flake8-6.x)
 INFO: DRY-RUN: Would commit files to branch renovate/python-3.x (repository=k-kojima-yumemi/test_repo, branch=renovate/python-3.x)
 INFO: DRY-RUN: Would create PR: Update dependency python to 3.13 (repository=k-kojima-yumemi/test_repo, branch=renovate/python-3.x)
 INFO: DRY-RUN: Would commit files to branch renovate/public.ecr.aws-docker-library-python-3.x (repository=k-kojima-yumemi/test_repo, branch=renovate/public.ecr.aws-docker-library-python-3.x)
 INFO: DRY-RUN: Would commit files to branch renovate/aws-actions-configure-aws-credentials-5.x (repository=k-kojima-yumemi/test_repo, branch=renovate/aws-actions-configure-aws-credentials-5.x)
 INFO: DRY-RUN: Would commit files to branch renovate/black-25.x (repository=k-kojima-yumemi/test_repo, branch=renovate/black-25.x)
 INFO: DRY-RUN: Would commit files to branch renovate/isort-6.x (repository=k-kojima-yumemi/test_repo, branch=renovate/isort-6.x)
 INFO: DRY-RUN: Would commit files to branch renovate/pyproject-flake8-7.x (repository=k-kojima-yumemi/test_repo, branch=renovate/pyproject-flake8-7.x)
 INFO: DRY-RUN: Would commit files to branch renovate/pytest-8.x (repository=k-kojima-yumemi/test_repo, branch=renovate/pytest-8.x)
 INFO: DRY-RUN: Would close Dependency Dashboard (repository=k-kojima-yumemi/test_repo)
       "title": "Dependency Dashboard"
 INFO: DRY-RUN: Would save repository cache. (repository=k-kojima-yumemi/test_repo)
 INFO: Repository finished (repository=k-kojima-yumemi/test_repo)
       "cloned": true,
       "durationMs": 23690
 INFO: Renovate was run at log level "info". Set LOG_LEVEL=debug in environment variables to see extended debug logs.

のような結果が得られます。
"DRY-RUN: Would commit files to branch" のメッセージ部分に着目すると、どのパッケージがアップデートされるのかわかります。

今回はGitHub Actionsの依存関係のみアップデートしたいので、ここからフィルタリングしていきます。

--enabled-managersCLIオプションでmanagersを選択します。一覧は以下のdocsに記載されています。

--enabled-managers="github-actions" と指定して再度Dry runします。

docker run -it --rm \
  -e LOG_LEVEL=info \
  ghcr.io/renovatebot/renovate:latest \
  --dry-run="full" \
  --token="$(gh auth token)" \
  --onboarding=false \
  --platform="github" \
  --enabled-managers="github-actions" \
  --require-config="optional" \
  <対象リポジトリ>

INFO: Repository started (repository=k-kojima-yumemi/test_repo)
       "renovateVersion": "41.93.3"
 INFO: Dependency extraction complete (repository=k-kojima-yumemi/test_repo, baseBranch=develop)
       "stats": {
         "managers": {"github-actions": {"fileCount": 4, "depCount": 13}},
         "total": {"fileCount": 4, "depCount": 13}
       }
 INFO: DRY-RUN: Would commit files to branch renovate/python-3.x (repository=k-kojima-yumemi/test_repo, branch=renovate/python-3.x)
 INFO: DRY-RUN: Would create PR: Update dependency python to 3.13 (repository=k-kojima-yumemi/test_repo, branch=renovate/python-3.x)
 INFO: DRY-RUN: Would commit files to branch renovate/aws-actions-configure-aws-credentials-5.x (repository=k-kojima-yumemi/test_repo, branch=renovate/aws-actions-configure-aws-credentials-5.x)
 INFO: DRY-RUN: Would close Dependency Dashboard (repository=k-kojima-yumemi/test_repo)
       "title": "Dependency Dashboard"
 INFO: DRY-RUN: Would save repository cache. (repository=k-kojima-yumemi/test_repo)
 INFO: Repository finished (repository=k-kojima-yumemi/test_repo)
       "cloned": true,
       "durationMs": 15352
 INFO: Renovate was run at log level "info". Set LOG_LEVEL=debug in environment variables to see extended debug logs.

GitHub Actionsのファイルのみの更新になりました。
ただ、setup-python で指定しているPythonのバージョンは変更したくないので、さらに絞り込みます。
RENOVATE_CONFIG の環境変数を指定すると設定ファイルのJSONを読み込ませることができるので、そこでpackageRulesを記載します。
世に出ているRenovateの設定はJSONに記載する内容が多いので、紹介されている内容をそのまま使いやすくする目的もあります。
CLI形式でどのように指定するか分かりにくいオプションもあるため、そのような場合は RENOVATE_CONFIG に記載するのが簡単です。

以下コマンドで実行します。読み込まれている設定を把握するためログはdebugにしています。ここでは大雑把にmatchDepNamesにpythonが含まれるものを弾くようにしています。必要な場合にはDry runを活用し意図した結果が得られるまで調整してください。それかオープンされたPRを手動でクローズするくらいでもいいかと思います。

docker run -it --rm \
  -e LOG_LEVEL=debug \
  -e RENOVATE_CONFIG='{"packageRules": [{"matchDepNames": "*python*", "enabled": false}]}' \
  ghcr.io/renovatebot/renovate:latest \
  --dry-run="full" \
  --token="$(gh auth token)" \
  --onboarding=false \
  --platform="github" \
  --enabled-managers="github-actions" \
  --require-config="optional" \
  <対象リポジトリ>

長いのでログは省略しますが、これで更新したいパッケージのみのPRを作成する準備が整いました。

本実行

Dry runで指定したオプションに加え、コミット関連の設定も追加します。

docker run -it --rm \
  -e LOG_LEVEL=debug \
  -e RENOVATE_CONFIG='{"packageRules": [{"matchDepNames": "*python*", "enabled": false}]}' \
  -e RENOVATE_GIT_PRIVATE_KEY="$(awk 'ORS="\\n"' < <秘密鍵ファイルのパス>)" \
  ghcr.io/renovatebot/renovate:latest \
  --token="$(gh auth token)" \
  --onboarding=false \
  --platform="github" \
  --enabled-managers="github-actions" \
  --require-config="optional" \
  --git-author 'k-kojima-yumemi <125636684+k-kojima-yumemi@users.noreply.github.com>'
  <対象リポジトリ>

RENOVATE_GIT_PRIVATE_KEY--git-author を追加しました。

  • RENOVATE_GIT_PRIVATE_KEYこちらに改行を \n に書き換えるように指示があります
    • 改行の変換のため awk 'ORS="\\n"' を追加しています
    • GPG鍵であれば gpg --export-secret-keys --armor といったコマンドを使用することになるかと思います
    • SSH鍵なら秘密鍵ファイルを読み込ませれば大丈夫です
    • 明示的にGitで署名を使わせる設定は不要です。Renovate側で設定しておいてくれます
  • --git-author は署名をするためGitHubアカウントに登録されているメールアドレスにしています

この実行により以下のようにPRが作成されます。コミットも問題なくverifiedになっています。
image.png

上記のPRはグルーピングの設定を入れているので複数パッケージが更新されています。
RENOVATE_CONFIG として

{
  "packageRules": [
    {
      "matchDepNames": "*python*",
      "enabled": false
    },
    {
      "groupName": "gh",
      "matchManagers": [
        "github-actions"
      ]
    }
  ]
}

を一行で指定していました。

まとめ

RenovateをDockerで動かし、PRを作成する方法を記載しました。
この方法はリポジトリにRenovateをインストールすることなく実行できるので、オンデマンドで1回だけ実行したいときに使えるかと思います。
毎週実行するのであれば普通にRenovateの設定をしたほうがいいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?