Taskfile.yaml

  1# SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
  2#
  3# SPDX-License-Identifier: CC0-1.0
  4
  5version: "3"
  6
  7vars:
  8  VERSION:
  9    sh: git describe --tags --always 2>/dev/null || echo "v0.0.0"
 10  GOOS:
 11    sh: go env GOOS
 12  GOARCH:
 13    sh: go env GOARCH
 14
 15env:
 16  CGO_ENABLED: 0
 17
 18tasks:
 19  default:
 20    desc: Run all checks
 21    cmds:
 22      - task: fmt
 23      - task: lint
 24      - task: staticcheck
 25      - task: test
 26      - task: vuln
 27      - task: reuse
 28
 29  fmt:
 30    desc: Format all Go source code
 31    cmds:
 32      - go install mvdan.cc/gofumpt@latest
 33      - gofumpt -l -w .
 34
 35  lint:
 36    desc: Lint Go source code
 37    cmds:
 38      - golangci-lint run
 39
 40  staticcheck:
 41    desc: Perform static analysis
 42    cmds:
 43      - go install honnef.co/go/tools/cmd/staticcheck@latest
 44      - staticcheck ./...
 45
 46  test:
 47    desc: Run tests
 48    cmds:
 49      - go test -v ./...
 50
 51  vuln:
 52    desc: Check for vulnerabilities
 53    cmds:
 54      - go install golang.org/x/vuln/cmd/govulncheck@latest
 55      - govulncheck ./...
 56
 57  reuse:
 58    desc: Lint licenses and copyright headers
 59    cmds:
 60      - reuse lint
 61
 62  build:
 63    desc: Build formatted-commit
 64    cmds:
 65      - go build -o formatted-commit -ldflags "-s -w -X main.version={{.VERSION}}"
 66    generates:
 67      - formatted-commit
 68
 69  install:
 70    desc: Install formatted-commit
 71    cmds:
 72      - go install -ldflags "-s -w -X main.version={{.VERSION}}"
 73
 74  run:
 75    desc: Run formatted-commit
 76    cmds:
 77      - go run -ldflags "-s -w -X main.version={{.VERSION}}" . {{.CLI_ARGS}}
 78
 79  pack:
 80    desc: Pack formatted-commit with UPX
 81    cmds:
 82      - upx --best -qo formatted-commit.min formatted-commit
 83      - mv formatted-commit.min formatted-commit
 84    sources:
 85      - formatted-commit
 86
 87  clean:
 88    desc: Remove build artifacts
 89    cmds:
 90      - rm -rf formatted-commit
 91
 92  clean-all:
 93    desc: Remove build artifacts and config.toml
 94    cmds:
 95      - rm -rf formatted-commit config.toml
 96
 97  release:
 98    desc: Interactive release workflow
 99    vars:
100      BUMP:
101        sh: |
102          opts="major minor patch prerelease"
103          if git describe --tags --abbrev=0 2>/dev/null | grep -qE '\-[a-zA-Z]+\.[0-9]+$'; then
104            opts="$opts graduate"
105          fi
106          gum choose $opts
107      NEXT:
108        sh: |
109          case "{{.BUMP}}" in
110            graduate) svu next ;;
111            prerelease)
112              suffix=$(gum input --placeholder "Suffix (beta, rc, etc.)")
113              svu prerelease --pre-release "$suffix" ;;
114            *) svu {{.BUMP}} ;;
115          esac
116      LAST_STABLE:
117        sh: git tag -l | grep -v '\-' | sort -V | tail -n 1
118    prompt: "Release {{.NEXT}}?"
119    preconditions:
120      - sh: '[ $(git symbolic-ref --short HEAD) = "main" ] || [ $(git symbolic-ref --short HEAD) = "dev" ]'
121        msg: Not on main or dev branch
122      - sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]"
123        msg: "Git is dirty"
124    cmds:
125      - |
126        if [ "{{.BUMP}}" = "graduate" ]; then
127          llm-tag -b {{.LAST_STABLE}} {{.NEXT}}
128        else
129          llm-tag {{.NEXT}}
130        fi
131      - git push soft {{.NEXT}}
132      - go list -m git.secluded.site/formatted-commit@{{.NEXT}} > /dev/null
133      - echo "Released {{.NEXT}} and notified module proxy"