Search/.forgejo/workflows/release.yaml

144 lines
5.2 KiB
YAML
Raw Normal View History

2025-06-01 10:23:44 +02:00
name: QGato CLI Release Build
on:
workflow_dispatch: {}
jobs:
build:
2025-06-01 15:10:49 +00:00
runs-on: debian
2025-06-01 10:23:44 +02:00
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Check Go version
run: |
go version
- name: Extract version from version.txt
id: version
run: |
VERSION=$(cat version.txt)
VERSION="v${VERSION#v}"
echo "$VERSION" > version.txt
echo "✅ Detected version: $VERSION"
2025-06-01 08:25:47 +00:00
- name: Build all targets
2025-06-01 10:23:44 +02:00
run: |
2025-06-01 08:35:52 +00:00
mkdir -p bundles
2025-06-01 10:23:44 +02:00
PLATFORMS=(
"linux/amd64"
"linux/arm64"
"linux/arm/v7"
"linux/arm/v6"
"linux/riscv64"
"windows/amd64"
"windows/arm64"
)
for TARGET in "${PLATFORMS[@]}"; do
OS=$(echo "$TARGET" | cut -d/ -f1)
ARCH=$(echo "$TARGET" | cut -d/ -f2)
VARIANT=$(echo "$TARGET" | cut -d/ -f3)
OUT="qgato-${OS}-${ARCH}"
[ -n "$VARIANT" ] && OUT="${OUT}${VARIANT}"
2025-06-01 08:35:52 +00:00
BIN="$OUT"
[ "$OS" = "windows" ] && BIN="${OUT}.exe"
echo "🔨 Building $BIN"
2025-06-01 15:10:49 +00:00
# Disable CGO for cross-compiled targets (everything except native linux/amd64)
if [ "$TARGET" = "linux/amd64" ]; then
export CGO_ENABLED=1
else
export CGO_ENABLED=0
fi
2025-06-01 10:23:44 +02:00
if [ "$ARCH" = "arm" ]; then
case "$VARIANT" in
v7) GOARM=7 ;;
v6) GOARM=6 ;;
2025-06-01 08:25:47 +00:00
*) GOARM=7 ;;
2025-06-01 10:23:44 +02:00
esac
GOOS=$OS GOARCH=arm GOARM=$GOARM \
2025-06-01 08:35:52 +00:00
go build -ldflags="-s -w" -o "$BIN" ./.
2025-06-01 10:23:44 +02:00
else
GOOS=$OS GOARCH=$ARCH \
2025-06-01 08:35:52 +00:00
go build -ldflags="-s -w" -o "$BIN" ./.
fi
echo "📦 Packaging $BIN with required files..."
2025-06-01 15:10:49 +00:00
2025-06-01 08:35:52 +00:00
PKG_DIR="bundle-$OUT"
mkdir "$PKG_DIR"
cp "$BIN" "$PKG_DIR/"
cp -r lang static templates config.ini "$PKG_DIR/" 2>/dev/null || true
if [ "$OS" = "windows" ]; then
zip -r "bundles/$OUT.zip" "$PKG_DIR"
else
tar -czf "bundles/$OUT.tar.gz" "$PKG_DIR"
2025-06-01 10:23:44 +02:00
fi
2025-06-01 08:35:52 +00:00
rm -rf "$PKG_DIR" "$BIN"
2025-06-01 10:23:44 +02:00
done
2025-06-01 08:25:47 +00:00
- name: Create Forgejo release
2025-06-01 10:23:44 +02:00
run: |
TAG_NAME=$(cat version.txt)
echo "📦 Creating release for tag: $TAG_NAME"
DOWNLOAD_BASE="https://weforge.xyz/spitfire/Search/releases/download/$TAG_NAME"
2025-06-01 08:35:52 +00:00
echo "| Arch | Linux Bundle (.tar.gz) | Windows Bundle (.zip) |" > release.md
echo "|---------|---------------------------------------------------|--------------------------------------------------|" >> release.md
echo "| amd64 | [qgato-linux-amd64.tar.gz]($DOWNLOAD_BASE/qgato-linux-amd64.tar.gz) | [qgato-windows-amd64.zip]($DOWNLOAD_BASE/qgato-windows-amd64.zip) |" >> release.md
echo "| arm64 | [qgato-linux-arm64.tar.gz]($DOWNLOAD_BASE/qgato-linux-arm64.tar.gz) | [qgato-windows-arm64.zip]($DOWNLOAD_BASE/qgato-windows-arm64.zip) |" >> release.md
echo "| armv7 | [qgato-linux-armv7.tar.gz]($DOWNLOAD_BASE/qgato-linux-armv7.tar.gz) | — |" >> release.md
echo "| armv6 | [qgato-linux-armv6.tar.gz]($DOWNLOAD_BASE/qgato-linux-armv6.tar.gz) | — |" >> release.md
echo "| riscv64 | [qgato-linux-riscv64.tar.gz]($DOWNLOAD_BASE/qgato-linux-riscv64.tar.gz) | — |" >> release.md
2025-06-01 10:23:44 +02:00
RELEASE_BODY=$(cat release.md | jq -Rs .)
curl -sSL -X POST "$FORGEJO_API/repos/${OWNER}/${REPO}/releases" \
-H "Authorization: token $FORGEJO_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"tag_name\": \"$TAG_NAME\",
\"name\": \"$TAG_NAME\",
\"body\": $RELEASE_BODY,
\"draft\": false,
\"prerelease\": false
}"
env:
FORGEJO_API: https://weforge.xyz/api/v1
OWNER: spitfire
REPO: Search
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}
2025-06-01 08:35:52 +00:00
- name: Upload all bundles
2025-06-01 10:23:44 +02:00
run: |
TAG_NAME=$(cat version.txt)
RELEASE_ID=$(curl -s -H "Authorization: token $FORGEJO_TOKEN" \
"$FORGEJO_API/repos/${OWNER}/${REPO}/releases/tags/$TAG_NAME" | jq -r .id)
2025-06-01 08:35:52 +00:00
for FILE in bundles/*; do
NAME=$(basename "$FILE")
echo "📤 Uploading $NAME"
2025-06-01 10:23:44 +02:00
CONTENT_TYPE="application/octet-stream"
2025-06-01 08:35:52 +00:00
[[ "$FILE" == *.zip ]] && CONTENT_TYPE="application/zip"
[[ "$FILE" == *.tar.gz ]] && CONTENT_TYPE="application/gzip"
2025-06-01 10:23:44 +02:00
2025-06-01 08:35:52 +00:00
curl -sSL -X POST "$FORGEJO_API/repos/${OWNER}/${REPO}/releases/${RELEASE_ID}/assets?name=$NAME" \
2025-06-01 10:23:44 +02:00
-H "Authorization: token $FORGEJO_TOKEN" \
-H "Content-Type: $CONTENT_TYPE" \
2025-06-01 08:35:52 +00:00
--data-binary "@$FILE"
2025-06-01 10:23:44 +02:00
done
env:
FORGEJO_API: https://weforge.xyz/api/v1
2025-06-01 08:35:52 +00:00
OWNER: spitfire
REPO: Search
FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }}