Renovateが動くリポジトリにて、途中からRenovate対象外になったライブラリも、セキュリティアップデートのプルリクはRenovateが作るようにしてみた

Renovateが動くリポジトリにて、途中からRenovate対象外になったライブラリがありました。

「Renovate対象外になる前に作られたセキュリティアップデートのプルリクはそのままになるだろう」と考えていたところ、対象外になった途端にCloseされてしまいました。

「セキュリティアップデートのプルリクは、そのまま残したり、Renovateが作るようにしてほしい」と感じました。そこで、状況の再現と対応策を調査してみたことから、メモを残します。

 
目次

 

環境

なお、Organizationの設定は、以前の記事と同様とします。
GitHub App installation access token + GitHub ActionsによるSelf-Hosted Renovateで、プライベートリポジトリのgemやnpmパッケージが含まれるGemfileを更新する - メモ的な思考的な

また、Renovateも、以前の記事同様に GitHub Actionsによる Self-Hosted Renovateとします。

 

状況を再現する

リポジトリの準備

Renovateでセキュリティアップデートのプルリクを作れるようにするため、以下の設定を行います。

 

最初は「Renovate対象がある」という設定を行う

各ファイルの準備

renovate.json5

マイナー・パッチバージョンアップのみ、Renovateの対象とします。

{
  // Renovateの基本設定
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  
  // すべて実行する
  mode: "full",

  // ベース設定を継承
  extends: [
    "config:recommended"
  ],

  // automergeを無効化
  automerge: false,

  // 作成するプルリクは、いったん無制限
  prConcurrentLimit: 0,
  prHourlyLimit: 0,
  
  // タイムゾーン設定(日本時間)
  timezone: "Asia/Tokyo",

  // パッケージルール
  packageRules: [
    {
      // すべてのパッケージに対して
      matchPackageNames: ["*"],
      
      // メジャーアップデートを無効化
      matchUpdateTypes: ["major"],
      enabled: false
    },
    {
      // すべてのパッケージに対して
      matchPackageNames: ["*"],
      
      // マイナー・パッチアップデートのみ有効
      matchUpdateTypes: ["minor", "patch"],
      enabled: false
    }
  ]
}

 

.github/workflows/renovate.yml

Self-Hosted Renovate とするためのGitHub Actionsを設定します。

name: Renovate
on:
  # 手動実行
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log Level'
        type: choice
        required: false
        default: 'debug'
        options:
          - debug
          - info
          - warn
          - error

jobs:
  renovate:
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Generate token
        id: generate-token
        # https://github.com/actions/create-github-app-token
        uses: actions/create-github-app-token@v2.0.6
        with:
          app-id: ${{ secrets.RENOVATE_APP_ID }}
          private-key: ${{ secrets.RENOVATE_APP_PRIVATE_KEY }}
          owner: ${{ github.repository_owner }}
        
      - name: Self-hosted Renovate
        # https://github.com/renovatebot/github-action
        uses: renovatebot/github-action@v43.0.4
        env:
          LOG_LEVEL: ${{ github.event.inputs.logLevel || 'info' }}
          RENOVATE_REPOSITORIES: ${{ github.repository }}
        with:
          token: ${{ steps.generate-token.outputs.token }}

 

package.json

npm install axios@1.7.3 してできたpackage.json (と package-lock.json) を用意します。

{
  "dependencies": {
    "axios": "^1.7.3"
  }
}

 

プルリクの作成とマージ

上記を含むこちらのプルリクを作成・マージします。
https://github.com/thinkami-renovate-sandbox/security-update-for-disabled-package/pull/1

 

GitHub Actionsの実行

リポジトリのActionsタブから Renovate を選択し、 Run workflow で実行します。

正常に終了すると、新しくプルリクが2つ作成されます。セキュリティアップデートと、普通のアップデートです。

 

「パッケージをRenovate対象外とする」へと設定変更する

マイナー・パッチアップデートも対象外とするよう、設定を変更します。

{
  matchPackageNames: ["*"],
  matchUpdateTypes: ["minor", "patch"],
  enabled: false  // 変更箇所
}

 
この内容でプルリクを作り、マージします。
https://github.com/thinkami-renovate-sandbox/security-update-for-disabled-package/pull/5/files

 
マージ後、GitHub ActionsでRenovateを動かすと、プルリクがすべてcloseされました。再現できたようです。

 

「Renovate対象外でも、セキュリティアップデートのプルリクは作成する」設定へと変更する

RenovateのGitHubを調べたところ、discussionに情報がありました。
Perform only security updates? · renovatebot/renovate · Discussion #15490

Renovateのドキュメントには true という値を設定できるとは書かれていないのですが、試してみます。
https://docs.renovatebot.com/configuration-options/#vulnerabilityalerts

 
vulnerabilityAlerts をルート直下に追加しました。

{
  // ...
  // セキュリティアップデートのプルリクは作成する  <= 追加
  vulnerabilityAlerts: {
    "enabled": true
  },

  // パッケージルールは同じ
  packageRules: [
    // ...
  ]
}

 
その設定のプルリクを作成・マージしました。
https://github.com/thinkami-renovate-sandbox/security-update-for-disabled-package/pull/6

マージ後にGitHub Actionsを実行したところ、セキュリティアップデートのプルリクがOpenされていました。
https://github.com/thinkami-renovate-sandbox/security-update-for-disabled-package/pulls

 
ブランチ名やプルリクのタイトル、lockfileの更新から考えると、 true にしたときは公式ドキュメントの default に書かれた設定のプルリクが作られるようです。
https://docs.renovatebot.com/configuration-options/#vulnerabilityalerts

 
また、プルリクの詳細を確認すると、一度Closeされたものが再Openされたようでした。

 
再度 GitHub Actions を実行しましたが、OpenされたセキュリティアップデートのプルリクはCloseされることもありませんでした。

以上で、やりたかったことが実現できました。

 

ソースコード

GitHubに上げました。
https://github.com/thinkami-renovate-sandbox/security-update-for-disabled-package