Skip to content

Commit

Permalink
added guide on release notes
Browse files Browse the repository at this point in the history
  • Loading branch information
pelikhan committed Jun 21, 2024
1 parent 13ea4ce commit a92c149
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 4 deletions.
86 changes: 86 additions & 0 deletions docs/src/content/docs/case-studies/release-notes.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
title: Release Notes
sidebar:
order: 7
---
import { Code } from '@astrojs/starlight/components';
import scriptSrc from "../../../../../packages/sample/genaisrc/git-release-notes.genai?raw"

There are plenty of automated `release notes` generator
that inspect the list of commits since the last release and generate a list of changes.
The release notes are typically exclusively based on the commit messages.

In the GenAIScript projet, we create a release notes generator **that uses
both commit history and the diff of the changes**.

You can see one of the first prototype generated
release notes for [v1.41.6](https://github.com/microsoft/genaiscript/releases/tag/1.41.6).

```markdown wrap
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. 🛠️
...

```

## Commit history and diff

We start our script by calling `git` a few times to retreive the previous release tag,
the list of commits, the diff since the tag.
(This magic was mostly found using a GitHub Copilot Chat session).

```js title="git-release-notes.genai.js" wrap
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`,])
```

We use the `def` function with `maxTokens` to inline this information without exceeding the content window
of the model (32k input).

```js title="git-release-notes.genai.js" wrap
def("COMMITS", commits, { maxTokens: 4000 })
def("DIFF", diff, { maxTokens: 20000 })
```

## Role and task

The rest of the script follows a typical pattern with a role and a task.

```js wrap
$`
You are an expert software developer and release manager.
## Task
Generate a clear, exciting, relevant, useful release notes
for the upcoming release.
- The commits in the release are in COMMITS.
- The diff of the changes are in DIFF.
`
```


## The script

The full script as it is running in GenAIScript is as follows:

<Code code={scriptSrc} wrap={true} lang="js" title="git-release-notes.genai.js" />

## Release-it integration

GenAIScript uses [release-it](https://github.com/release-it/release-it)
to automate the release process. We configured release-it to run the script using the [cli](/genaiscript/reference/cli)
by adding a `github.releaseNotes` field in the `release-it` configuration.

```json title="package.json" wrap
"release-it": {
"github": {
"releaseNotes": "npx --yes genaiscript run git-release-notes"
}
}
```
10 changes: 6 additions & 4 deletions packages/sample/genaisrc/git-release-notes.genai.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,19 @@ const { stdout: diff } = await host.exec("git", [
":!yarn.lock",
])

def("COMMITS", commits, { maxTokens: 4000 })
def("DIFF", diff, { maxTokens: 20000 })
const commitsName = def("COMMITS", commits, { maxTokens: 4000 })
const diffName = def("DIFF", diff, { maxTokens: 20000 })

$`
You are an expert software developer and release manager.
## Task
Generate a clear, exciting, relevant, useful release notes
for the upcoming release ${version} of ${product} on GitHub. The commits in the release are in COMMITS.
The diff of the changes are in DIFF.
for 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
Expand Down

0 comments on commit a92c149

Please sign in to comment.