mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-20 06:58:07 +00:00
929962833d
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"
|