summaryrefslogtreecommitdiff
path: root/site
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-11-13 16:40:02 -0800
committerElizabeth Alexander Hunt <me@liz.coffee>2026-11-13 16:40:02 -0800
commit3803f14160c30ac470bc957f8a0f2dbe67c4fd57 (patch)
treeb7cfc3e0570ef7766e053b89ca038109c353d359 /site
parent8974b115b69bc25ebf174e8c9637373c4d206325 (diff)
downloadrookery-release.tar.gz
rookery-release.zip
Added full buildsHEADreleasemain
Diffstat (limited to 'site')
-rw-r--r--site/.gitignore7
-rwxr-xr-xsite/assemble.sh12
-rw-r--r--site/assets/favicon.pngbin0 -> 511 bytes
-rw-r--r--site/assets/penguin.pngbin0 -> 821 bytes
-rw-r--r--site/assets/rookery.icnsbin0 -> 46522 bytes
-rwxr-xr-xsite/macos-app.sh67
6 files changed, 83 insertions, 3 deletions
diff --git a/site/.gitignore b/site/.gitignore
new file mode 100644
index 0000000..3343c00
--- /dev/null
+++ b/site/.gitignore
@@ -0,0 +1,7 @@
+# site/assemble.sh can publish straight into this folder; everything except the sources is generated.
+/*
+!/assets/
+!/assemble.sh
+!/macos-app.sh
+!/nginx.conf
+!/.gitignore
diff --git a/site/assemble.sh b/site/assemble.sh
index aed5b27..52cd84c 100755
--- a/site/assemble.sh
+++ b/site/assemble.sh
@@ -13,12 +13,14 @@ case $(uname -m) in x86_64|amd64) arch=x64 ;; aarch64|arm64) arch=arm64 ;; *) ar
sha() { if command -v sha256sum >/dev/null 2>&1; then sha256sum "$@"; else shasum -a 256 "$@"; fi; }
size() { du -h "$1" | cut -f1 | tr -d ' '; }
-apk=$root/android/build/outputs/apk/debug/android-debug.apk
+apk=$root/android/build/outputs/apk/release/android-release.apk
jar=$root/desktop/build/libs/rookery-universal.jar
app=$root/desktop/build/compose/binaries/main/app/rookery
[ -f "$apk" ] && cp "$apk" "$out/rookery-android.apk"
[ -f "$jar" ] && cp "$jar" "$out/rookery.jar"
+cp "$root"/site/assets/*.png "$out/"
+for z in "$root"/desktop/build/macos/rookery-macos-*.zip; do [ -f "$z" ] && cp "$z" "$out/"; done
[ -d "$app" ] && tar -C "$(dirname "$app")" -czf "$out/rookery-linux-$arch.tar.gz" rookery
printf '%s\n' "$commit" > "$out/commit.txt"
@@ -39,6 +41,7 @@ cat > "$out/index.html" <<HTML
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+<link rel="icon" href="favicon.png">
<title>rookery</title>
<style>
:root { --bg: black; --fg: white; --a: #c4d0c8; --h: #7d978c; --line: #3a403d; --dim: #a3ada7; }
@@ -54,16 +57,19 @@ cat > "$out/index.html" <<HTML
</style>
</head>
<body>
-<h1>rookery</h1>
+<h1><img src="penguin.png" alt="" width="32" height="32" style="vertical-align:-7px; image-rendering:pixelated"> rookery</h1>
<p>speedcubing timer and blindfold trainer. desktop and android.</p>
<hr>
<h2>downloads</h2>
<table>
-$(row rookery-android.apk "Android 8+, debug-signed")
+$(row rookery-macos-arm64.zip "macOS 11+, Apple Silicon, not notarized")
+$(row rookery-macos-x64.zip "macOS 11+, Intel, not notarized")
+$(row rookery-android.apk "Android 8+, release build (debug-signed)")
$(row "rookery-linux-$arch.tar.gz" "Linux $arch, runtime included")
$(row rookery.jar "Java 21; Linux, macOS, Windows")
</table>
<ul>
+ <li>macOS: unzip, then run <tt>xattr -dr com.apple.quarantine Rookery.app</tt> once. The app isn't notarized.</li>
<li>apk: allow installing from this source when asked.</li>
<li>tar.gz: extract, then run <tt>rookery/bin/rookery</tt>.</li>
<li>jar: <tt>java -jar rookery.jar</tt></li>
diff --git a/site/assets/favicon.png b/site/assets/favicon.png
new file mode 100644
index 0000000..162fffc
--- /dev/null
+++ b/site/assets/favicon.png
Binary files differ
diff --git a/site/assets/penguin.png b/site/assets/penguin.png
new file mode 100644
index 0000000..6e9db07
--- /dev/null
+++ b/site/assets/penguin.png
Binary files differ
diff --git a/site/assets/rookery.icns b/site/assets/rookery.icns
new file mode 100644
index 0000000..f904afd
--- /dev/null
+++ b/site/assets/rookery.icns
Binary files differ
diff --git a/site/macos-app.sh b/site/macos-app.sh
new file mode 100755
index 0000000..e7b9bc3
--- /dev/null
+++ b/site/macos-app.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Builds Rookery.app for macOS without a Mac: a macOS Java runtime made by jlink from the macOS JDK's
+# jmods, the universal jar, an Info.plist and a small launcher. It is not signed or notarized.
+# usage: site/macos-app.sh <version> [dir holding aarch64/ and x64/ macOS JDKs (jmods only is enough)]
+set -eu
+
+root=$(cd "$(dirname "$0")/.." && pwd)
+version=${1:?usage: macos-app.sh <version> [jdk dir]}
+jdks=${2:-/opt/macjdk}
+jar=$root/desktop/build/libs/rookery-universal.jar
+out=$root/desktop/build/macos
+
+# Use the same modules the desktop build decided the app needs (Compose records them in the runtime's release file).
+release=$(ls "$root"/desktop/build/compose/binaries/main/app/rookery/lib/runtime/release \
+ "$root"/desktop/build/compose/binaries/main/app/rookery.app/Contents/runtime/Contents/Home/release 2>/dev/null | head -1)
+modules=$(sed -n 's/^MODULES="\(.*\)"/\1/p' "$release" | tr ' ' ',')
+[ -n "$modules" ] || { echo "no module list in $release" >&2; exit 1; }
+
+work=$(mktemp -d)
+trap 'rm -rf "$work"' EXIT
+mkdir -p "$out"
+
+for pair in aarch64:arm64 x64:x64; do
+ jdk=${pair%%:*}; name=${pair##*:}
+ app=$work/$name/Rookery.app
+ mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources" "$app/Contents/app"
+
+ cp "$root/site/assets/rookery.icns" "$app/Contents/Resources/rookery.icns"
+ jlink --module-path "$jdks/$jdk/Contents/Home/jmods" --add-modules "$modules" \
+ --strip-java-debug-attributes --no-header-files --no-man-pages --compress zip-6 --output "$app/Contents/runtime"
+ cp "$jar" "$app/Contents/app/rookery.jar"
+ # the universal jar carries every platform's graphics library; this app only needs its own
+ case $name in arm64) other=x64 ;; *) other=arm64 ;; esac
+ zip -qd "$app/Contents/app/rookery.jar" 'libskiko-linux-*' 'skiko-windows-*' "libskiko-macos-$other*" > /dev/null || true
+
+ cat > "$app/Contents/MacOS/rookery" <<'LAUNCHER'
+#!/bin/sh
+here=$(cd "$(dirname "$0")/.." && pwd)
+exec "$here/runtime/bin/java" -Xdock:name=Rookery -Xmx256m -XX:+UseSerialGC -jar "$here/app/rookery.jar" "$@"
+LAUNCHER
+ chmod +x "$app/Contents/MacOS/rookery"
+
+ cat > "$app/Contents/Info.plist" <<PLIST
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleName</key><string>Rookery</string>
+ <key>CFBundleDisplayName</key><string>Rookery</string>
+ <key>CFBundleIdentifier</key><string>coffee.liz.rookery</string>
+ <key>CFBundleExecutable</key><string>rookery</string>
+ <key>CFBundlePackageType</key><string>APPL</string>
+ <key>CFBundleIconFile</key><string>rookery</string>
+ <key>CFBundleShortVersionString</key><string>$version</string>
+ <key>CFBundleVersion</key><string>$version</string>
+ <key>LSMinimumSystemVersion</key><string>11.0</string>
+ <key>NSHighResolutionCapable</key><true/>
+ <key>NSBluetoothAlwaysUsageDescription</key><string>Connects to your smart cube.</string>
+ <key>NSMicrophoneUsageDescription</key><string>Listens to a stackmat timer on an audio input.</string>
+</dict>
+</plist>
+PLIST
+
+ rm -f "$out/rookery-macos-$name.zip"
+ (cd "$work/$name" && zip -qry "$out/rookery-macos-$name.zip" Rookery.app)
+ echo "macos: rookery-macos-$name.zip $(du -h "$out/rookery-macos-$name.zip" | cut -f1)"
+done