0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-05-16 10:27:36 +02:00

build: Fix snap build (1.26) (#37686)

---------

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>
This commit is contained in:
Lunny Xiao 2026-05-13 10:58:43 -07:00 committed by GitHub
parent 28729ef7e3
commit c7af094b0a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 86 additions and 28 deletions

19
snap/part-gitea-build.sh Executable file
View File

@ -0,0 +1,19 @@
#!/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_PART_INSTALL" ]; then
SNAPCRAFT_PART_INSTALL="./dist/snap"
echo "* using mock install path: $SNAPCRAFT_PART_INSTALL"
fi
command -v pnpm >/dev/null 2>&1 || npm install -g pnpm
TAGS="bindata sqlite sqlite_unlock_notify pam cert" make build
install -D gitea "${SNAPCRAFT_PART_INSTALL}/gitea"
cp -r options "${SNAPCRAFT_PART_INSTALL}/"

62
snap/part-gitea-pull.sh Executable file
View File

@ -0,0 +1,62 @@
#!/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"

View File

@ -2,9 +2,9 @@ name: gitea
summary: Gitea - A painless self-hosted Git service summary: Gitea - A painless self-hosted Git service
description: | description: |
The goal of this project is to make the easiest, fastest, and most painless The goal of this project is to make the easiest, fastest, and most painless
way of setting up a self-hosted Git service. With Go, this can be done with way of setting up a self-hosted Git service with GitHub-like experiences,
an independent binary distribution across ALL platforms that Go supports, including issue tracking, code review, project management, wikis, package registry,
including Linux, Mac OS X, Windows and ARM. Gitea Actions and more.
icon: public/assets/img/logo.png icon: public/assets/img/logo.png
confinement: strict confinement: strict
@ -47,31 +47,8 @@ parts:
build-snaps: [ go/1.26/stable, node/24/stable ] build-snaps: [ go/1.26/stable, node/24/stable ]
build-environment: build-environment:
- LDFLAGS: "" - LDFLAGS: ""
override-pull: | override-pull: craftctl default && ./snap/part-gitea-pull.sh
craftctl default override-build: ./snap/part-gitea-build.sh
git config --global --add safe.directory /root/parts/gitea/src
last_committed_tag="$(git for-each-ref --sort=taggerdate --format '%(tag)' refs/tags | tail -n 1)"
last_released_tag="$(snap info gitea | awk '$1 == "latest/candidate:" { print $2 }')"
# If the latest tag from the upstream project has not been released to
# stable, build that tag instead of master.
if [ "${last_committed_tag}" != "${last_released_tag}" ]; then
git fetch
git checkout "${last_committed_tag}"
fi
version="$(git describe --always | sed -e 's/-/+git/;y/-/./')"
[ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable
craftctl set version="$version"
craftctl set grade="$grade"
override-build: |
set -x
npm install -g pnpm
TAGS="bindata sqlite sqlite_unlock_notify pam cert" make build
install -D gitea "${SNAPCRAFT_PART_INSTALL}/gitea"
cp -r options "${SNAPCRAFT_PART_INSTALL}/"
prime: prime:
- -etc - -etc
- -usr/lib/systemd - -usr/lib/systemd