DĂ©velopper une GitHub Action peut ĂȘtre une expĂ©rience enrichissante pour plonger dans le monde de lâautomatisation. Dans cet article, je vous emmĂšne dans les coulisses de la crĂ©ation de "Is First Commit", une petite mais utile GitHub Action qui vĂ©rifie si le commit actuel est le tout premier dâun dĂ©pĂŽt.
Mise en place du projet
Chaque GitHub Action commence par un fichier fondamental : package.json. Ce fichier dĂ©finit les mĂ©tadonnĂ©es de lâaction, ses dĂ©pendances et ses scripts utiles.
Pour lâaction Is First Commit, voici un aperçu rapide :
- Nom :
first-commit-action - Description : Vérifie si le commit actuel est le tout premier du dépÎt.
- Script principal :
index.js - Dépendances :
@actions/core,@actions/githubetaxiosfournissent les bases pour interagir avec GitHub et effectuer les requĂȘtes API.
{
"name": "first-commit-action",
"version": "1.0.0",
"description": "Check if the current commit is the first ever commit of the project",
"main": "index.js",
"keywords": ["github", "action"],
"author": "Dennis de Best",
"license": "ISC",
"scripts": {
"lint": "eslint .",
"prepare": "ncc build index.js -o dist --source-map --license licenses.txt",
"test": "jest",
"all": "npm run lint && npm run prepare && npm run test"
},
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/github": "^5.1.1",
"axios": "^1.5.0"
}
}
DĂ©finir les mĂ©tadonnĂ©es de lâaction
Le fichier action.yaml agit comme le plan de votre GitHub Action. Il fournit des informations essentielles telles que son nom, sa description, ses entrĂ©es, ses sorties et sa configuration dâexĂ©cution.
Voici Ă quoi cela ressemble pour cette action :
name: 'Is First Commit'
description: 'Check if the current commit is the first-ever commit of the project'
inputs:
github-token:
description: 'GitHub token (optional)'
required: false
outputs:
isFirstCommit:
description: 'A boolean indicating if the current commit is the first one'
runs:
using: 'node16'
main: 'dist/index.js'
Cette configuration indique Ă GitHub comment exĂ©cuter lâaction et quoi attendre en termes dâentrĂ©es et de sorties. Le github-token optionnel est utilisĂ© pour effectuer des appels API authentifiĂ©s lorsque nĂ©cessaire.
Créer la logique
La vraie magie se trouve dans index.js. Câest ici que nous vĂ©rifions si le commit actuel est bien le premier du dĂ©pĂŽt.
Le script rĂ©cupĂšre la liste des commits du dĂ©pĂŽt via lâAPI GitHub et vĂ©rifie si un seul commit existe. Si câest le cas, câest le commit initial.
Voici une version simplifiée de la logique :
const core = require('@actions/core');
const github = require('@actions/github');
const axios = require('axios');
async function isFirstCommit() {
try {
const { owner, repo } = github.context.repo;
const token = core.getInput('github-token');
const headers = { 'Accept': 'application/vnd.github.v3+json' };
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
const url = `https://api.github.com/repos/${owner}/${repo}/commits`;
const response = await axios.get(url, {
headers,
params: { per_page: 2 }
});
const commits = response.data;
const isFirst = commits.length === 1;
core.setOutput('isFirstCommit', isFirst ? 'true' : 'false');
} catch (error) {
core.setFailed(error.message);
}
}
isFirstCommit();
Cette logique simple garantit que lâaction reste efficace et fiable, tout en minimisant les appels Ă lâAPI.
Pour conclure
CrĂ©er cette GitHub Action a Ă©tĂ© Ă la fois amusant et instructif. Cela montre comment de petites automatisations ciblĂ©es peuvent amĂ©liorer vos workflows CI/CD. En dĂ©tectant le premier commit dâun dĂ©pĂŽt, vous pouvez dĂ©clencher conditionnellement des tĂąches dâinitialisation, configurer des ressources ou mĂȘme cĂ©lĂ©brer la naissance dâun projet automatiquement đ.
Si vous dĂ©butez avec GitHub Actions, cet exemple constitue un excellent point de dĂ©part pour explorer comment lâautomatisation peut simplifier votre processus de dĂ©veloppement.
Happy coding !
Dennis de Best
Commentaires