tasks:
install:
commands:
- command: cargo install --locked mk
description: Install mk
install-githooks:
commands:
- command: git config --local core.hooksPath .githooks
description: Install git hooks
uninstall-githooks:
commands:
- command: git config --local --unset core.hooksPath
description: Uninstall git hooks
run:
commands:
- command: cargo r
description: Run the project
run-retrigger:
commands:
- command: cargo r
retrigger: true
description: Run the project and press R to manually restart it
format:
commands:
- command: cargo fmt --all
description: Format the project
lint:
commands:
- command: cargo clippy --all-features --all-targets --tests --benches -- -Dclippy::all
description: Lint check the project
check:
commands:
- command: cargo c
description: Check the project
build:
commands:
- command: cargo b
description: Build the project
depends_on:
- name: check
release:
commands:
- command: ./scripts/release.sh ${RELEASE_ARGS:-} "${RELEASE_VERSION:-}"
description: Publish a release to crates.io and push the git release tag
build-in-container:
commands:
- container_command:
- cargo
- c
image: docker.io/library/rust:latest
description: Build the project in a container
depends_on:
- name: check
pack:
preconditions:
- command: git diff-index --quiet --exit-code HEAD --
- command: cargo c
commands:
- command: |
latest_version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
name=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
podman build \
--sbom=true \
--label org.opencontainers.image.created=$(date +%Y-%m-%dT%H:%M:%S%z) \
--label org.opencontainers.image.authors=gh:@ffimnsr \
--label org.opencontainers.image.description="$name $latest_version" \
--label org.opencontainers.image.revision=$(git rev-parse HEAD) \
--label org.opencontainers.image.source=$(git remote get-url origin) \
--label org.opencontainers.image.title=$name \
--label org.opencontainers.image.url=https://github.com/ffimnsr/mk-rs \
--label org.opencontainers.image.version=$latest_version \
-f Containerfile \
-t ghcr.io/ffimnsr/$name-rs:$latest_version \
-t ghcr.io/ffimnsr/$name-rs:latest .
test: command -v podman
description: Build the container image
pack_2:
preconditions:
- command: cargo c
commands:
- container_build:
image_name: ghcr.io/ffimnsr/mk-rs
context: .
tags:
- latest
- ${{ env.VERSION }}
labels:
- org.opencontainers.image.created=MK_NOW
- org.opencontainers.image.authors=gh:@ffimnsr
- org.opencontainers.image.description=${{ env.DESCRIPTION }}
- org.opencontainers.image.revision=MK_GIT_REVISION
- org.opencontainers.image.source=MK_GIT_REMOTE_ORIGIN
- org.opencontainers.image.title=mk-rs
- org.opencontainers.image.url=https://github.com/ffimnsr/mk-rs
- org.opencontainers.image.version=${{ env.VERSION }}
description: Build the container image
environment:
VERSION: $(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
DESCRIPTION: $(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].description')
docs:
commands:
- command: docsify serve docs
description: Serve the documentation
docs_2: docsify serve docs
demo_saved_output:
commands:
- command: |
version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
printf '%s\n' "$version"
save_output_as: version
- command: 'echo "Resolved version: ${{ outputs.version }}"'
- command: |
printf 'MK_VERSION=%s\n' "${{ outputs.version }}" > /tmp/mk-rs-output-demo.env
echo "Wrote /tmp/mk-rs-output-demo.env"
description: Demonstrate saving and reusing command output inside one task
install_codecov_tools:
commands:
- cargo install --locked grcov
- rustup component add llvm-tools-preview
description: Install code coverage tools
gen_test_cov:
commands:
- cargo t
environment:
CARGO_INCREMENTAL: '0'
RUSTFLAGS: -C instrument-coverage -C codegen-units=1 -C opt-level=0 -C link-dead-code -C overflow-checks=off
LLVM_PROFILE_FILE: ./target/debug/coverage/cargo-test-%p-%m.profraw
description: Run tests with coverage
cov_to_html:
commands:
- rm -rf target/coverage/html
- |
grcov ./target/debug/coverage/ \
--binary-path ./target/debug/ \
-s . \
-t html \
--branch \
--ignore-not-existing \
--keep-only 'src/*' \
-o coverage/html
- open coverage/html/index.html
description: Generate HTML coverage report
cov_to_lcov:
commands:
- rm -rf target/coverage/tests.lcov
- |
grcov ./target/debug/coverage/ \
--binary-path ./target/debug/ \
-s . \
-t lcov \
--branch \
--ignore-not-existing \
--keep-only 'src/*' \
-o coverage/tests.lcov
description: Generate lcov coverage report
python:
commands:
- command: ls -lah
- command: python3
interactive: true
description: Serve the project
parallel:
commands:
- command: |
sleep 5
echo "Hello"
- command: |
sleep 5
echo "World"
description: Run the project in parallel
parallel: true
parallel2:
commands:
- task: check
- command: |
sleep 5
echo "World"
description: Run the project in parallel
parallel: true
test_secrets:
secrets_path:
- hello
commands:
- command: echo "The secret is $asdasd"
description: Test secrets
lf:
commands:
- |
git ls-files -z --cached --others --exclude-standard \
| xargs -0 -I{} sh -c '[ -f "{}" ] && wc -l "{}"' \
| awk '$1 > 1000' \
| sort -nr
description: Check for files with more than 1000 LOC.