ChatGPT đŸ€– Ă©cris-moi un github action

ChatGPT đŸ€– Ă©cris-moi un github action

Créer un prototype rapide et facile

Mar 7, 2023·

7 min read

Hello cher lecteur, ravi de vous retrouver, je ne peux démarrer l'année sans vous parlez de ChatGPT, phénomÚne de mode ou véritable révolution ? En-tout-cas, j'ai une recommandation à vous faire.

đŸƒđŸŸâ€â™€ïžAller crĂ©e votre compte si vous ne l'avez pas encore fait.

Préparer votre premiÚre question :

Comme tout programme informatique chatGPT Ă  besoin d'ĂȘtre initialisĂ© ou configurĂ© pour ĂȘtre performant dans le domaine choisie. Votre premiĂšre question a pour rĂŽle de le prĂ©parer, voici comment bien Ă©crire votre premiĂšre question.

1⃣ Choisir le thÚme

Dans notre cas, nous allons lui demander de construire un github action, ce qui limite déjà nos possibilités de réponse.

2⃣ Définir les tùches

Maintenant, qu'a un domaine d'application, nous allons expliquer nos besoins à chatGPT en précisant les tùches que notre github action devras exécuter, il est important.

  • De vous exprimer en une seule langue (français ou anglais ou autre)

  • D'utiliser des mots simples

  • De dĂ©tailler chacune des tĂąches

  • D'Ă©viter les jargons

Voici ma premiĂšre question :

Je voudrais un github action pour contrĂŽler le statut http de mes sites et voir s'ils sont au code 200 sinon ouvrir un issues

đŸ€– PremiĂšre rĂ©ponse de chatGPT

Bien sûr, voici un exemple de fichier YAML pour une action GitHub qui effectue une vérification de statut HTTP sur une liste de sites web, crée une issue pour ceux qui ont une erreur de statut, et commente sur l'issue en cas de changement de statut :

name: Check Website Status

on:
  schedule:
    - cron: '0 * * * *'  # VĂ©rifie toutes les heures

jobs:
  check_status:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install Dependencies
        run: npm install

      - name: Check status
        run: node checkStatus.js

      - name: Create issue
        if: steps.check_status.outputs.failed_sites
        uses: peter-evans/create-issue-from-file@v2
        with:
          title: Website status check failed
          content-filepath: ./issue-body.md
          labels: website, status check

Ce workflow utilise le planificateur cron pour vérifier l'état des sites web toutes les heures. Il utilise également l'action peter-evans/create-issue-from-file pour créer une issue si un site a une erreur de statut.

Vous devrez également créer un fichier checkStatus.js qui contient la logique de vérification des statuts de site. Voici un exemple de fichier checkStatus.js :

const https = require('https');

const sites = [
  'https://example.com',
  'https://example.org',
  'https://example.net'
];

let failedSites = [];

sites.forEach(site => {
  https.get(site, (res) => {
    if (res.statusCode !== 200) {
      failedSites.push(site);
      console.error(`Site ${site} failed with status code ${res.statusCode}`);
    }
  }).on('error', (e) => {
    failedSites.push(site);
    console.error(`Site ${site} failed with error: ${e.message}`);
  });
});

if (failedSites.length > 0) {
  console.log(`The following sites failed: ${failedSites.join(', ')}`);
  const output = {
    failed_sites: failedSites.join('\n')
  };
  console.log(JSON.stringify(output));
} else {
  console.log('All sites passed');
}

Ce fichier vĂ©rifie les statuts de site en utilisant le module Node.js https. Les sites Ă  vĂ©rifier sont stockĂ©s dans un tableau sites. Si un site a une erreur de statut, il est ajoutĂ© Ă  un tableau failedSites. À la fin de la vĂ©rification, si des sites ont Ă©chouĂ©, la sortie de l'action est configurĂ©e pour inclure ces sites.

Vous devrez également créer un fichier issue-body.md qui contient le contenu de l'issue à créer. Voici un exemple de fichier issue-body.md :

## Sites with failed status check

The following sites failed the status check:

{{ failed_sites }}

Ce fichier est utilisé par l'action peter-evans/create-issue-from-file pour créer le contenu de l'issue. Le texte {{ failed_sites }} est remplacé par la liste des sites qui ont échoué la vérification de statut.

Conversation avec chatGPT

Et voilĂ  🎉, un bon dĂ©but pour notre prototype.

🚹Mais attention pour continuer le travail une comprĂ©hension minimum du fonctionnement des github actions est nĂ©cessaire pour vĂ©rifier, dĂ©crypter et amĂ©liorer cette rĂ©ponse. Si votre niveau de comprĂ©hension de github action est de zĂ©ro, je vous recommande de commencer par l'apprendre avec chatGPT.

Refactoré le code ou améliorer les réponses

AprÚs une analyse minutieuse du code, je voudrais maintenant apporter une amélioration. Comment faire ? En continuant la conversation avec chatGPT tout en demander les modifications à apporter. Prenez garde à ne demander qu'une amélioration à la fois.

DeuxiĂšme question :

Dans le fichier checkStatus.js peut tu remplacer le variable sites par les données venant d'un fichier site.csv qui dans le dossier data

đŸ€– RĂ©ponse :

Oui, bien sûr. Voici comment vous pouvez modifier le fichier checkStatus.js pour utiliser les données d'un fichier sites.csv situé dans le dossier data :

const https = require('https');
const fs = require('fs');
const path = require('path');
const csv = require('csv-parser');

const sites = [];

fs.createReadStream(path.join(__dirname, 'data', 'sites.csv'))
  .pipe(csv())
  .on('data', (row) => {
    sites.push(row.url);
  })
  .on('end', () => {
    console.log(`Loaded ${sites.length} sites from sites.csv`);
    checkSites(sites);
  });

