mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-22 17:24:41 +02:00
1. make "pull" and "build" testable and debuggable 2. add more comments for how the build works 3. separate 1.26 and main build tags 4. fix incorrect tag describe (the current `snap info gitea` outputs version 1.22) Legacy logic is kept as is although some of them don't seem good (e.g.: snap version grep, tag finding, etc) --------- Signed-off-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
63 lines
2.6 KiB
Bash
Executable File
63 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
if [ ! -f go.mod -o ! -d snap ]; then
|
|
echo "This script should be run from the root of the gitea repository"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$SNAPCRAFT_PROJECT_NAME" ]; then
|
|
echo "No snapcraft build env, continue with mocking ...."
|
|
craftctl() { echo "* mocking craftctl: $*"; }
|
|
snap() { echo "* mocking snap: $*"; }
|
|
else
|
|
echo "Add working directory to git safe.directory ..."
|
|
git config --global --add safe.directory "$PWD"
|
|
fi
|
|
|
|
# How it works:
|
|
# * snapcraft.io checks out the default branch (e.g.: main during 1.27 dev period)
|
|
# * "override-pull" step gets the latest tag by date (e.g.: v1.26.1)
|
|
# * use "snap info gitea" to get the latest released tag
|
|
# * if the latest tag is not released to stable, checkout that tag and build it for "stable"
|
|
# * otherwise, build the main branch for "devel"
|
|
# * "override-build" step uses build script from the checked out commit to build
|
|
# This approach highly depends on the "main" branch's push.
|
|
|
|
# To debug the logic:
|
|
# * last_committed_tag=v1.26.1 last_released_tag=v1.26.0 ./snap/part-gitea-pull.sh
|
|
# it will checkout tag v1.26.1, and build that for "stable"
|
|
# * last_committed_tag=v1.26.1 last_released_tag=v1.26.1 recent_tag=v1.27.0-dev-205 ./snap/part-gitea-pull.sh
|
|
# it will still use the current branch, and build it for "devel"
|
|
|
|
[ -z "$last_committed_tag" ] && last_committed_tag="$(git for-each-ref --sort=taggerdate --format '%(tag)' refs/tags | tail -n 1)"
|
|
[ -z "$last_released_tag" ] && last_released_tag="$(snap info gitea | awk '$1 == "latest/candidate:" { print $2 }')"
|
|
|
|
if [ "${last_committed_tag}" != "${last_released_tag}" ]; then
|
|
# if the latest tag has not been released to stable, build that tag instead of default branch.
|
|
echo "Build last committed tag ${last_committed_tag} for new release, fetching and checking out ..."
|
|
git fetch --quiet
|
|
git checkout --quiet "${last_committed_tag}"
|
|
# HINT: after this, the "build" step will use that commit's "part-gitea-build.sh", but not this one's
|
|
else
|
|
echo "Build current branch $(git branch --show-current) @ $(git rev-parse HEAD)"
|
|
fi
|
|
|
|
# possible tag names:
|
|
# * v1.27.0-dev-205-gce089f498b
|
|
# * v1.26.1
|
|
# * v1.22.0-rc1-2816-gce089f498b
|
|
# then normalize it to semver format: v1.2.3+dev.205.gce089f498b
|
|
[ -z "$recent_tag" ] && recent_tag="$(git describe --always --tags)"
|
|
echo "Use recent tag $recent_tag to determine version and grade"
|
|
|
|
version_main="$(echo "$recent_tag" | cut -d'-' -f1)"
|
|
version_ext="$(echo "$recent_tag" | cut -d'-' -s -f2- | sed -e 'y/-/./')"
|
|
[ -n "$version_ext" ] && grade=devel || grade=stable
|
|
|
|
version="${version_main}"
|
|
[ -n "$version_ext" ] && version="${version}+${version_ext}"
|
|
|
|
craftctl set version="$version"
|
|
craftctl set grade="$grade"
|