mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2026-09-04 02:37:27 +02:00
ci : merge scripts into single script
This commit is contained in:
@@ -26,28 +26,17 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Determine version
|
- name: Run release checks
|
||||||
id: version
|
id: checks
|
||||||
run: bash scripts/release-determine-version.sh "${{ github.event.inputs.version }}"
|
run: bash scripts/make-release-checks.sh "${{ github.event.inputs.version }}" ${{ github.event.inputs.dry_run == 'true' && '--dry-run' || '' }}
|
||||||
|
|
||||||
- name: Check tag does not already exist
|
|
||||||
run: bash scripts/release-check-tag.sh "${{ steps.version.outputs.version }}"
|
|
||||||
|
|
||||||
- name: Check release.yml completed successfully for HEAD
|
|
||||||
run: bash scripts/release-check-ci.sh ${{ github.event.inputs.dry_run == 'true' && '--dry-run' || '' }}
|
|
||||||
env:
|
env:
|
||||||
GITHUB_REPOSITORY: ${{ github.repository }}
|
GITHUB_REPOSITORY: ${{ github.repository }}
|
||||||
|
|
||||||
- name: Check local ggml matches upstream
|
|
||||||
run: bash scripts/release-check-ggml.sh ${{ github.event.inputs.dry_run == 'true' && '--dry-run' || '' }}
|
|
||||||
|
|
||||||
- name: Create release tag
|
- name: Create release tag
|
||||||
if: ${{ github.event.inputs.dry_run == 'false' }}
|
if: ${{ github.event.inputs.dry_run == 'false' }}
|
||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.version.outputs.version }}"
|
VERSION="${{ steps.checks.outputs.version }}"
|
||||||
git config user.name "github-actions[bot]"
|
git config user.name "github-actions[bot]"
|
||||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
git tag -a "${VERSION}" -m "Release ${VERSION}"
|
git tag -a "${VERSION}" -m "Release ${VERSION}"
|
||||||
@@ -58,4 +47,4 @@ jobs:
|
|||||||
if: ${{ github.event.inputs.dry_run == 'true' }}
|
if: ${{ github.event.inputs.dry_run == 'true' }}
|
||||||
run: |
|
run: |
|
||||||
echo "Dry run complete - all checks passed."
|
echo "Dry run complete - all checks passed."
|
||||||
echo "Would have created tag: ${{ steps.version.outputs.version }}"
|
echo "Would have created tag: ${{ steps.checks.outputs.version }}"
|
||||||
|
|||||||
Executable
+90
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Run all pre-release checks and determine the release version.
|
||||||
|
#
|
||||||
|
# Usage: make-release-checks.sh [version] [--dry-run]
|
||||||
|
# version: optional explicit version (e.g. v0.1.0); reads CMakeLists.txt if omitted
|
||||||
|
# --dry-run: warn on failures instead of aborting
|
||||||
|
#
|
||||||
|
# Env (when running in GitHub Actions): GH_TOKEN, GITHUB_REPOSITORY, GITHUB_OUTPUT
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
|
|
||||||
|
VERSION_ARG=""
|
||||||
|
DRY_RUN=false
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--dry-run) DRY_RUN=true ;;
|
||||||
|
-*) echo "Unknown argument: $arg"; exit 1 ;;
|
||||||
|
*) VERSION_ARG="$arg" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "$VERSION_ARG" ]]; then
|
||||||
|
VERSION="$VERSION_ARG"
|
||||||
|
else
|
||||||
|
MAJOR=$(grep "set(LLAMA_VERSION_MAJOR" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
MINOR=$(grep "set(LLAMA_VERSION_MINOR" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
PATCH=$(grep "set(LLAMA_VERSION_PATCH" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
VERSION="v${MAJOR}.${MINOR}.${PATCH}"
|
||||||
|
fi
|
||||||
|
echo "Determined version: ${VERSION}"
|
||||||
|
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
||||||
|
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Checking that tag ${VERSION} does not already exist..."
|
||||||
|
if git ls-remote --tags origin "${VERSION}" | grep -q "${VERSION}"; then
|
||||||
|
echo "Error: tag ${VERSION} already exists on remote"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Tag ${VERSION} does not exist on remote - OK"
|
||||||
|
|
||||||
|
SHA=$(git rev-parse HEAD)
|
||||||
|
echo "Checking release.yml status for commit ${SHA}..."
|
||||||
|
if [[ -z "${GITHUB_REPOSITORY:-}" ]]; then
|
||||||
|
echo "Warning: GITHUB_REPOSITORY not set - skipping CI check (local run)"
|
||||||
|
else
|
||||||
|
RUNS=$(gh api "repos/${GITHUB_REPOSITORY}/actions/workflows/release.yml/runs" \
|
||||||
|
--jq "[.workflow_runs[] | select(.head_sha == \"${SHA}\" and .conclusion == \"success\")] | length")
|
||||||
|
if [[ "$RUNS" -eq 0 ]]; then
|
||||||
|
if [[ "$DRY_RUN" == "true" ]]; then
|
||||||
|
echo "Warning: no successful release.yml run found for HEAD (${SHA}) (dry run, continuing)."
|
||||||
|
else
|
||||||
|
echo "Error: no successful release.yml run found for HEAD (${SHA})"
|
||||||
|
echo "The nightly build must complete successfully before making a release."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Found successful release.yml run for HEAD."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
MAJOR=$(grep "set(GGML_VERSION_MAJOR" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
MINOR=$(grep "set(GGML_VERSION_MINOR" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
PATCH=$(grep "set(GGML_VERSION_PATCH" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
||||||
|
GGML_VERSION="v${MAJOR}.${MINOR}.${PATCH}"
|
||||||
|
echo "Local ggml version: ${GGML_VERSION}"
|
||||||
|
|
||||||
|
if ! git clone --depth 1 --branch "${GGML_VERSION}" https://github.com/ggml-org/ggml.git upstream-ggml 2>/dev/null; then
|
||||||
|
echo "Warning: tag ${GGML_VERSION} not found in upstream ggml - skipping comparison"
|
||||||
|
else
|
||||||
|
echo "Comparing local ggml/ src and include with upstream ${GGML_VERSION}..."
|
||||||
|
DIFF=$(diff -rq "$REPO_ROOT/ggml/src" upstream-ggml/src 2>&1 || true)
|
||||||
|
DIFF+=$(diff -rq "$REPO_ROOT/ggml/include" upstream-ggml/include 2>&1 || true)
|
||||||
|
DIFF+=$(diff "$REPO_ROOT/ggml/CMakeLists.txt" upstream-ggml/CMakeLists.txt 2>&1 || true)
|
||||||
|
rm -rf upstream-ggml
|
||||||
|
if [[ -n "$DIFF" ]]; then
|
||||||
|
echo "local ggml/ differs from upstream ${GGML_VERSION}:"
|
||||||
|
echo "$DIFF"
|
||||||
|
if [[ "$DRY_RUN" == "true" ]]; then
|
||||||
|
echo "Warning: would abort release due to ggml mismatch (dry run, continuing)."
|
||||||
|
else
|
||||||
|
echo "Error: ggml must match upstream before making a release."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "local ggml/ matches upstream ${GGML_VERSION}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Check that release.yml completed successfully for the current HEAD commit.
|
|
||||||
# Usage: release-check-ci.sh [--dry-run]
|
|
||||||
# Env: GH_TOKEN, GITHUB_REPOSITORY
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
DRY_RUN=false
|
|
||||||
for arg in "$@"; do
|
|
||||||
case "$arg" in
|
|
||||||
--dry-run) DRY_RUN=true ;;
|
|
||||||
*) echo "Unknown argument: $arg"; exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
SHA=$(git rev-parse HEAD)
|
|
||||||
echo "Checking release.yml status for commit ${SHA}..."
|
|
||||||
|
|
||||||
RUNS=$(gh api "repos/${GITHUB_REPOSITORY}/actions/workflows/release.yml/runs" \
|
|
||||||
--jq "[.workflow_runs[] | select(.head_sha == \"${SHA}\" and .conclusion == \"success\")] | length")
|
|
||||||
|
|
||||||
if [[ "$RUNS" -eq 0 ]]; then
|
|
||||||
if [[ "$DRY_RUN" == "true" ]]; then
|
|
||||||
echo "Warning: no successful release.yml run found for HEAD (${SHA}) (dry run, continuing)."
|
|
||||||
else
|
|
||||||
echo "Error: no successful release.yml run found for HEAD (${SHA})"
|
|
||||||
echo "The nightly build must complete successfully before making a release."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Found successful release.yml run for HEAD."
|
|
||||||
fi
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Check that the vendored ggml/ matches the corresponding upstream ggml release tag.
|
|
||||||
# Usage: release-check-ggml.sh [--dry-run]
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
||||||
|
|
||||||
DRY_RUN=false
|
|
||||||
for arg in "$@"; do
|
|
||||||
case "$arg" in
|
|
||||||
--dry-run) DRY_RUN=true ;;
|
|
||||||
*) echo "Unknown argument: $arg"; exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
MAJOR=$(grep "set(GGML_VERSION_MAJOR" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
MINOR=$(grep "set(GGML_VERSION_MINOR" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
PATCH=$(grep "set(GGML_VERSION_PATCH" "$REPO_ROOT/ggml/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
GGML_VERSION="v${MAJOR}.${MINOR}.${PATCH}"
|
|
||||||
echo "Local ggml version: ${GGML_VERSION}"
|
|
||||||
|
|
||||||
if ! git clone --depth 1 --branch "${GGML_VERSION}" https://github.com/ggml-org/ggml.git upstream-ggml 2>/dev/null; then
|
|
||||||
echo "Warning: tag ${GGML_VERSION} not found in upstream ggml - skipping comparison"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Comparing local ggml/ src and include with upstream ${GGML_VERSION}..."
|
|
||||||
DIFF=$(diff -rq \
|
|
||||||
"$REPO_ROOT/ggml/src" upstream-ggml/src \
|
|
||||||
2>&1 || true)
|
|
||||||
DIFF+=$(diff -rq \
|
|
||||||
"$REPO_ROOT/ggml/include" upstream-ggml/include \
|
|
||||||
2>&1 || true)
|
|
||||||
DIFF+=$(diff \
|
|
||||||
"$REPO_ROOT/ggml/CMakeLists.txt" upstream-ggml/CMakeLists.txt \
|
|
||||||
2>&1 || true)
|
|
||||||
|
|
||||||
rm -rf upstream-ggml
|
|
||||||
|
|
||||||
if [[ -n "$DIFF" ]]; then
|
|
||||||
echo "local ggml/ differs from upstream ${GGML_VERSION}:"
|
|
||||||
echo "$DIFF"
|
|
||||||
if [[ "$DRY_RUN" == "true" ]]; then
|
|
||||||
echo "Warning: would abort release due to ggml mismatch (dry run, continuing)."
|
|
||||||
else
|
|
||||||
echo "Error: ggml must match upstream before making a release."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "local ggml/ matches upstream ${GGML_VERSION}"
|
|
||||||
fi
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Check that a release tag does not already exist on the remote.
|
|
||||||
# Usage: release-check-tag.sh <version>
|
|
||||||
# version: the tag to check (e.g. v0.1.0)
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
if [[ -z "${1:-}" ]]; then
|
|
||||||
echo "Error: version argument is required"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
VERSION="$1"
|
|
||||||
|
|
||||||
echo "Checking that tag ${VERSION} does not already exist..."
|
|
||||||
if git ls-remote --tags origin "${VERSION}" | grep -q "${VERSION}"; then
|
|
||||||
echo "Error: tag ${VERSION} already exists on remote"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Tag ${VERSION} does not exist on remote - OK"
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Determine the release version for llama.cpp.
|
|
||||||
# Usage: release-determine-version.sh [version]
|
|
||||||
# version: optional explicit version (e.g. v0.1.0); reads CMakeLists.txt if omitted
|
|
||||||
# Writes "version=<ver>" to $GITHUB_OUTPUT when running in GitHub Actions.
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
||||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
||||||
|
|
||||||
if [[ -n "${1:-}" ]]; then
|
|
||||||
VERSION="$1"
|
|
||||||
else
|
|
||||||
MAJOR=$(grep "set(LLAMA_VERSION_MAJOR" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
MINOR=$(grep "set(LLAMA_VERSION_MINOR" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
PATCH=$(grep "set(LLAMA_VERSION_PATCH" "$REPO_ROOT/CMakeLists.txt" | grep -oP '\d+')
|
|
||||||
VERSION="v${MAJOR}.${MINOR}.${PATCH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Determined version: ${VERSION}"
|
|
||||||
|
|
||||||
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
|
|
||||||
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
Reference in New Issue
Block a user