2024 07 12 16 26 18 untitled document google docs

Quelques astuces pour un repo Github en mode Green IT

 

2024 07 12 16 26 18 untitled document google docs

IntroductionL’organisation Github d’une entreprise peut être comparée à l’état de votre maison qui reflète votre état intérieur, plus c’est propre mieux c’est !

Le nettoyage régulier de votre GitHub n’est pas seulement une question d’hygiène numérique, primordiale dans votre optique Green IT. C’est également essentiel pour une gestion efficace du projet, une collaboration sans friction et le maintien d’une haute performance. Sachant l’importance croissante de ces environnements pour les développeurs, il devient impératif d’adopter et de normaliser de bons comportements de gestion de vos repositories

Dans cet article, nous allons explorer les raisons pour lesquelles il est essentiel de procéder à un nettoyage des repo GitHub régulier avec quelques éléments de configurations, des commandes pour le cleanup local ainsi que des Github Actions applicables dans vos projets d’entreprise.

Bonnes pratiques de cleanup Github

Nettoyage des remote branches

Les branches inutilisées contiennent des modifications et des commits, ce qui contribue à la taille totale de la base de données, facteur important de votre impact environnemental. Lorsqu’une branche est supprimée et qu’elle n’est référencée nulle part ailleurs dans le repo (par exemple, s’il n’y a pas de tag pointant vers elle), Git pourra libérer l’espace utilisé par les modifications stockées dans la branche.

Si vous n’avez pas besoin de conserver votre code inutilisé, il est préférable de supprimer les branches qui le contiennent, pour les raisons suivantes:

  1. Elles utilisent de l’espace.
  2. Elles ralentissent les opérations de maintenance (comme les sauvegardes de dépôt).
  3. Des branches sont créées/supprimées assez souvent et si elles ne sont pas supprimées, la liste de branches deviendra suffisamment grande pour être illisible en peu de temps.
  4. Elles aggravent l’impact environnemental de votre projet

Suppression des branches fusionnées après PR:

Github propose une option dans les paramètres du repo pour supprimer automatiquement les branches qui viennent d’être fusionnées à la suite d’une Pull Request:

2024 setting branches general
2024 setting branches general

Supprimer les branches qui ne sont pas fusionnées après PR:

Dans certains de nos repos, de nombreuses PR sont ouvertes, mais toutes ne sont pas fusionnées, ce qui entraîne l’accumulation de branches abandonnées. Avec une organisation en croissance et l’adoption de GitOps, ce problème s’accentue.
Bien que les branches soient peu coûteuses d’un point de vue technique, elles compliquent la gestion pour les utilisateurs, rendant plus compliqué la lisibilité du repo avec de nombreuses branches à l’abandon.

Voici un exemple de Github Action qui peut palier à ce problème:

name: Delete unmerged branch

on:
  pull_request:
    types: [ closed ]

jobs:
  worker:
    if: ${{ github.event.pull_request.merged_at == '' }}
    runs-on: ubuntu-latest
    steps:
      - name: delete-unmerged-branch
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          script: |
            const { repo, owner } = context.repo;
            const ref = `heads/${context.payload.pull_request.head.ref}`;
            const deleteParams = { owner, repo, ref };

            console.log(`Deleting branch: "${ref}"`);
            try {
              github.rest.git.deleteRef(deleteParams);
            } catch(e) {
              console.log("Cannot delete branch; error:", e);
            }

Tout ce que fait la Github Action, c’est de vérifier si la PR en question a été fusionnée, et si ce n’est pas le cas, on essaie de supprimer la branche associée.
Pour utiliser cette Github Action vous devez générer un Personal Access Token qui aura le droit d’agir sur les branches du repo.

Nettoyage des artéfacts

GitHub Actions fournit des artéfacts qui sont créés lorsque vous avez besoin de stocker temporairement des données à utiliser dans vos tâches. Les artefacts consomme le quota d’espace de votre configuration Git

GitHub a ajouté une option de configuration et a également ouvert l’API pour la suppression des artefacts. Cela vous permettra de maintenir votre stockage sous la limite sur vos repo GitHub, de sorte que vous n’ayez pas à payer pour le stockage supplémentaire.

Configuration du délai de rétention des artéfacts:

Github propose une option dans les paramètres d’actions du repo pour supprimer automatiquement les artéfacts et log en fonction de leur durée de rétention.

actions settings · greennerds delete unmerged branches
Il est possible que dans vos workflows d’entreprise vous souhaitiez supprimer directement les artéfacts présents dans une Github Action à la fin de l’exécution de cette dernière.

