Aller au contenu principal

Releases

Une release est un instantané tagué d’un dépôt, accompagné éventuellement d’artefacts binaires, d’archives ou d’autres fichiers. Les releases apparaissent sur frem.sh/<org>/<repo>/releases et fournissent un index stable et lisible de ce qui a été livré, et quand. Elles sont distinctes du registre de paquets : les releases contiennent des instantanés de code source versionnés et des artefacts de build, tandis que les images de conteneur et les paquets des écosystèmes de langages ont leur place dans le registre de paquets.

Créer une release depuis l’interface

  1. Allez dans Dépôt → Publications → Nouvelle publication (frem.sh/<org>/<repo>/releases/new).
  2. Dans le champ Nom de l’étiquette, choisissez un tag existant ou saisissez le nom d’un nouveau tag pour le créer sur la branche ou le commit cible. Le versionnage sémantique (v1.0.0, v2.3.1-rc.1) est recommandé.
  3. Définissez le Titre de la publication. Il apparaît comme titre sur la page des releases.
  4. Rédigez les notes de release dans la zone de texte. Le Markdown est pris en charge. Incluez un résumé des changements, les ruptures de compatibilité, les instructions de mise à niveau et les remerciements aux contributeurs.
  5. Joignez des pièces jointes de release en faisant glisser des fichiers sur la zone de téléversement (Déposez les fichiers ou cliquez ici pour téléverser.) ou en cliquant dessus. Le nombre de pièces jointes n’est pas limité ; la taille maximale par pièce jointe est de 2 Go.
  6. Cochez Marquer comme pré-publication pour les release candidates, les bêtas ou tout ce qui n’est pas prêt pour un usage général. Les pré-releases s’affichent séparément dans la liste des releases et sont exclues de l’indicateur « dernière release ».
  7. Cliquez sur Publier pour la rendre publique immédiatement, ou sur Sauvegarder le brouillon pour la terminer plus tard. Les brouillons ne sont visibles que par les propriétaires de l’organisation et par les membres disposant d’un accès Write ou Admin au dépôt.

Créer une release depuis un workflow

Automatisez les releases en les déclenchant sur les tags poussés. C’est le modèle habituel pour les projets qui construisent des binaires en CI et veulent les joindre automatiquement à la release.

on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: fremforge
    steps:
      - uses: actions/checkout@v4

      - name: Build
        run: make build

      - name: Create release
        uses: https://code.forgejo.org/actions/forgejo-release@v2
        with:
          direction: upload
          release-dir: dist/
          token: ${{ secrets.GITHUB_TOKEN }}

secrets.GITHUB_TOKEN est un jeton intégré, disponible automatiquement dans chaque job de workflow. Sa portée est limitée au dépôt courant et il dispose d’un accès en écriture aux releases de ce dépôt. Aucune configuration n’est nécessaire : fremforge le fournit au démarrage du job et il expire à la fin du job.

L’action forgejo-release avec direction: upload crée la release (si elle n’existe pas encore pour le tag) et téléverse chaque fichier de dist/ comme pièce jointe de la release.

Téléverser des pièces jointes depuis un workflow : via l’API

Pour un contrôle total sur la création de la release et le téléversement des pièces jointes, appelez l’API directement depuis un workflow :

# Create the release
RELEASE_ID=$(curl -sSf \
  -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
  -H "Content-Type: application/json" \
  -d "{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"${{ github.ref_name }}\"}" \
  https://frem.sh/api/v1/repos/${{ github.repository }}/releases \
  | jq -r '.id')

# Upload an asset
curl -sSf \
  -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @dist/myapp-linux-amd64 \
  "https://frem.sh/api/v1/repos/${{ github.repository }}/releases/${RELEASE_ID}/assets?name=myapp-linux-amd64"

Référence complète de l’API : POST /repos/{owner}/{repo}/releases dans la documentation de l’API REST.

Télécharger les pièces jointes d’une release

Dépôts publics : les pièces jointes des releases sont accessibles publiquement sans authentification. Téléchargez-les directement depuis l’URL de la pièce jointe affichée sur la page des releases.

Dépôts privés : un jeton d’accès personnel (PAT) avec le scope repo est requis.

curl -L \
  -H "Authorization: Bearer <PAT>" \
  https://frem.sh/<org>/<repo>/releases/download/<tag>/<asset-filename>

Versionnage sémantique

Utilisez des noms de tags vMAJOR.MINOR.PATCH. Un versionnage cohérent permet aux outils et aux gestionnaires de dépendances de déterminer correctement la « dernière » release, et rend la page des releases plus lisible pour les visiteurs humains.

Les identifiants de pré-release suivent la convention SemVer : v1.2.0-rc.1, v2.0.0-beta.3. Marquez-les comme pré-releases dans l’interface ou définissez "prerelease": true dans le corps de la requête API.

Supprimer une release

  1. Allez dans Dépôt → Publications.
  2. Trouvez la release et cliquez sur Éditer.
  3. Faites défiler jusqu’en bas et cliquez sur Supprimer cette publication.

Supprimer une release supprime l’enregistrement de la release et toutes ses pièces jointes. Le tag Git sous-jacent n’est pas supprimé par cette action. Pour supprimer aussi le tag, allez dans Dépôt → Tags et supprimez-le depuis cette page, ou exécutez git push origin --delete <tag> depuis un clone local.

Releases et SBOM

La plateforme génère un SBOM pour chaque tag de release et le joint comme pièce jointe de la release (par exemple sbom.spdx.json). La génération des SBOM est activée par défaut, sans étape d’activation. Les formats SPDX 2.3 et CycloneDX 1.6 sont tous deux produits.

Voir Sécurité et chaîne d’approvisionnement pour la configuration complète du pipeline et les détails de la provenance SLSA.

Releases et registre de paquets

Les releases et le registre de paquets répondent à des besoins différents :

Cas d’usageEmplacement
Archive de code source versionnée (.tar.gz, .zip)Pièce jointe de release
Binaire précompilé ou outil CLIPièce jointe de release
Image de conteneurRegistre de paquets (frem.sh/<org>/<repo>/packages)
Paquet npmRegistre de paquets
Artefact Maven ou GradleRegistre de paquets
Paquet compatible PyPIRegistre de paquets

Les images de conteneur et les paquets des écosystèmes de langages ont leurs propres mécanismes de versionnage et de découverte (tags d’image, npm install, mvn dependency:resolve). Utilisez le registre de paquets pour ceux-ci, afin que les consommateurs puissent les récupérer directement avec les outils standard. Les releases sont destinées aux artefacts que des personnes ou des scripts téléchargent explicitement.

Voir aussi