diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100644 index 0000000..71e38c0 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,13 @@ +#!/bin/sh +# devbase pre-commit hook +# Usage: git config core.hooksPath .githooks + +set -e + +echo "[pre-commit] cargo fmt --check" +cargo fmt --check + +echo "[pre-commit] cargo clippy --all-targets -- -D warnings" +cargo clippy --all-targets -- -D warnings + +echo "[pre-commit] checks passed" diff --git a/scripts/ci-local.ps1 b/scripts/ci-local.ps1 new file mode 100644 index 0000000..56316e6 --- /dev/null +++ b/scripts/ci-local.ps1 @@ -0,0 +1,33 @@ +#!/usr/bin/env pwsh +# devbase 本地 CI 预检脚本(Windows PowerShell) +# 功能对等 GitHub Actions 的 Required Checks + +$ErrorActionPreference = "Stop" + +Write-Host "=== devbase Local CI ===" -ForegroundColor Cyan + +Write-Host "`n[1/6] cargo fmt --check" -ForegroundColor Yellow +& cargo fmt --check +if ($LASTEXITCODE -ne 0) { throw "fmt failed" } + +Write-Host "`n[2/6] cargo clippy --all-targets -- -D warnings" -ForegroundColor Yellow +& cargo clippy --all-targets -- -D warnings +if ($LASTEXITCODE -ne 0) { throw "clippy failed" } + +Write-Host "`n[3/6] cargo check" -ForegroundColor Yellow +& cargo check +if ($LASTEXITCODE -ne 0) { throw "check failed" } + +Write-Host "`n[4/6] cargo test --workspace -- --test-threads=4" -ForegroundColor Yellow +& cargo test --workspace -- --test-threads=4 +if ($LASTEXITCODE -ne 0) { throw "test failed" } + +Write-Host "`n[5/6] cargo check --features greptimedb" -ForegroundColor Yellow +& cargo check --features greptimedb +if ($LASTEXITCODE -ne 0) { throw "greptimedb feature check failed" } + +Write-Host "`n[6/6] cargo audit" -ForegroundColor Yellow +& cargo audit +if ($LASTEXITCODE -ne 0) { Write-Warning "audit found issues (non-blocking)" } + +Write-Host "`n=== All local checks passed ===" -ForegroundColor Green diff --git a/scripts/ci-local.sh b/scripts/ci-local.sh new file mode 100644 index 0000000..720e5d3 --- /dev/null +++ b/scripts/ci-local.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash +# devbase 本地 CI 预检脚本(WSL / Git Bash / Linux) +# 功能对等 GitHub Actions 的 Required Checks + +set -euo pipefail + +echo "=== devbase Local CI ===" + +echo "" +echo "[1/6] cargo fmt --check" +cargo fmt --check + +echo "" +echo "[2/6] cargo clippy --all-targets -- -D warnings" +cargo clippy --all-targets -- -D warnings + +echo "" +echo "[3/6] cargo check" +cargo check + +echo "" +echo "[4/6] cargo test --workspace -- --test-threads=4" +cargo test --workspace -- --test-threads=4 + +echo "" +echo "[5/6] cargo check --features greptimedb" +cargo check --features greptimedb + +echo "" +echo "[6/6] cargo audit" +cargo audit || echo "warning: audit found issues (non-blocking)" + +echo "" +echo "=== All local checks passed ===" diff --git a/scripts/update_readme.py b/scripts/update_readme.py new file mode 100644 index 0000000..c4093f3 --- /dev/null +++ b/scripts/update_readme.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +"""Update README.md release asset metadata. + +Usage: + python scripts/update_readme.py --version v0.21.0 \ + --windows-size 8.9 --linux-size 8.8 +""" +import argparse +import re +import sys + + +def main(): + parser = argparse.ArgumentParser(description="Update README release metadata") + parser.add_argument("--version", required=True, help="New version tag (e.g. v0.21.0)") + parser.add_argument("--windows-size", type=float, required=True, help="Windows asset size in MB") + parser.add_argument("--linux-size", type=float, required=True, help="Linux asset size in MB") + parser.add_argument("--readme", default="README.md", help="Path to README.md") + args = parser.parse_args() + + with open(args.readme, "r", encoding="utf-8") as f: + content = f.read() + + old_version_pattern = r"devbase-v[\d.]+" + new_version_str = f"devbase-{args.version}" + + # Replace version references in filenames and URLs + content = re.sub(old_version_pattern, new_version_str, content) + + # Replace version in directory names (e.g. devbase-v0.20.0-linux-x64) + def repl_dir(m): + return f"devbase-{args.version}-{m.group(1)}-x64" + content = re.sub( + r"devbase-v[\d.]+-(linux|windows)-x64", + repl_dir, + content, + ) + + # Replace version in release download URLs (/download/v0.20.0/) + content = re.sub( + r"/download/v[\d.]+/", + f"/download/{args.version}/", + content, + ) + + # Replace size in table + content = re.sub( + r"(\| Windows x86_64 \| .*? \| )~[\d.]+ MB( \|)", + f"\1~{args.windows_size:.1f} MB\2", + content, + ) + content = re.sub( + r"(\| Linux x86_64 \| .*? \| )~[\d.]+ MB( \|)", + f"\1~{args.linux_size:.1f} MB\2", + content, + ) + + with open(args.readme, "w", encoding="utf-8") as f: + f.write(content) + + print(f"Updated {args.readme} for version {args.version}") + + +if __name__ == "__main__": + main()