123 lines
3.5 KiB
Bash
Executable File
123 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Enforce date-based versioning (YY.MM.DD) before publishing.
|
|
# Remove leading zeros from month and day to comply with cargo fmt requirements
|
|
year=$(date +%y)
|
|
month=$(date +%-m)
|
|
day=$(date +%-d)
|
|
today_raw="${year}-${month}-${day}"
|
|
expected_version=${today_raw//-/.}
|
|
|
|
read_versions=$(python - <<'PY'
|
|
import sys
|
|
|
|
|
|
def load_toml(path: str):
|
|
try:
|
|
import tomllib # Python 3.11+
|
|
except ModuleNotFoundError: # Fallback for older Python
|
|
import tomli as tomllib # type: ignore
|
|
with open(path, "rb") as f:
|
|
return tomllib.load(f)
|
|
|
|
|
|
workspace = load_toml("Cargo.toml")
|
|
core = load_toml("core/Cargo.toml")
|
|
tui = load_toml("tui/Cargo.toml")
|
|
|
|
workspace_version = workspace.get("workspace", {}).get("package", {}).get("version")
|
|
|
|
core_pkg = core.get("package", {})
|
|
core_version = core_pkg.get("version") or workspace_version
|
|
if isinstance(core_version, dict) and core_version.get("workspace"):
|
|
core_version = workspace_version
|
|
|
|
linutil_core_dep = tui.get("dependencies", {}).get("linutil_core")
|
|
linutil_core_dep_version = None
|
|
if isinstance(linutil_core_dep, dict):
|
|
linutil_core_dep_version = linutil_core_dep.get("version")
|
|
|
|
print(workspace_version or "")
|
|
print(core_version or "")
|
|
print(linutil_core_dep_version or "")
|
|
PY
|
|
)
|
|
|
|
workspace_version=$(echo "$read_versions" | sed -n '1p')
|
|
core_version=$(echo "$read_versions" | sed -n '2p')
|
|
tui_dep_version=$(echo "$read_versions" | sed -n '3p')
|
|
|
|
if [[ -z "$workspace_version" || -z "$core_version" || -z "$tui_dep_version" ]]; then
|
|
echo "Unable to determine required versions from Cargo manifests." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Function to update version in a TOML file
|
|
update_toml_version() {
|
|
local file=$1
|
|
local old_version=$2
|
|
local new_version=$3
|
|
|
|
echo "Updating version in $file from $old_version to $new_version..."
|
|
sed -i "s/version = \"$old_version\"/version = \"$new_version\"/" "$file"
|
|
}
|
|
|
|
version_updated=false
|
|
|
|
if [[ "$workspace_version" != "$expected_version" ]]; then
|
|
echo "Workspace version $workspace_version does not match today's expected $expected_version."
|
|
update_toml_version "Cargo.toml" "$workspace_version" "$expected_version"
|
|
version_updated=true
|
|
fi
|
|
|
|
if [[ "$core_version" != "$expected_version" ]]; then
|
|
echo "linutil_core package version $core_version does not match today's expected $expected_version."
|
|
# Core uses workspace version, so if workspace was updated, this should be fine
|
|
if [[ "$workspace_version" == "$core_version" ]]; then
|
|
echo "Core version will be updated via workspace version."
|
|
fi
|
|
fi
|
|
|
|
if [[ "$tui_dep_version" != "$expected_version" ]]; then
|
|
echo "linutil_tui depends on linutil_core $tui_dep_version but expected $expected_version."
|
|
update_toml_version "tui/Cargo.toml" "$tui_dep_version" "$expected_version"
|
|
version_updated=true
|
|
fi
|
|
|
|
if [[ "$version_updated" == true ]]; then
|
|
echo "Versions have been updated to $expected_version."
|
|
echo "Please review the changes and run the script again to proceed with publishing."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Version check passed: $expected_version"
|
|
|
|
echo "Running sort and format checks..."
|
|
if ! cargo sort --check --workspace; then
|
|
echo "cargo sort check failed. Please run 'cargo sort --workspace' to fix." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! cargo fmt --check; then
|
|
echo "cargo fmt check failed. Please run 'cargo fmt' to fix." >&2
|
|
exit 1
|
|
fi
|
|
|
|
bash sort-tomlfiles.sh
|
|
cargo test --no-fail-fast --package linutil_core
|
|
cargo build --release
|
|
echo "Checks passed."
|
|
|
|
read -r -p "Publish to crates.io? [y/N]: " answer
|
|
case "$answer" in
|
|
[Yy]*)
|
|
cargo publish -p linutil_core
|
|
cargo publish -p linutil_tui
|
|
;;
|
|
*)
|
|
echo "Publish skipped."
|
|
;;
|
|
esac
|