diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..5aae815 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,51 @@ +name: release + +on: + push: + tags: + - 'v*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version: '1.22' + + - name: Build cross-platform binaries + run: make dist VERSION=${{ github.ref_name }} + + - name: Create release and upload assets + env: + TOKEN: ${{ secrets.GITEA_TOKEN }} + API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }} + TAG: ${{ github.ref_name }} + run: | + set -euo pipefail + body=$(cat </dev/null + done + echo "released $TAG with $(ls dist | wc -l) assets" diff --git a/.gitignore b/.gitignore index dc5a314..63e45ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /rb-search +/dist/ *.test *.out diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e9f5510 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev) +LDFLAGS := -s -w -X main.version=$(VERSION) +DIST := dist + +PLATFORMS := \ + linux/amd64 \ + linux/arm64 \ + darwin/amd64 \ + darwin/arm64 \ + windows/amd64 + +.PHONY: build dist clean + +build: + CGO_ENABLED=0 go build -ldflags '$(LDFLAGS)' -o rb-search . + +dist: + @rm -rf $(DIST) + @mkdir -p $(DIST) + @for plat in $(PLATFORMS); do \ + os=$${plat%/*}; arch=$${plat#*/}; \ + ext=""; if [ "$$os" = "windows" ]; then ext=".exe"; fi; \ + name=rb-search-$(VERSION)-$$os-$$arch$$ext; \ + echo " build $$name"; \ + CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch \ + go build -trimpath -ldflags '$(LDFLAGS)' -o $(DIST)/$$name . || exit 1; \ + done + @cd $(DIST) && sha256sum rb-search-* > SHA256SUMS + @echo "built artefacts:" + @ls -lh $(DIST) + +clean: + rm -rf $(DIST) rb-search diff --git a/README.md b/README.md index 20d26f5..1c26194 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,36 @@ ## Установка +### Готовые бинари (рекомендуется) + +Собранные релизы лежат на странице +[Releases](https://git.arx.ru/shuricken/rb-search/releases) — Linux/macOS/Windows, +amd64 и arm64. Скачать соответствующий файл, проверить контрольную сумму +из `SHA256SUMS` и положить на `PATH`: + +```bash +# Linux/macOS, под свою архитектуру +curl -LO https://git.arx.ru/shuricken/rb-search/releases/download/vX.Y.Z/rb-search-vX.Y.Z-linux-amd64 +curl -LO https://git.arx.ru/shuricken/rb-search/releases/download/vX.Y.Z/SHA256SUMS +sha256sum --ignore-missing -c SHA256SUMS +chmod +x rb-search-* +sudo mv rb-search-* /usr/local/bin/rb-search +``` + +```powershell +# Windows PowerShell +Invoke-WebRequest -OutFile rb-search.exe ` + https://git.arx.ru/shuricken/rb-search/releases/download/vX.Y.Z/rb-search-vX.Y.Z-windows-amd64.exe +Move-Item rb-search.exe $env:USERPROFILE\bin\ +``` + +Проверка установки: `rb-search version` → печатает версию. + +### Из исходников + Нужен Go 1.22+. Бинарь самодостаточный, без внешних зависимостей в рантайме. -### Из исходников (любая ОС) +#### Любая ОС ```bash git clone ssh://git@git.arx.ru:2222/shuricken/rb-search.git @@ -37,7 +64,7 @@ go build -o rb-search . - Linux/macOS: `install -m 0755 rb-search ~/.local/bin/` или `sudo mv rb-search /usr/local/bin/` - Windows (PowerShell): `Move-Item rb-search.exe $env:USERPROFILE\bin\` -### Через `go install` +#### Через `go install` ```bash go install git.arx.ru/shuricken/rb-search@latest @@ -49,14 +76,14 @@ go install git.arx.ru/shuricken/rb-search@latest - fish: `fish_add_path (go env GOPATH)/bin` - Windows: `setx PATH "%PATH%;%USERPROFILE%\go\bin"` (новые терминалы) -### Arch Linux +#### Arch Linux ```bash sudo pacman -S go go install git.arx.ru/shuricken/rb-search@latest ``` -### Debian / Ubuntu +#### Debian / Ubuntu ```bash sudo apt install golang-go @@ -66,20 +93,20 @@ go install git.arx.ru/shuricken/rb-search@latest Если в репозитории старый Go (< 1.22) — собрать из исходников после установки `go` через `snap` или `gvm`. -### macOS +#### macOS ```bash brew install go go install git.arx.ru/shuricken/rb-search@latest ``` -### Windows +#### Windows 1. Поставить Go с https://go.dev/dl/. 2. В PowerShell: `go install git.arx.ru/shuricken/rb-search@latest`. 3. Бинарь окажется в `%USERPROFILE%\go\bin\rb-search.exe`. -### Кросс-компиляция +#### Кросс-компиляция С Linux собрать под другую платформу: diff --git a/main.go b/main.go index 33c4a09..86559a8 100644 --- a/main.go +++ b/main.go @@ -11,6 +11,9 @@ import ( "time" ) +// version is overridden at build time via -ldflags '-X main.version=...'. +var version = "dev" + const usage = `rb-search — peek into a RabbitMQ queue without consuming. Reads N=queue-depth messages with basic.get + manual ack, runs a substring @@ -72,6 +75,9 @@ func run(args []string) error { return cmdSetDefault(args[1:]) case "init": return cmdInit(args[1:]) + case "version", "--version", "-V": + fmt.Println(version) + return nil case "help", "-h", "--help": fmt.Print(usage) return nil