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を指定しないとこれを使えない。

リポジトリにある.npmrclib/modules/manager/npm/extract/index.ts#L92+L115あたりで取得される。

これの直後に各行に対して${VAR}形式のmatchをしている。

lib/modules/manager/npm/extract/index.ts#L116

ここで//gitlab.example.com...の行が消えてしまい、パッケージの取得でエラー(404, 401)になってしまう。

exposeAllEnvfalseのままやるにはrenovate.jsonnpmrcを書いてやる必要があるが、.npmrcrenovate.jsonnpmrcフィールドで2重管理になってしまう。

また、これの環境変数を置換してやらないといけないが、RENOVATE_NPM_TOKENを指定してやればいけるはず。

しかし、ログでresolvedConfig.npmToken, resolvedConfig.npmrcがあるのにもかかわらず、lib/workers/repository/init/merge.ts#L321の処理がログにでてこない。

なぜだろう?

とりあえずは.gitlab-ci.yamlRENOVATE_EXPOSE_ALL_ENVを指定すれば動くのでこれでいこうかな。