Cela peut être utile si votre workflow stocke temporairement des artefacts qui ne sont plus nécessaires à la fin de l’exécution. Par exemple, parce qu’ils ont été téléchargés ou publiés comme une version par l’une des étapes. Supprimer ces artéfacts redondants à la fin de l’exécution permet d’économiser de l’espace de stockage et d’améliorer l’aspect Green IT, qui est limité pour les dépôts privés.

name: 'Final step: Artifacts cleanup'
on:
  workflow_run:
    branches: [main]
    workflows: [deployArtifacts]
    types:
      - completed
jobs:
  on-success:
    runs-on: ubuntu-latest
    name: Delete artifact
    if: github.event.workflow_run.head_branch == 'main' # feel free to take this out if you don't need it
    steps:
      - id: get-id
        run: | # grab the id of the artifact we just created
          echo "ARTIFACT_ID=$(gh api -H 'Accept: application/vnd.github+json'   ${{github.event.workflow_run.artifacts_url}} --jq .artifacts[].id)" >> $GITHUB_ENV
        env:
          GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN_DELETE_ARTIFACTS }}
      - run: |
          echo "artifact id is ${{ env.ARTIFACT_ID}}"
          echo "run url is ${{github.event.workflow_run.artifacts_url}}"
      - id: delete-artifact
        run: | # https://docs.github.com/en/rest/actions/artifacts?apiVersion=2022-11-28#delete-an-artifact
          gh api --method DELETE -H 'Accept: application/vnd.github+json' /repos/${{github.repository}}/actions/artifacts/${{env.ARTIFACT_ID}}
        env:
          GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN_DELETE_ARTIFACTS }}
  on-failure:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    steps:
      - run: echo 'The triggering workflow failed'

Pour utiliser cette Github Action vous devez générer un Personal Access Token qui aura le droit de supprimer des artéfacts.

Nettoyage de votre repo local

Si vous travaillez sur un repo Github depuis un moment, vous pouvez songer à nettoyer le repo pour gagner de l’espace disque et diminuer votre impact environnemental.  Voyons quelques commandes utiles à cet effet:

On peut commencer par vérifier la taille que prend le dossier .git du repo pour comparer le gain de disque que nous aurons fait à la fin.

du -sh .git

Suppression de la référence locale de la branche distante:

Il est toujours bon de supprimer une branche après qu’elle ait été fusionnée.
Comme vu précédemment GitHub offre une option pour supprimer la branche une fois que vous avez fusionné la PR, mais cela supprimera uniquement cette branche sur le repo distant.
Même après la suppression de la branche sur le dépôt distant, il restera une référence en local.

Pour supprimer toutes les références locales de la branche distante, utilisez la commande suivante :
git remote prune origin

Packager le repo local:

Les packs sont des représentations internes de Git utilisées pour combiner tous les objets individuels en packs. Sans entrer dans les détails techniques, les packs sont utilisés pour réduire la charge sur l’espace disque. Là aussi, on est sur le bon chemin pour votre stratégie Green IT !

La commande dans un repo Git local est la suivante: 

git repack

Vous pouvez relancer la commande de vérification de l’espace disque par le dossier .git et voir vos gains d’espace:
du -sh .git

Ces actions sont à répéter autant de fois que votre nombre de repo.

Conclusion

Au terme de cet article, nous avons exploré l’importance et la nécessité de maintenir une hygiène numérique stricte au sein de vos repositories GitHub, soulignant ainsi les améliorations en termes de performance, de coûts, d’organisation et d’impact environnemental. Les stratégies et les outils présentés, allant de la simple configuration à l’automatisation avec GitHub Actions ainsi que quelques commandes Git, fournissent un cadre solide pour atteindre ces objectifs.


Ces techniques ont pour but de simplifier la gestion de vos repo, tout en assurant leur accessibilité et leur réutilisabilité à long terme. Le tout en accompagnant votre stratégie Green IT !

 

 

 

Sources:
https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-the-automatic-deletion-of-branches
https://markentier.tech/posts/2021/09/delete-unmerged-branches-github/
https://github.com/marketplace/actions/delete-run-artifacts

Thèmes :

Partager cet article :

Autres articles en lien

Rejoignez le Mouvement

Vous êtes convaincus par notre démarche et vous avez un besoin IT ? Contactez-nous dès maintenant et échangeons ensemble.

Devenez acteur du mouvement Green Nerds

Rejoignez nos engagements en nous contactant pour échanger autour de votre projet IT.

Nos clients nous font confiance

image/svg+xml

Échanger
avec nous

Vous souhaitez faire appel aux Green Nerds ? Contactez-nous dès maintenant pour en savoir plus.

Join the green side

Vous voulez rejoindre l’ESN active écologiquement ? Nous sommes constamment à la recherche de nouveaux talents pour rejoindre notre communauté IT. Postulez dès maintenant.