{"meta":{"title":"Extension de GitHub Actions Importer avec des transformateurs personnalisés","intro":"GitHub Actions Importer offre la possibilité d’étendre son mappage intégré.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/reference","title":"Référence"},{"href":"/fr/actions/reference/github-actions-importer","title":"Importateur GitHub Actions"},{"href":"/fr/actions/reference/github-actions-importer/custom-transformers","title":"Transformateurs personnalisés"}],"documentType":"article"},"body":"# Extension de GitHub Actions Importer avec des transformateurs personnalisés\n\nGitHub Actions Importer offre la possibilité d’étendre son mappage intégré.\n\n## À propos des transformateurs personnalisés\n\nGitHub Actions Importer offre la possibilité d’étendre son mappage intégré en créant des transformateurs personnalisés. Les transformateurs personnalisés peuvent être utilisés pour :\n\n* Convertissez des éléments qui GitHub Actions Importer ne convertissent pas automatiquement ou modifiez la façon dont les éléments sont convertis. Pour plus d’informations, consultez « [Création de transformateurs personnalisés pour les éléments](#creating-custom-transformers-for-items) ».\n* Convertissez les références en runners pour utiliser différentes étiquettes de runner. Pour plus d’informations, consultez [Création de transformateurs personnalisés pour les exécuteurs](#creating-custom-transformers-for-runners).\n* Convertissez les valeurs des variables d’environnement de vos pipelines existants en GitHub Actions flux de travail. Pour plus d’informations, consultez « [Création de transformateurs personnalisés pour les variables d’environnement](#creating-custom-transformers-for-environment-variables) ».\n\n## Utilisation de transformateurs personnalisés avec GitHub Actions Importer\n\nUn transformateur personnalisé contient une logique de mappage que GitHub Actions Importer peut utiliser pour transformer vos plug-ins, tâches, libellés d’exécuteur ou variables d’environnement afin de fonctionner avec GitHub Actions. Les transformateurs personnalisés sont écrits avec un langage spécifique au domaine (DSL) basé sur Ruby et sont définis dans un fichier avec l’extension de fichier `.rb`.\n\nVous pouvez utiliser l’option CLI `--custom-transformers` pour spécifier les fichiers de transformateur personnalisés à utiliser avec les commandes `audit`, `dry-run` et `migrate`.\n\nPar exemple, si des transformateurs personnalisés sont définis dans un fichier nommé `transformers.rb`, vous pouvez utiliser la commande suivante pour les utiliser avec GitHub Actions Importer:\n\n```shell\ngh actions-importer ... --custom-transformers transformers.rb\n```\n\nVous pouvez également utiliser la syntaxe du modèle Glob pour spécifier plusieurs fichiers de transformateur personnalisés. Par exemple, si plusieurs fichiers de transformateur personnalisés se trouvent dans un répertoire nommé `transformers`, vous pouvez tous les fournir à GitHub Actions Importer à l’aide de la commande suivante :\n\n```shell\ngh actions-importer ... --custom-transformers transformers/*.rb\n```\n\n> \\[!NOTE]\n> Lorsque vous utilisez des transformateurs personnalisés, les fichiers de transformateur personnalisés doivent résider dans le même répertoire, ou dans des sous-répertoires, à partir duquel la commande `gh actions-importer` est exécutée.\n\n## Création de transformateurs personnalisés pour les éléments\n\nVous pouvez créer des transformateurs personnalisés qui GitHub Actions Importer seront utilisés lors de la conversion des étapes de génération ou des déclencheurs existants en leur équivalent dans GitHub Actions. Cela est particulièrement utile dans les cas suivants :\n\n* GitHub Actions Importer ne convertit pas automatiquement un élément.\n* Vous souhaitez modifier la façon dont un élément est converti par GitHub Actions Importer.\n* Vos pipelines existants utilisent des extensions personnalisées ou propriétaires, telles que des bibliothèques partagées dans Jenkins, et vous devez définir la façon dont ces étapes doivent fonctionner dans GitHub Actions.\n\nGitHub Actions Importer utilise des transformateurs personnalisés définis à l’aide d’une DSL basée sur Ruby. Pour créer des transformateurs personnalisés pour les étapes de compilation et les déclencheurs :\n\n* Chaque fichier de transformateur personnalisé doit contenir au moins une méthode `transform`.\n* Chaque méthode `transform` doit retourner un `Hash`, un tableau de `Hash`, ou `nil`. Cette valeur retournée correspond à une action définie dans YAML. Pour plus d’informations sur les actions, consultez « [Présentation des GitHub Actions](/fr/actions/get-started/understand-github-actions) ».\n\n### Exemple de transformateur personnalisé pour une étape de compilation\n\nL’exemple suivant convertit une étape de génération qui utilise l’identificateur « buildJavaScriptApp » pour exécuter différentes commandes `npm` :\n\n```ruby copy\ntransform \"buildJavaScriptApp\" do |item|\n  command = [\"build\", \"package\", \"deploy\"].map do |script|\n    \"npm run #{script}\"\n  end\n\n  {\n    name: \"build javascript app\",\n    run: command.join(\"\\n\")\n  }\nend\n```\n\nL’exemple ci-dessus entraîne l’étape de flux de travail suivante GitHub Actions . Il se compose d'étapes de compilation converties qui avaient un identificateur `buildJavaScriptApp` :\n\n```yaml\n- name: build javascript app\n  run: |\n    npm run build\n    npm run package\n    npm run deploy\n```\n\nLa méthode `transform` utilise l’identificateur de l’étape de génération de votre instance CI/CD source dans un argument. Dans cet exemple, l’identificateur est `buildJavaScriptLibrary`. Vous pouvez également utiliser des valeurs séparées par des virgules pour passer plusieurs identificateurs à la méthode `transform`. Par exemple : `transform \"buildJavaScriptApp\", \"buildTypeScriptApp\" { |item| ... }`.\n\n> \\[!NOTE]\n> La structure des données de `item` sera différente en fonction de la plateforme CI/CD et du type d’élément en cours de conversion.\n\n## Création de transformateurs personnalisés pour les runners\n\nVous pouvez personnaliser le mappage entre les runners de votre instance CI/CD source et leurs équivalents GitHub Actions.\n\nGitHub Actions Importer utilise des transformateurs personnalisés définis à l’aide d’une DSL basée sur Ruby. Pour créer des transformateurs personnalisés pour les coureurs :\n\n* Le fichier de transformateur personnalisé doit avoir au moins une méthode `runner`.\n* La méthode `runner` accepte deux paramètres. Le premier paramètre est le libellé du runner de l’instance CI/CD source, et le deuxième paramètre est le libellé correspondant du runner GitHub Actions. Pour plus d’informations sur les runners GitHub Actions, consultez [Référence des exécuteurs hébergés par GitHub](/fr/actions/reference/runners/github-hosted-runners#supported-runners-and-hardware-resources).\n\n### Exemples de transformateurs personnalisés pour les runners\n\nL’exemple suivant présente une méthode `runner` qui convertit une étiquette de runner en une étiquette de runner GitHub Actions dans le workflow obtenu.\n\n```ruby copy\nrunner \"linux\", \"ubuntu-latest\"\n```\n\nVous pouvez également utiliser la méthode `runner` pour convertir une étiquette de runner en plusieurs étiquettes de runner GitHub Actions dans le workflow résultant.\n\n```ruby copy\nrunner \"big-agent\", [\"self-hosted\", \"xl\", \"linux\"]\n```\n\nGitHub Actions Importer tente de mapper au mieux l’étiquette du runner. Dans les cas où cela n’est pas possible, l’étiquette d’exécuteur `ubuntu-latest` est utilisée comme valeur par défaut. Vous pouvez utiliser un mot clé spécial avec la méthode `runner` pour contrôler cette valeur par défaut. Par exemple, le transformateur personnalisé suivant indique GitHub Actions Importer d’utiliser `macos-latest` comme exécuteur par défaut au lieu de `ubuntu-latest`.\n\n```ruby copy\nrunner :default, \"macos-latest\"\n```\n\n## Création de transformateurs personnalisés pour les variables d’environnement\n\nVous pouvez personnaliser la correspondance entre les variables d’environnement dans vos pipelines CI/CD sources et leurs valeurs dans GitHub Actions.\n\nGitHub Actions Importer utilise des transformateurs personnalisés définis à l’aide d’une DSL basée sur Ruby. Pour créer des transformateurs personnalisés pour les variables d’environnement :\n\n* Le fichier de transformateur personnalisé doit avoir au moins une méthode `env`.\n* La méthode `env` accepte deux paramètres. Le premier paramètre est le nom de la variable d’environnement dans le pipeline d’origine, et le deuxième paramètre est la valeur mise à jour de la variable d’environnement pour GitHub Actions. Pour plus d’informations sur les variables d’environnement GitHub Actions , consultez [Stocker des informations dans des variables](/fr/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables).\n\n### Exemples de transformateurs personnalisés pour les variables d’environnement\n\nIl existe plusieurs façons de configurer des transformateurs personnalisés pour mapper vos variables d’environnement.\n\n* L’exemple suivant définit la valeur de toutes les variables d’environnement existantes nommées `OCTO`, sur `CAT`, lors de la transformation d’un pipeline.\n\n  ```ruby copy\n  env \"OCTO\", \"CAT\"\n  ```\n\n  Vous pouvez également supprimer toutes les instances d’une variable d’environnement spécifique afin qu’elles ne soient pas transformées en GitHub Actions flux de travail. L’exemple suivant supprime toutes les variables d’environnement portant le nom `MONA_LISA`.\n\n  ```ruby copy\n  env \"MONA_LISA\", nil\n  ```\n\n* Vous pouvez également mapper vos variables d’environnement existantes aux secrets. Par exemple, la méthode `env` suivante mappe une variable d’environnement nommée `MONALISA` à un secret nommé `OCTOCAT`.\n\n  ```ruby copy\n  env \"MONALISA\", secret(\"OCTOCAT\")\n  ```\n\n  Cette opération configure une référence à un secret nommé `OCTOCAT` dans le workflow transformé. Pour que le secret fonctionne, vous devez créer le secret dans votre dépôt GitHub. Pour plus d’informations, consultez « [Utilisation de secrets dans GitHub Actions](/fr/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository) ».\n\n* Vous pouvez également utiliser des expressions régulières pour mettre à jour les valeurs de plusieurs variables d’environnement à la fois. Par exemple, le transformateur personnalisé suivant supprime toutes les variables d’environnement du workflow converti :\n\n  ```ruby copy\n  env /.*/, nil\n  ```\n\n  L’exemple suivant utilise un groupe de correspondances d’expression régulière pour transformer les valeurs des variables d’environnement en secrets générés dynamiquement.\n\n  ```ruby copy\n  env /^(.+)_SSH_KEY/, secret(\"%s_SSH_KEY)\n  ```\n\n  > \\[!NOTE]\n  > L’ordre dans lequel les méthodes `env` sont définies est important lors de l’utilisation d’expressions régulières. Le premier transformateur `env` qui correspond à un nom de variable d’environnement est prioritaire sur les méthodes `env` suivantes. Vous devez d’abord définir vos transformateurs de variables d’environnement les plus spécifiques.\n\n## Mentions légales\n\nCertaines parties ont été adaptées à partir de <https://github.com/github/gh-actions-importer/> sous la licence MIT :\n\n```text\nMIT License\n\nCopyright (c) 2022 GitHub\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```"}