diff --git a/.forgejo/workflows/docs.yml b/.forgejo/workflows/docs.yml index 8e7d667..42c201e 100644 --- a/.forgejo/workflows/docs.yml +++ b/.forgejo/workflows/docs.yml @@ -54,17 +54,35 @@ jobs: touch "${SITE_DIR}/.nojekyll" du -sh "${SITE_DIR}" - # La branche pages ne contient que le site, à la racine, en un seul - # commit sans histoire : ce sont des artefacts reconstructibles, et - # l'historique de main suffit à savoir d'où ils viennent. + # La branche pages ne contient que le site, à la racine. Le build est + # greffé sur l'historique existant plutôt que poussé en force : un push + # en avance rapide ne demande que le droit d'écrire sur la branche, là + # où le force-push exige une dérogation supplémentaire dans la + # protection de branche. - name: Publier sur la branche pages run: | cd "${SITE_DIR}" git init --quiet --initial-branch=pages git config user.name "forgejo-actions" git config user.email "forgejo-actions@git.g3e.fr" + git remote add origin "https://${TOKEN}@git.g3e.fr/${{ github.repository }}.git" + + # --depth=1 : seul le dernier commit sert de parent, l'historique + # complet du site n'a pas à être rapatrié à chaque build. + if git fetch --quiet --depth=1 origin pages 2>/dev/null + then + git reset --soft FETCH_HEAD + else + echo "branche pages absente : premier build" + fi + git add -A + if git diff --cached --quiet + then + echo "site identique au précédent, rien à publier" + exit 0 + fi + git commit --quiet -m "docs: build de ${GITHUB_SHA}" - git push --force --quiet \ - "https://${TOKEN}@git.g3e.fr/${{ github.repository }}.git" pages + git push --quiet origin pages echo "publié : $(git rev-parse --short HEAD) — $(git ls-files | wc -l) fichiers"