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