340 lines
9.9 KiB
Makefile
340 lines
9.9 KiB
Makefile
# Owlry build and release automation
|
|
|
|
default:
|
|
@just --list
|
|
|
|
# === Build ===
|
|
|
|
build:
|
|
cargo build --workspace
|
|
|
|
build-ui:
|
|
cargo build -p owlry
|
|
|
|
build-daemon:
|
|
cargo build -p owlry-core
|
|
|
|
release:
|
|
cargo build --workspace --release
|
|
|
|
release-daemon:
|
|
cargo build -p owlry-core --release
|
|
|
|
# === Run ===
|
|
|
|
run *ARGS:
|
|
cargo run -p owlry -- {{ARGS}}
|
|
|
|
run-daemon *ARGS:
|
|
cargo run -p owlry-core -- {{ARGS}}
|
|
|
|
# === Quality ===
|
|
|
|
test:
|
|
cargo test --workspace
|
|
|
|
check:
|
|
cargo check --workspace
|
|
cargo clippy --workspace
|
|
|
|
fmt:
|
|
cargo fmt --all
|
|
|
|
clean:
|
|
cargo clean
|
|
|
|
# === Install ===
|
|
|
|
install-local:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
echo "Building release..."
|
|
cargo build -p owlry --release --no-default-features
|
|
cargo build -p owlry-core --release
|
|
cargo build -p owlry-lua -p owlry-rune --release
|
|
|
|
echo "Creating directories..."
|
|
sudo mkdir -p /usr/lib/owlry/plugins
|
|
sudo mkdir -p /usr/lib/owlry/runtimes
|
|
|
|
echo "Installing binaries..."
|
|
sudo install -Dm755 target/release/owlry /usr/bin/owlry
|
|
sudo install -Dm755 target/release/owlry-core /usr/bin/owlry-core
|
|
|
|
echo "Installing runtimes..."
|
|
[ -f target/release/libowlry_lua.so ] && sudo install -Dm755 target/release/libowlry_lua.so /usr/lib/owlry/runtimes/liblua.so
|
|
[ -f target/release/libowlry_rune.so ] && sudo install -Dm755 target/release/libowlry_rune.so /usr/lib/owlry/runtimes/librune.so
|
|
|
|
echo "Installing systemd service files..."
|
|
[ -f systemd/owlry-core.service ] && sudo install -Dm644 systemd/owlry-core.service /usr/lib/systemd/user/owlry-core.service
|
|
[ -f systemd/owlry-core.socket ] && sudo install -Dm644 systemd/owlry-core.socket /usr/lib/systemd/user/owlry-core.socket
|
|
|
|
echo "Done. Start daemon: systemctl --user enable --now owlry-core.service"
|
|
|
|
# === Version Management ===
|
|
|
|
show-versions:
|
|
#!/usr/bin/env bash
|
|
echo "=== Crate Versions ==="
|
|
for toml in crates/*/Cargo.toml; do
|
|
name=$(grep '^name' "$toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
ver=$(grep '^version' "$toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
printf " %-30s %s\n" "$name" "$ver"
|
|
done
|
|
|
|
# Get version of a specific crate
|
|
crate-version crate:
|
|
@grep '^version' crates/{{crate}}/Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/'
|
|
|
|
# Bump a single crate version, update Cargo.lock, commit
|
|
bump-crate crate new_version:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
toml="crates/{{crate}}/Cargo.toml"
|
|
[ -f "$toml" ] || { echo "Error: $toml not found"; exit 1; }
|
|
|
|
old=$(grep '^version' "$toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
[ "$old" = "{{new_version}}" ] && { echo "{{crate}} already at {{new_version}}"; exit 0; }
|
|
|
|
echo "Bumping {{crate}} from $old to {{new_version}}"
|
|
sed -i 's/^version = ".*"/version = "{{new_version}}"/' "$toml"
|
|
cargo check -p {{crate}}
|
|
git add "$toml" Cargo.lock
|
|
git commit -m "chore({{crate}}): bump version to {{new_version}}"
|
|
echo "{{crate}} bumped to {{new_version}}"
|
|
|
|
# Bump all crates to same version
|
|
bump-all new_version:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
for toml in crates/*/Cargo.toml; do
|
|
crate=$(basename $(dirname "$toml"))
|
|
old=$(grep '^version' "$toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
[ "$old" = "{{new_version}}" ] && continue
|
|
echo "Bumping $crate from $old to {{new_version}}"
|
|
sed -i 's/^version = ".*"/version = "{{new_version}}"/' "$toml"
|
|
done
|
|
cargo check --workspace
|
|
git add crates/*/Cargo.toml Cargo.lock
|
|
git commit -m "chore: bump all crates to {{new_version}}"
|
|
echo "All crates bumped to {{new_version}}"
|
|
|
|
# Bump core UI only
|
|
bump new_version:
|
|
just bump-crate owlry {{new_version}}
|
|
|
|
# === Tagging ===
|
|
|
|
# Tag a specific crate (format: {crate}-v{version})
|
|
tag-crate crate:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
ver=$(grep '^version' "crates/{{crate}}/Cargo.toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
tag="{{crate}}-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 "{{crate}} v$ver"
|
|
echo "Created tag $tag"
|
|
|
|
# Push all local tags
|
|
push-tags:
|
|
git push --tags
|
|
|
|
# === AUR Package Management ===
|
|
|
|
# Stage AUR files into the main repo git index.
|
|
# AUR subdirs have their own .git (for aur.archlinux.org), which makes
|
|
# git treat them as embedded repos. Temporarily hide .git to stage files.
|
|
aur-stage pkg:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
dir="aur/{{pkg}}"
|
|
[ -d "$dir" ] || { echo "Error: $dir not found"; exit 1; }
|
|
|
|
# Build list of files to stage
|
|
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
|
|
|
|
# Update a specific AUR package PKGBUILD with correct version + checksum
|
|
aur-update-pkg pkg:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
aur_dir="aur/{{pkg}}"
|
|
[ -d "$aur_dir" ] || { echo "Error: $aur_dir not found"; exit 1; }
|
|
|
|
# Determine version
|
|
case "{{pkg}}" in
|
|
owlry-meta-*)
|
|
ver=$(grep '^pkgver=' "$aur_dir/PKGBUILD" | sed 's/pkgver=//')
|
|
echo "Meta-package {{pkg}} at $ver (bump pkgrel manually if needed)"
|
|
(cd "$aur_dir" && makepkg --printsrcinfo > .SRCINFO)
|
|
exit 0
|
|
;;
|
|
*)
|
|
crate_dir="crates/{{pkg}}"
|
|
[ -d "$crate_dir" ] || { echo "Error: $crate_dir not found"; exit 1; }
|
|
ver=$(grep '^version' "$crate_dir/Cargo.toml" | head -1 | sed 's/.*"\(.*\)"/\1/')
|
|
;;
|
|
esac
|
|
|
|
tag="{{pkg}}-v$ver"
|
|
url="https://somegit.dev/Owlibou/owlry/archive/$tag.tar.gz"
|
|
|
|
echo "Updating {{pkg}} to $ver (tag: $tag)"
|
|
sed -i "s/^pkgver=.*/pkgver=$ver/" "$aur_dir/PKGBUILD"
|
|
sed -i 's/^pkgrel=.*/pkgrel=1/' "$aur_dir/PKGBUILD"
|
|
|
|
# Update checksum from the tagged tarball
|
|
if grep -q "^source=" "$aur_dir/PKGBUILD"; then
|
|
echo "Downloading tarball and computing checksum..."
|
|
hash=$(curl -sL "$url" | b2sum | cut -d' ' -f1)
|
|
if [ -z "$hash" ] || [ ${#hash} -lt 64 ]; then
|
|
echo "Error: failed to download or hash $url"
|
|
exit 1
|
|
fi
|
|
sed -i "s|^b2sums=.*|b2sums=('$hash')|" "$aur_dir/PKGBUILD"
|
|
fi
|
|
|
|
(cd "$aur_dir" && makepkg --printsrcinfo > .SRCINFO)
|
|
echo "{{pkg}} PKGBUILD updated to $ver"
|
|
|
|
# Shortcut: update core UI AUR package
|
|
aur-update:
|
|
just aur-update-pkg owlry
|
|
|
|
# Publish a specific AUR package to aur.archlinux.org
|
|
aur-publish-pkg pkg:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
aur_dir="aur/{{pkg}}"
|
|
[ -d "$aur_dir/.git" ] || { echo "Error: $aur_dir has no AUR git repo"; 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 "{{pkg}} v$ver published to AUR!"
|
|
|
|
# Shortcut: publish core UI to AUR
|
|
aur-publish:
|
|
just aur-publish-pkg owlry
|
|
|
|
# Update and publish ALL AUR packages
|
|
aur-update-all:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
for dir in aur/*/; do
|
|
pkg=$(basename "$dir")
|
|
[ -f "$dir/PKGBUILD" ] || continue
|
|
echo "=== $pkg ==="
|
|
just aur-update-pkg "$pkg"
|
|
echo ""
|
|
done
|
|
echo "All updated. Run 'just aur-publish-all' to publish."
|
|
|
|
aur-publish-all:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
for dir in aur/*/; do
|
|
pkg=$(basename "$dir")
|
|
[ -d "$dir/.git" ] || continue
|
|
echo "=== $pkg ==="
|
|
just aur-publish-pkg "$pkg"
|
|
echo ""
|
|
done
|
|
echo "All published!"
|
|
|
|
# Show AUR package status
|
|
aur-status:
|
|
#!/usr/bin/env bash
|
|
echo "=== AUR Package Status ==="
|
|
for dir in aur/*/; do
|
|
pkg=$(basename "$dir")
|
|
[ -f "$dir/PKGBUILD" ] || continue
|
|
ver=$(grep '^pkgver=' "$dir/PKGBUILD" | sed 's/pkgver=//')
|
|
if [ -d "$dir/.git" ]; then
|
|
printf " ✓ %-30s %s\n" "$pkg" "$ver"
|
|
else
|
|
printf " ✗ %-30s %s (no AUR repo)\n" "$pkg" "$ver"
|
|
fi
|
|
done
|
|
|
|
# Commit AUR file changes to the main repo (handles embedded .git dirs)
|
|
aur-commit msg="chore(aur): update PKGBUILDs":
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
for dir in aur/*/; do
|
|
pkg=$(basename "$dir")
|
|
[ -f "$dir/PKGBUILD" ] || continue
|
|
just aur-stage "$pkg"
|
|
done
|
|
git diff --cached --quiet && { echo "No AUR changes to commit"; exit 0; }
|
|
git commit -m "{{msg}}"
|
|
|
|
# === Release Workflows ===
|
|
|
|
# Release a single crate: bump → push → tag → update AUR → publish AUR
|
|
release-crate crate new_version:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
just bump-crate {{crate}} {{new_version}}
|
|
git push
|
|
|
|
just tag-crate {{crate}}
|
|
just push-tags
|
|
|
|
echo "Waiting for tag to propagate..."
|
|
sleep 3
|
|
|
|
just aur-update-pkg {{crate}}
|
|
just aur-commit "chore(aur): update {{crate}} to {{new_version}}"
|
|
git push
|
|
|
|
just aur-publish-pkg {{crate}}
|
|
echo ""
|
|
echo "{{crate}} v{{new_version}} released and published to AUR!"
|
|
|
|
# === Meta Package Management ===
|
|
|
|
# Bump meta-package versions
|
|
bump-meta new_version:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
for pkg in owlry-meta-essentials owlry-meta-tools owlry-meta-widgets owlry-meta-full; do
|
|
file="aur/$pkg/PKGBUILD"
|
|
old=$(grep '^pkgver=' "$file" | sed 's/pkgver=//')
|
|
if [ "$old" != "{{new_version}}" ]; then
|
|
echo "Bumping $pkg from $old to {{new_version}}"
|
|
sed -i 's/^pkgver=.*/pkgver={{new_version}}/' "$file"
|
|
(cd "aur/$pkg" && makepkg --printsrcinfo > .SRCINFO)
|
|
fi
|
|
done
|
|
echo "Meta-packages bumped to {{new_version}}"
|
|
|
|
# === Testing ===
|
|
|
|
# Test a specific AUR package build locally
|
|
aur-test-pkg pkg:
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
cd "aur/{{pkg}}"
|
|
echo "Testing {{pkg}} PKGBUILD..."
|
|
makepkg -sf
|
|
echo "Package built successfully!"
|
|
ls -lh *.pkg.tar.zst
|