version: "3"
vars:
VERSION:
sh: bash -c "cat Cargo.toml | grep -m1 version | awk -F' ' '{print \$3}' | sed 's|\"||g'"
MAJOR_VERSION:
sh: bash -c "echo {{.VERSION}} | awk -F'.' '{print\$1}'"
UID:
sh: id -u
GID:
sh: id -g
DATE:
sh: date -u '+%Y-%m-%d %T%z' | sed -E 's/.([0-9]{2})([0-9]{2})$$/+\1:\2/'
tasks:
default:
cmds:
- task: build:docker
- task: build:release
- task: build:doc
build:release:
aliases:
- build
cmds:
- cd singles && cargo build --release {{.CLI_ARGS}} && cd ..
- cargo build --release {{.CLI_ARGS}}
- cargo build --release --features bin --bin picca {{.CLI_ARGS}}
build:debug:
cmds:
- cd singles && cargo build {{.CLI_ARGS}} && cd ..
- cargo build {{.CLI_ARGS}}
- cargo build --features bin --bin picca {{.CLI_ARGS}}
build:examples:
aliases:
- examples
cmds:
- cargo build --examples
build:docker:
aliases:
- docker
deps:
- clean
cmds:
- |
docker build . \
-t forge.steck.dev/bryson/picca:{{.VERSION}} \
-t forge.steck.dev/bryson/picca:{{.MAJOR_VERSION}} \
-t forge.steck.dev/bryson/picca:latest \
--build-arg VERSION={{.VERSION}} \
--build-arg DATE="{{.DATE}}" \
-f docker/Dockerfile
build:docker:multi:
aliases:
- multiarch
deps:
- clean
cmds:
- |
docker build . \
-t forge.steck.dev/bryson/picca:{{.VERSION}} \
-t forge.steck.dev/bryson/picca:{{.MAJOR_VERSION}} \
-t forge.steck.dev/bryson/picca:latest \
--build-arg VERSION={{.VERSION}} \
--build-arg DATE="{{.DATE}}" \
--platform linux/amd64,linux/arm64,linux/s390x,linux/ppc64le,linux/riscv64 \
-f docker/Dockerfile
preconditions:
- sh: "grep containerd-snapshotter /etc/docker/daemon.json | grep true"
msg: "This Docker daemon does not have the container.io store enabled."
build:doc:
aliases:
- doc
- docs
cmds:
- man/generate-docs.sh {{.VERSION}}
test:
cmds:
- cargo test --lib
bench:
cmds:
- cargo bench
man:
deps:
- build:doc
cmds:
- man target/man/picca.1
release:create:
cmds:
- sed -i "s/^version = \".*\"/version = \"$(echo {{.CLI_ARGS}} | sed s/^v//g)\"/g" Cargo.toml
- sed -i "s/^package.version = \".*\"/package.version = \"$(echo {{.CLI_ARGS}} | sed s/^v//g)\"/g" singles/Cargo.toml
- cd singles && cargo check && cd .. && cargo check
- git diff --quiet --exit-code || git commit -a
- git tag -s {{.CLI_ARGS}}
- git push && git push --tags
release:docker:
cmds:
- task: build:docker:multi
- docker push -a forge.steck.dev/bryson/picca
release:prepare:
deps:
- build:release
cmds:
- mkdir -p target/compress/bin/singles
- rm -f target/{{.TARGET}}/release/*.d target/{{.TARGET}}/release/*.pdb
- rm -f singles/target/{{.TARGET}}/release/*.d singles/target/{{.TARGET}}/release/*.pdb
- mv target/{{.TARGET}}/release/picca* target/compress/bin
- mv singles/target/{{.TARGET}}/release/*sum* target/compress/bin/singles
- cp README.md LICENSE target/compress
requires:
vars:
- TARGET
install:picca:
aliases:
- install
cmds:
- cargo install --path .
clean:
cmds:
- cmd: cd singles && cargo clean && cd ..
ignore_error: true
- cmd: cargo clean
ignore_error: true
- cmd: docker image rm forge.steck.dev/bryson/picca:latest
ignore_error: true
- cmd: docker image rm forge.steck.dev/bryson/picca:{{.VERSION}}
ignore_error: true
- cmd: docker image rm forge.steck.dev/bryson/picca:{{.MAJOR_VERSION}}
ignore_error: true