version: '3'

vars:
  PROGRAM: gignore
  SHELL: '{{if eq .OS "Windows_NT"}}powershell{{end}}'
  BIN_DIR: bin

  WINDOWS: '{{.BIN_DIR}}/{{.PROGRAM}}_windows_amd64.exe'
  LINUX: '{{.BIN_DIR}}/{{.PROGRAM}}_linux_amd64'
  GIT_COMMIT:
    sh: git log -n 1 --format=%h

tasks:
  default:
    desc: Build the gignore project
    cmds:
      - task: build

  build:
    desc: Build the gignore project
    deps: [vet]
    cmds:
      - task: build-windows
      - task: build-linux

  vet:
    desc: Vet the code
    deps: [fmt]
    cmds:
      - go vet ./...

  fmt:
    desc: Fmt the code
    cmds:
      - go fmt ./...

  generate:
    desc: Generate the gitignore.io templates
    cmds:
      - go generate ./...

  build-windows:
    desc: Build the gignore project for Windows
    cmds:
      - GOOS=windows GOARCH=amd64 go build -o {{.WINDOWS}} -ldflags="-X main.Version={{.GIT_COMMIT}}" ./cmd/{{.PROGRAM}}

  build-linux:
    desc: Build the gignore project for Linux
    cmds:
      - GOOS=linux GOARCH=amd64 go build -o {{.LINUX}} -ldflags="-X main.Version={{.GIT_COMMIT}}" ./cmd/{{.PROGRAM}}

  test:
    desc: Run tests
    cmds:
      - go test ./...

  install:
    desc: Install the gignore project
    deps: [generate]
    cmds:
      - go install ./cmd/{{.PROGRAM}}

  clean:
    desc: Clean the build artifacts
    cmds:
      - '{{.SHELL}} rm -r {{.BIN_DIR}}'

  prune:
    desc: Empty the gitignoreio template registry
    cmds:
      - '{{.SHELL}} rm internal/registry/templates/gitignoreio/*.gitignore'