Publié le 3 novembre 2022 par Andrew Owen (3 minutes)
J’ai récemment travaillé avec un logiciel qui pouvait pousser une archive zip
de contenu vers un dépôt Git. Cependant, ce que je voulais vraiment, c’était que le contenu de l’archive soit poussé vers le dépôt. J’ai donc créé une action GitHub pour le faire. J’ai déjà abordé le format des actions GitHub. Mais pour récapituler:
Et voici l’action que j’ai créée:
name: extract a zip file
on:
push:
paths:
- 'uploads/**.zip'
workflow_dispatch:
jobs:
unzip:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name:
run: |
rm -r uploads/extracted
filename=$(basename -s .zip *.zip)
unzip *.zip
rm *.zip
mv $filename temp
mv temp/out/* .
rm -r temp
git config --local user.email "github-actions@users.noreply.github.com"
git config --local user.name "github-actions"
git add .
git commit -m "unzip"
git push origin main
Le script est écrit pour la ligne de commande Linux. Décomposons-le.
rm -r css
L’idée ici est que le contenu du fichier zip doit remplacer ce qui se trouve déjà dans ce dossier particulier du référentiel. Vous pourriez appeler ce dossier uploads
. L’action checkout a déjà été exécutée, mais c’est une bonne idée d’effacer tous les dossiers connus. La balise -r
rend l’action récursive.
filename=$(basename -s .zip *.zip)
unzip *.zip
rm .zip
mv $filename temp
Ce script suppose que nous ne connaissons pas le nom du fichier zip
, mais qu’il n’y a qu’un seul fichier. Il déterminera le nom, décompressera le fichier à la racine, supprimera le fichier zip
et renommera le dossier contenant le zip
en temp
.
mv temp/out/ .
rm -r temp
Dans cet exemple, le contenu du fichier zip
se trouve dans deux dossiers (dans le dossier out
). Cette opération déplace le contenu du dossier imbriqué vers la racine, puis supprime le dossier temporaire et son contenu (le dossier out vide). Le point (.
) représente le répertoire de travail actuel (où le repo a été extrait sur la VM).
git config user.name "github-actions@users.noreply.github.com"
git config --local user.name "github-actions"
git add .
git commit -m "unzip"
git push origin main
Cette partie du script repousse les modifications vers le référentiel.
Image: Détail de l’icône du fichier zip de The Unarchiver. J’ai cherché une image de décompression appropriée avec une licence Creative Commons, mais les résultats n’étaient pas sûrs pour le travail.