# https://taskfile.dev version: "3" env: GO111MODULE: on GOPROXY: https://proxy.golang.org,direct tasks: dev: desc: Setup git hooks cmds: - git config core.hooksPath .githooks setup: desc: Install dependencies cmds: - go mod tidy docker:setup: desc: Setup Docker for multi-arch image builds cmds: - docker run --privileged --rm tonistiigi/binfmt --install all build: desc: Build the binary sources: - ./**/*.go generates: - ./nfpm cmds: - go build ./cmd/nfpm acceptance:windows:package: desc: Build packages for testing vars: SRC: "./testdata/acceptance/core.complex.yaml" MSIX_SRC: "./testdata/acceptance/msix.basic.yaml" cmds: - mkdir -p ./dist - go run ./cmd/nfpm/... pkg -f {{.SRC}} -p deb -t ./dist/foo.deb - go run ./cmd/nfpm/... pkg -f {{.SRC}} -p rpm -t ./dist/foo.rpm - go run ./cmd/nfpm/... pkg -f {{.SRC}} -p apk -t ./dist/foo.apk - go run ./cmd/nfpm/... pkg -f {{.SRC}} -p archlinux -t ./dist/foo.pkg.tar.zst - go run ./cmd/nfpm/... pkg -f {{.MSIX_SRC}} -p msix -t ./dist/foo.msix acceptance:windows:install: desc: Install packages built with package cmds: - docker run --rm --workdir /tmp -v $PWD/dist:/tmp fedora rpm -ivh foo.rpm - docker run --rm --workdir /tmp -v $PWD/dist:/tmp ubuntu dpkg -i foo.deb - docker run --rm --workdir /tmp -v $PWD/dist:/tmp archlinux pacman --noconfirm -U foo.pkg.tar.zst - docker run --rm --workdir /tmp -v $PWD/dist:/tmp alpine apk add --allow-untrusted foo.apk acceptance:windows:package:msix: desc: Build MSIX package for Windows install testing platforms: [windows] cmds: - go build -o ./dist/testapp.exe ./testdata/acceptance/testapp/ - pwsh -ExecutionPolicy Bypass -File testdata/acceptance/create-test-cert.ps1 - go run ./cmd/nfpm/... pkg -f ./testdata/acceptance/msix.install.yaml -p msix -t ./dist/foo.msix - pwsh -ExecutionPolicy Bypass -File testdata/acceptance/sign-msix.ps1 acceptance:windows:install:msix: desc: Install and verify MSIX package on Windows platforms: [windows] cmds: - pwsh -ExecutionPolicy Bypass -File testdata/acceptance/install-msix.ps1 acceptance:pull: desc: Pull acceptance test images vars: IMGS: sh: grep FROM ./testdata/acceptance/*.dockerfile | cut -f2 -d' ' | grep -v min | grep -v test | sort | uniq cmds: - echo "{{.IMGS}}" | while read -r img; do docker pull $img; done acceptance: desc: Run acceptance tests env: LC_ALL: C vars: TEST_OPTIONS: '{{default "" .TEST_OPTIONS}}' TEST_PATTERN: '{{default "." .TEST_PATTERN}}' cmds: - go test {{.TEST_OPTIONS}} -tags=acceptance -p 4 -failfast -race -coverpkg=./... -covermode=atomic -coverprofile=coverage.txt acceptance_test.go -run {{.TEST_PATTERN}} -timeout=1h test: desc: Run unit tests env: LC_ALL: C vars: TEST_OPTIONS: '{{default "" .TEST_OPTIONS}}' SOURCE_FILES: '{{default "./..." .SOURCE_FILES}}' TEST_PATTERN: '{{default "." .TEST_PATTERN}}' cmds: - go test {{.TEST_OPTIONS}} -failfast -race -coverpkg=./... -covermode=atomic -coverprofile=coverage.txt {{.SOURCE_FILES}} -run {{.TEST_PATTERN}} -timeout=5m cover: desc: Open the cover tool cmds: - go tool cover -html=coverage.txt fmt: desc: gofumpt all code cmds: - gofumpt -w -l . ci: desc: Run all CI steps cmds: - task: setup - task: build - task: test - task: acceptance default: desc: Runs the default tasks cmds: - task: ci schema:generate: desc: Generate JSONSchema cmds: - go run ./cmd/nfpm/ schema -o ./www/static/schema.json sources: - nfpm.go generates: - ./www/static/schema.json schema:validate: desc: Validate JSONSchema cmds: - jv ./www/static/schema.json ./testdata/acceptance/*.yaml sources: - ./www/static/schema.json - ./testdata/acceptance/*.yaml docs:generate: desc: Generate docs cmds: - ./scripts/cmd_docs.sh sources: - cmd/*.go - files/*.go - ./scripts/cmd_docs.sh - CONTRIBUTING.md generates: - www/content/docs/cmd/*.md - www/content/docs/contributing.md docs:releases: desc: Generate the latest file cmds: - ./scripts/pages/releases.sh generates: - www/static/latest docs:imgs: desc: Download and resize images cmds: - wget -O www/static/logo.png https://github.com/goreleaser/artwork/raw/master/goreleaserfundo.png - wget -O www/static/favicon.svg https://raw.githubusercontent.com/goreleaser/artwork/refs/heads/master/goreleaser.svg - convert www/static/logo.png -define icon:auto-resize=64,48,32,16 www/static/favicon.ico - convert www/static/logo.png -resize x120 www/static/apple-touch-icon.png - convert www/static/logo.png -resize x192 www/static/android-chrome-192x192.png - convert www/static/logo.png -resize x512 www/static/android-chrome-512x512.png - convert www/static/logo.png -resize x16 www/static/favicon-16x16.png - convert www/static/logo.png -resize x32 www/static/favicon-32x32.png docs:serve: desc: Start documentation server cmds: - task: docs:generate - cd www && hugo server --buildDrafts --bind 0.0.0.0 --port 8080 docs:build: desc: Build docs cmds: - task: docs:generate - cd www && hugo --minify docs:test: desc: Test docs with htmltest cmds: - task: docs:build - htmltest www/public -c www/htmltest.yml release: desc: Create a new tag vars: NEXT: sh: svu n cmds: - git tag {{.NEXT}} - echo {{.NEXT}} - git push origin --tags nix:flake:update-vendor: desc: update default flake package vendor hash cmds: - bash ./scripts/nix-update-flake.sh generates: - flake.nix sources: - flake.lock - go.mod - go.sum