From ed29267438951171fdf9ae7ca3b6d4e7e447ba58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6hler?= Date: Thu, 23 Apr 2026 13:21:13 +0200 Subject: [PATCH 1/2] Fix linux release --- .gitattributes | 2 ++ .github/workflows/release.yml | 27 ++++++++++++--------------- newsfragments/80.fixed.md | 1 + scripts/install.sh | 7 ++++++- 4 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 .gitattributes create mode 100644 newsfragments/80.fixed.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..0c0b607 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Shell installers must be LF: piping to sh on Linux breaks on CRLF. +scripts/*.sh text eol=lf diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index be71ef1..644f2a5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -458,22 +458,19 @@ jobs: find build -maxdepth 3 -type d 2>/dev/null | head -40 >&2 || true exit 1 fi - app_dir=$(find "${root}" -type d \( -path "*/dbs_annotator/app" -o -path "*/dbs-annotator/app" \) 2>/dev/null | head -1) || true - if [ -z "${app_dir}" ]; then - stub=$(find "${root}" -type f \( -name dbs-annotator -o -name dbs_annotator \) 2>/dev/null | head -1) || true - if [ -n "${stub}" ]; then - d=$(dirname "${stub}") - while [ "$(basename "${d}")" != "app" ] && [ "${d}" != "/" ] && [ -n "${d}" ]; do - d=$(dirname "${d}") - done - if [ "$(basename "${d}")" = "app" ] && [ -d "${d}/src" ]; then - app_dir=${d} - fi - fi + # There may be multiple */app trees (e.g. shallow copy vs full system package with bin/). + # Pick the *largest* by disk — sources-only is tiny; real Briefcase tree includes bin/, lib/, support. + app_dir="" + if largest=$(find "${root}" -type d -name app 2>/dev/null | while read -r d; do du -sk "$d" 2>/dev/null; done | sort -n | tail -1); then + app_dir=${largest#*[[:space:]]} fi - if [ -z "${app_dir}" ]; then - echo "::error::Could not find Briefcase 'app' tree under ${root}" >&2 - find "${root}" -type d 2>/dev/null | head -80 >&2 || true + if [ -z "${app_dir}" ] || [ ! -d "${app_dir}/bin" ] || [ -z "$(ls -A "${app_dir}/bin" 2>/dev/null)" ]; then + echo "::error::No Briefcase Linux app/ with a non-empty bin/ under ${root} (raw tar would lack the launcher). Listing app candidates:" >&2 + find "${root}" -type d -name app 2>/dev/null | while read -r d; do + echo "--- $d" >&2 + du -sh "$d" 2>/dev/null || true + ls -la "${d}/bin" 2>/dev/null | head -20 >&2 || true + done exit 1 fi parent=$(dirname "${app_dir}") diff --git a/newsfragments/80.fixed.md b/newsfragments/80.fixed.md new file mode 100644 index 0000000..afc807d --- /dev/null +++ b/newsfragments/80.fixed.md @@ -0,0 +1 @@ +Fix `scripts/install.sh` for POSIX `sh`, LF line endings, Linux launcher discovery (`bin/`, `dbs_annotator`), and clearer errors when a release raw `.tar.gz` lacks the Briefcase stub. Linux release workflow now selects the full `app/` tree (largest tree with `bin/`) for the raw archive. \ No newline at end of file diff --git a/scripts/install.sh b/scripts/install.sh index 98bf8c1..9fa883c 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -213,7 +213,12 @@ install_linux_tar() { mkdir -p "$bin_dir" exe=$(linux_pick_exe "$prefix") if [ -z "$exe" ] || [ ! -x "$exe" ]; then - echo "Could not find executable under $prefix" >&2; exit 1 + if [ -f "$prefix/dbs_annotator/__main__.py" ] && [ ! -d "$prefix/bin" ]; then + echo "Could not find Briefcase launcher under $prefix (missing bin/ stub). Raw .tar.gz for this version is source-only; use the .deb from the same release, or a release built after the raw-tar workflow fix." >&2 + else + echo "Could not find executable under $prefix" >&2 + fi + exit 1 fi ln -sf "$exe" "$bin_dir/dbs-annotator" echo "Installed tree: $prefix" From 31d30ef66f641512053b83c75f8491f247841cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6hler?= Date: Thu, 23 Apr 2026 13:27:22 +0200 Subject: [PATCH 2/2] Change ls to find --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 644f2a5..7735a2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -464,12 +464,12 @@ jobs: if largest=$(find "${root}" -type d -name app 2>/dev/null | while read -r d; do du -sk "$d" 2>/dev/null; done | sort -n | tail -1); then app_dir=${largest#*[[:space:]]} fi - if [ -z "${app_dir}" ] || [ ! -d "${app_dir}/bin" ] || [ -z "$(ls -A "${app_dir}/bin" 2>/dev/null)" ]; then + if [ -z "${app_dir}" ] || [ ! -d "${app_dir}/bin" ] || [ -z "$(find "${app_dir}/bin" -mindepth 1 -maxdepth 1 2>/dev/null | head -n 1)" ]; then echo "::error::No Briefcase Linux app/ with a non-empty bin/ under ${root} (raw tar would lack the launcher). Listing app candidates:" >&2 find "${root}" -type d -name app 2>/dev/null | while read -r d; do echo "--- $d" >&2 du -sh "$d" 2>/dev/null || true - ls -la "${d}/bin" 2>/dev/null | head -20 >&2 || true + find "${d}/bin" -mindepth 1 -maxdepth 1 2>/dev/null | head -20 >&2 || true done exit 1 fi