| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- # https://taskfile.dev
- version: "3"
- vars:
- VERSION:
- sh: git describe --long 2>/dev/null || echo ""
- RACE:
- sh: test -f race.log && echo "1" || echo ""
- env:
- CGO_ENABLED: 0
- GOEXPERIMENT: greenteagc
- tasks:
- lint:install:
- desc: Install golangci-lint
- cmds:
- - go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
- env:
- GOTOOLCHAIN: go1.25.0
- lint:
- desc: Run base linters
- cmds:
- - golangci-lint run --path-mode=abs --config=".golangci.yml" --timeout=5m
- env:
- GOEXPERIMENT: null
- lint:fix:
- desc: Run base linters and fix issues
- cmds:
- - golangci-lint run --path-mode=abs --config=".golangci.yml" --timeout=5m --fix
- env:
- GOEXPERIMENT: null
- build:
- desc: Run build
- vars:
- LDFLAGS: '{{if .VERSION}}-ldflags="-X github.com/charmbracelet/crush/internal/version.Version={{.VERSION}}"{{end}}'
- cmds:
- - "go build {{if .RACE}}-race{{end}} {{.LDFLAGS}} ."
- generates:
- - crush
- run:
- desc: Run build
- cmds:
- - task: build
- - "./crush {{.CLI_ARGS}} {{if .RACE}}2>race.log{{end}}"
- test:
- desc: Run tests
- cmds:
- - go test -race -failfast ./... {{.CLI_ARGS}}
- test:record:
- desc: Run tests and record all VCR cassettes again
- aliases: [record]
- cmds:
- - rm -r internal/agent/testdata
- - go test -v -count=1 -timeout=1h ./internal/agent
- fmt:
- desc: Run gofumpt
- cmds:
- - gofumpt -w .
- dev:
- desc: Run with profiling enabled
- env:
- CRUSH_PROFILE: true
- cmds:
- - go run .
- install:
- desc: Install the application
- vars:
- LDFLAGS: '{{if .VERSION}}-ldflags="-X github.com/charmbracelet/crush/internal/version.Version={{.VERSION}}"{{end}}'
- cmds:
- - task: fetch-tags
- - go install {{.LDFLAGS}} -v .
- profile:cpu:
- desc: 10s CPU profile
- cmds:
- - go tool pprof -http :6061 'http://localhost:6060/debug/pprof/profile?seconds=10'
- profile:heap:
- desc: Heap profile
- cmds:
- - go tool pprof -http :6061 'http://localhost:6060/debug/pprof/heap'
- profile:allocs:
- desc: Allocations profile
- cmds:
- - go tool pprof -http :6061 'http://localhost:6060/debug/pprof/allocs'
- schema:
- desc: Generate JSON schema for configuration
- cmds:
- - go run main.go schema > schema.json
- - echo "Generated schema.json"
- generates:
- - schema.json
- hyper:
- desc: Update Hyper embedded provider.json
- cmds:
- - go generate ./internal/agent/hyper/...
- generates:
- - ./internal/agent/hyper/provider.json
- release:
- desc: Create and push a new tag following semver
- vars:
- NEXT:
- sh: svu next --always || go run github.com/caarlos0/svu/v3@latest next --always
- prompt: "This will release {{.NEXT}}. Continue?"
- preconditions:
- - sh: '[ $(git symbolic-ref --short HEAD) = "main" ]'
- msg: Not on main branch
- - sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]"
- msg: "Git is dirty"
- cmds:
- - task: fetch-tags
- - git commit --allow-empty -m "{{.NEXT}}"
- - git tag --annotate --sign -m "{{.NEXT}}" {{.NEXT}} {{.CLI_ARGS}}
- - echo "Pushing {{.NEXT}}..."
- - git push origin main --follow-tags
- fetch-tags:
- cmds:
- - git tag -d nightly || true
- - git fetch --tags
- deps:
- desc: Update Fantasy and Catwalk
- cmds:
- - go get charm.land/fantasy
- - go get github.com/charmbracelet/catwalk
- - go mod tidy
|