Notes de version
Il existe de nombreux générateurs automatisés de notes de version
qui examinent la liste des commits depuis la dernière version et génèrent une liste de modifications. Les notes de version sont généralement basées exclusivement sur les messages de commit.
Dans le projet GenAIScript, nous créons un générateur de notes de version qui utilise à la fois l’historique des commits et le diff des modifications.
Vous pouvez voir l’une des premières notes de version générées par prototype pour v1.41.6.
We are excited to announce the release of GenAIScript 1.41.6! 🎉
In this release, we've made some significant improvements to enhance your experience. Here are the key changes:
Improved Release Script: We've fine-tuned our release script to ensure smoother and more efficient releases in the future. 🛠️...
Historique des commits et diff
Section intitulée « Historique des commits et diff »Nous commençons notre script en appelant git
plusieurs fois pour récupérer le tag de la version précédente, la liste des commits, et le diff depuis ce tag. (Cette astuce a principalement été trouvée lors d’une session GitHub Copilot Chat).
const { stdout: tag } = await host.exec( `git describe --tags --abbrev=0 HEAD^`,);
const { stdout: commits } = await host.exec( `git log HEAD...${tag}`,);
const { stdout: diff } = await host.exec( `git diff ${tag}..HEAD`,);
Nous utilisons la fonction def
avec maxTokens
pour intégrer ces informations sans dépasser la fenêtre de contenu du modèle (entrée de 32k).
def("COMMITS", commits, { maxTokens: 4000 });def("DIFF", diff, { maxTokens: 20000 });
Rôle et tâche
Section intitulée « Rôle et tâche »Le reste du script suit un schéma typique avec un rôle et une tâche.
$`You are an expert software developer and release manager.
## Task
Generate a clear, exciting, relevant, useful release notesfor the upcoming release.
- The commits in the release are in COMMITS.- The diff of the changes are in DIFF.`;
Le script
Section intitulée « Le script »Le script complet tel qu’il s’exécute dans GenAIScript est le suivant :
script({ system: ["system"], temperature: 0.5, model: "github:openai/gpt-4o",});
const product = env.vars.product || "GenAIScript";
// find previous tagconst { version } = await workspace.readJSON("package.json");const tag = await git.lastTag();const excludedPaths = [ "package.json", "**/package.json", "yarn.lock", "**/yarn.lock", "**/genaiscript.d.ts", "**/jsconfig.json", "docs/**", ".github/*", ".vscode/*", "slides/**", "THIRD_PARTY_LICENSES.md",];const commits = ( await git.log({ excludedGrep: "(skip ci|THIRD_PARTY_NOTICES|THIRD_PARTY_LICENSES|genai)", base: tag, head: "HEAD", excludedPaths, })) .map(({ message }) => message) .join("\n");console.debug(commits.slice(0, 50) + "...");const diff = await git.diff({ base: tag, head: "HEAD", excludedPaths,});console.debug(diff.slice(0, 1000) + "...");
const commitsName = def("COMMITS", commits, { ignoreEmpty: true, maxTokens: 3000,});const diffName = def("DIFF", diff, { maxTokens: 12000 });
$`You are an expert software developer and release manager.
## Task
Generate a clear, exciting, relevant, useful release notesfor the upcoming release ${version} of ${product} on GitHub.
- The commits in the release are in ${commitsName}.- The diff of the changes are in ${diffName}.
## Guidelines
- only include the most important changes. All changes must be in the commits.- tell a story about the changes- use emojis- ignore commits with '[skip ci]' in the message- do NOT give a commit overview- do NOT add a top level title- do NOT mention ignore commits or instructions- be concise- do not wrap text in markdown section`;
Intégration Release-it
Section intitulée « Intégration Release-it »GenAIScript utilise release-it pour automatiser le processus de publication. Nous avons configuré release-it pour exécuter le script à l’aide du cli en ajoutant un champ github.releaseNotes
dans la configuration de release-it
.
"release-it": { "github": { "releaseNotes": "node packages/cli/dist/src/index.js run git-release-notes --cache --cache-name releases --no-run-trace --no-output-trace" } }