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
- Allez dans Dépôt → Publications → Nouvelle publication (
frem.sh/<org>/<repo>/releases/new). - 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é. - Définissez le Titre de la publication. Il apparaît comme titre sur la page des releases.
- 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.
- 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.
- 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 ».
- 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
- Allez dans Dépôt → Publications.
- Trouvez la release et cliquez sur Éditer.
- 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’usage | Emplacement |
|---|---|
Archive de code source versionnée (.tar.gz, .zip) | Pièce jointe de release |
| Binaire précompilé ou outil CLI | Pièce jointe de release |
| Image de conteneur | Registre de paquets (frem.sh/<org>/<repo>/packages) |
| Paquet npm | Registre de paquets |
| Artefact Maven ou Gradle | Registre de paquets |
| Paquet compatible PyPI | Registre 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
- Registre de paquets : images de conteneur, paquets npm, Maven et PyPI
- Sécurité et chaîne d’approvisionnement : génération des SBOM, analyse des conteneurs, provenance SLSA
- API : référence de l’API REST des releases
- Runners CI : labels des runners et permissions du
GITHUB_TOKEN