mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2026-08-27 15:41:19 +02:00
8b86400975
* ci : create pre-release with change log and nightly link in make-release After pushing the tag, create a pre-release using ggml-org/action-create-release. The release description is generated by scripts/make-release-desc.sh: the change log between the current and previous version (one line per commit), a link to the corresponding nightly build when it exists, and a note that semantic versioning is still work in progress. Assisted-by: pi:llama.cpp/Qwen3.8-27B * cmake : bump version to 0.1.2 Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : find the nightly tag by commit in make-release-desc.sh The nightly release is guaranteed by the release checks to point at HEAD, so instead of reconstructing its name (commit count, branch, hash) just pick the b* tag pointing at HEAD. This also drops the RELEASE_BRANCH env var from the workflow. Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : resolve the release commit from the version tag in make-release-desc.sh The change log and nightly lookup now use the commit the version tag points at (HEAD when the tag does not exist), instead of always HEAD. This makes the script usable locally for older versions, e.g. ./scripts/make-release-desc.sh v0.1.1. The tag is resolved to a SHA first, since --points-at does not peel annotated tags. Assisted-by: pi:llama.cpp/Qwen3.8-27B * ci : normalize the version argument in make-release-desc.sh Accept the version with or without the leading v (0.1.1 == v0.1.1) and reject anything else, instead of silently treating a bare version as a non-existent tag name. Assisted-by: pi:llama.cpp/Qwen3.8-27B * cont : clean-up
88 lines
3.3 KiB
Bash
Executable File
88 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Generate the description of a release: the previous release version, the
|
|
# change log and the link to the nightly release corresponding to the commit being released.
|
|
#
|
|
# Usage: make-release-desc.sh <version>
|
|
# <version>: current release version (v<maj>.<min>.<pat>, the leading v is optional)
|
|
#
|
|
# The previous version is the highest plain semver tag (v<maj>.<min>.<pat>)
|
|
# strictly below <version>. The change log lists all commits between the
|
|
# previous version tag and the release commit, one line per commit.
|
|
#
|
|
# The release commit is the commit <version> points at when the tag exists,
|
|
# HEAD otherwise. The nightly release is the b* tag pointing at that commit
|
|
# (release.yml tags the same commit); the link is only generated when that
|
|
# tag exists.
|
|
#
|
|
# Env (when running in GitHub Actions):
|
|
# GITHUB_OUTPUT: previous_tag, changelog_title, changelog and nightly are written here
|
|
# GITHUB_REPOSITORY: owner/repo, used to build the nightly release URL (skipped when unset)
|
|
set -euo pipefail
|
|
|
|
if [[ $# -ne 1 ]]; then
|
|
echo "Usage: $(basename "$0") <version>"
|
|
exit 1
|
|
fi
|
|
VERSION="$1"
|
|
|
|
# Accept the version with or without the leading v, reject anything else
|
|
if [[ "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
VERSION="v${VERSION}"
|
|
elif [[ ! "${VERSION}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "Error: invalid version '${VERSION}' (expected v<maj>.<min>.<pat>)"
|
|
exit 1
|
|
fi
|
|
|
|
# Make sure all remote tags are available locally (skipped on local runs without origin)
|
|
if ! git fetch --tags origin 2>/dev/null; then
|
|
echo "Warning: could not fetch tags from origin (local run?)"
|
|
fi
|
|
|
|
# Release commit: the commit <version> points at when the tag exists, HEAD otherwise.
|
|
if ! RELEASE_COMMIT="$(git rev-parse -q --verify "refs/tags/${VERSION}^{commit}" 2>/dev/null)"; then
|
|
RELEASE_COMMIT="$(git rev-parse HEAD)"
|
|
fi
|
|
|
|
echo "Release commit: $(git rev-parse --short "${RELEASE_COMMIT}")"
|
|
|
|
PREV="$( { git tag --list; echo "${VERSION}"; } \
|
|
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
|
|
| sort -V \
|
|
| awk -v cur="${VERSION}" '$0 == cur { exit } { prev = $0 } END { print prev }')"
|
|
|
|
if [[ -n "${PREV}" ]]; then
|
|
CHANGELOG="$(git log --oneline "${PREV}..${RELEASE_COMMIT}")"
|
|
CHANGELOG_TITLE="Change log since ${PREV}"
|
|
else
|
|
CHANGELOG="(no previous release tag found)"
|
|
CHANGELOG_TITLE="Change log"
|
|
fi
|
|
|
|
# Nightly release: the b* tag pointing at the release commit (|| true: no match is not an error)
|
|
NIGHTLY_TAG="$(git tag --points-at "${RELEASE_COMMIT}" | grep -E '(^|-)b[0-9]+(-[0-9a-f]{7})?$' | head -n 1 || true)"
|
|
|
|
NIGHTLY=""
|
|
if [[ -n "${NIGHTLY_TAG}" ]]; then
|
|
if [[ -n "${GITHUB_REPOSITORY:-}" ]]; then
|
|
NIGHTLY_URL="https://github.com/${GITHUB_REPOSITORY}/releases/tag/${NIGHTLY_TAG}"
|
|
NIGHTLY="**Nightly build:** [${NIGHTLY_TAG}](${NIGHTLY_URL})"
|
|
echo "Nightly release: ${NIGHTLY_URL}"
|
|
fi
|
|
else
|
|
echo "No nightly release found for commit $(git rev-parse --short "${RELEASE_COMMIT}")"
|
|
fi
|
|
|
|
echo "Previous version: ${PREV:-none}"
|
|
echo "${CHANGELOG}"
|
|
|
|
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
|
{
|
|
echo "previous_tag=${PREV}"
|
|
echo "changelog_title=${CHANGELOG_TITLE}"
|
|
echo "nightly=${NIGHTLY}"
|
|
echo "changelog<<CHANGELOG_EOF"
|
|
echo "${CHANGELOG}"
|
|
echo "CHANGELOG_EOF"
|
|
} >> "${GITHUB_OUTPUT}"
|
|
fi
|