mirror of
https://github.com/zealdocs/zeal.git
synced 2026-08-29 08:34:50 +08:00
102 lines
3.4 KiB
Makefile
102 lines
3.4 KiB
Makefile
# Zeal dev and release recipes.
|
|
# Uses CMake presets defined in CMakePresets.json.
|
|
# Run `just` (no args) to see the recipe list.
|
|
|
|
set shell := ["bash", "-cu"]
|
|
set windows-shell := ["sh", "-cu"]
|
|
set positional-arguments
|
|
|
|
# Default build preset; override with `just preset=name <recipe>`.
|
|
preset := env_var_or_default("PRESET", "dev")
|
|
|
|
# OS-specific preset selector for the build-time profiler.
|
|
timetrace_preset := if os() == "windows" { "timetrace-windows" } else { "timetrace-unix" }
|
|
|
|
[private]
|
|
default:
|
|
@just --list
|
|
|
|
# Configure a build directory using the current preset.
|
|
[group('dev')]
|
|
configure *args:
|
|
cmake --preset {{preset}} "$@"
|
|
|
|
# Build using the current preset.
|
|
[group('dev')]
|
|
build:
|
|
cmake --build --preset {{preset}}
|
|
|
|
# Build and run Zeal; args go to zeal.
|
|
[group('dev')]
|
|
run *args: build
|
|
./build/{{preset}}/zeal "$@"
|
|
|
|
# Configure, build, and run the test suite.
|
|
[group('dev')]
|
|
test:
|
|
cmake --preset testing
|
|
cmake --build --preset testing
|
|
ctest --preset testing
|
|
|
|
# Run clang-format over the tree.
|
|
[group('dev')]
|
|
format *args:
|
|
pwsh tools/run-clang-format.ps1 {{args}}
|
|
|
|
# Depends on `build` so AUTOUIC/AUTOMOC/AUTORCC headers exist.
|
|
# Run clang-tidy over the tree or given files.
|
|
[group('dev')]
|
|
lint *args: build
|
|
pwsh tools/run-clang-tidy.ps1 {{args}}
|
|
|
|
# Run clazy Qt-aware checks.
|
|
[group('dev')]
|
|
clazy *args: build
|
|
pwsh tools/run-clazy.ps1 {{args}}
|
|
|
|
# Requires Clang (clang-cl on Windows) and ClangBuildAnalyzer on PATH.
|
|
# Profile build time and emit a ClangBuildAnalyzer report.
|
|
[group('dev')]
|
|
analyze-build-time:
|
|
cmake --preset {{timetrace_preset}}
|
|
cmake --build --preset {{timetrace_preset}}
|
|
ClangBuildAnalyzer --all build/{{timetrace_preset}} build/{{timetrace_preset}}/cba.bin
|
|
ClangBuildAnalyzer --analyze build/{{timetrace_preset}}/cba.bin
|
|
|
|
# Re-emit the ClangBuildAnalyzer report from an existing timetrace build.
|
|
[group('dev')]
|
|
analyze-build-time-report:
|
|
ClangBuildAnalyzer --analyze build/{{timetrace_preset}}/cba.bin
|
|
|
|
# Invoke the preset's clean target.
|
|
[group('dev')]
|
|
clean:
|
|
cmake --build --preset {{preset}} --target clean
|
|
|
|
# Generate release notes for the given version, insert the corresponding
|
|
# <release> entry into the appdata, and bump CMakeLists.txt versions.
|
|
# Review the resulting changes with `git diff` before running `just release-push`.
|
|
# Maintainer use only.
|
|
[group('release')]
|
|
release-prepare version:
|
|
bash tools/release-prepare.sh {{version}}
|
|
|
|
# Commit appdata + version bump, push, create the draft release with the
|
|
# generated notes, then tag and push the tag (which triggers build CI).
|
|
# The actual GitHub Publish click still happens manually in the UI.
|
|
# `remote` controls which remote (and matching GitHub repo) receives the push;
|
|
# default is `origin` (works for fork testing). For an upstream release, run
|
|
# `just release-push 0.8.2 upstream` (or whatever you've named the upstream remote).
|
|
# Maintainer use only.
|
|
[group('release')]
|
|
release-push version remote="origin":
|
|
git add assets/freedesktop/org.zealdocs.zeal.appdata.xml.in CMakeLists.txt
|
|
git commit -m "chore: release v{{version}}"
|
|
git push {{remote}} HEAD
|
|
gh release create v{{version}} --draft --notes-file build/release-notes.md \
|
|
--repo "$(git remote get-url {{remote}} | sed -E 's|^.*github\.com[:/]||; s|\.git$||')"
|
|
git tag v{{version}}
|
|
git push {{remote}} v{{version}}
|
|
@echo "Pushed v{{version}} with draft release. CI will upload artifacts."
|
|
@echo "When CI is done, open the draft on GitHub and click Publish."
|