diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index e0a5214..e9b8c87 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -1,4 +1,5 @@ name: CI + on: push: branches: [main] @@ -12,7 +13,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.26" + go-version: '1.26' - run: go test ./... - run: go vet ./... - run: go build -o review-bot ./cmd/review-bot @@ -25,7 +26,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: "1.26" + go-version: '1.26' - run: go build -o review-bot ./cmd/review-bot - name: Run Sonnet Review env: @@ -37,7 +38,6 @@ jobs: LLM_API_KEY: ${{ secrets.LLM_API_KEY }} LLM_MODEL: "anthropic--claude-4.6-sonnet" CONVENTIONS_FILE: "CONVENTIONS.md" - REVIEWER_NAME: "Sonnet" run: ./review-bot - name: Run GPT Review env: @@ -49,5 +49,4 @@ jobs: LLM_API_KEY: ${{ secrets.LLM_API_KEY }} LLM_MODEL: "sap-ai-opus-latest-openai/gpt-5" CONVENTIONS_FILE: "CONVENTIONS.md" - REVIEWER_NAME: "GPT" run: ./review-bot diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..b34b892 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,59 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version: '1.26' + + - name: Run tests + run: go test ./... + + - name: Build binaries + run: | + VERSION=${GITHUB_REF_NAME} + mkdir -p dist + + GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.version=${VERSION}" -o dist/review-bot-linux-amd64 ./cmd/review-bot + GOOS=linux GOARCH=arm64 go build -ldflags "-s -w -X main.version=${VERSION}" -o dist/review-bot-linux-arm64 ./cmd/review-bot + GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w -X main.version=${VERSION}" -o dist/review-bot-darwin-amd64 ./cmd/review-bot + GOOS=darwin GOARCH=arm64 go build -ldflags "-s -w -X main.version=${VERSION}" -o dist/review-bot-darwin-arm64 ./cmd/review-bot + + cd dist && sha256sum * > checksums.txt + + - name: Create release and upload assets + env: + GITEA_TOKEN: ${{ secrets.RELEASE_TOKEN }} + run: | + VERSION=${GITHUB_REF_NAME} + GITEA_URL="${{ github.server_url }}" + REPO="${{ github.repository }}" + + # Create release + RELEASE_ID=$(curl -sSf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_URL}/api/v1/repos/${REPO}/releases" \ + -d "{\"tag_name\": \"${VERSION}\", \"name\": \"${VERSION}\", \"body\": \"Release ${VERSION}\", \"draft\": false, \"prerelease\": false}" \ + | jq -r '.id') + + # Upload each asset + for file in dist/*; do + filename=$(basename "$file") + curl -sSf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + "${GITEA_URL}/api/v1/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${filename}" \ + --data-binary "@${file}" + done + + echo "Release ${VERSION} created with $(ls dist/* | wc -l) assets" diff --git a/cmd/review-bot/main.go b/cmd/review-bot/main.go index 3fcc3c8..a2b26ef 100644 --- a/cmd/review-bot/main.go +++ b/cmd/review-bot/main.go @@ -1,5 +1,6 @@ package main + import ( "flag" "fmt" @@ -13,6 +14,8 @@ import ( "gitea.weiker.me/rodin/review-bot/review" ) +var version = "dev" + func main() { // CLI flags giteaURL := flag.String("gitea-url", envOrDefault("GITEA_URL", ""), "Gitea instance URL") diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..8ee18ad --- /dev/null +++ b/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Install review-bot from latest Gitea release +# Usage: curl -sSfL https://gitea.weiker.me/rodin/review-bot/raw/branch/main/install.sh | bash + +set -euo pipefail + +GITEA_URL="${GITEA_URL:-https://gitea.weiker.me}" +REPO="rodin/review-bot" +INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}" + +OS=$(uname -s | tr '[:upper:]' '[:lower:]') +ARCH=$(uname -m) +case "$ARCH" in + x86_64) ARCH="amd64" ;; + aarch64|arm64) ARCH="arm64" ;; + *) echo "Unsupported architecture: $ARCH" >&2; exit 1 ;; +esac + +BINARY="review-bot-${OS}-${ARCH}" + +# Get latest release tag +LATEST=$(curl -sSf "${GITEA_URL}/api/v1/repos/${REPO}/releases?limit=1" | grep -o '"tag_name":"[^"]*"' | head -1 | cut -d'"' -f4) + +if [ -z "$LATEST" ]; then + echo "Failed to determine latest release" >&2 + exit 1 +fi + +echo "Installing review-bot ${LATEST} (${OS}/${ARCH})..." + +DOWNLOAD_URL="${GITEA_URL}/${REPO}/releases/download/${LATEST}/${BINARY}" +curl -sSfL -o "${INSTALL_DIR}/review-bot" "$DOWNLOAD_URL" +chmod +x "${INSTALL_DIR}/review-bot" + +echo "Installed review-bot ${LATEST} to ${INSTALL_DIR}/review-bot"