Compare commits
4 commits
f8eb0d3449
...
ea3a37559a
| Author | SHA1 | Date | |
|---|---|---|---|
| ea3a37559a | |||
| 4e2bfbee02 | |||
| 3a61387215 | |||
| b9b729e439 |
2 changed files with 260 additions and 25 deletions
|
|
@ -6,7 +6,7 @@ name: Release
|
|||
- "**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
contents: write
|
||||
releases: write
|
||||
|
||||
jobs:
|
||||
|
|
@ -19,38 +19,53 @@ jobs:
|
|||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Build changelog
|
||||
- name: Extract changelog and update CHANGELOG.md
|
||||
id: changelog
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
current_tag="${GITHUB_REF_NAME}"
|
||||
previous_stable_tag=""
|
||||
today=$(date +%Y-%m-%d)
|
||||
|
||||
if previous_stable_tag="$(
|
||||
git describe --tags --abbrev=0 \
|
||||
--exclude '*-rc*' \
|
||||
--exclude '*-beta*' \
|
||||
--exclude '*-alpha*' \
|
||||
"${current_tag}^" 2>/dev/null
|
||||
)"; then
|
||||
range="${previous_stable_tag}..${current_tag}"
|
||||
{
|
||||
printf '## Changelog\n\n'
|
||||
printf 'Changes since `%s`.\n\n' "${previous_stable_tag}"
|
||||
git log --reverse --pretty=format:'- %h %s' "${range}"
|
||||
printf '\n'
|
||||
} >CHANGELOG.md
|
||||
else
|
||||
{
|
||||
printf '## Changelog\n\n'
|
||||
printf 'Initial release.\n\n'
|
||||
git log --reverse --pretty=format:'- %h %s' "${current_tag}"
|
||||
printf '\n'
|
||||
} >CHANGELOG.md
|
||||
# Extract content of [Unreleased] section (non-empty lines)
|
||||
release_notes=$(awk '/^## \[Unreleased\]/{found=1; next} found && /^## \[/{exit} found{print}' CHANGELOG.md | sed '/^[[:space:]]*$/d')
|
||||
|
||||
if [ -z "${release_notes}" ]; then
|
||||
release_notes="Voir les commits pour le détail des changements."
|
||||
fi
|
||||
|
||||
printf '%s\n' "${release_notes}" > release_notes.md
|
||||
|
||||
# For stable releases: rename [Unreleased] and insert a new empty section
|
||||
case "${current_tag}" in
|
||||
*-rc*|*-beta*|*-alpha*)
|
||||
echo "Pre-release tag — CHANGELOG.md non modifié"
|
||||
;;
|
||||
*)
|
||||
# Rename [Unreleased] → version header
|
||||
sed -i "s/^## \[Unreleased\]$/## [${current_tag}] — ${today}/" CHANGELOG.md
|
||||
|
||||
# Insert new empty [Unreleased] section after "# Changelog"
|
||||
sed -i "s/^# Changelog$/# Changelog\n\n## [Unreleased]/" CHANGELOG.md
|
||||
|
||||
# Insert reference link before the first existing [vX...] link
|
||||
awk -v tag="${current_tag}" -v url="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${current_tag}" '
|
||||
!inserted && /^\[v/ { print "[" tag "]: " url; inserted=1 }
|
||||
{ print }
|
||||
' CHANGELOG.md > CHANGELOG.tmp && mv CHANGELOG.tmp CHANGELOG.md
|
||||
|
||||
git config user.name "CI"
|
||||
git config user.email "ci@forge.lclr.dev"
|
||||
git remote set-url origin "https://x-token:${GITEA_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY}.git"
|
||||
git add CHANGELOG.md
|
||||
git commit -m "chore(changelog): release ${current_tag}"
|
||||
git push origin HEAD:main
|
||||
;;
|
||||
esac
|
||||
|
||||
- name: Create or update release
|
||||
env:
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
|
|
@ -73,7 +88,7 @@ jobs:
|
|||
sed ':a;N;$!ba;s/\\/\\\\/g;s/"/\\"/g;s/\t/\\t/g;s/\r//g;s/\n/\\n/g'
|
||||
}
|
||||
|
||||
body="$(json_escape < CHANGELOG.md)"
|
||||
body="$(json_escape < release_notes.md)"
|
||||
payload="$(printf '{"tag_name":"%s","name":"%s","body":"%s","draft":false,"prerelease":%s}' \
|
||||
"${current_tag}" \
|
||||
"${current_tag}" \
|
||||
|
|
|
|||
220
CHANGELOG.md
Normal file
220
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v1.11.0] — 2026-05-12
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Bootstrap — masquage automatique des commandes non configurées** : les commandes dont aucun hook n'est défini dans le manifeste sont désormais automatiquement masquées de l'aide CLI, ce qui rend la sortie `--help` plus propre et adaptée à chaque projet.
|
||||
- **Bootstrap — option `DisabledCommands`** : il est maintenant possible de désactiver explicitement des commandes via l'option `DisabledCommands`, indépendamment de la configuration des hooks.
|
||||
|
||||
---
|
||||
|
||||
## [v1.10.0] — 2026-05-11
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Bootstrap — `DefaultLoginHandler`** : un handler de login générique est désormais disponible dans le package bootstrap, utilisable par défaut pour les projets qui n'ont pas besoin d'un flux de connexion personnalisé.
|
||||
|
||||
### Corrections
|
||||
|
||||
- Renommage du dossier `.forgejo` corrigé suite à une erreur de casse.
|
||||
|
||||
---
|
||||
|
||||
## [v1.9.0] — 2026-05-05
|
||||
|
||||
### Changements internes
|
||||
|
||||
- **Migration vers Forgejo** : les workflows CI ont été migrés de GitHub Actions vers Forgejo.
|
||||
- **Mise à jour du module path** : le chemin du module Go a été mis à jour pour pointer vers la forge interne.
|
||||
|
||||
---
|
||||
|
||||
## [v1.8.2] — 2026-05-02
|
||||
|
||||
### Performances
|
||||
|
||||
- Suppression d'un appel de sonde Bitwarden inutile lors de la génération de la description runtime, ce qui réduit les appels CLI superflus au démarrage.
|
||||
|
||||
---
|
||||
|
||||
## [v1.8.1] — 2026-05-02
|
||||
|
||||
### Performances
|
||||
|
||||
- La vérification de disponibilité de Bitwarden est désormais chargée de manière paresseuse (lazy), évitant une initialisation coûteuse si le secret store n'est pas utilisé.
|
||||
|
||||
---
|
||||
|
||||
## [v1.8.0] — 2026-05-02
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Cache Bitwarden chiffré** : les lectures de secrets Bitwarden sont maintenant mises en cache localement sous forme chiffrée, ce qui réduit considérablement le nombre d'appels au CLI `bw` durant une session.
|
||||
- **Configuration du cache via `mcp.toml`** : les options de cache (durée, activation) sont configurables directement dans le manifeste du projet.
|
||||
- **Helpers générés** : les helpers de code générés exposent les contrôles de cache Bitwarden, permettant aux projets scaffoldés de bénéficier automatiquement du cache.
|
||||
|
||||
---
|
||||
|
||||
## [v1.7.0] — 2026-05-02
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Génération de code depuis le manifeste** : le framework peut désormais générer automatiquement du code Go à partir du `mcp.toml`, incluant les helpers de champs de configuration et le code de glue pour les helpers de manifeste. Cela réduit le boilerplate dans les projets utilisant le framework.
|
||||
|
||||
---
|
||||
|
||||
## [v1.6.0] — 2026-04-20
|
||||
|
||||
### Corrections
|
||||
|
||||
- L'invite de connexion Bitwarden s'affiche désormais en rouge lorsque la session est absente, rendant l'état d'erreur plus visible pour l'utilisateur.
|
||||
|
||||
---
|
||||
|
||||
## [v1.5.1] — 2026-04-16
|
||||
|
||||
### Améliorations
|
||||
|
||||
- Le script d'installation généré par le scaffold récupère désormais les binaires depuis la dernière release disponible, plutôt qu'une version fixée en dur.
|
||||
|
||||
---
|
||||
|
||||
## [v1.5.0] — 2026-04-16
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Fallback runtime embarqué pour les apps scaffoldées** : si le binaire runtime n'est pas trouvé dans l'environnement, les applications générées par le scaffold peuvent désormais utiliser un runtime de fallback embarqué directement dans le manifeste.
|
||||
|
||||
---
|
||||
|
||||
## [v1.4.2] — 2026-04-15
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Vérification Ed25519 des artefacts de release** : les artefacts téléchargés lors des mises à jour automatiques sont désormais vérifiés par signature Ed25519, garantissant leur intégrité.
|
||||
|
||||
### Corrections
|
||||
|
||||
- Le mécanisme de mise à jour (`self-update`) rejette maintenant les artefacts HTML (erreurs de redirection ou pages d'erreur) pour éviter d'installer un binaire corrompu.
|
||||
- Durcissement du runtime scaffold et de la sécurité du processus de mise à jour.
|
||||
|
||||
### Documentation
|
||||
|
||||
- Le README a été réorganisé et la documentation détaillée déplacée dans des fichiers séparés.
|
||||
|
||||
---
|
||||
|
||||
## [v1.4.1] — 2026-04-15
|
||||
|
||||
### Améliorations
|
||||
|
||||
- L'assistant d'installation généré par le scaffold est aligné avec le dernier flux TUI, garantissant la cohérence entre le code généré et le comportement attendu.
|
||||
|
||||
---
|
||||
|
||||
## [v1.4.0] — 2026-04-15
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Assistant d'installation TUI pour Claude et Codex** : le scaffold injecte désormais un wizard interactif (TUI) dans le script `install.sh` des projets générés, guidant l'utilisateur lors de la première installation avec des étapes de configuration pour Claude et Codex.
|
||||
|
||||
---
|
||||
|
||||
## [v1.3.2] — 2026-04-15
|
||||
|
||||
### Corrections
|
||||
|
||||
- Revert des fonctionnalités `build` unifiée et matrice CI introduites en cours de cycle, jugées non stables pour cette release.
|
||||
|
||||
---
|
||||
|
||||
## [v1.3.1] — 2026-04-14
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **CLI — vérification doctor sur les champs de profil** : un helper réutilisable permet de valider les champs de configuration résolus depuis plusieurs sources (env, fichier, défaut) lors du diagnostic `doctor`.
|
||||
- **CLI — lookup multi-sources** : ajout d'un helper de résolution de valeur avec traçabilité de la source (d'où vient la valeur résolue).
|
||||
- **Secretstore — helper de manifeste runtime** : ajout d'un helper facilitant l'ouverture du backend secret store depuis le manifeste runtime.
|
||||
- **Bootstrap — expansion d'alias de commandes** : les commandes bootstrap peuvent maintenant définir des alias qui sont développés automatiquement.
|
||||
|
||||
---
|
||||
|
||||
## [v1.3.0] — 2026-04-14
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Commande `scaffold init`** : nouvelle commande CLI pour initialiser un projet MCP depuis zéro via le scaffold.
|
||||
- **Générateur de scaffold MCP** : ajout d'un générateur de projet binaire MCP complet, produisant la structure de fichiers, le manifeste `mcp.toml`, et le code de démarrage.
|
||||
|
||||
---
|
||||
|
||||
## [v1.2.1] — 2026-04-14
|
||||
|
||||
### Améliorations
|
||||
|
||||
- Les commandes `config show` et `config test` générées par le bootstrap suivent désormais une structure standardisée cohérente entre les projets.
|
||||
|
||||
### Corrections
|
||||
|
||||
- La CI construit le changelog depuis le dernier tag de release stable (et non depuis un tag RC).
|
||||
|
||||
---
|
||||
|
||||
## [v1.2.0] — 2026-04-14
|
||||
|
||||
### Documentation
|
||||
|
||||
- Mise en place de la convention de nommage des branches d'amélioration dans les instructions agents du dépôt.
|
||||
|
||||
---
|
||||
|
||||
## [v1.1.0] — 2026-04-13
|
||||
|
||||
### Nouvelles fonctionnalités
|
||||
|
||||
- **Migrations de configuration versionnées** : le framework gère désormais les migrations de configuration entre versions, permettant aux projets d'évoluer leur schéma de config sans casser les installations existantes.
|
||||
- **Secrets structurés et politiques de backend** : support des secrets structurés (objets, non plus uniquement des chaînes) et des politiques de sélection de backend secret store par champ.
|
||||
|
||||
### Documentation
|
||||
|
||||
- Ajout des instructions de workflow du dépôt.
|
||||
|
||||
---
|
||||
|
||||
## [v1.0.0] — 2026-04-13
|
||||
|
||||
Première release stable du framework.
|
||||
|
||||
### Fonctionnalités initiales
|
||||
|
||||
- **Framework MCP réutilisable** : socle commun pour construire des serveurs MCP en Go, avec gestion du cycle de vie, configuration, et intégration des outils.
|
||||
- **Loader de manifeste TOML** : chargement de la configuration projet depuis un fichier `mcp.toml`.
|
||||
- **Package de mise à jour** : mécanisme de self-update découplé, pilotable par des drivers de forge (GitLab, Forgejo, etc.) avec validation de checksum.
|
||||
- **Bootstrap CLI optionnel** : package permettant de bootstrapper rapidement une CLI pour un projet MCP, avec commandes `config`, `login`, `doctor`, et `update` préconfigurées.
|
||||
- **Workflow de release CI** : pipeline de release automatisée avec génération de changelog et publication des artefacts.
|
||||
|
||||
---
|
||||
|
||||
[v1.11.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.11.0
|
||||
[v1.10.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.10.0
|
||||
[v1.9.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.9.0
|
||||
[v1.8.2]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.8.2
|
||||
[v1.8.1]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.8.1
|
||||
[v1.8.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.8.0
|
||||
[v1.7.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.7.0
|
||||
[v1.6.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.6.0
|
||||
[v1.5.1]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.5.1
|
||||
[v1.5.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.5.0
|
||||
[v1.4.2]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.4.2
|
||||
[v1.4.1]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.4.1
|
||||
[v1.4.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.4.0
|
||||
[v1.3.2]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.3.2
|
||||
[v1.3.1]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.3.1
|
||||
[v1.3.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.3.0
|
||||
[v1.2.1]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.2.1
|
||||
[v1.2.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.2.0
|
||||
[v1.1.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.1.0
|
||||
[v1.0.0]: https://forge.lclr.dev/AI/mcp-framework/releases/tag/v1.0.0
|
||||
Loading…
Reference in a new issue