|
| 1 | +#!/usr/bin/env -S usage bash |
| 2 | +#USAGE flag "-n --name <name>" help="Package name (if this flag is not provided, then the package name is inferred from the directory name)" |
| 3 | +#USAGE arg "<dir>" |
| 4 | + |
| 5 | +set -xeuo pipefail |
| 6 | + |
| 7 | +dir=$(realpath "${usage_dir:?}") |
| 8 | +name_new_default="${usage_name:-$(basename "$dir")}" |
| 9 | +cargo_toml="$dir/Cargo.toml" |
| 10 | +#mise_toml="$dir/mise.toml" |
| 11 | + |
| 12 | +read -r -p "Rust package name (default: $name_new_default): " name_new |
| 13 | +read -r -p "Rust package description: " description |
| 14 | +read -r -p "Rust package title (default: same as description): " title |
| 15 | + |
| 16 | +if [[ -z $name_new ]]; then |
| 17 | + name_new=$name_new_default |
| 18 | +fi |
| 19 | + |
| 20 | +if [[ -z $title ]]; then |
| 21 | + title=$description |
| 22 | +fi |
| 23 | + |
| 24 | +( |
| 25 | + cd "$dir" |
| 26 | + |
| 27 | + files=("README.md" "LICENSE-APACHE" "LICENSE-MIT") |
| 28 | + for file in "${files[@]}"; do |
| 29 | + if [[ -f "$file" ]]; then |
| 30 | + rm "$file" |
| 31 | + fi |
| 32 | + done |
| 33 | + |
| 34 | + mise trust |
| 35 | + mise install |
| 36 | + |
| 37 | + name_old=$(taplo get -f "$cargo_toml" "package.name") |
| 38 | + name_old_snake_case=$(ccase --to snake "$name_old") |
| 39 | + name_new_snake_case=$(ccase --to snake "$name_new") |
| 40 | + repo_url=$(cd "$dir" && gh repo view --json url | jq -r .url) |
| 41 | + |
| 42 | + tomli set -f "$cargo_toml" "package.name" "$name_new" | sponge "$cargo_toml" |
| 43 | + tomli set -f "$cargo_toml" "package.repository" "$repo_url" | sponge "$cargo_toml" |
| 44 | + tomli set -f "$cargo_toml" "package.homepage" "$repo_url" | sponge "$cargo_toml" |
| 45 | + tomli set -f "$cargo_toml" "package.description" "$description" | sponge "$cargo_toml" |
| 46 | + tomli set -f "$cargo_toml" "package.metadata.details.title" "$title" | sponge "$cargo_toml" |
| 47 | + |
| 48 | + # rg exits with status code = 1 if it doesn't find any files, so we need to disable & re-enable "set -e" |
| 49 | + set +e |
| 50 | + rg --files-with-matches "$name_old_snake_case" "$dir" | xargs gsed -i "s/\b$name_old_snake_case\b/$name_new_snake_case/g" |
| 51 | + set -e |
| 52 | + |
| 53 | + mise exec -- lefthook install |
| 54 | + |
| 55 | + mise run build |
| 56 | + mise run test |
| 57 | + |
| 58 | + git add . |
| 59 | + git commit -a -m "chore: update package details" |
| 60 | +) |
0 commit comments