diff --git a/.forgejo/workflows/release-pipeline.yml b/.forgejo/workflows/release-pipeline.yml index 53e2ad3..aad37ff 100644 --- a/.forgejo/workflows/release-pipeline.yml +++ b/.forgejo/workflows/release-pipeline.yml @@ -1,9 +1,16 @@ name: Release Pipeline +# Un seul pipeline pour les préversions et les releases finales : les cinq jobs +# (cible, build, assets, manifeste, publication) sont identiques dans les deux +# cas, seul le drapeau `prerelease` change. Le dupliquer dans un second fichier +# recopierait tout pour une ligne de différence. +# +# Le filtre `[0-9]*` couvre les deux formes de tag (0.1.0, 0.1.0rc016) tout en +# ignorant les tags de travail qui ne commencent pas par un chiffre. on: push: tags: - - '[0-9]*.[0-9]*.[0-9]*' + - '[0-9]*' jobs: set-release-target: @@ -15,28 +22,22 @@ jobs: - name: Déterminer la release cible id: setvar run: | - TAG="${GITHUB_REF#refs/tags/}" - - # Formes acceptées, et rien d'autre : - # X.Y.Z release finale → prerelease=false, notes obligatoires - # X.Y.ZrcNNN préversion → prerelease=true, notes optionnelles - # - # Le nombre de chiffres de rc est fixé à 3 (rc016, pas rc16) pour que - # le tri lexicographique des tags suive l'ordre chronologique. - if [[ "${TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] - then - PRERELEASE=false - elif [[ "${TAG}" =~ ^[0-9]+\.[0-9]+\.[0-9]+rc[0-9]{3}$ ]] - then - PRERELEASE=true + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + TAG="${GITHUB_REF#refs/tags/}" + echo "release_cible=$TAG" >> $GITHUB_OUTPUT + elif [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then + echo "release_cible=latest" >> $GITHUB_OUTPUT else - echo "tag hors convention : ${TAG}" >&2 - echo "formes acceptées : X.Y.Z (release) ou X.Y.ZrcNNN (préversion, rc sur 3 chiffres)" >&2 - exit 1 + echo "release_cible=unknown" >> $GITHUB_OUTPUT fi - echo "release_cible=${TAG}" >> $GITHUB_OUTPUT - echo "prerelease=${PRERELEASE}" >> $GITHUB_OUTPUT + # Un tag contenant « rc » est une préversion ; tout le reste est une + # release finale, qui exige des notes (cf. release.yml). + if [[ "${GITHUB_REF#refs/tags/}" == *rc* ]]; then + echo "prerelease=true" >> $GITHUB_OUTPUT + else + echo "prerelease=false" >> $GITHUB_OUTPUT + fi - name: Afficher la variable run: | diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index a6a10a5..8372c80 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -30,24 +30,10 @@ jobs: - name: Préparer les notes de version run: | NOTES="release_notes/${TAG}.md" - # Titre par défaut : le tag seul. Un H1 en première ligne des notes le - # remplace par « — ». - RELEASE_NAME="${TAG}" - if [[ -f "${NOTES}" ]] then echo "notes trouvées : ${NOTES}" - FIRST_LINE=$(head -1 "${NOTES}") - if [[ "${FIRST_LINE}" =~ ^\#[[:space:]]+(.+)$ ]] - then - RELEASE_NAME="${TAG} — ${BASH_REMATCH[1]}" - # H1 retiré du corps : Forgejo affiche déjà le titre au-dessus, le - # garder l'afficherait deux fois. `/./,$!d` mange les lignes vides - # laissées en tête. - tail -n +2 "${NOTES}" | sed '/./,$!d' > body.md - else - cp "${NOTES}" body.md - fi + cp "${NOTES}" body.md elif [[ "${PRERELEASE}" == "true" ]] then echo "aucune note pour ${TAG}, texte générique (préversion)" @@ -57,20 +43,16 @@ jobs: echo "créer ${NOTES} avant de pousser le tag" >&2 exit 1 fi - - echo "RELEASE_NAME=${RELEASE_NAME}" >> "${GITHUB_ENV}" - echo "--- titre --- ${RELEASE_NAME}" echo "--- body ---"; cat body.md - name: Create release run: | jq -n \ --arg tag "${TAG}" \ - --arg name "${RELEASE_NAME}" \ --rawfile body body.md \ --argjson prerelease "${PRERELEASE}" \ '{ tag_name: $tag, - name: $name, + name: $tag, body: $body, draft: false, prerelease: $prerelease, diff --git a/release_notes/0.1.0.md b/release_notes/0.1.0.md index be3d69c..b31bde9 100644 --- a/release_notes/0.1.0.md +++ b/release_notes/0.1.0.md @@ -1,5 +1,3 @@ -# Varion - Première version stable de **syonad/two**, orchestrateur réseau et VM mono-nœud. ## Fonctionnalités