diff --git a/.forgejo/workflows/release.yaml b/.forgejo/workflows/release.yaml new file mode 100644 index 0000000..b58bf3d --- /dev/null +++ b/.forgejo/workflows/release.yaml @@ -0,0 +1,123 @@ +name: QGato CLI Release Build + +on: + workflow_dispatch: {} + +jobs: + build: + runs-on: alpine + + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Check Go version + run: | + if ! command -v go >/dev/null; then + echo "❌ Go is not installed" + exit 1 + fi + echo "✅ Go version:" + 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" + + - name: Build all targets + run: | + 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}" + [ "$OS" = "windows" ] && OUT="${OUT}.exe" + + echo "🔨 Building $OUT" + + if [ "$ARCH" = "arm" ]; then + case "$VARIANT" in + v7) GOARM=7 ;; + v6) GOARM=6 ;; + *) GOARM=7 ;; # default fallback + esac + GOOS=$OS GOARCH=arm GOARM=$GOARM \ + go build -ldflags="-s -w" -o "$OUT" ./. + else + GOOS=$OS GOARCH=$ARCH \ + go build -ldflags="-s -w" -o "$OUT" ./. + fi + done + + - name: Create Forgejo release + run: | + TAG_NAME=$(cat version.txt) + echo "📦 Creating release for tag: $TAG_NAME" + + DOWNLOAD_BASE="https://weforge.xyz/spitfire/Search/releases/download/$TAG_NAME" + + echo "| Arch | Linux | Windows |" > release.md + echo "|-----------|------------------------------------------|----------------------------------------------|" >> release.md + echo "| amd64 | [qgato-linux-amd64]($DOWNLOAD_BASE/qgato-linux-amd64) | [qgato-windows-amd64.exe]($DOWNLOAD_BASE/qgato-windows-amd64.exe) |" >> release.md + echo "| arm64 | [qgato-linux-arm64]($DOWNLOAD_BASE/qgato-linux-arm64) | [qgato-windows-arm64.exe]($DOWNLOAD_BASE/qgato-windows-arm64.exe) |" >> release.md + echo "| armv7 | [qgato-linux-armv7]($DOWNLOAD_BASE/qgato-linux-armv7) | — |" >> release.md + echo "| armv6 | [qgato-linux-armv6]($DOWNLOAD_BASE/qgato-linux-armv6) | — |" >> release.md + echo "| riscv64 | [qgato-linux-riscv64]($DOWNLOAD_BASE/qgato-linux-riscv64) | — |" >> release.md + + 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 }} + + - name: Upload all binaries + 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) + + for BIN in qgato-*; do + echo "📤 Uploading $BIN" + CONTENT_TYPE="application/octet-stream" + case "$BIN" in + *.exe) CONTENT_TYPE="application/vnd.microsoft.portable-executable" ;; + esac + + curl -sSL -X POST "$FORGEJO_API/repos/${OWNER}/${REPO}/releases/${RELEASE_ID}/assets?name=$BIN" \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: $CONTENT_TYPE" \ + --data-binary "@$BIN" + done + env: + FORGEJO_API: https://weforge.xyz/api/v1 + OWNER: partisan + REPO: qgato + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..8adc70f --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +0.8.0 \ No newline at end of file