turbo-editors/turbo-golopublic Fork 0
v1.0.0
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-golo.git
git clone ssh://git@rickub.com/turbo-editors/turbo-golo.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

📦 Turbo Golo d710c1b · on v1.0.0 · k33g · 12h ago
make-a-release.md · 103 lines · 6.0 KBmarkdown
Blame HistoryOpen raw

Comment faire une release

Ce guide montre comment publier une version pour que l'éditeur annonce correctement la sienne. Il suppose que vous pouvez pousser sur le dépôt.

Vérifier ce que vous vous apprêtez à publier

make version
v0.1.0-14-g88a4c38 (88a4c38)

Quatorze commits après v0.1.0. Un -dirty à la fin signifie que vous avez des modifications non validées — validez-les ou mettez-les de côté d'abord, sinon la release portera ce suffixe pour toujours.

Poser le tag

git tag -a v0.2.0 -m "v0.2.0"
git push origin v0.2.0

Le tag est l'origine du numéro : il doit exister avant de construire quoi que ce soit destiné à être distribué. Annoté (-a) plutôt que léger, parce que git describe préfère les tags annotés.

Construire le binaire de release

make build
./bin/turbo-golo -version
Turbo Golo 0.2.0 (88a4c38, built 2026-08-31T18:04:05Z)

Pas de suffixe -14-g… : vous êtes exactement sur le tag. C'est ce qui vous dit que le tag a bien été pris.

Vérifier la boîte About

Lancez l'éditeur et faites Alt-H, puis A.

Turbo Golo 0.2.0

A Turbo C-style editor for Golo,
written in Go.

Commit: 88a4c38
Built:  2026-08-31 18:04 UTC
Theme:  Turbo Classic

Ou utiliser les scripts et laisser le workflow publier

C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans release.env — il est ignoré par git, donc la CI ne le voit jamais :

TAG="v1.0.0"
ABOUT="Turbo Golo"

Puis lancez un seul script :

./01-release.tag.sh

Il lance make check, refuse un tag déjà pris en local ou sur origin, refuse un go.mod portant une directive replace, valide ce qui reste à valider, pousse la branche, et seulement ensuite pose le tag et le pousse. Cet ordre compte : un tag poussé avant la branche pointe sur un commit que le distant n'a jamais vu, et un tag créé avant un push refusé reste là pour que quelqu'un le trouve.

C'est la dernière chose que vous lancez à la main. Le push du tag déclenche .github/workflows/release.yml ; suivez-le dans l'onglet Actions du dépôt. Il lance la suite de tests, compile les binaires avec ./02-build-releases.sh — le même script que vous pouvez lancer sur votre machine — et crée la page de release avec : le message du tag, la ligne go install, les liens vers la documentation à ce tag, un binaire par plateforme, le SHA256SUMS et le README qui décrit les téléchargements.

Le job publie avec son propre GITHUB_TOKEN, la seule authentification que l'API de release de Rickub accepte — un jeton personnel est refusé. Il n'y a rien à configurer et aucun secret à garder, ce qui explique la disparition des anciens 02-release.publish.sh et 04-release.upload-binaries.sh.

02-build-releases.sh compile chaque plateforme et estampille TAG lui-même, en surchargeant la version du Makefile : make ldflags VERSION=v1.0.0. La release est v1.0.0, donc c'est ce que disent ses binaires — quoi qu'aurait répondu git describe, et que le tag existe déjà ou non. Il lance ensuite le binaire préparé pour cette machine et vérifie qu'il annonce bien la version : c'est la seule preuve que ce qui est distribué la porte.

Vous pouvez voir ce que le workflow publiera sans rien publier, ou construire les binaires à la main :

./02-build-releases.sh v1.0.0     # écrit release/v1.0.0/, ne pousse rien

Sans argument il lit TAG dans release.env ; le workflow n'a pas de release.env, il passe donc le tag qui l'a déclenché.

La suite de tests comprend des tests qui exécutent 01-release.tag.sh contre un clone jetable. Ils se sautent eux-mêmes quand TURBO_GOLO_RELEASING est défini, ce que le script exporte avant d'appeler make check — retirer cette ligne fait récurser une release jusqu'à épuisement. Le workflow pose la même variable pour sa propre étape go test.

