rename: the desktop is Inkwell — crates, Tauri identity, data move, packaging
Step 3 of milestone 481 (Scribe note 5071: a full rename).
- crates thoughtsync-{core,desktop,ffi,uniffi-bindgen} → inkwell-*, the
Cargo.lock entries moved to match (checked with `cargo metadata --locked`)
- Tauri: productName "Inkwell", identifier com.fabledsword.inkwell, binary
`inkwell`, updater feed on bvandeusen/inkwell, store file inkwell.db
- client agent inkwell-desktop, headers X-Inkwell-Client/-Protocol (the server
reads neither), capture event inkwell://captured, display-version env
- .deb: conflicts + replaces thought-sync, so the updater's install retires the
old package instead of colliding on it. kebab-case("Inkwell") is `inkwell`, so
the package name finally matches the command and verify.sh now asserts it
- pacman: inkwell, conflicting with and replacing thoughtsync and
thoughtsync-desktop
- AppImage ~/Applications/Inkwell.AppImage, menu entry inkwell.desktop,
installer, release titles, desktop asset names in fetch-clients.sh
The one shim, chosen by the operator because it is the only copy of a
local-first user's notes: crossover.rs moves the old
com.fabledsword.thoughtsync app-data dir's contents into the new one on startup,
before the store opens, renaming thoughtsync.db and its -wal/-shm with it. It
skips when the new dir already has a store, and anything already in the new dir
wins (the installer writes its channel marker there first). Tested.
Android's Kotlin side (package, applicationId, uniffi class) is step 4. Its
release asset names stay thoughtsync.* until then.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,10 +3,10 @@
|
||||
# grouping. Tauri writes the same value into the .deb's generated entry.
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=ThoughtSync
|
||||
Name=Inkwell
|
||||
Comment=Capture a fleeting thought in a second
|
||||
Exec=thoughtsync %U
|
||||
Icon=thoughtsync
|
||||
Exec=inkwell %U
|
||||
Icon=inkwell
|
||||
Terminal=false
|
||||
Categories=Utility;Office;
|
||||
StartupWMClass=thoughtsync
|
||||
StartupWMClass=inkwell
|
||||
@@ -29,19 +29,20 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
||||
|
||||
SRC_TAURI="$REPO_ROOT/desktop/src-tauri"
|
||||
BINARY="$REPO_ROOT/target/release/thoughtsync"
|
||||
BINARY="$REPO_ROOT/target/release/inkwell"
|
||||
OUT_DIR="${1:-$REPO_ROOT/target/release/bundle/arch}"
|
||||
|
||||
PKGNAME="thoughtsync"
|
||||
# The name this package used to ship under. pacman needs both to retire it: without
|
||||
# them a `pacman -U` of the renamed package installs ALONGSIDE the old one, and two
|
||||
# packages both own /usr/bin/thoughtsync (issue 2075).
|
||||
REPLACES=(thoughtsync-desktop)
|
||||
PKGNAME="inkwell"
|
||||
# The names this package used to ship under: `thoughtsync` until the app became
|
||||
# Inkwell (Scribe note 5071), `thoughtsync-desktop` before that. pacman needs both
|
||||
# conflict and replace to retire them: without them a `pacman -U` of the renamed
|
||||
# package installs ALONGSIDE the old one (issue 2075).
|
||||
REPLACES=(thoughtsync thoughtsync-desktop)
|
||||
PKGREL=1
|
||||
PKGDESC="ThoughtSync desktop — local-first Keep-style thought capture"
|
||||
URL="https://git.fabledsword.com/bvandeusen/thoughtsync"
|
||||
PKGDESC="Inkwell desktop — local-first Keep-style thought capture"
|
||||
URL="https://git.fabledsword.com/bvandeusen/inkwell"
|
||||
LICENSE="MIT"
|
||||
PACKAGER="ThoughtSync CI <noreply@fabledsword.com>"
|
||||
PACKAGER="Inkwell CI <noreply@fabledsword.com>"
|
||||
|
||||
# Runtime deps. Deliberately minimal and grounded in what the binary actually
|
||||
# links: tauri is built with features=[] (no tray -> no libayatana-appindicator)
|
||||
@@ -79,25 +80,25 @@ STAGE="$(mktemp -d)"
|
||||
trap 'rm -rf "$STAGE"' EXIT INT TERM
|
||||
|
||||
# --- lay out the filesystem tree --------------------------------------------
|
||||
# /usr/bin/thoughtsync — the same command name the .deb installs and the AppImage
|
||||
# /usr/bin/inkwell — the same command name the .deb installs and the AppImage
|
||||
# installer symlinks into ~/.local/bin, so it's identical whichever way the app
|
||||
# arrived. The binary already carries this name (Cargo `[[bin]]`), which is also
|
||||
# what the .desktop entry's StartupWMClass has to match.
|
||||
install -Dm755 "$BINARY" "$STAGE/usr/bin/thoughtsync"
|
||||
install -Dm644 "$SCRIPT_DIR/thoughtsync.desktop" \
|
||||
"$STAGE/usr/share/applications/thoughtsync.desktop"
|
||||
install -Dm755 "$BINARY" "$STAGE/usr/bin/inkwell"
|
||||
install -Dm644 "$SCRIPT_DIR/inkwell.desktop" \
|
||||
"$STAGE/usr/share/applications/inkwell.desktop"
|
||||
|
||||
# Themed icons, so the menu entry's `Icon=thoughtsync` resolves at every size the
|
||||
# Themed icons, so the menu entry's `Icon=inkwell` resolves at every size the
|
||||
# desktop asks for; pixmaps is the legacy fallback for older launchers.
|
||||
install -Dm644 "$SRC_TAURI/icons/32x32.png" \
|
||||
"$STAGE/usr/share/icons/hicolor/32x32/apps/thoughtsync.png"
|
||||
"$STAGE/usr/share/icons/hicolor/32x32/apps/inkwell.png"
|
||||
install -Dm644 "$SRC_TAURI/icons/128x128.png" \
|
||||
"$STAGE/usr/share/icons/hicolor/128x128/apps/thoughtsync.png"
|
||||
"$STAGE/usr/share/icons/hicolor/128x128/apps/inkwell.png"
|
||||
install -Dm644 "$SRC_TAURI/icons/128x128@2x.png" \
|
||||
"$STAGE/usr/share/icons/hicolor/256x256/apps/thoughtsync.png"
|
||||
"$STAGE/usr/share/icons/hicolor/256x256/apps/inkwell.png"
|
||||
install -Dm644 "$SRC_TAURI/icons/icon.png" \
|
||||
"$STAGE/usr/share/icons/hicolor/512x512/apps/thoughtsync.png"
|
||||
install -Dm644 "$SRC_TAURI/icons/icon.png" "$STAGE/usr/share/pixmaps/thoughtsync.png"
|
||||
"$STAGE/usr/share/icons/hicolor/512x512/apps/inkwell.png"
|
||||
install -Dm644 "$SRC_TAURI/icons/icon.png" "$STAGE/usr/share/pixmaps/inkwell.png"
|
||||
|
||||
# Installed size in KiB, as pacman reports it.
|
||||
INSTALLED_SIZE="$(du -sb "$STAGE" | cut -f1)"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# Five checks, cheapest first:
|
||||
# 1. Print the control file + contents — the generated metadata becomes ground
|
||||
# truth in the build log instead of an assumption.
|
||||
# 2. Naming: the binary is /usr/bin/thoughtsync and the generated .desktop
|
||||
# 2. Naming: the binary is /usr/bin/inkwell and the generated .desktop
|
||||
# entry's StartupWMClass matches it. The app used to identify itself three
|
||||
# different ways depending on install channel (issue 2075); this is what
|
||||
# keeps the .deb — the only channel whose entry Tauri generates for us —
|
||||
@@ -72,12 +72,17 @@ echo " (binary: ${BIN#"$WORK/root"})"
|
||||
# CANON is the one name the app answers to everywhere: the binary, the CLI
|
||||
# command, the icon, and the WM_CLASS the window reports. Hardcoded here on
|
||||
# purpose — this literal IS the contract the three install channels are held to.
|
||||
# Deliberately NOT asserted: the control file's `Package:` field, which is
|
||||
# `thought-sync`. tauri-bundler derives it as kebab-case(productName) with no
|
||||
# config override, so "ThoughtSync" splits at the hump. Fixing it would mean
|
||||
# unpacking and rewriting the control archive on every build — a fragile step for
|
||||
# a cosmetic gain on one uninstall command. Left as a known wart (issue 2075).
|
||||
CANON="thoughtsync"
|
||||
#
|
||||
# The control file's `Package:` field is held to it too. tauri-bundler derives it
|
||||
# as kebab-case(productName) with no override, which split "ThoughtSync" into
|
||||
# `thought-sync` (issue 2075). "Inkwell" has no hump to split, so the package and
|
||||
# the command finally agree, and a productName that brought the split back would
|
||||
# also break the `conflicts`/`replaces` retiring the old package.
|
||||
CANON="inkwell"
|
||||
|
||||
package="$(dpkg-deb -f "$DEB" Package 2>/dev/null || true)"
|
||||
[ "$package" = "$CANON" ] ||
|
||||
note_fail "the package is named '${package:-<unset>}', expected '$CANON' (kebab-case of productName)."
|
||||
|
||||
installed_bin="${BIN#"$WORK/root"}"
|
||||
[ "$installed_bin" = "/usr/bin/$CANON" ] ||
|
||||
@@ -107,7 +112,7 @@ if command -v dpkg-shlibdeps >/dev/null 2>&1; then
|
||||
# dpkg-shlibdeps insists on a debian/control in the working directory even with
|
||||
# -O (write to stdout); a stub is enough to let it do the ELF analysis.
|
||||
mkdir -p "$WORK/deb-stub/debian"
|
||||
printf 'Source: thoughtsync\n\nPackage: thoughtsync\nArchitecture: amd64\n' \
|
||||
printf 'Source: inkwell\n\nPackage: inkwell\nArchitecture: amd64\n' \
|
||||
>"$WORK/deb-stub/debian/control"
|
||||
# `|| true`: pipefail is on and dpkg-shlibdeps still exits non-zero on some
|
||||
# symbol warnings even with --ignore-missing-info. An empty result degrades to
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ThoughtSync desktop — one-command Linux installer.
|
||||
# Inkwell desktop — one-command Linux installer.
|
||||
#
|
||||
# curl -fsSL https://git.fabledsword.com/bvandeusen/thoughtsync/raw/branch/dev/desktop/packaging/install.sh | sh
|
||||
# curl -fsSL https://git.fabledsword.com/bvandeusen/inkwell/raw/branch/dev/desktop/packaging/install.sh | sh
|
||||
#
|
||||
# Two channels, the SAME two the app's own updater offers (src-tauri/src/update.rs):
|
||||
# stable (default) — the rolling build from every merge to `main`.
|
||||
@@ -35,7 +35,7 @@
|
||||
set -eu
|
||||
|
||||
INSTANCE="https://git.fabledsword.com"
|
||||
REPO="bvandeusen/thoughtsync"
|
||||
REPO="bvandeusen/inkwell"
|
||||
API="$INSTANCE/api/v1/repos/$REPO"
|
||||
|
||||
say() { printf '==> %s\n' "$1"; }
|
||||
@@ -44,7 +44,7 @@ have() { command -v "$1" >/dev/null 2>&1; }
|
||||
|
||||
usage() {
|
||||
cat <<'USAGE'
|
||||
ThoughtSync desktop installer.
|
||||
Inkwell desktop installer.
|
||||
|
||||
install.sh [--channel stable|dev]
|
||||
|
||||
@@ -83,11 +83,11 @@ have curl || die "curl is required."
|
||||
arch="$(uname -m)"
|
||||
case "$arch" in
|
||||
x86_64 | amd64) : ;;
|
||||
*) die "ThoughtSync ships x86_64 Linux builds only right now (this machine: $arch)." ;;
|
||||
*) die "Inkwell ships x86_64 Linux builds only right now (this machine: $arch)." ;;
|
||||
esac
|
||||
|
||||
# --- resolve the release for this channel -----------------------------------
|
||||
say "Finding the latest ThoughtSync build on the $channel channel…"
|
||||
say "Finding the latest Inkwell build on the $channel channel…"
|
||||
|
||||
# ONE lookup, both channels. Each is a release whose tag never moves and whose assets
|
||||
# are pruned to the current build, so the tag alone names the newest build on that
|
||||
@@ -131,10 +131,10 @@ trap 'rm -rf "$tmp"' EXIT INT TERM
|
||||
# The app reads it at startup (src-tauri/src/update.rs, INSTALL_MARKER) and only acts
|
||||
# when the value CHANGED, so switching channel in the app isn't undone on next launch.
|
||||
#
|
||||
# The directory is Tauri's app-data dir for identifier com.fabledsword.thoughtsync;
|
||||
# The directory is Tauri's app-data dir for identifier com.fabledsword.inkwell;
|
||||
# both sides hardcode it, so a change to the identifier has to change both.
|
||||
record_channel() {
|
||||
marker_dir="${XDG_DATA_HOME:-$HOME/.local/share}/com.fabledsword.thoughtsync"
|
||||
marker_dir="${XDG_DATA_HOME:-$HOME/.local/share}/com.fabledsword.inkwell"
|
||||
# Best-effort: a failure here costs the channel setting, not the install, and a
|
||||
# native install run as root would only be writing into root's home anyway.
|
||||
mkdir -p "$marker_dir" 2>/dev/null && printf '%s\n' "$channel" > "$marker_dir/install-channel" 2>/dev/null || true
|
||||
@@ -176,7 +176,7 @@ if have pacman && [ -n "$pkg_url" ]; then
|
||||
need_root
|
||||
$sudo pacman -U --noconfirm "$pkg_file"
|
||||
record_channel
|
||||
say "Done. Launch ThoughtSync from your application menu, or run thoughtsync."
|
||||
say "Done. Launch Inkwell from your application menu, or run inkwell."
|
||||
native_update_note
|
||||
exit 0
|
||||
fi
|
||||
@@ -184,33 +184,33 @@ fi
|
||||
# --- native .deb path (Debian/Ubuntu) ---------------------------------------
|
||||
if have dpkg && have apt-get && [ -n "$deb_url" ]; then
|
||||
say "Debian-family system detected — installing the native .deb"
|
||||
curl -fSL -o "$tmp/thoughtsync.deb" "$deb_url"
|
||||
curl -fSL -o "$tmp/inkwell.deb" "$deb_url"
|
||||
need_root
|
||||
# apt-get resolves the .deb's dependencies (webkit2gtk etc.). dpkg is the
|
||||
# fallback if this apt is too old for local-file installs — it leaves the deps
|
||||
# unconfigured, so `apt-get -f install` is what actually completes that path.
|
||||
$sudo apt-get install -y "$tmp/thoughtsync.deb" ||
|
||||
{ $sudo dpkg -i "$tmp/thoughtsync.deb" || true; $sudo apt-get -f install -y; }
|
||||
$sudo apt-get install -y "$tmp/inkwell.deb" ||
|
||||
{ $sudo dpkg -i "$tmp/inkwell.deb" || true; $sudo apt-get -f install -y; }
|
||||
record_channel
|
||||
say "Done. Launch ThoughtSync from your application menu."
|
||||
say "Done. Launch Inkwell from your application menu."
|
||||
native_update_note
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# --- universal AppImage path (user-local, no sudo) --------------------------
|
||||
# Install into ~/Applications/ThoughtSync.AppImage — the SAME location the app's
|
||||
# Install into ~/Applications/Inkwell.AppImage — the SAME location the app's
|
||||
# own self-integration uses (src/integration.rs) — so the running app sees
|
||||
# itself already installed and never makes a second copy or menu entry.
|
||||
say "Installing the de-bundled AppImage (user-local, no sudo)"
|
||||
[ -n "$appimage_url" ] || die "the $channel release (${version:-unknown}) has no AppImage asset."
|
||||
|
||||
apps_dir="$HOME/Applications"
|
||||
dest="$apps_dir/ThoughtSync.AppImage"
|
||||
dest="$apps_dir/Inkwell.AppImage"
|
||||
mkdir -p "$apps_dir"
|
||||
say "Downloading $(basename "$appimage_url")…"
|
||||
curl -fSL -o "$tmp/ThoughtSync.AppImage" "$appimage_url"
|
||||
chmod +x "$tmp/ThoughtSync.AppImage"
|
||||
mv -f "$tmp/ThoughtSync.AppImage" "$dest"
|
||||
curl -fSL -o "$tmp/Inkwell.AppImage" "$appimage_url"
|
||||
chmod +x "$tmp/Inkwell.AppImage"
|
||||
mv -f "$tmp/Inkwell.AppImage" "$dest"
|
||||
|
||||
# Menu entry — written to match integration.rs verbatim (same paths + fields),
|
||||
# so the app reports is_integrated=true and won't duplicate it.
|
||||
@@ -222,39 +222,39 @@ mkdir -p "$apps_menu" "$icons_dir"
|
||||
# entry looks right immediately. Extraction is a non-GUI unsquash (no FUSE, no
|
||||
# black-window risk); if it fails we fall back to the themed name and the app
|
||||
# writes its embedded icon on first launch anyway.
|
||||
icon_ref="thoughtsync"
|
||||
icon_ref="inkwell"
|
||||
if ( cd "$tmp" && "$dest" --appimage-extract .DirIcon >/dev/null 2>&1 ) \
|
||||
&& cp -L "$tmp/squashfs-root/.DirIcon" "$icons_dir/thoughtsync.png" 2>/dev/null; then
|
||||
icon_ref="$icons_dir/thoughtsync.png"
|
||||
&& cp -L "$tmp/squashfs-root/.DirIcon" "$icons_dir/inkwell.png" 2>/dev/null; then
|
||||
icon_ref="$icons_dir/inkwell.png"
|
||||
fi
|
||||
rm -rf "$tmp/squashfs-root" 2>/dev/null || true
|
||||
|
||||
# StartupWMClass is the BINARY name, not the product name and not the AppImage
|
||||
# filename: the AppImage's AppRun execs usr/bin/thoughtsync, and GTK derives
|
||||
# filename: the AppImage's AppRun execs usr/bin/inkwell, and GTK derives
|
||||
# WM_CLASS from whatever it ends up running. Anything else here means the window
|
||||
# never associates with this entry and the taskbar shows a second, generic icon.
|
||||
cat > "$apps_menu/thoughtsync.desktop" <<EOF
|
||||
cat > "$apps_menu/inkwell.desktop" <<EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=ThoughtSync
|
||||
Name=Inkwell
|
||||
Comment=Capture a fleeting thought in a second
|
||||
Exec=$dest %U
|
||||
Icon=$icon_ref
|
||||
Terminal=false
|
||||
Categories=Utility;Office;
|
||||
StartupWMClass=thoughtsync
|
||||
StartupWMClass=inkwell
|
||||
EOF
|
||||
|
||||
have update-desktop-database && update-desktop-database "$apps_menu" >/dev/null 2>&1 || true
|
||||
|
||||
# Convenience CLI launcher.
|
||||
mkdir -p "$HOME/.local/bin"
|
||||
ln -sf "$dest" "$HOME/.local/bin/thoughtsync"
|
||||
ln -sf "$dest" "$HOME/.local/bin/inkwell"
|
||||
|
||||
record_channel
|
||||
|
||||
say "Installed to $dest"
|
||||
printf ' Launch it from your application menu, or run \033[1mthoughtsync\033[0m'
|
||||
printf ' Launch it from your application menu, or run \033[1minkwell\033[0m'
|
||||
printf ' (if ~/.local/bin is on your PATH).\n'
|
||||
# This is the one path where the app can update itself, so say what it will follow.
|
||||
if [ "$channel" = "dev" ]; then
|
||||
|
||||
@@ -148,8 +148,8 @@ fi
|
||||
|
||||
echo "==> Creating release for $TAG"
|
||||
BODY=$(cat <<JSON
|
||||
{"tag_name":"$TAG","name":"ThoughtSync $CHANNEL_LABEL","draft":false,"prerelease":$RELEASE_PRERELEASE,
|
||||
"body":"ThoughtSync $CHANNEL_LABEL.\n\n**Desktop**\n\n- **Debian / Ubuntu** — native \`.deb\`\n- **Arch / CachyOS** — native \`.pkg.tar.*\`\n- **everything else** — \`.AppImage\` (de-bundled graphics: renders on any GPU/Wayland setup)\n\nInstall / update — picks the right one for your system:\n\`\`\`\ncurl -fsSL $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/raw/branch/dev/desktop/packaging/install.sh | $INSTALL_TAIL\n\`\`\`\n\n**Android** — \`thoughtsync.apk\`. Copy it and \`thoughtsync-android.json\` into your server's \`/var/thoughtsync/client/\` and the server will offer it to your devices; see docs/android-distribution.md.$CHANNEL_NOTE"}
|
||||
{"tag_name":"$TAG","name":"Inkwell $CHANNEL_LABEL","draft":false,"prerelease":$RELEASE_PRERELEASE,
|
||||
"body":"Inkwell $CHANNEL_LABEL.\n\n**Desktop**\n\n- **Debian / Ubuntu** — native \`.deb\`\n- **Arch / CachyOS** — native \`.pkg.tar.*\`\n- **everything else** — \`.AppImage\` (de-bundled graphics: renders on any GPU/Wayland setup)\n\nInstall / update — picks the right one for your system:\n\`\`\`\ncurl -fsSL $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/raw/branch/dev/desktop/packaging/install.sh | $INSTALL_TAIL\n\`\`\`\n\n**Android** — \`thoughtsync.apk\`. Copy it and \`thoughtsync-android.json\` into your server's \`/var/inkwell/client/\` and the server will offer it to your devices; see docs/android-distribution.md.$CHANNEL_NOTE"}
|
||||
JSON
|
||||
)
|
||||
|
||||
@@ -165,7 +165,7 @@ JSON
|
||||
# whether it has a JSON encoder; this script cannot assume python3 is on PATH in
|
||||
# every image that sources it.
|
||||
if [ -n "${RELEASE_BODY_JSON:-}" ]; then
|
||||
BODY="{\"tag_name\":\"$TAG\",\"name\":\"ThoughtSync $CHANNEL_LABEL\",\"draft\":false,\"prerelease\":$RELEASE_PRERELEASE,\"body\":\"$RELEASE_BODY_JSON\"}"
|
||||
BODY="{\"tag_name\":\"$TAG\",\"name\":\"Inkwell $CHANNEL_LABEL\",\"draft\":false,\"prerelease\":$RELEASE_PRERELEASE,\"body\":\"$RELEASE_BODY_JSON\"}"
|
||||
fi
|
||||
# 409 = a release for this tag already exists (re-run) — fall through to lookup.
|
||||
release="$(ALLOW_CODES=409 api POST "$API/releases" -H "Content-Type: application/json" -d "$BODY")"
|
||||
|
||||
@@ -158,8 +158,8 @@ replace_asset "$work/latest.json" "latest.json"
|
||||
# downloads a bundle measures the bytes it actually got, which is the only way to
|
||||
# tell a truncated download from a whole one.
|
||||
printf '{\n "version_name": "%s",\n "version_code": "%s"\n}\n' \
|
||||
"$DISPLAY_VERSION" "$APP_VERSION" > "$work/thoughtsync-desktop.json"
|
||||
replace_asset "$work/thoughtsync-desktop.json" "thoughtsync-desktop.json"
|
||||
"$DISPLAY_VERSION" "$APP_VERSION" > "$work/inkwell-desktop.json"
|
||||
replace_asset "$work/inkwell-desktop.json" "inkwell-desktop.json"
|
||||
|
||||
# --- TEMPORARY: the one-shot bridge off a retired channel tag ------------------
|
||||
#
|
||||
@@ -229,7 +229,7 @@ if [ "${PRUNE_OLD_ASSETS:-false}" = "true" ]; then
|
||||
# every desktop push regardless. That is exactly what happened on run
|
||||
# 4098, which swept the APK run 4092 had just published.
|
||||
case "$asset_name" in
|
||||
latest.json|thoughtsync-desktop.json|thoughtsync.apk|thoughtsync-android.json) continue ;;
|
||||
latest.json|inkwell-desktop.json|thoughtsync.apk|thoughtsync-android.json) continue ;;
|
||||
*"$APP_VERSION"*) continue ;;
|
||||
esac
|
||||
echo " removing $asset_name"
|
||||
|
||||
Reference in New Issue
Block a user