05 Copilot CLI

Scripts, explications et fichiers avec CLI

Cette leçon contient des faits datés. Dates et sources

5.6 Génération de scripts shell

Définition

Copilot CLI peut t’aider à écrire des scripts shell.

C’est utile pour automatiser :

  • nettoyage de fichiers ;
  • recherche dans des logs ;
  • backup ;
  • compression ;
  • analyse de dossiers ;
  • tâches Git ;
  • tâches Docker ;
  • tâches Kubernetes ;
  • tâches CI/CD.

Exemple simple : archiver des logs

Prompt :

Texte
Create a bash script that archives .log files older than 30 days into a tar.gz file.
Do not delete the original files.

Script possible :

Bash
#!/usr/bin/env bash
set -euo pipefail

ARCHIVE_NAME="old-logs-$(date +%Y%m%d).tar.gz"

find . -type f -name "*.log" -mtime +30 -print0 \
  | tar --null -czf "$ARCHIVE_NAME" --files-from=-

echo "Archive created: $ARCHIVE_NAME"

Pourquoi ce script est plutôt correct ?

Il utilise :

  • set -euo pipefail pour rendre le script plus strict ;
  • find pour chercher les fichiers ;
  • -print0 pour gérer les espaces dans les noms ;
  • tar --null pour lire les chemins correctement ;
  • pas de suppression automatique.

Exemple plus dangereux

Prompt trop vague :

Texte
Clean old logs.

Copilot pourrait proposer :

Bash
find . -name "*.log" -mtime +30 -delete

Ce n’est pas forcément mauvais, mais c’est destructif.

Meilleur prompt :

Texte
Create a safe bash script to find .log files older than 30 days.
First print the files that would be affected.
Do not delete anything unless a --delete flag is explicitly provided.

Script plus responsable :

Bash
#!/usr/bin/env bash
set -euo pipefail

DELETE=false

if [[ "${1:-}" == "--delete" ]]; then
  DELETE=true
fi

if [[ "$DELETE" == true ]]; then
  find . -type f -name "*.log" -mtime +30 -print -delete
else
  find . -type f -name "*.log" -mtime +30 -print
  echo "Dry run only. Re-run with --delete to remove these files."
fi

Exemple DevOps : Docker

Prompt :

Texte
Create a shell script that builds a Docker image and tags it with the current Git commit SHA.

Script possible :

Bash
#!/usr/bin/env bash
set -euo pipefail

IMAGE_NAME="my-app"
GIT_SHA="$(git rev-parse --short HEAD)"

docker build -t "${IMAGE_NAME}:${GIT_SHA}" .
echo "Built image ${IMAGE_NAME}:${GIT_SHA}"

Exemple Kubernetes

Prompt :

Texte
Create a command to show pods using the most CPU in the current namespace.

Commande possible :

Bash
kubectl top pods --sort-by=cpu

Attention :

  • nécessite Metrics Server ;
  • dépend du contexte Kubernetes courant ;
  • peut échouer selon les permissions.

Bon prompt pour générer un script

Texte
Create a bash script for [TASK].

Requirements:
- use strict mode
- include comments
- avoid destructive actions by default
- support dry-run mode
- validate required commands exist
- explain how to run it

5.7 Explication de commandes

Définition

Copilot CLI peut expliquer une commande terminal existante.

C’est très utile pour :

  • commandes longues ;
  • options obscures ;
  • scripts hérités ;
  • commandes find, awk, sed, tar, xargs ;
  • commandes Docker/Kubernetes/Terraform ;
  • commandes potentiellement dangereuses.

Exemple find

Commande :

Bash
find . -type f -name "*.log" -mtime +30 -delete

Prompt :

Texte
Explain this command and identify risks:
find . -type f -name "*.log" -mtime +30 -delete

Explication attendue :

  • cherche les fichiers dans le dossier courant ;
  • filtre les fichiers réguliers ;
  • garde ceux qui finissent par .log ;
  • garde ceux modifiés il y a plus de 30 jours ;
  • les supprime.

Risque :

Texte
-delete supprime les fichiers définitivement.

Exemple tar

Commande :

Bash
tar -czf archive.tar.gz ./src