function checkSites(sites) {
  let failedSites = [];

  sites.forEach(site => {
    https.get(site, (res) => {
      if (res.statusCode !== 200) {
        failedSites.push(site);
        console.error(`Site ${site} failed with status code ${res.statusCode}`);
      }
    }).on('error', (e) => {
      failedSites.push(site);
      console.error(`Site ${site} failed with error: ${e.message}`);
    });
  });

  if (failedSites.length > 0) {
    console.log(`The following sites failed: ${failedSites.join(', ')}`);
    const output = {
      failed_sites: failedSites.join('\n')
    };
    console.log(JSON.stringify(output));
  } else {
    console.log('All sites passed');
  }
}

J'ai ajouté les modules fs, path et csv-parser pour lire le fichier CSV et ajouter chaque URL de site au tableau sites. Le fichier CSV doit avoir une colonne nommée url pour que cela fonctionne. J'ai également extrait la logique de vérification des sites dans une fonction séparée checkSites pour pouvoir l'appeler à partir du gestionnaire d'événements on('end') du lecteur CSV.

Notez également que j'ai utilisé __dirname pour obtenir le chemin absolu du dossier data, ce qui est important pour éviter les problÚmes de résolution de chemin relatifs. Si le fichier CSV est dans un sous-dossier de data, vous pouvez simplement ajouter le chemin relatif au chemin absolu de data.

Tester le prototype

Avant d'aller plus loin, il est temps de tester notre github action, encore quelques questions de plus à chatGPT pour préparer notre repo github et le déployer.

TroisiĂšme question :

Merci, peux-tu me donner la structure des fichiers et dossier à créer dans mon repo github

đŸ€– RĂ©ponse :

Bien sûr, voici la structure de fichiers et de dossiers que vous pouvez utiliser dans votre dépÎt GitHub pour implémenter la vérification de l'état HTTP des sites Web :

.github
└── workflows
    └── check-status.yml
checkStatus.js
package.json
README.md
data
└── sites.csv
  • Le dossier .github contient des fichiers de configuration pour les workflows GitHub Actions. Vous pouvez le crĂ©er Ă  la racine de votre dĂ©pĂŽt.

  • Le dossier workflows contient le fichier de workflow check-status.yml. Vous pouvez le crĂ©er Ă  l'intĂ©rieur du dossier .github.

  • Le fichier checkStatus.js contient le code pour vĂ©rifier l'Ă©tat HTTP des sites Web. Vous pouvez le crĂ©er Ă  la racine de votre dĂ©pĂŽt.

  • Le fichier package.json contient les dĂ©pendances du projet. Vous pouvez le crĂ©er Ă  la racine de votre dĂ©pĂŽt et y ajouter le module csv-parser en tant que dĂ©pendance.

  • Le fichier README.md contient des informations sur le projet. Vous pouvez le crĂ©er Ă  la racine de votre dĂ©pĂŽt.

  • Le dossier data contient le fichier CSV sites.csv qui contient les URL des sites Web Ă  vĂ©rifier. Vous pouvez le crĂ©er Ă  la racine de votre dĂ©pĂŽt.

Assurez-vous de remplacer les URL de sites dans sites.csv par les URL des sites que vous souhaitez vérifier. Vous pouvez également personnaliser le message d'erreur ou d'alerte qui est généré en fonction de vos besoins.

QuatriĂšme question :

Super pour finir, donne-moi le fichier README.MD et package.json ajoute comme auteur mon nom.

đŸ€– RĂ©ponse :

Voici le contenu du fichier README.md :

# VĂ©rification de l'Ă©tat HTTP des sites Web

Ce projet est un exemple de vérification de l'état HTTP des sites Web à l'aide de Node.js et GitHub Actions.

## Utilisation

1. Clonez le dépÎt sur votre ordinateur
2. Ajoutez les URL des sites Web à vérifier dans le fichier `data/sites.csv`
3. Exécutez `npm install` pour installer les dépendances
4. Exécutez `npm start` pour vérifier l'état HTTP des sites Web

## Auteur

Votre nom

Et voici le contenu du fichier package.json avec votre nom en tant qu'auteur :

{
  "name": "check-http-status",
  "version": "1.0.0",
  "description": "VĂ©rification de l'Ă©tat HTTP des sites Web Ă  l'aide de Node.js et GitHub Actions",
  "main": "checkStatus.js",
  "scripts": {
    "start": "node checkStatus.js"
  },
  "keywords": [
    "http",
    "status",
    "check",
    "node",
    "github",
    "actions"
  ],
  "author": "Votre nom",
  "license": "MIT",
  "dependencies": {
    "csv-parser": "^3.0.0"
  }
}

DĂ©ployer le code chez github

À ce stade reste plus cas copier coller le code gĂ©nĂ©rĂ© par chatGPT dans un dossier tout en respectant la structure des fichiers et dossiers ci-dessus.

https://github.com/dofbi/gh-actions-check-http-status

💡Il serait intĂ©ressant de pouvoir installer un pluging dans chatGPT pour nous permettre d'ajouter des fonctionnalitĂ©s, comme lancer les commandes git commit , git push depuis chatGPT.

RĂ©sultats Test

Check Website Status

Le github action, c'est bien exĂ©cuter 🎉 sans aucune erreur, pour un dĂ©but ce n'est pas mal pour une intelligence artificielle surtout sur un domaine tel que les github actions.

À vous de jouer, n'hĂ©sitez pas Ă  commenter et Ă  partager vos github actions ici.

Did you find this article valuable?

Support Mamadou Diagne by becoming a sponsor. Any amount is appreciated!