Initial Gitea Runner Debian builder

This commit is contained in:
2026-05-08 18:36:54 +02:00
commit c6ab070c09
13 changed files with 299 additions and 0 deletions
Executable
+143
View File
@@ -0,0 +1,143 @@
#!/bin/bash
set -e
PACKAGE_NAME="gitea-runner"
BINARY_NAME="gitea-runner"
DOWNLOAD_NAME="gitea-runner"
RELEASE_REPO="../gitea-runner-deb"
resolve_version() {
if [[ -n "${1:-}" ]]; then
VERSION_SOURCE="command line argument"
VERSION="$1"
return 0
fi
if [[ -n "${GITEA_RUNNER_VERSION:-}" ]]; then
VERSION_SOURCE="GITEA_RUNNER_VERSION environment variable"
VERSION="${GITEA_RUNNER_VERSION}"
return 0
fi
if VERSION=$(curl -fsSL https://gitea.com/api/v1/repos/gitea/runner/releases/latest 2>/dev/null | jq -r '.tag_name // empty' 2>/dev/null); then
VERSION="${VERSION#v}"
if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
VERSION_SOURCE="Gitea releases API"
return 0
fi
fi
if VERSION=$(curl -fsSL https://dl.gitea.com/gitea-runner/version.json 2>/dev/null | jq -r '.latest.version // empty' 2>/dev/null); then
VERSION="${VERSION#v}"
if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
VERSION_SOURCE="dl.gitea.com version.json fallback"
return 0
fi
fi
echo "Unable to determine the latest Gitea Runner version. Set GITEA_RUNNER_VERSION or pass a version as the first argument." >&2
exit 1
}
resolve_version "${1:-}"
DOWNLOAD_BASE_URL="${GITEA_RUNNER_DOWNLOAD_BASE_URL:-https://dl.gitea.com/gitea-runner/${VERSION}}"
BUILD_ROOT="build/${VERSION}"
DIST_ROOT="dist"
echo "Current version: ${VERSION}"
echo "Version source: ${VERSION_SOURCE}"
ARCHS=("amd64" "arm64")
FILES=("xz" "xz.asc" "xz.sha256" "xz.sha256.asc")
prune_dist_cache() {
local arch="$1"
local dist_dir="${DIST_ROOT}/${arch}"
local keep_prefix="${DOWNLOAD_NAME}-${VERSION}-linux-${arch}."
mkdir -p "${dist_dir}"
find "${dist_dir}" -maxdepth 1 -type f -name "${DOWNLOAD_NAME}-*" ! -name "${keep_prefix}*" -print -delete
}
for ARCH in "${ARCHS[@]}"; do
echo "Pruning old cache entries in ${DIST_ROOT}/${ARCH}"
prune_dist_cache "${ARCH}"
done
if [[ -f "${RELEASE_REPO}/${PACKAGE_NAME}_${VERSION}_amd64.deb" ]] && [[ -f "${RELEASE_REPO}/${PACKAGE_NAME}_${VERSION}_arm64.deb" ]]; then
echo "SKIP: Version ${VERSION} already built and present in release repo."
exit 0
fi
for ARCH in "${ARCHS[@]}"; do
echo "Downloading Gitea Runner ${VERSION} for ${ARCH} ..."
for FILE in "${FILES[@]}"; do
FILE_NAME="${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.${FILE}"
FILE_URL="${DOWNLOAD_BASE_URL}/${FILE_NAME}"
TARGET_FILE="${DIST_ROOT}/${ARCH}/${FILE_NAME}"
if [[ -f "$TARGET_FILE" ]]; then
echo "File already exists: $TARGET_FILE (skipping)"
else
echo "Downloading: $FILE_URL"
wget -q "$FILE_URL" -O "$TARGET_FILE"
fi
done
done
for ARCH in "${ARCHS[@]}"; do
echo "Verifying GPG signature for ${ARCH} ..."
gpg --verify "${DIST_ROOT}/${ARCH}/${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz.asc" "${DIST_ROOT}/${ARCH}/${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz"
gpg --verify "${DIST_ROOT}/${ARCH}/${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz.sha256.asc" "${DIST_ROOT}/${ARCH}/${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz.sha256"
done
for ARCH in "${ARCHS[@]}"; do
echo "Verifying SHA256 checksum for ${ARCH} ..."
(cd "${DIST_ROOT}/${ARCH}" && sha256sum -c "${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz.sha256")
done
for ARCH in "${ARCHS[@]}"; do
PACKAGE_DIR="${BUILD_ROOT}/${ARCH}"
mkdir -p "${PACKAGE_DIR}"
cp -a "${ARCH}/." "${PACKAGE_DIR}/"
mkdir -p "${PACKAGE_DIR}/opt/gitea-runner/bin"
xz -dc "${DIST_ROOT}/${ARCH}/${DOWNLOAD_NAME}-${VERSION}-linux-${ARCH}.xz" > "${PACKAGE_DIR}/opt/gitea-runner/bin/${BINARY_NAME}" || { echo "Extraction failed for ${ARCH}"; exit 1; }
if [[ ! -s "${PACKAGE_DIR}/opt/gitea-runner/bin/${BINARY_NAME}" ]]; then
echo "Extracted file is empty for ${ARCH}. Something went wrong."
exit 1
fi
chmod +x "${PACKAGE_DIR}/opt/gitea-runner/bin/${BINARY_NAME}"
done
for ARCH in "${ARCHS[@]}"; do
echo "Building package for ${ARCH} ..."
PACKAGE_DIR="${BUILD_ROOT}/${ARCH}"
sed -i "s/^Version: .*/Version: ${VERSION}/" "${PACKAGE_DIR}/DEBIAN/control"
dpkg-deb --build "${PACKAGE_DIR}" "${PACKAGE_NAME}_${VERSION}_${ARCH}.deb"
done
echo "All packages built successfully:"
ls -lh "${PACKAGE_NAME}_${VERSION}_"*.deb
echo "Moving .deb packages to release repo ..."
mv "${PACKAGE_NAME}_${VERSION}_"*.deb "${RELEASE_REPO}/"
(
cd "${RELEASE_REPO}"
echo "Updating APT package index ..."
dpkg-scanpackages --multiversion . override > Packages
dpkg-scanpackages --multiversion . override | gzip -9c > Packages.gz
echo "Generating Release file ..."
apt-ftparchive -c=apt-release.conf release . > Release
git add --all .
if ! git diff --cached --quiet; then
echo "Committing release ..."
git commit -m "Release Gitea Runner ${VERSION}"
else
echo "No changes to commit."
fi
)