ChatGPT đ€ Ă©cris-moi un github action
Créer un prototype rapide et facile
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 workflowcheck-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 modulecsv-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 CSVsites.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
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.