Abbaye

at 8645f5a

[tools]
"aqua:blopker/codebook" = "latest"
"cargo:cargo-readme" = "latest"
"cargo:cargo-semver-checks" = "latest"
git-cliff = "latest"
prek = "latest"
release-plz = "latest"
rust = "1.95"
taplo = "latest"

[env]
RUST_LOG = "abbaye2=trace,info"

[tasks]
run = { alias = "r", run = "cargo run" }

[tasks.init]
description = "Initialize the tooling for this repository."
run = ["mise activate", "prek install -t pre-commit -t pre-merge-commit"]

[tasks.lint]
wait_for = ["fmt", "clean", "generate-schema"]
description = "Run various linters"
run = ["taplo check", "cargo clippy", "prek run --all-files"]

[tasks.fmt]
wait_for = ["clean"]
description = "runs various formatters"
run = ["taplo fmt", "cargo fmt"]

[tasks.generate-readme]
description = "generates README.md from the crate-level documentation"
outputs = ["README.md"]
run = [
  "cargo readme --no-indent-headings --no-title > README.md",
  "git add README.md",
]
sources = ["src/main.rs"]

[tasks.generate-changelog]
description = "generates a changelog from git commits"
run = [
  "git-cliff $(if [[ \"${usage_bump:-false}\" == \"true\" ]]; then echo -n '--bump'; fi) --output ${usage_output}",
  "if [[ -n \"${usage_output}\" ]]; then git add ${usage_output}; fi",
]
usage = """
flag "-b --bump" help="bump level"
flag "-o --output <file>" help="output file path" default="CHANGELOG.md"
"""
outputs = ["CHANGELOG.md"]

[tasks.generate-schema]
# needed as to not be interrupted if a cleaning task is running
wait_for = ["clean"]
description = "generates a JSON schema for abbaye.toml"
run = [
  "cargo run --bin abbaye dump-schema > abbaye.schema.json && git add abbaye.schema.json",
]
outputs = ["abbaye.schema.json"]
sources = ["src/**.rs"]

[tasks.build]
alias = "b"
depends = [
  "generate-readme",
  "generate-changelog -o CHANGELOG.md",
  "generate-schema",
]
description = "build the project"
run = ["cargo build"]
sources = ["Cargo.toml", "Cargo.lock", "*.rs", "**/*.rs"]

[tasks."build::release"]
wait_for = ["clean", "fmt"]
depends = ["generate-readme", "generate-changelog"]
description = "build the project in release mode"
run = ["cargo build --release"]
sources = ["Cargo.toml", "Cargo.lock", "*.rs", "**/*.rs"]

[tasks.release]
depends = [
  "generate-readme",
  "generate-changelog",
  "generate-schema",
  "build::release",
  "fmt",
  "lint",
  "clean",
]
usage = """
arg "<new_version>" help="New version to release"
"""
confirm = "Are you sure you want to release?"
description = "release the project"
run = [
  'sed -i "/^\[package\]/,/^\[/{s/^version = \".*\"/version = \"${usage_new_version}\"/}" Cargo.toml',
  'git commit -am "chore: release v${usage_new_version}"',
  "mise run generate-changelog && git commit --amend --no-edit -n || echo \"No changelog generated\"",
  "prek run --all-files",
  "mise run 'build::release'",
  "git tag --force v${usage_new_version}",
  "mise run generate-changelog && git commit -a --amend --no-edit -n",
  "git tag --force v${usage_new_version}",
  "git push --force",
]
sources = ["Cargo.toml", "Cargo.lock", "*.rs", "**/*.rs"]
depends_post = ["deploy-docs", "abbaye"]

[tasks.clean]
description = "cleans the build output"
run = ["cargo clean", "rm -rf public/"]

[tasks.abbaye]
wait_for = ["release", "clean"]
description = "builds the release website"
run = ["cargo run --release --bin abbaye -- build"]
outputs = ["public/"]

[tasks.abbaye-dev]
description = "starts the development server"
run = [
  "watchexec -w src -w abbaye.toml -w Cargo.lock -r 'mise run abbaye && python -m http.server 4000 --directory public'",
]

[tasks.deploy-docs]
description = "deploys documentation to https://vit.am/~ololduck/abbaye"
depends = ["abbaye"]
run = [
  "rsync --progress -avz --links --perms --update public/ ololduck@vit.am:public_html/abbaye/",
]
sources = ["public/"]