# https://taskfile.dev version: '3' vars: BINARY: statusline LDFLAGS: -s -w tasks: default: desc: Build the statusline binary cmds: - task: build build: desc: Build with stripped symbols cmds: - go build -ldflags="{{.LDFLAGS}}" -o {{.BINARY}} . sources: - "*.go" - go.mod - go.sum generates: - "{{.BINARY}}" build:debug: desc: Build with debug symbols cmds: - go build -o {{.BINARY}} . run: desc: Run with test fixture deps: [build] cmds: - cat test/fixture.json | ./{{.BINARY}} test: desc: Run with test fixture and show output deps: [build] cmds: - echo "=== Output ===" - cat test/fixture.json | ./{{.BINARY}} - echo "" - echo "=== Timing (single run) ===" - time sh -c 'cat test/fixture.json | ./{{.BINARY}} > /dev/null' bench: desc: Benchmark Go vs Shell (100 runs) deps: [build] cmds: - | echo "=== Pure Go (100 runs) ===" time for i in $(seq 1 100); do cat test/fixture.json | ./{{.BINARY}} >/dev/null; done echo "" echo "=== Shell (100 runs) ===" time for i in $(seq 1 100); do cat test/fixture.json | ./statusline.sh >/dev/null; done silent: false bench:go: desc: Benchmark Go only (100 runs) deps: [build] cmds: - | echo "=== Pure Go (100 runs) ===" time for i in $(seq 1 100); do cat test/fixture.json | ./{{.BINARY}} >/dev/null; done tidy: desc: Run go mod tidy cmds: - go mod tidy lint: desc: Run golangci-lint cmds: - golangci-lint run lint:fix: desc: Run golangci-lint with auto-fix cmds: - golangci-lint run --fix clean: desc: Remove built binary cmds: - rm -f {{.BINARY}} size: desc: Show binary size deps: [build] cmds: - ls -lh {{.BINARY}} install: desc: Install to ~/.claude/ deps: [build] cmds: - mkdir -p ~/.claude - cp {{.BINARY}} ~/.claude/{{.BINARY}} - echo "Installed to ~/.claude/{{.BINARY}}"