Variantes

  • Vous installez au lieu de distribuer un binaire. make install et scripts/install.sh estampillent de la même façon, donc un éditeur installé nomme le commit dont il vient. Il n'y a rien de plus à faire.
  • Quelqu'un installe avec go install. go install rickub.com/turbo-editors/turbo-golo@v0.2.0 annonce 0.2.0 d'après la version du module, sans commit ni date de build. C'est le propre enregistrement de l'outil Go ; rien à estampiller.
  • Vous avez tagué le mauvais commit. Si le tag n'a pas été poussé, supprimez-le (git tag -d v1.0.0), taguez le bon, et reconstruisez. Une fois sur origin, ne le déplacez pas : le proxy de modules a mis en cache go install …@v1.0.0 et la page de release porte déjà des binaires avec ce numéro — c'est pour cela que 01-release.tag.sh refuse un tag qui existe. Incrémentez TAG et refaites une release.
  • About affiche devel. Le binaire a été construit par un go build . nu plutôt que par make. Il n'a rien d'anormal ; simplement aucun tag ne lui a été estampillé, parce que le système de build de Go ne lit pas les tags git. Utilisez make build.
  • About affiche unknown. Rien n'a nommé le build — un go run, ou une construction depuis un dossier sans historique git. Utilisez make build depuis le dépôt cloné.
  • Vous n'avez pas git du tout, ayant téléchargé une archive des sources. make build fonctionne quand même et le binaire annonce unknown. Passez la version vous-même si vous en avez besoin — la variable estampillée est celle du paquet version de turbo-core, que tous les éditeurs de la famille partagent :
    go build -ldflags "-X 'rickub.com/turbo-editors/turbo-core/version.stamp=v0.2.0'" -o bin/turbo-golo .
    

Voir aussi

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
# Comment faire une release

Ce guide montre comment publier une version pour que l'éditeur annonce correctement la sienne. Il suppose que vous pouvez pousser sur le dépôt.

## Vérifier ce que vous vous apprêtez à publier

```sh
make version
```

```
v0.1.0-14-g88a4c38 (88a4c38)
```

Quatorze commits après `v0.1.0`. Un `-dirty` à la fin signifie que vous avez des modifications non validées — validez-les ou mettez-les de côté d'abord, sinon la release portera ce suffixe pour toujours.

## Poser le tag

```sh
git tag -a v0.2.0 -m "v0.2.0"
git push origin v0.2.0
```

Le tag est l'origine du numéro : il doit exister avant de construire quoi que ce soit destiné à être distribué. Annoté (`-a`) plutôt que léger, parce que `git describe` préfère les tags annotés.

## Construire le binaire de release

```sh
make build
./bin/turbo-golo -version
```

```
Turbo Golo 0.2.0 (88a4c38, built 2026-08-31T18:04:05Z)
```

Pas de suffixe `-14-g…` : vous êtes exactement sur le tag. C'est ce qui vous dit que le tag a bien été pris.

## Vérifier la boîte About

Lancez l'éditeur et faites `Alt-H`, puis `A`.

```
Turbo Golo 0.2.0

A Turbo C-style editor for Golo,
written in Go.

Commit: 88a4c38
Built:  2026-08-31 18:04 UTC
Theme:  Turbo Classic
```

## Ou utiliser les scripts et laisser le workflow publier

C'est ainsi qu'une release est réellement faite. Mettez la version et sa description d'une ligne dans `release.env` — il est ignoré par git, donc la CI ne le voit jamais :

```sh
TAG="v1.0.0"
ABOUT="Turbo Golo"
```

Puis lancez un seul script :

```sh
./01-release.tag.sh
```

Il lance `make check`, refuse un tag déjà pris en local ou sur `origin`, refuse un `go.mod` portant une directive `replace`, valide ce qui reste à valider, pousse la branche, et seulement ensuite pose le tag et le pousse. Cet ordre compte : un tag poussé avant la branche pointe sur un commit que le distant n'a jamais vu, et un tag créé avant un push refusé reste là pour que quelqu'un le trouve.

