Compare commits
No commits in common. "ea3a37559a73b70b542cdcec31574b521d792c9c" and "f8eb0d3449ab6d00b81df49bbe7d825cc256e69d" have entirely different histories.
ea3a37559a
...
f8eb0d3449
2 changed files with 25 additions and 260 deletions
|
|
@ -6,7 +6,7 @@ name: Release
|
||||||
- "**"
|
- "**"
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: read
|
||||||
releases: write
|
releases: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
@ -19,53 +19,38 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Extract changelog and update CHANGELOG.md
|
- name: Build changelog
|
||||||
id: changelog
|
id: changelog
|
||||||
env:
|
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
current_tag="${GITHUB_REF_NAME}"
|
current_tag="${GITHUB_REF_NAME}"
|
||||||
today=$(date +%Y-%m-%d)
|
previous_stable_tag=""
|
||||||
|
|
||||||
# Extract content of [Unreleased] section (non-empty lines)
|
if previous_stable_tag="$(
|
||||||
release_notes=$(awk '/^## \[Unreleased\]/{found=1; next} found && /^## \[/{exit} found{print}' CHANGELOG.md | sed '/^[[:space:]]*$/d')
|
git describe --tags --abbrev=0 \
|
||||||
|
--exclude '*-rc*' \
|
||||||
if [ -z "${release_notes}" ]; then
|
--exclude '*-beta*' \
|
||||||
release_notes="Voir les commits pour le détail des changements."
|
--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
|
||||||
fi
|
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
|
- name: Create or update release
|
||||||
env:
|
env:
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|
@ -88,7 +73,7 @@ jobs:
|
||||||
sed ':a;N;$!ba;s/\\/\\\\/g;s/"/\\"/g;s/\t/\\t/g;s/\r//g;s/\n/\\n/g'
|
sed ':a;N;$!ba;s/\\/\\\\/g;s/"/\\"/g;s/\t/\\t/g;s/\r//g;s/\n/\\n/g'
|
||||||
}
|
}
|
||||||
|
|
||||||
body="$(json_escape < release_notes.md)"
|
body="$(json_escape < CHANGELOG.md)"
|
||||||
payload="$(printf '{"tag_name":"%s","name":"%s","body":"%s","draft":false,"prerelease":%s}' \
|
payload="$(printf '{"tag_name":"%s","name":"%s","body":"%s","draft":false,"prerelease":%s}' \
|
||||||
"${current_tag}" \
|
"${current_tag}" \
|
||||||
"${current_tag}" \
|
"${current_tag}" \
|
||||||
|
|
|
||||||
220
CHANGELOG.md
220
CHANGELOG.md
|
|
@ -1,220 +0,0 @@
|
||||||
# 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