self-hostedな renovateで self-hostedな npm packageを 管理するには `exposeAllEnv`が 必要
self-hostedなgitlabでnpm packageを公開していて、そのパッケージを使うrepositoryにrenovateが導入されている場合、当然そのパッケージも管理したい。
npmrcに以下のように書けばNPM_TOKENの環境変数を読んで@scopeのパッケージ探しにいってくれる。
@scope:registry=https://gitlab.example.com/api/v4/projects/<project_id>/packages/npm/
//gitlab.example.com/api/v4/projects/<project_id>/packages/npm/:_authToken="${NPM_TOKEN}"
ただ、renovateはexposeAllEnvを指定しないとこれを使えない。
リポジトリにある.npmrcはlib/modules/manager/npm/extract/index.ts#L92+L115あたりで取得される。
これの直後に各行に対して${VAR}形式のmatchをしている。
lib/modules/manager/npm/extract/index.ts#L116
ここで//gitlab.example.com...の行が消えてしまい、パッケージの取得でエラー(404, 401)になってしまう。
exposeAllEnvをfalseのままやるにはrenovate.jsonにnpmrcを書いてやる必要があるが、.npmrcとrenovate.jsonのnpmrcフィールドで2重管理になってしまう。
また、これの環境変数を置換してやらないといけないが、RENOVATE_NPM_TOKENを指定してやればいけるはず。
しかし、ログでresolvedConfig.npmToken, resolvedConfig.npmrcがあるのにもかかわらず、lib/workers/repository/init/merge.ts#L321の処理がログにでてこない。
なぜだろう?
とりあえずは.gitlab-ci.yamlでRENOVATE_EXPOSE_ALL_ENVを指定すれば動くのでこれでいこうかな。