Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache: true

- name: golangci-lint
uses: golangci/golangci-lint-action@v8
uses: golangci/golangci-lint-action@v9
with:
version: v2.1.6
version: v2.12.2

test:
strategy:
Expand All @@ -33,9 +33,9 @@ jobs:
runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache: true
Expand All @@ -46,9 +46,9 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache: true
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
fetch-depth: 0

- uses: actions/setup-go@v5
- uses: actions/setup-go@v6
with:
go-version-file: go.mod
cache: true
Expand Down
2 changes: 2 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ linters:
- G306
- G302
- G110
- G122
- G703

issues:
max-same-issues: 50
56 changes: 27 additions & 29 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0] - YYYY-MM-DD
## [Unreleased]

### Changed

- Terminal output: theme-adaptive colors, bold/underlined table headers, structured `lab version` and `lab iso list|disks` layout (`--no-color` for plain text).
- `lab iso download`: progress bar with speed and ETA, spinner while connecting, spinner during SHA256/GPG verification.
- `lab iso download`: import upstream GPG signing keys before verification (Ubuntu, Fedora); prominent security banner on GPG failure.
- `lab iso disks`: fix empty device list (missing `TYPE` column from lsblk).
- `lab iso write`: interactive picker, `lab iso write ubuntu-desktop --usb`, `--device` alias for `--to`; new `lab iso images`.
- `lab iso write`: fix lsblk device path (`/dev/sda` not `sda`); auto-unmount USB partitions before burn.
- `lab iso write`: parse lsblk sizes with locale decimal comma (e.g. `58,6G`).
- `lab iso write`: auto `sudo` for dd/sync; umount mounted partitions by mount path (not whole disk).
- `lab iso write`: progress bar while burning (parse dd status); unified yellow `!` warnings (no emoji).
- `lab iso write`: progress polls `/sys/block/*/stat` every 250ms (smooth bar, not dd stderr).
- `scripts/install.sh`: automatically configure shell PATH when installing to a non-standard prefix; `--no-path` to opt out.
- `scripts/uninstall.sh`: remove homelab-cli PATH block from shell rc on uninstall.

## [0.1.0] - YYYY-MM-DD

### Added

Expand All @@ -16,40 +33,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `lab bootstrap essentials` for Ubuntu and Fedora Silverblue with idempotent sections.
- Package manager adapters: `internal/pkgmgr` (`apt`, `rpm-ostree`, detect).
- Testable exec runner: `internal/exec`.

### Changed

- GoReleaser config: nfpms, changelog filters, release mode.
- GitHub release workflow unchanged in trigger but documents full artifact set.

## [Unreleased]

### Added

- **Server:** `lab server run`, `lab server deploy` (sync, provision, compose, full) — SSH + rsync; PostgreSQL apply via pgx locally.
- **Server:** `lab server run`, `lab server deploy` (sync, provision, compose, full).
- **PostgreSQL:** `lab postgres apply --config` — idempotent users/databases from YAML.
- **Bare metal:** `lab baremetal install` for qdrant, milvus, clickhouse (Linux).
- **System:** `lab system usb list` and `lab system usb` — discover Ubuntu/Fedora ISOs from upstream mirrors; wget, checksum, dd.
- **System:** `lab system usb list` and `lab system usb`.
- **Services:** `lab services ensure` for ml-stack.
- **Media:** `lab media heic` only (YouTube playlist support removed from CLI).
- **SSH sync:** native rsync (no homelab `sync-to-server.sh`).
- **Docs:** full English documentation refresh; [`docs/README.md`](docs/README.md) index.
- **Dependencies:** `pgx/v5`; Go 1.25 module baseline.

### Removed

- `lab media playlist` and all YouTube/yt-dlp code (`internal/media/playlist*`, `ytdlp.go`).
- `media.*` config keys (`cookies_browser`, `cookies_file`, `downloads_dir`).
- **Media:** `lab media heic`.
- Cobra/Viper CLI, bootstrap profiles, `pkg`, `toolchain`, `repos backup`, `ssh`, `templates`.

### Changed

- GoReleaser config: nfpms, changelog filters, release mode.
- GitHub release workflow unchanged in trigger but documents full artifact set.
- `lab ssh sync` and deploy use `internal/server` instead of homelab shell scripts.
- `docs/external-binaries.md`, `docs/homelab-migration.md` updated for current migration state.

### Foundation (earlier unreleased work)
### Removed

- Cobra/Viper CLI, grouped command tree, `version`, config loader, slog logging, lipgloss UI.
- `bootstrap` profiles: laptop-macos, laptop-linux, silverblue-laptop, server-ubuntu.
- `pkg`, `toolchain` (mise), `services` (homelab compose).
- `repos backup`, `ssh connect`, `templates`, `media heic` (HEIC conversion).
- Global flags: `--dry-run`, `--homelab-root`, `--no-color`.
- `lab media playlist` and YouTube/yt-dlp code.
- `media.*` config keys (`cookies_browser`, `cookies_file`, `downloads_dir`).
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ test: ## Run tests
go test ./... -race -cover

lint: ## Run golangci-lint
go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.6 run
go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.2 run

fmt: ## gofmt + golangci formatters (gofumpt/goimports)
gofmt -s -w .
go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.6 fmt
go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.2 fmt

vet: ## go vet
go vet ./...
Expand Down
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,14 @@ Full command tables: [`docs/commands.md`](docs/commands.md).
curl -sSL https://raw.githubusercontent.com/bartrosa/homelab-cli/main/scripts/install.sh | bash
```

Pin a version or install to `$HOME/.local`:
The install script downloads the release tarball, verifies SHA256 checksums, and installs `lab`. If `~/.local/bin` is used (when `/usr/local/bin` is not writable), it **automatically appends** the install directory to your shell rc (`~/.bashrc`, `~/.zshrc`, or `~/.profile`). Open a new terminal or run `source ~/.bashrc` afterward.

Pin a version or install to a custom prefix:

```bash
curl -sSL https://raw.githubusercontent.com/bartrosa/homelab-cli/main/scripts/install.sh | bash -s -- --version v0.2.0
curl -sSL https://raw.githubusercontent.com/bartrosa/homelab-cli/main/scripts/install.sh | bash -s -- --version v0.1.0
curl -sSL https://raw.githubusercontent.com/bartrosa/homelab-cli/main/scripts/install.sh | bash -s -- --prefix "$HOME/.local"
curl -sSL .../install.sh | bash -s -- --no-path # skip automatic PATH setup
```

### Upgrading
Expand Down
Loading