Compare commits
2 Commits
v0.1.2
...
dee8d4a682
| Author | SHA1 | Date | |
|---|---|---|---|
| dee8d4a682 | |||
| e726d47547 |
@@ -1,4 +1,4 @@
|
|||||||
# Testium — Claude Context
|
# Testium — Design Context
|
||||||
|
|
||||||
## What is testium
|
## What is testium
|
||||||
|
|
||||||
85
build_all.sh
85
build_all.sh
@@ -1,85 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Build every distribution channel of testium, in order:
|
|
||||||
# 1. Wheel -> dist/testium-<v>-py3-none-any.whl (PEP 427 name)
|
|
||||||
# 2. PyInstaller binary -> dist/testium-<v>
|
|
||||||
# 3. Flatpak bundle -> dist/testium-<v>.flatpak
|
|
||||||
# 4. AppImage -> dist/Testium-<v>-x86_64.AppImage (original name)
|
|
||||||
# All artifacts are collected (copied) under <repo>/dist/. Original outputs in
|
|
||||||
# src/dist/, package/*/dist/ are left in place. The wheel and AppImage keep
|
|
||||||
# their original names (which already contain the version); pyinstaller and
|
|
||||||
# flatpak are renamed to a normalized testium-<version>(.suff) form.
|
|
||||||
#
|
|
||||||
# Re-uses scripts/build_env.sh and scripts/set_env.sh — the same pair invoked
|
|
||||||
# by run.sh — so the venv at test/tmp/.venv stays the single source of Python
|
|
||||||
# dependencies. `build` and `pyinstaller` are installed into that venv on
|
|
||||||
# demand if not already there. Flatpak and AppImage build in their own
|
|
||||||
# container/sandbox; their build.sh scripts have their own toolchain checks.
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
SCRIPT_DIR=$(realpath "$(dirname "$0")")
|
|
||||||
VERSION=$(cat "$SCRIPT_DIR/src/VERSION")
|
|
||||||
DIST_DIR="$SCRIPT_DIR/dist"
|
|
||||||
mkdir -p "$DIST_DIR"
|
|
||||||
|
|
||||||
export PY_VENV_NAME=".venv"
|
|
||||||
export PY_VENV_DIR="$SCRIPT_DIR/test/tmp/$PY_VENV_NAME"
|
|
||||||
export REQ_PATH="$SCRIPT_DIR/src/requirements.txt"
|
|
||||||
|
|
||||||
bash "$SCRIPT_DIR/scripts/build_env.sh"
|
|
||||||
source "$SCRIPT_DIR/scripts/set_env.sh"
|
|
||||||
|
|
||||||
# Ensure wheel/PyInstaller toolchains are present in the venv.
|
|
||||||
python -m pip install --quiet --upgrade build pyinstaller
|
|
||||||
|
|
||||||
step() {
|
|
||||||
echo
|
|
||||||
echo "================================================================"
|
|
||||||
echo " $1"
|
|
||||||
echo "================================================================"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 1. Wheel — PEP 427 name kept (already contains version)
|
|
||||||
step "1/4 Wheel (version $VERSION)"
|
|
||||||
(
|
|
||||||
cd "$SCRIPT_DIR/src"
|
|
||||||
rm -rf dist build *.egg-info
|
|
||||||
python -m build --wheel
|
|
||||||
)
|
|
||||||
WHEEL_SRC=$(ls -1t "$SCRIPT_DIR/src/dist"/*.whl | head -1)
|
|
||||||
WHEEL="$DIST_DIR/$(basename "$WHEEL_SRC")"
|
|
||||||
cp -f "$WHEEL_SRC" "$WHEEL"
|
|
||||||
|
|
||||||
# 2. PyInstaller binary
|
|
||||||
step "2/4 PyInstaller binary (version $VERSION)"
|
|
||||||
bash "$SCRIPT_DIR/package/pyinstaller/build.sh"
|
|
||||||
PYI_SRC="$SCRIPT_DIR/package/pyinstaller/dist/testium"
|
|
||||||
PYI_BIN="$DIST_DIR/testium-${VERSION}"
|
|
||||||
cp -f "$PYI_SRC" "$PYI_BIN"
|
|
||||||
|
|
||||||
# 3. Flatpak bundle
|
|
||||||
step "3/4 Flatpak bundle (version $VERSION)"
|
|
||||||
(
|
|
||||||
cd "$SCRIPT_DIR/package/flatpak"
|
|
||||||
bash build.sh
|
|
||||||
)
|
|
||||||
FLATPAK_SRC="$SCRIPT_DIR/package/flatpak/testium.flatpak"
|
|
||||||
FLATPAK_BUNDLE="$DIST_DIR/testium-${VERSION}.flatpak"
|
|
||||||
cp -f "$FLATPAK_SRC" "$FLATPAK_BUNDLE"
|
|
||||||
|
|
||||||
# 4. AppImage
|
|
||||||
step "4/4 AppImage (version $VERSION)"
|
|
||||||
(
|
|
||||||
cd "$SCRIPT_DIR/package/appimage"
|
|
||||||
bash build.sh
|
|
||||||
)
|
|
||||||
APPIMAGE_SRC=$(ls -1t "$SCRIPT_DIR/package/appimage"/*.AppImage 2>/dev/null | head -1)
|
|
||||||
APPIMAGE="$DIST_DIR/$(basename "$APPIMAGE_SRC")"
|
|
||||||
cp -f "$APPIMAGE_SRC" "$APPIMAGE"
|
|
||||||
chmod +x "$APPIMAGE"
|
|
||||||
|
|
||||||
step "All packages built"
|
|
||||||
printf " wheel : %s\n" "$WHEEL"
|
|
||||||
printf " pyinstaller : %s\n" "$PYI_BIN"
|
|
||||||
printf " flatpak : %s\n" "$FLATPAK_BUNDLE"
|
|
||||||
printf " appimage : %s\n" "$APPIMAGE"
|
|
||||||
Binary file not shown.
@@ -46,9 +46,8 @@ $RUNTIME run --rm \
|
|||||||
appimage-builder --recipe AppImageBuilder.yml --skip-test
|
appimage-builder --recipe AppImageBuilder.yml --skip-test
|
||||||
"
|
"
|
||||||
|
|
||||||
APPIMAGE_FILE=$(ls -1t Testium-*-x86_64.AppImage 2>/dev/null | head -1)
|
echo "Done: testium-${APP_VERSION}-x86_64.AppImage"
|
||||||
echo "Done: ${APPIMAGE_FILE}"
|
|
||||||
|
|
||||||
if [ "${1}" = "install" ] && [ -n "${APPIMAGE_FILE}" ]; then
|
if [ "${1}" = "install" ]; then
|
||||||
install -v "${APPIMAGE_FILE}" "${HOME}/.local/bin/testium"
|
install -v "testium-${APP_VERSION}-x86_64.AppImage" "${HOME}/.local/bin/testium"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,19 +1,23 @@
|
|||||||
version 0.1.2
|
|
||||||
==============
|
|
||||||
- Flatpak: opening a test from the GUI now correctly finds its companion
|
|
||||||
files (param.yaml, .py scripts, ...).
|
|
||||||
|
|
||||||
version 0.1.1
|
version 0.1.1
|
||||||
==============
|
==============
|
||||||
- New install channels: Flatpak bundle and AppImage. The AppImage runs
|
- Packaging: Flatpak bundle (desktop entry, MIME, distributable .flatpak)
|
||||||
on any distribution (built inside a Debian container).
|
and AppImage (containerized build, runs on Arch / non-Debian hosts).
|
||||||
- About dialog: version is now correct in Flatpak and AppImage builds
|
- bins.py: host-only Python/Lua resolution from sandboxed bundles
|
||||||
(used to display "unknown").
|
(Flatpak / AppImage); fail fast at test load if the host interpreter
|
||||||
- GUI dialogs no longer hang on pure-Wayland sessions.
|
is missing.
|
||||||
- Plot "last values" API: more tolerant timeout on loaded machines.
|
- run item: runtime-aware launcher (AppImage / Flatpak / PyInstaller /
|
||||||
- run item: `testium_path` and `python_bin` parameters removed —
|
source / wheel); drop testium_path / python_bin parameters.
|
||||||
sub-instances are launched in the same packaging mode as the parent.
|
- dialog_env: auto-detect Wayland vs xcb from $DISPLAY / $WAYLAND_DISPLAY
|
||||||
- License: EUPL-1.2.
|
instead of forcing xcb (was hanging dialogs on pure-Wayland sessions).
|
||||||
|
- version: read TESTIUM_VERSION env in Flatpak/AppImage so the About
|
||||||
|
dialog stops reporting "unknown".
|
||||||
|
- runtime_plot last_values: bump timeout 1s -> 5s and narrow the bare
|
||||||
|
except to queue.Empty.
|
||||||
|
- py_func/__main__: robust sys.path init, diagnostic on import failure.
|
||||||
|
- Subprocess stdio (py_func / lua_func) routed into the parent log.
|
||||||
|
- README refocused on users (quick_start, tutorial); CONTRIBUTING filled.
|
||||||
|
- Docs: CLAUDE.md Packaging section rewritten.
|
||||||
|
- LICENSE file (EUPL-1.2) added.
|
||||||
|
|
||||||
version 0.1
|
version 0.1
|
||||||
==============
|
==============
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0.1.2
|
0.1.1
|
||||||
@@ -212,17 +212,8 @@ class TestFileManager:
|
|||||||
d = ""
|
d = ""
|
||||||
if w.testFile is not None:
|
if w.testFile is not None:
|
||||||
d = os.path.dirname(w.testFile)
|
d = os.path.dirname(w.testFile)
|
||||||
# In Flatpak the native dialog goes through the XDG document portal,
|
|
||||||
# which returns /run/user/UID/doc/.../test.tum and only exposes the
|
|
||||||
# selected file — sibling files (param.yaml, .py, etc.) are unreachable.
|
|
||||||
# Force Qt's own dialog, which walks the real filesystem mounted via
|
|
||||||
# --filesystem=home and returns a regular path with sibling access.
|
|
||||||
options = QFileDialog.Options()
|
|
||||||
if os.path.isfile("/.flatpak-info"):
|
|
||||||
options |= QFileDialog.Option.DontUseNativeDialog
|
|
||||||
file_name, _ = QFileDialog.getOpenFileName(
|
file_name, _ = QFileDialog.getOpenFileName(
|
||||||
w, "Open the test file", d,
|
w, "Open the test file", d, "testium file (*.tum);;All Files (*)"
|
||||||
"testium file (*.tum);;All Files (*)", options=options
|
|
||||||
)
|
)
|
||||||
if file_name:
|
if file_name:
|
||||||
self.reload(file_name)
|
self.reload(file_name)
|
||||||
|
|||||||
Reference in New Issue
Block a user