> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# PR hebdomadaires de mise à jour des dépendances

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="PR hebdomadaires de mise à jour des dépendances" description="Planifiez une session hebdomadaire avec Devin qui identifie les packages obsolètes, exécute vos tests et ouvre des PR de mise à niveau." prompt="Vérifiez les packages npm obsolètes. Mettez à jour toutes les versions correctives et mineures dans une seule PR — exécutez la suite de tests et incluez un tableau des modifications. Pour toute montée de version majeure, ouvrez une PR distincte avec des notes sur les ruptures de compatibilité issues du changelog." category="Automations" features="Schedules" type="schedule" />

<div className="uc-detail-wrapper">
  <Tip>Vous ne souhaitez pas effectuer cette configuration manuellement ? Collez un lien vers cette page dans une session Devin et demandez-lui de tout configurer pour vous.</Tip>

  <Steps>
    <Step title="Créer un planning hebdomadaire">
      Ouvrez [app.devin.ai](https://app.devin.ai/?utm_source=docs\&utm_medium=use-case-gallery) et allez dans **Settings > Schedules**. Cliquez sur **Create schedule** et configurez-le :

      * **Frequency :** Weekly — par exemple, tous les lundis à 7:00 AM UTC (`0 7 * * 1`)
      * **Prompt :** Collez le prompt de mise à jour des dépendances ci-dessous

      <PromptBlock type="schedule">
        ```txt Weekly dependency update prompt theme={null}
        Vérifie les paquets npm obsolètes dans le repo acme/frontend. Pour chacun :
        1. Mets à jour toutes les versions de correctifs (patch) et mineures ensemble dans un seul PR.
           Exécute l'ensemble complet des tests et ajoute un tableau récapitulatif des changements.
        2. Pour chaque montée de version majeure, ouvre un PR séparé avec :
           - Un résumé des breaking changes tirées du changelog du paquet
           - Toutes les modifications de code nécessaires pour la compatibilité
           - Le lockfile mis à jour
        3. Exécute `npm audit` et signale tout paquet avec des vulnérabilités connues.
        ```
      </PromptBlock>

      Si vous utilisez un [Playbook](/fr/product-guides/creating-playbooks) décrivant comment votre équipe gère les mises à jour de dépendances (par exemple, toujours exécuter `npm run build` après une mise à jour, ou ignorer les `devDependencies`), joignez-le au planning pour que chaque exécution suive le même processus.
    </Step>

    <Step title="Ajouter Knowledge pour guider les mises à jour">
      Tous les paquets ne doivent pas être mis à jour automatiquement. Allez dans **Settings > Knowledge** et ajoutez des entrées qui indiquent à Devin quoi ignorer ou traiter avec précaution :

      * `Do not update react past v18 — we're mid-migration to v19 on a separate branch.`
      * `Always pin @types/node to match our Node.js version (20.x).`
      * `Skip eslint-plugin-import — it conflicts with our custom lint config.`
      * `Our test command is npm run test:ci, not npm test.`

      Ces entrées [Knowledge](/fr/product-guides/knowledge) sont conservées pour chaque exécution planifiée, de sorte que Devin respecte vos contraintes sans que vous ayez à les répéter dans le prompt.
    </Step>

    <Step title="Passer en revue les résultats de Devin">
      Chaque lundi, Devin vérifie votre repo pour détecter les paquets obsolètes et ouvre des PR en votre nom. Une semaine typique peut produire :

      **PR #1 — Mises à jour sûres (patch + mineures) :**

      ```
      ## Mises à jour de dépendances — Semaine du 10 fév.

      | Package         | De      | À       | Type  |
      |-----------------|---------|---------|-------|
      | axios           | 1.6.2   | 1.6.8   | patch |
      | react-query     | 5.17.0  | 5.22.1  | minor |
      | tailwindcss     | 3.4.1   | 3.4.6   | patch |
      | typescript      | 5.3.3   | 5.3.5   | patch |

      Les 847 tests sont passés. Aucune vulnérabilité détectée par npm audit.
      ```

      **PR #2 — Montée de version majeure (séparée, avec notes) :**

      ```
      ## Mise à jour majeure : zod 3.x → 4.0.0

      Breaking changes (extraites du CHANGELOG) :
      - `z.object().strict()` est désormais le comportement par défaut
      - `z.enum` requiert au moins une valeur
      - Méthode obsolète `.check()` supprimée

      Modifications de code dans ce PR :
      - 3 fichiers de schéma mis à jour pour supprimer les appels `.strict()` explicites
      - Valeur de repli ajoutée à l'enum vide dans src/schemas/status.ts
      ```

      Devin exécute votre suite de tests pour chaque PR indépendamment, ce qui vous permet de fusionner immédiatement le lot de mises à jour sûres et de prendre le temps nécessaire pour examiner les montées de version majeures.
    </Step>

    <Step title="Itérer et étendre">
      Une fois votre planning hebdomadaire en place, vous pouvez l'affiner au fil du temps. Répondez à n'importe quelle session planifiée pour donner des instructions complémentaires à Devin :

      <PromptBlock>
        ```txt Handle a major update theme={null}
        Procède à la migration de zod v3 vers v4. Consulte le guide de migration sur
        https://zod.dev/v4 et mets à jour tous les fichiers de schéma en conséquence.
        ```
      </PromptBlock>

      <PromptBlock>
        ```txt Expand to backend deps theme={null}
        Vérifie également les paquets Python obsolètes dans le repo acme/backend en utilisant pip.
        Mets à jour toutes les versions compatibles et ouvre un PR séparé. Exécute pytest avant de soumettre.
        ```
      </PromptBlock>

      **Conseils pour que tout se passe bien :**

      * **Séparer frontend et backend** — Si votre repo contient les deux, créez deux plannings pour que chaque PR reste ciblée et facile à relire.
      * **Laissez la CI aller au bout avant de fusionner** — Même des mises à jour mineures apparemment sûres peuvent introduire des bugs subtils. Devin exécute vos tests, mais votre pipeline CI complet ajoute une couche de confiance supplémentaire.
      * **Consultez la page [Schedules](/fr/product-guides/scheduled-sessions)** pour suivre l'historique des exécutions, mettre un planning en pause pendant un gel de code ou ajuster l'expression cron.
    </Step>
  </Steps>
</div>