Explication :

  • tar crée une archive ;
  • -c crée une archive ;
  • -z compresse avec gzip ;
  • -f indique le nom du fichier archive ;
  • ./src est le dossier archivé.

Exemple kubectl

Commande :

Bash
kubectl delete pods --all -n production

Copilot doit signaler que :

Cette commande supprime tous les pods du namespace production.

Même si Kubernetes peut les recréer via un Deployment, c’est une commande à haut impact.

Exemple Terraform

Commande :

Bash
terraform destroy -auto-approve

Explication responsable :

Cette commande détruit l’infrastructure gérée par Terraform sans confirmation interactive.

Risque :

Très dangereux en production.

Très bon prompt d’explication

Texte
Explain this command step by step.
Identify destructive operations, security risks, and safer alternatives.

À retenir pour l’examen

Copilot CLI est très adapté pour :

Texte
Expliquer une commande terminal inconnue ou risquée.

Mais il ne faut pas :

Texte
Exécuter une commande générée ou expliquée sans validation.

5.8 Gestion de fichiers avec Copilot CLI

Définition

Copilot CLI peut aider à travailler avec les fichiers d’un projet depuis le terminal.

Selon les permissions et le dossier trusted, il peut potentiellement :

  • lire des fichiers ;
  • analyser le contenu ;
  • proposer des modifications ;
  • créer des fichiers ;
  • modifier des fichiers ;
  • générer des scripts ;
  • exécuter des commandes.

GitHub précise que pendant une session Copilot CLI, l’outil peut tenter de lire, modifier et exécuter des fichiers dans le dossier courant et ses sous-dossiers si tu as confirmé le trust. (docs.github.com)

Exemple : analyser un projet

Prompt :

Texte
Inspect this project and summarize its structure.
Do not modify any files.

Réponse possible :

  • src/ contains application source code
  • tests/ contains unit tests
  • package.json defines scripts and dependencies
  • Dockerfile builds the runtime image

Exemple : créer un script

Prompt :

Texte
Create a scripts/backup-logs.sh script.
It should archive logs older than 7 days.
It must not delete files by default.

Copilot peut créer :

Texte
scripts/backup-logs.sh

avec le contenu correspondant.

Exemple : modifier un fichier

Prompt :

Texte
Update package.json to add a test:coverage script using npm test -- --coverage.
Show me the diff before applying.

Bonne pratique :

Toujours demander à voir le diff avant d’accepter.

Exemple : chercher des fichiers

Prompt :

Texte
Find all files that reference the deprecated function getUserByEmail.

Commande possible :

Bash
grep -R "getUserByEmail" .

Ou plus propre si ripgrep est installé :

Bash
rg "getUserByEmail"

Exemple : générer un fichier README

Prompt :

Texte
Generate a README section explaining how to run this project locally.
Use package.json and Dockerfile as context.

Copilot peut proposer un bloc Markdown.

Bonnes pratiques de gestion de fichiers

Toujours :

  • Travailler dans un repo Git propre.
  • Vérifier git status avant modification.
  • Demander un plan avant gros changement.
  • Demander le diff avant d’accepter.
  • Exécuter les tests.
  • Relire les fichiers créés.
  • Éviter les commandes destructives.
  • Ne pas donner de secrets dans le prompt.

Workflow sûr

Avant une modification :

Bash
git status

Après une modification :

Bash
git diff

Puis :

Bash
npm test

ou :

Bash
pytest

ou :

Bash
mvn test

selon le projet.

À retenir pour le GH-300

  • Un bon prompt de script demande un résultat sûr par défaut : rien de supprimé, une simulation, une explication.
  • Copilot CLI explique une commande inconnue ou risquée : on comprend avant d’exécuter.
  • Pour modifier des fichiers : dépôt propre, périmètre limité, diff demandé avant d’appliquer, tests ensuite.
  • Pour comprendre un projet sans risque, on demande une analyse et on précise de ne rien modifier.

Faits datés de cette leçon

Ces points changent avec le produit. Chacun indique quand il a été vérifié et où le contrôler.

D2 · Utiliser les fonctionnalités de GitHub Copilot · 25–30 %