Files
owlry/justfile
T
vikingowl fa3f04e3fc build(justfile): rewrite for single-repo, single-package v2 reality
The pre-v2 justfile drove a 5-crate workspace and 15 AUR packages, with
machinery to bump-all crates, iterate over aur/*/ subdirs, manage meta-
package versions, and run a release-crate pipeline parameterised by
crate name. None of that applies anymore — there is one crate and one
PKGBUILD.

Replaced with:
- build / release / release-minimal — release defaults to --features
  full so dev builds match the AUR binary's feature set.
- run / run-daemon / run-debug — run-debug uses dev-logging feature.
- test — runs both feature axes (no-default-features and --features full)
  so contributors can't silently break either build.
- check — cargo check on both axes + clippy on --features full.
- install-local — installs the man page too now.
- version / bump — single-crate operations, no 'crate' parameter.
- tag / push-tags — tags owlry-v<version> directly.
- aur-stage / aur-update / aur-publish / aur-status / aur-commit — all
  hardcoded to aur/owlry/, no pkg parameter.
- aur-update fetches the tagged tarball, recomputes b2sum, regenerates
  .SRCINFO. Errors with a clear message if the tag isn't pushed yet.
- aur-publish errors with a clone hint if aur/owlry/.git is missing.
- release-owlry — full pipeline: bump -> push -> tag -> push-tags ->
  aur-update -> aur-commit -> push -> aur-publish. Drop-in replacement
  for the old release-crate recipe.

Removed:
- build-ui / build-daemon / release-daemon — no separate daemon crate.
- show-versions / crate-version / bump-crate / bump-all — single crate.
- tag-crate — there's no per-crate concept anymore.
- aur-update-pkg / aur-update-all / aur-publish-pkg / aur-publish-all /
  aur-test-pkg-by-name / release-crate — collapsed since only aur/owlry
  exists.
- bump-meta — meta-bundles dropped in the v2 collapse.

aur-local-test now defaults its args to 'owlry' so 'just aur-local-test'
without arguments does the right thing.
2026-05-13 03:00:24 +02:00

260 lines
7.6 KiB
Makefile

# Owlry build and release automation.
#
# v2 collapsed the workspace from 5 crates to 1 and shipped a single AUR
# package. The multi-crate / multi-package machinery has been removed.
default:
@just --list
# === Build ===
build:
cargo build --workspace
# Release build with the AUR feature set (every optional provider compiled in).
release:
cargo build --workspace --release --features full
# Release build with only the minimal default features.
release-minimal:
cargo build --workspace --release
# === Run ===
# Launch the UI (auto mode, default features).
run *ARGS:
cargo run -p owlry -- {{ARGS}}
# Run the daemon in the foreground (alias: `cargo run -- -d`).
run-daemon *ARGS:
cargo run -p owlry -- -d {{ARGS}}
# Run with dev-logging feature enabled (verbose debug output).
run-debug *ARGS:
cargo run -p owlry --features dev-logging -- {{ARGS}}
# === Quality ===
# Run the full test matrix used in CI: no-default-features then --features full.
test:
cargo test --workspace --no-default-features
cargo test --workspace --features full
# cargo check + clippy across both feature axes.
check:
cargo check --workspace --no-default-features
cargo check --workspace --features full
cargo clippy --workspace --features full
fmt:
cargo fmt --all
fmt-check:
cargo fmt --all --check
clean:
cargo clean
# === Install (local dev) ===
install-local:
#!/usr/bin/env bash
set -euo pipefail
echo "Building release with --features full..."
cargo build -p owlry --release --features full
echo "Installing binary..."
sudo install -Dm755 target/release/owlry /usr/bin/owlry
echo "Installing systemd user units..."
sudo install -Dm644 systemd/owlry.service /usr/lib/systemd/user/owlry.service
sudo install -Dm644 systemd/owlry.socket /usr/lib/systemd/user/owlry.socket
echo "Installing man page..."
sudo install -Dm644 data/owlry.1 /usr/share/man/man1/owlry.1
echo
echo "Done. Start daemon: systemctl --user enable --now owlry.service"
# === Version Management ===
# Print the current owlry version.
version:
@grep '^version' crates/owlry/Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/'
# Bump the owlry version, update Cargo.lock, commit.
bump new_version:
#!/usr/bin/env bash
set -euo pipefail
toml="crates/owlry/Cargo.toml"
old=$(grep '^version' "$toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
if [ "$old" = "{{new_version}}" ]; then
echo "owlry already at {{new_version}}"
exit 0
fi
echo "Bumping owlry from $old to {{new_version}}"
sed -i 's/^version = ".*"/version = "{{new_version}}"/' "$toml"
cargo check -p owlry
git add "$toml" Cargo.lock
git commit -m "chore(owlry): bump version to {{new_version}}"
# === Tagging ===
# Tag the current owlry version as owlry-v<version>.
tag:
#!/usr/bin/env bash
set -euo pipefail
ver=$(just version)
tag="owlry-v$ver"
if git rev-parse "$tag" >/dev/null 2>&1; then
echo "Tag $tag already exists"
exit 0
fi
git tag -a "$tag" -m "owlry v$ver"
echo "Created tag $tag"
# Push all local tags upstream.
push-tags:
git push --tags
# === AUR ===
#
# Only one AUR package after the v2 collapse: aur/owlry/. Its subdirectory
# has its own .git pointing at aur.archlinux.org — see aur-stage below.
# Stage AUR files into the main repo index, working around the embedded .git
# that would otherwise make git treat aur/owlry/ as an embedded repo.
aur-stage:
#!/usr/bin/env bash
set -euo pipefail
dir="aur/owlry"
files=("$dir/PKGBUILD" "$dir/.SRCINFO")
for f in "$dir"/*.install; do
[ -f "$f" ] && files+=("$f")
done
if [ -d "$dir/.git" ]; then
mv "$dir/.git" "$dir/.git.bak"
git add "${files[@]}"
mv "$dir/.git.bak" "$dir/.git"
else
git add "${files[@]}"
fi
# Refresh aur/owlry/PKGBUILD to point at the current Cargo.toml version's
# tagged source tarball (fetches the tarball to recompute the b2sum) and
# regenerates .SRCINFO. Requires the tag to be pushed beforehand.
aur-update:
#!/usr/bin/env bash
set -euo pipefail
aur_dir="aur/owlry"
ver=$(just version)
tag="owlry-v$ver"
url="https://somegit.dev/Owlibou/owlry/archive/$tag.tar.gz"
echo "Updating aur/owlry/PKGBUILD to $ver (tag: $tag)"
sed -i "s/^pkgver=.*/pkgver=$ver/" "$aur_dir/PKGBUILD"
sed -i 's/^pkgrel=.*/pkgrel=1/' "$aur_dir/PKGBUILD"
echo "Fetching tagged tarball and computing b2sum..."
hash=$(curl -fsL "$url" | b2sum | cut -d' ' -f1)
if [ -z "$hash" ] || [ ${#hash} -lt 64 ]; then
echo "Error: failed to download or hash $url"
echo " (Is the tag pushed? Run 'just push-tags' first.)"
exit 1
fi
sed -i "s|^b2sums=.*|b2sums=('$hash')|" "$aur_dir/PKGBUILD"
(cd "$aur_dir" && makepkg --printsrcinfo > .SRCINFO)
echo "aur/owlry/ PKGBUILD updated to $ver."
# Push aur/owlry/ to aur.archlinux.org (via the embedded .git remote).
aur-publish:
#!/usr/bin/env bash
set -euo pipefail
aur_dir="aur/owlry"
[ -d "$aur_dir/.git" ] || {
echo "Error: $aur_dir has no AUR git repo. Clone it first:"
echo " cd $aur_dir && git init && git remote add origin ssh://aur@aur.archlinux.org/owlry.git"
exit 1
}
cd "$aur_dir"
ver=$(grep '^pkgver=' PKGBUILD | sed 's/pkgver=//')
git add -A
git commit -m "Update to v$ver" || { echo "Nothing to commit"; exit 0; }
git push origin master
echo "owlry v$ver published to AUR."
# Show the current AUR PKGBUILD version.
aur-status:
#!/usr/bin/env bash
set -euo pipefail
dir="aur/owlry"
ver=$(grep '^pkgver=' "$dir/PKGBUILD" | sed 's/pkgver=//')
rel=$(grep '^pkgrel=' "$dir/PKGBUILD" | sed 's/pkgrel=//')
if [ -d "$dir/.git" ]; then
printf " ✓ owlry %s-%s\n" "$ver" "$rel"
else
printf " ✗ owlry %s-%s (no embedded AUR .git — clone first)\n" "$ver" "$rel"
fi
# Stage + commit PKGBUILD/.SRCINFO/.install changes into the main repo.
aur-commit msg="chore(aur): update PKGBUILD":
#!/usr/bin/env bash
set -euo pipefail
just aur-stage
git diff --cached --quiet && { echo "No AUR changes to commit"; exit 0; }
git commit -m "{{msg}}"
# === Release Workflow ===
# Full release pipeline: bump → push → tag → aur-update → aur-commit → aur-publish.
# Stops between push and tag to give the tagged tarball time to materialise on
# somegit.dev before fetching it for b2sum.
release-owlry new_version:
#!/usr/bin/env bash
set -euo pipefail
just bump {{new_version}}
git push
just tag
just push-tags
echo "Waiting for tag to propagate..."
sleep 3
just aur-update
just aur-commit "chore(aur): update owlry to {{new_version}}"
git push
just aur-publish
echo
echo "owlry v{{new_version}} released and published to AUR."
# === Testing ===
# Quick local PKGBUILD build (no chroot, uses host deps).
aur-test-pkg:
#!/usr/bin/env bash
set -euo pipefail
cd aur/owlry
echo "Testing PKGBUILD via makepkg -sf..."
makepkg -sf
echo "Package built successfully."
ls -lh *.pkg.tar.zst
# Build aur/owlry/ from the local working tree inside a clean extra chroot.
# Patches the PKGBUILD source line to a working-tree tarball; restores on exit.
#
# Requires sudo (extra-x86_64-build runs as root). See scripts/aur-local-test
# for the full implementation.
aur-local-test *args="owlry":
#!/usr/bin/env bash
set -euo pipefail
ts=$(date +%Y%m%d-%H%M%S)
outfile="build-logs/aur-test-$ts.log"
mkdir -p build-logs
scripts/aur-local-test {{args}} 2>&1 | tee "$outfile"
echo "⌁ Output saved to $outfile"