C'est la dernière chose que vous lancez à la main. Le push du tag déclenche `.github/workflows/release.yml` ; suivez-le dans l'onglet Actions du dépôt. Il lance la suite de tests, compile les binaires avec `./02-build-releases.sh` — le même script que vous pouvez lancer sur votre machine — et crée la page de release avec : le message du tag, la ligne `go install`, les liens vers la documentation **à ce tag**, un binaire par plateforme, le `SHA256SUMS` et le README qui décrit les téléchargements.

Le job publie avec son propre `GITHUB_TOKEN`, la seule authentification que l'API de release de Rickub accepte — un jeton personnel est refusé. Il n'y a rien à configurer et aucun secret à garder, ce qui explique la disparition des anciens `02-release.publish.sh` et `04-release.upload-binaries.sh`.

`02-build-releases.sh` compile chaque plateforme et **estampille `TAG` lui-même**, en surchargeant la version du Makefile : `make ldflags VERSION=v1.0.0`. La release *est* `v1.0.0`, donc c'est ce que disent ses binaires — quoi qu'aurait répondu `git describe`, et que le tag existe déjà ou non. Il lance ensuite le binaire préparé pour cette machine et vérifie qu'il annonce bien la version : c'est la seule preuve que ce qui est distribué la porte.

Vous pouvez voir ce que le workflow publiera sans rien publier, ou construire les binaires à la main :

```sh
./02-build-releases.sh v1.0.0     # écrit release/v1.0.0/, ne pousse rien
```

Sans argument il lit `TAG` dans `release.env` ; le workflow n'a pas de `release.env`, il passe donc le tag qui l'a déclenché.

La suite de tests comprend des tests qui exécutent `01-release.tag.sh` contre un clone jetable. Ils se sautent eux-mêmes quand `TURBO_GOLO_RELEASING` est défini, ce que le script exporte avant d'appeler `make check` — retirer cette ligne fait récurser une release jusqu'à épuisement. Le workflow pose la même variable pour sa propre étape `go test`.

## Variantes

- **Vous installez au lieu de distribuer un binaire.** `make install` et `scripts/install.sh` estampillent de la même façon, donc un éditeur installé nomme le commit dont il vient. Il n'y a rien de plus à faire.
- **Quelqu'un installe avec `go install`.** `go install rickub.com/turbo-editors/turbo-golo@v0.2.0` annonce `0.2.0` d'après la version du module, sans commit ni date de build. C'est le propre enregistrement de l'outil Go ; rien à estampiller.
- **Vous avez tagué le mauvais commit.** Si le tag n'a pas été poussé, supprimez-le (`git tag -d v1.0.0`), taguez le bon, et reconstruisez. Une fois sur `origin`, ne le déplacez pas : le proxy de modules a mis en cache `go install …@v1.0.0` et la page de release porte déjà des binaires avec ce numéro — c'est pour cela que `01-release.tag.sh` refuse un tag qui existe. Incrémentez `TAG` et refaites une release.
- **About affiche `devel`.** Le binaire a été construit par un `go build .` nu plutôt que par `make`. Il n'a rien d'anormal ; simplement aucun tag ne lui a été estampillé, parce que le système de build de Go ne lit pas les tags git. Utilisez `make build`.
- **About affiche `unknown`.** Rien n'a nommé le build — un `go run`, ou une construction depuis un dossier sans historique git. Utilisez `make build` depuis le dépôt cloné.
- **Vous n'avez pas git du tout**, ayant téléchargé une archive des sources. `make build` fonctionne quand même et le binaire annonce `unknown`. Passez la version vous-même si vous en avez besoin — la variable estampillée est celle du paquet `version` de turbo-core, que tous les éditeurs de la famille partagent :
  ```sh
  go build -ldflags "-X 'rickub.com/turbo-editors/turbo-core/version.stamp=v0.2.0'" -o bin/turbo-golo .
  ```

## Voir aussi

- Toutes les sources du numéro, et ce qu'annonce chaque build : [Le numéro de version](../reference/versioning.md)
- Pourquoi il n'y a pas de constante de version dans les sources : [Décisions de conception](../explanation/design-decisions.md#la-version-est-une-propriété-du-build-pas-des-sources)
- Installer dans votre PATH : [Comment installer et construire Turbo Golo](install.md)