Skip to content

fix(renovate): declare cargo registry via customEnvVariables so cargo receives it#164

Merged
BryanFRD merged 1 commit into
mainfrom
fix/renovate-custom-env-variables
Jul 16, 2026
Merged

fix(renovate): declare cargo registry via customEnvVariables so cargo receives it#164
BryanFRD merged 1 commit into
mainfrom
fix/renovate-custom-env-variables

Conversation

@BryanFRD

Copy link
Copy Markdown
Contributor

Remplace #163, qui traitait une cause racine incomplète et n'a pas corrigé le problème (vérifié sur un run : registry index was not found persiste).

Ce que #163 a manqué

Il y a deux filtres d'environnement en série. #163 n'a réparé que le premier.

  1. renovatebot/github-action filtre process.env avant de peupler le conteneur (env-regex) — réparé par fix(renovate): pass private cargo registry env vars through to the Renovate container #163.
  2. Renovate filtre son propre environnement avant de lancer cargo — c'est ce qui bloquait.

Le second est visible dans lib/util/exec/env.ts : l'environnement des commandes lancées par Renovate est construit depuis une allowlist, pas hérité.

export function getChildProcessEnv(customEnvVars = []) {
  const env = {};
  if (GlobalConfig.get('exposeAllEnv')) return { ...process.env };
  const envVars = [...basicEnvVars, ...customEnvVars];   // ← allowlist
  envVars.forEach((envVar) => {
    if (typeof process.env[envVar] !== 'undefined') env[envVar] = process.env[envVar];
  });
  ...
}

basicEnvVars est une liste en dur (CI, PATH, HOME, proxies, SSL_CERT_*…) qui ne contient aucun CARGO_*. Une variable déclarée en env: de step atteint donc le process Renovate mais est retirée avant que cargo la voie. Rien ne loggue qu'elle a été jetée — le seul symptôme est l'échec de parsing du manifeste, ce qui rend le diagnostic trompeur.

getChildEnv (lib/util/exec/utils.ts) montre la seule voie d'entrée :

const globalConfigEnv = getCustomEnv();               // ← customEnvVariables
const parentEnv = getChildProcessEnv(inheritedKeys);  // ← allowlist ci-dessus
const combinedEnv = { ...extraEnv, ...parentEnv, ...globalConfigEnv, ... };

Correctif

Déclarer le registre via customEnvVariables (RENOVATE_CUSTOM_ENV_VARIABLES), qui alimente globalConfigEnv et atteint donc cargo.

Ça rend l'env-regex de #163 superflu, et pas seulement insuffisant : RENOVATE_CUSTOM_ENV_VARIABLES porte le préfixe RENOVATE_ et traverse nativement le filtre par défaut de l'action, avec les valeurs embarquées dans son JSON. L'override d'env-regex et les deux CARGO_* en env: nu sont donc retirés — le filtre par défaut de l'action redevient effectif.

Vérifié en local : YAML parsé, JSON valide après interpolation du secret, les deux clés attendues, et RENOVATE_CUSTOM_ENV_VARIABLES passe bien le regex par défaut de l'action.

À confirmer après merge

Aucun check CI ne couvre ceci — la validation vient d'un run réel. Critère de succès : plus de registry index was not found dans les logs.

Si le token est mal câblé, une erreur distincte apparaîtra alors (401/403), l'auth du registre n'ayant jamais encore été exercée jusqu'ici.

@BryanFRD BryanFRD merged commit 2d57d06 into main Jul 16, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant