feat: initial commit — unarr CLI

Search, inspect, stream, and download torrents from the terminal.
Replaces the entire *arr stack with a single binary.
This commit is contained in:
Deivid Soto 2026-03-28 11:29:42 +01:00
commit 29cf0a0126
85 changed files with 10178 additions and 0 deletions

10
.github/CODEOWNERS vendored Normal file
View file

@ -0,0 +1,10 @@
# Default owners for everything in the repo
* @torrentclaw/maintainers
# CI/CD and release
.github/ @torrentclaw/maintainers
.goreleaser.yml @torrentclaw/maintainers
Dockerfile @torrentclaw/maintainers
# Core engine
internal/engine/ @torrentclaw/maintainers

33
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,33 @@
---
name: Bug Report
about: Report a bug or unexpected behavior
title: ""
labels: bug
assignees: ""
---
## Description
<!-- A clear description of the bug. -->
## Steps to Reproduce
1.
2.
3.
## Expected Behavior
<!-- What should happen. -->
## Actual Behavior
<!-- What actually happens. Include error messages or output. -->
## Environment
- **OS**: (e.g., Ubuntu 24.04, macOS 15, Windows 11)
- **Architecture**: (e.g., amd64, arm64)
- **unarr version**: (`unarr version`)
- **Go version** (if built from source): (`go version`)
- **Install method**: (Homebrew / GitHub Release / go install / Docker)

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Questions & Discussion
url: https://github.com/torrentclaw/torrentclaw-cli/discussions
about: Ask questions or start a discussion

View file

@ -0,0 +1,23 @@
---
name: Feature Request
about: Suggest a new feature or improvement
title: ""
labels: enhancement
assignees: ""
---
## Problem
<!-- What problem does this feature solve? -->
## Proposed Solution
<!-- How would you like it to work? -->
## Alternatives Considered
<!-- Any other approaches you've thought about. -->
## Additional Context
<!-- Screenshots, links, or anything else relevant. -->

24
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,24 @@
## Summary
<!-- What does this PR do? Keep it to 1-3 bullet points. -->
-
## Related Issues
<!-- Link any related issues: Fixes #123, Closes #456 -->
## Test Plan
<!-- How did you verify this works? -->
- [ ] Tests pass (`make test`)
- [ ] Linter passes (`make lint`)
- [ ] Tested manually (describe below)
## Checklist
- [ ] Code follows the project style (`make fmt && make vet`)
- [ ] Tests added for new functionality
- [ ] Documentation updated (if public API changed)
- [ ] Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/)

22
.github/dependabot.yml vendored Normal file
View file

@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
labels:
- "dependencies"
commit-message:
prefix: "chore(deps)"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
labels:
- "ci"
commit-message:
prefix: "ci(deps)"

131
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,131 @@
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: read
jobs:
test:
name: Test
runs-on: ubuntu-latest
strategy:
matrix:
go-version: ["1.22", "1.23", "1.24"]
steps:
- uses: actions/checkout@v4
- name: Checkout go-client (local replace dependency)
uses: actions/checkout@v4
with:
repository: torrentclaw/go-client
path: ../go-client
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Run tests
run: go test -v -race -count=1 ./...
build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
goos: [linux, darwin, windows]
goarch: [amd64, arm64]
steps:
- uses: actions/checkout@v4
- name: Checkout go-client (local replace dependency)
uses: actions/checkout@v4
with:
repository: torrentclaw/go-client
path: ../go-client
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Build
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
run: go build -o unarr ./cmd/unarr/
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout go-client (local replace dependency)
uses: actions/checkout@v4
with:
repository: torrentclaw/go-client
path: ../go-client
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v2.1.6
coverage:
name: Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout go-client (local replace dependency)
uses: actions/checkout@v4
with:
repository: torrentclaw/go-client
path: ../go-client
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Run tests with coverage
run: go test -race -coverprofile=coverage.out -covermode=atomic ./...
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.out
fail_ci_if_error: false
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
vet:
name: Vet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout go-client (local replace dependency)
uses: actions/checkout@v4
with:
repository: torrentclaw/go-client
path: ../go-client
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Run go vet
run: go vet ./...

39
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,39 @@
name: Release
on:
push:
tags:
- "v*"
permissions:
contents: write
jobs:
release:
name: GoReleaser
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Checkout go-client (local replace dependency)
run: git clone --depth 1 https://github.com/torrentclaw/go-client "$GITHUB_WORKSPACE/../go-client"
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24"
- name: Install UPX
uses: crazy-max/ghaction-upx@v3
with:
install-only: true
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}