chore(glossy): add justfile, update .gitignore
This commit is contained in:
3 files changed
+153
-7
No files matched your search
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
tests/**/out/
|
build/
|
||||||
tests/**/diff/
|
tests/**/diff/
|
||||||
|
tests/**/out/
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
watchexec \
|
|
||||||
--watch . \
|
|
||||||
--clear \
|
|
||||||
--ignore 'tests/**/diff/**' \
|
|
||||||
--ignore 'tests/**/out/**' \
|
|
||||||
"typst-test r"
|
|
||||||
+151
@@ -0,0 +1,151 @@
|
|||||||
|
# Global settings
|
||||||
|
set shell := ["bash", "-eu", "-o", "pipefail", "-c"]
|
||||||
|
set unstable := true
|
||||||
|
|
||||||
|
# Tooling knobs (overridable via env)
|
||||||
|
TT := env_var_or_default("TT", "tt")
|
||||||
|
TT_JOBS := env_var_or_default("TT_JOBS", "4")
|
||||||
|
TYPST := env_var_or_default("TYPST", "typst")
|
||||||
|
TYPSTYLE := env_var_or_default("TYPSTYLE", "typstyle")
|
||||||
|
|
||||||
|
# Paths
|
||||||
|
THUMB_SRC := "tests/demo/test.typ"
|
||||||
|
THUMB_OUT := "thumbnail.png"
|
||||||
|
THEME_SRC := "tests/theme-gallery/test.typ"
|
||||||
|
THEME_OUT := "themeshots.png"
|
||||||
|
DEMO_SRC := "tests/demo/test.typ"
|
||||||
|
DEMO_OUT := "build/demo.pdf"
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
alias c := check
|
||||||
|
alias f := fmt
|
||||||
|
alias t := test
|
||||||
|
alias w := watch
|
||||||
|
|
||||||
|
# Default entrypoint
|
||||||
|
[default]
|
||||||
|
help:
|
||||||
|
@just --list --unsorted
|
||||||
|
|
||||||
|
# ---------------------------- CI / quality ----------------------------
|
||||||
|
|
||||||
|
# Format all Typst files
|
||||||
|
[group('ci')]
|
||||||
|
fmt:
|
||||||
|
rg --files -g '*.typ' | xargs -r {{TYPSTYLE}} --inplace
|
||||||
|
|
||||||
|
# Check formatting without modifying files
|
||||||
|
[group('ci')]
|
||||||
|
fmt-check:
|
||||||
|
rg --files -g '*.typ' | xargs -r {{TYPSTYLE}} --check
|
||||||
|
|
||||||
|
# Run all quality checks
|
||||||
|
[group('ci')]
|
||||||
|
check: fmt-check test
|
||||||
|
|
||||||
|
# Run tests with optional arguments
|
||||||
|
[group('ci')]
|
||||||
|
test *args:
|
||||||
|
{{TT}} run --jobs {{TT_JOBS}} {{args}}
|
||||||
|
|
||||||
|
# Accept test outputs as new references
|
||||||
|
[group('ci')]
|
||||||
|
accept *args:
|
||||||
|
{{TT}} accept {{args}}
|
||||||
|
|
||||||
|
# ---------------------------- Dev UX ----------------------------
|
||||||
|
|
||||||
|
# Watch for changes and run tests automatically
|
||||||
|
[group('dev')]
|
||||||
|
watch *args:
|
||||||
|
watchexec \
|
||||||
|
--watch . \
|
||||||
|
--clear \
|
||||||
|
--delay-run 5s \
|
||||||
|
--ignore 'tests/**/diff/**' \
|
||||||
|
--ignore 'tests/**/out/**' \
|
||||||
|
--ignore 'tests/**/ref/**' \
|
||||||
|
"{{TT}} run --jobs {{TT_JOBS}} {{args}}"
|
||||||
|
|
||||||
|
# ---------------------------- Artifacts ----------------------------
|
||||||
|
|
||||||
|
# Build demo.typ -> demo.pdf
|
||||||
|
[group('artifacts')]
|
||||||
|
demo:
|
||||||
|
mkdir -p "$(dirname {{DEMO_OUT}})"
|
||||||
|
{{TYPST}} compile --root . {{DEMO_SRC}} {{DEMO_OUT}}
|
||||||
|
@echo "Wrote {{DEMO_OUT}}"
|
||||||
|
|
||||||
|
# Build all preview images
|
||||||
|
# Build all preview images
|
||||||
|
[group('artifacts')]
|
||||||
|
images:
|
||||||
|
{{TT}} run theme-gallery && cp tests/theme-gallery/out/*.png {{THEME_OUT}}
|
||||||
|
{{TT}} run demo && cp tests/demo/out/*.png {{THUMB_OUT}}
|
||||||
|
|
||||||
|
# ---------------------------- Housekeeping ----------------------------
|
||||||
|
|
||||||
|
# Remove all generated test files and build artifacts
|
||||||
|
[group('housekeeping')]
|
||||||
|
clean:
|
||||||
|
rg --files tests -g '**/diff/**' -g '**/out/**' 2>/dev/null \
|
||||||
|
| xargs -r dirname \
|
||||||
|
| sort -u \
|
||||||
|
| xargs -r bash -c 'for d; do echo "Removing files under: $d"; rm -rf -- "$d"/*; done' _ \
|
||||||
|
|| true
|
||||||
|
rm -rf build
|
||||||
|
|
||||||
|
# ---------------------------- Release tooling ----------------------------
|
||||||
|
|
||||||
|
# Bump version by level (major|minor|patch) or to explicit version
|
||||||
|
[group('release')]
|
||||||
|
[script("python3")]
|
||||||
|
bump version_or_level:
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
arg = "{{version_or_level}}".strip()
|
||||||
|
if not arg:
|
||||||
|
raise SystemExit("Usage: just bump <major|minor|patch|x.y.z>")
|
||||||
|
|
||||||
|
# If it's a level keyword, calculate the new version
|
||||||
|
if arg.lower() in {"major", "minor", "patch"}:
|
||||||
|
level = arg.lower()
|
||||||
|
data = Path("typst.toml").read_text()
|
||||||
|
m = re.search(r'^version\s*=\s*"([^"]+)"', data, re.MULTILINE)
|
||||||
|
if not m:
|
||||||
|
raise SystemExit("Could not find current version in typst.toml")
|
||||||
|
|
||||||
|
major, minor, patch = map(int, m.group(1).split("."))
|
||||||
|
old_version = m.group(1)
|
||||||
|
|
||||||
|
if level == "major":
|
||||||
|
major, minor, patch = major + 1, 0, 0
|
||||||
|
elif level == "minor":
|
||||||
|
major, minor, patch = major, minor + 1, 0
|
||||||
|
else:
|
||||||
|
patch += 1
|
||||||
|
|
||||||
|
version = f"{major}.{minor}.{patch}"
|
||||||
|
print(f"Bumping {level} version: {old_version} → {version}")
|
||||||
|
else:
|
||||||
|
# It's an explicit version
|
||||||
|
version = arg
|
||||||
|
print(f"Setting version to {version}")
|
||||||
|
|
||||||
|
# Update files
|
||||||
|
def update(path: Path, pattern: re.Pattern):
|
||||||
|
text = path.read_text()
|
||||||
|
new_text, count = pattern.subn(lambda m: m.group(1) + version + m.group(3), text, count=1)
|
||||||
|
if count == 0:
|
||||||
|
raise SystemExit(f"Failed to update {path}")
|
||||||
|
path.write_text(new_text)
|
||||||
|
|
||||||
|
update(Path("typst.toml"), re.compile(r'^(version\s*=\s*")([^"]+)(")', re.MULTILINE))
|
||||||
|
update(Path("README.md"), re.compile(r'(#import "@preview/glossy:)([^"]+)(": \*)'))
|
||||||
|
print(f"Updated typst.toml and README.md")
|
||||||
|
|
||||||
|
|
||||||
|
# Run full pre-submission checks
|
||||||
|
[group('release')]
|
||||||
|
pre-submit: clean images check
|
||||||
Reference in new issue
Block a user