picca 1.0.2

A Parallel Implementation of Common Checksum Algorithms
Documentation
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