{"meta":{"title":"Création d’extensions CLI GitHub","intro":"Découvrez comment partager de nouvelles GitHub CLI commandes avec d’autres utilisateurs en créant des extensions personnalisées pour GitHub CLI.","product":"GitHub CLI","breadcrumbs":[{"href":"/fr/enterprise-server@3.17/github-cli","title":"GitHub CLI"},{"href":"/fr/enterprise-server@3.17/github-cli/github-cli","title":"Interface CLI de GitHub"},{"href":"/fr/enterprise-server@3.17/github-cli/github-cli/creating-github-cli-extensions","title":"Création d’extensions CLI GitHub"}],"documentType":"article"},"body":"# Création d’extensions CLI GitHub\n\nDécouvrez comment partager de nouvelles GitHub CLI commandes avec d’autres utilisateurs en créant des extensions personnalisées pour GitHub CLI.\n\n## À propos des GitHub CLI extensions\n\nLes extensions GitHub CLI sont des commandes GitHub CLI personnalisées que tout le monde peut créer et utiliser. Pour plus d’informations sur l’utilisation des GitHub CLI extensions, consultez [Utilisation des extensions CLI GitHub](/fr/enterprise-server@3.17/github-cli/github-cli/using-github-cli-extensions).\n\nVous avez besoin d’un référentiel pour chaque extension que vous créez. Le nom du référentiel doit commencer par `gh-`. Le reste du nom du référentiel est le nom de l’extension. Le référentiel doit avoir un fichier exécutable à sa racine portant le même nom que le référentiel ou un ensemble d’exécutables binaires précompilés attachés à une mise en production.\n\n> \\[!NOTE]\n> Lorsque vous utilisez un script exécutable, nous vous recommandons d’utiliser un script bash, car bash est un interpréteur largement disponible. Vous pouvez utiliser des scripts non bash, mais l’utilisateur doit avoir installé l’interpréteur nécessaire pour utiliser l’extension. Si vous préférez ne pas compter sur des interpréteurs qui doivent être installés, envisagez une extension précompilée.\n\n## Création d’une extension interprétée avec `gh extension create`\n\n> \\[!NOTE]\n> L’exécution de `gh extension create` sans argument démarre un assistant interactif.\n\nVous pouvez utiliser la commande `gh extension create` pour créer un project pour votre extension, y compris un script bash qui contient du code de démarrage.\n\n1. Configurez une nouvelle extension à l’aide de la sous-commande `gh extension create`. Remplacez `EXTENSION-NAME` par le nom de votre extension.\n\n   ```shell\n   gh extension create EXTENSION-NAME\n   ```\n\n2. Suivez les instructions imprimées pour finaliser et éventuellement publier votre extension.\n\n## Création d’une extension précompilée dans Go avec `gh extension create`\n\nVous pouvez utiliser l’argument `--precompiled=go` pour créer un projet basé sur Go pour votre extension, comme l'échafaudage Go, l'échafaudage de flux de travail et le code de démarrage.\n\n1. Configurez une nouvelle extension à l’aide de la sous-commande `gh extension create`. Remplacez `EXTENSION-NAME` par le nom de votre extension et spécifiez `--precompiled=go`.\n\n   ```shell\n   gh extension create --precompiled=go EXTENSION-NAME\n   ```\n\n2. Suivez les instructions imprimées pour finaliser et éventuellement publier votre extension.\n\n## Création d’une extension précompilée non Go avec `gh extension create`\n\nVous pouvez utiliser l’argument `--precompiled=other` pour créer un projet pour votre extension précompilée non Go, incluant l'échafaudage de flux de travail.\n\n1. Configurez une nouvelle extension à l’aide de la sous-commande `gh extension create`. Remplacez `EXTENSION-NAME` par le nom de votre extension et spécifiez `--precompiled=other`.\n\n   ```shell\n   gh extension create --precompiled=other EXTENSION-NAME\n   ```\n\n2. Ajoutez du code initial pour votre extension dans le langage compilé de votre choix.\n\n3. Remplissez `script/build.sh` avec du code pour générer votre extension pour vous assurer que votre extension peut être générée automatiquement.\n\n4. Suivez les instructions imprimées pour finaliser et éventuellement publier votre extension.\n\n## Création manuelle d’une extension interprétée\n\n1. Créez un répertoire local appelé `gh-EXTENSION-NAME` pour votre extension. Remplacez `EXTENSION-NAME` par le nom de votre extension. Par exemple : `gh-whoami`.\n\n2. Dans le répertoire que vous avez créé, ajoutez un fichier exécutable portant le même nom que le répertoire.\n\n   > \\[!NOTE]\n   > Assurez-vous que votre fichier est exécutable. Sur Unix, vous pouvez exécuter `chmod +x file_name` dans la ligne de commande pour rendre `file_name` exécutable. Sur Windows, vous pouvez exécuter `git init -b main`, `git add file_name`, puis `git update-index --chmod=+x file_name`.\n\n3. Écrivez votre script dans le fichier exécutable. Par exemple :\n\n   ```bash\n   #!/usr/bin/env bash\n   set -e\n   exec gh api user --jq '\"You are @\\(.login) (\\(.name)).\"'\n   ```\n\n4. À partir de votre répertoire, installez l’extension en tant qu’extension locale.\n\n   ```shell\n   gh extension install .\n   ```\n\n5. Vérifiez que votre extension fonctionne. Remplacez `EXTENSION-NAME` par le nom de votre extension. Par exemple : `whoami`.\n\n   ```shell\n   gh EXTENSION-NAME\n   ```\n\n6. À partir de votre répertoire, créez un référentiel pour publier votre extension. Remplacez `EXTENSION-NAME` par le nom de votre extension.\n\n   ```shell\n   git init -b main\n   git add . && git commit -m \"initial commit\"\n   gh repo create gh-EXTENSION-NAME --source=. --public --push\n   ```\n\n7. Si vous le souhaitez, pour aider d’autres utilisateurs à découvrir votre extension, ajoutez la rubrique de référentiel `gh-extension`. Cela permet d’afficher l’extension sur la page de rubrique [`gh-extension`](https://github.com/topics/gh-extension). Pour plus d’informations sur l’ajout d’une rubrique de référentiel, consultez [Classification de votre dépôt avec des rubriques](/fr/enterprise-server@3.17/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics).\n\n## Conseils pour écrire des extensions interprétées GitHub CLI\n\n### Gestion des arguments et des indicateurs\n\nTous les arguments de ligne de commande qui suivent une commande `gh my-extension-name` sont passés au script d’extension. Dans un script bash, vous pouvez référencer des arguments avec `$1`, `$2`, etc. Vous pouvez utiliser des arguments pour prendre des entrées utilisateur ou modifier le comportement du script.\n\nPar exemple, ce script gère plusieurs indicateurs. Lorsque le script est appelé avec l’indicateur `-h` ou `--help`, le script imprime le texte d’aide au lieu de poursuivre l’exécution. Lorsque le script est appelé avec l’indicateur `--name`, le script définit la valeur suivante après l’indicateur sur `name_arg`. Lorsque le script est appelé avec l’indicateur `--verbose`, le script imprime un message d’accueil différent.\n\n```bash\n#!/usr/bin/env bash\nset -e\n\nverbose=\"\"\nname_arg=\"\"\nwhile [ $# -gt 0 ]; do\n  case \"$1\" in\n  --verbose)\n    verbose=1\n    ;;\n  --name)\n    name_arg=\"$2\"\n    shift\n    ;;\n  -h|--help)\n    echo \"Add help text here.\"\n    exit 0\n    ;;\n  esac\n  shift\ndone\n\nif [ -z \"$name_arg\" ]\nthen\n  echo \"You haven't told us your name.\"\nelif [ -z \"$verbose\" ]\nthen\n  echo \"Hi $name_arg\"\nelse\n  echo \"Hello and welcome, $name_arg\"\nfi\n```\n\n### Appel de commandes de base en mode non interactif\n\nCertaines GitHub CLI commandes principales invitent l’utilisateur à entrer. Lors de l’écriture de scripts avec ces commandes, une demande de confirmation est souvent indésirable. Pour éviter toute invite, fournissez les informations nécessaires explicitement au moyen d’arguments.\n\nPar exemple, pour créer un problème par programmation, spécifiez le titre et le corps :\n\n```shell\ngh issue create --title \"My Title\" --body \"Issue description\"\n```\n\n### Extraction de données par programme\n\nDe nombreuses commandes de base prennent en charge l’indicateur `--json` pour extraire des données par programme. Par exemple, pour retourner un objet JSON répertoriant le nombre, le titre et l’état de fusion des demandes de tirage :\n\n```shell\ngh pr list --json number,title,mergeStateStatus\n```\n\nS’il n’existe pas de commande principale pour extraire des données spécifiques de GitHub, vous pouvez utiliser la commande [`gh api`](https://cli.github.com/manual/gh_api) pour access l’API GitHub. Par exemple, pour extraire des informations sur l’utilisateur actuel :\n\n```shell\ngh api user\n```\n\nToutes les commandes qui génèrent des données JSON ont également des options pour filtrer ces données dans quelque chose de plus immédiatement utilisable par des scripts. Par exemple, pour obtenir le nom de l’utilisateur actuel :\n\n```shell\ngh api user --jq '.name'\n```\n\nPour plus d’informations, consultez [`gh help formatting`](https://cli.github.com/manual/gh_help_formatting).\n\n## Création manuelle d’une extension précompilée\n\n1. Créez un répertoire local appelé `gh-EXTENSION-NAME` pour votre extension. Remplacez `EXTENSION-NAME` par le nom de votre extension. Par exemple : `gh-whoami`.\n\n2. Dans le répertoire que vous avez créé, ajoutez du code source. Par exemple :\n\n   ```golang\n   package main\n   import (\n     \"github.com/cli/go-gh\"\n     \"fmt\"\n   )\n\n   func main() {\n     args := []string{\"api\", \"user\", \"--jq\", `\"You are @\\(.login) (\\(.name))\"` }\n     stdOut, _, err := gh.Exec(args...)\n     if err != nil {\n       fmt.Println(err)\n       return\n     }\n     fmt.Println(stdOut.String())\n   }\n   ```\n\n3. À partir de votre répertoire, installez l’extension en tant qu’extension locale.\n\n   ```shell\n   gh extension install .\n   ```\n\n4. Générez votre code. Par exemple, avec Go, en remplaçant `YOUR-USERNAME` par votre nom d’utilisateur GitHub :\n\n   ```shell\n   go mod init github.com/YOUR-USERNAME/gh-whoami\n   go mod tidy\n   go build\n   ```\n\n5. Vérifiez que votre extension fonctionne. Remplacez `EXTENSION-NAME` par le nom de votre extension. Par exemple : `whoami`.\n\n   ```shell\n   gh EXTENSION-NAME\n   ```\n\n6. À partir de votre répertoire, créez un référentiel pour publier votre extension. Remplacez `EXTENSION-NAME` par le nom de votre extension.\n\n   > \\[!NOTE]\n   > Veillez à ne pas valider le binaire produit par votre étape de compilation dans le contrôle de version.\n\n   ```shell\n    git init -b main\n   echo \"gh-EXTENSION-NAME\" >> .gitignore\n   git add main.go go.* .gitignore && git commit -m 'Initial commit'\n   gh repo create \"gh-EXTENSION-NAME\"\n   ```\n\n7. Créez une version pour partager votre extension précompilée avec d’autres personnes. Compilez pour chaque plateforme que vous souhaitez prendre en charge, en attachant chaque fichier binaire à une version en tant que ressource. Les exécutables binaires attachés aux versions doivent suivre une convention d’affectation de noms et avoir un suffixe OS-ARCHITECTURE\\[EXTENSION].\n\n   Par exemple, une extension nommée `whoami` compilée pour Windows 64 bits aurait le nom `gh-whoami-windows-amd64.exe`, tandis que la même extension compilée pour Linux 32 bits aurait le nom `gh-whoami-linux-386`. Pour afficher une liste exhaustive des combinaisons de système d’exploitation et d’architecture reconnues par `gh`, consultez [ ce code source](https://github.com/cli/cli/blob/14f704fd0da58cc01413ee4ba16f13f27e33d15e/pkg/cmd/extension/manager.go#L696).\n\n   > \\[!NOTE]\n   > Pour que votre extension s’exécute correctement sur Windows, son fichier de ressources doit avoir une extension `.exe`. Aucune extension n’est nécessaire pour les autres systèmes d’exploitation.\n\n   Les versions peuvent être générées à partir de la ligne de commande. Par exemple :\n\n   ```shell\n   git tag v1.0.0\n   git push origin v1.0.0\n   GOOS=windows GOARCH=amd64 go build -o gh-EXTENSION-NAME-windows-amd64.exe\n   GOOS=linux GOARCH=amd64 go build -o gh-EXTENSION-NAME-linux-amd64\n   GOOS=darwin GOARCH=amd64 go build -o gh-EXTENSION-NAME-darwin-amd64\n   gh release create v1.0.0 ./*amd64*\n\n   ```\n\n8. Optionally, to help other users discover your extension, add the repository topic `gh-extension`. This will make the extension appear on the [`gh-extension` topic page](https://github.com/topics/gh-extension). For more information about how to add a repository topic, see [Classification de votre dépôt avec des rubriques](/fr/enterprise-server@3.17/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics).\n\n## Tips for writing precompiled GitHub CLI extensions\n\n### Automating releases\n\nConsider adding the [gh-extension-precompile](https://github.com/cli/gh-extension-precompile) action to a workflow in your project. This action will automatically produce cross-compiled Go binaries for your extension and supplies build scaffolding for non-Go precompiled extensions.\n\n### Using GitHub CLI features from Go-based extensions\n\nConsider using [go-gh](https://github.com/cli/go-gh), a Go library that exposes pieces of `gh` functionality for use in extensions.\n\n## Next steps\n\nTo see more examples of GitHub CLI extensions, look at [repositories with the `gh-extension` topic](https://github.com/topics/gh-extension)."}