mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Releases and version numbers are gone. CI now rebuilds all three platforms on every change to main and commits the packages to the `builds` branch, so what anyone downloads is the current state of the repository. The branch is rewritten from scratch each time rather than added to, so the repository keeps one copy of the packages instead of a ~70 MB set per commit. Without tags there is no version to compare, so a build carries the commit it was made from and the branch carries a VERSION file naming the same commit. The updater fetches those few bytes and treats any difference as being behind; commits are not ordered, and the branch only ever holds the current build. The installers fetch from the branch over raw.githubusercontent.com for the same reason. Co-authored-by: Cursor <cursoragent@cursor.com>
80 lines
2.4 KiB
Bash
Executable file
80 lines
2.4 KiB
Bash
Executable file
#!/bin/sh
|
|
# maturita.c installer for Linux.
|
|
#
|
|
# Carries no application of its own: it downloads the current build straight
|
|
# from the repository's `builds` branch, which CI rewrites whenever main
|
|
# changes. This file therefore never goes stale.
|
|
#
|
|
# Run it with: sh maturita-installer-linux.sh
|
|
# The app updates itself from then on.
|
|
|
|
set -eu
|
|
|
|
REPO="pepaskopec-blip/maturita.c"
|
|
BRANCH="builds"
|
|
ASSET="maturita-linux-x86_64.AppImage"
|
|
URL="https://raw.githubusercontent.com/$REPO/$BRANCH/$ASSET"
|
|
|
|
# ~/Applications is where desktop environments look for AppImages, and the app
|
|
# keeps its progress/ directory next to its own file.
|
|
DEST_DIR="$HOME/Applications"
|
|
DEST="$DEST_DIR/maturita.AppImage"
|
|
DESKTOP_DIR="$HOME/.local/share/applications"
|
|
ICON_DIR="$HOME/.local/share/icons/hicolor/512x512/apps"
|
|
|
|
say() { printf '%s\n' "$*"; }
|
|
die() { printf '\nError: %s\n' "$*" >&2; exit 1; }
|
|
|
|
say "Installing maturita.C"
|
|
say "---------------------"
|
|
|
|
arch=$(uname -m)
|
|
if [ "$arch" != "x86_64" ]; then
|
|
die "only x86_64 builds are published, but this machine reports '$arch'.
|
|
Build from source instead: https://github.com/$REPO"
|
|
fi
|
|
|
|
command -v curl >/dev/null 2>&1 || die "curl was not found. Install it first."
|
|
|
|
mkdir -p "$DEST_DIR"
|
|
|
|
tmp=$(mktemp -d)
|
|
trap 'rm -rf "$tmp"' EXIT INT TERM
|
|
|
|
say "Downloading the latest release..."
|
|
curl -fL --progress-bar -o "$tmp/$ASSET" "$URL" ||
|
|
die "the download failed. Check your internet connection."
|
|
|
|
say "Installing to $DEST"
|
|
chmod +x "$tmp/$ASSET"
|
|
mv -f "$tmp/$ASSET" "$DEST" || die "could not write to $DEST_DIR."
|
|
|
|
# A menu entry needs the icon as a separate file, which the AppImage can
|
|
# unpack without FUSE. Losing the icon is not worth failing the install over.
|
|
if (cd "$tmp" && "$DEST" --appimage-extract \
|
|
'usr/share/icons/hicolor/512x512/apps/maturita.png' >/dev/null 2>&1); then
|
|
icon="$tmp/squashfs-root/usr/share/icons/hicolor/512x512/apps/maturita.png"
|
|
if [ -f "$icon" ]; then
|
|
mkdir -p "$ICON_DIR"
|
|
cp -f "$icon" "$ICON_DIR/maturita.png"
|
|
fi
|
|
fi
|
|
|
|
mkdir -p "$DESKTOP_DIR"
|
|
cat > "$DESKTOP_DIR/maturita.desktop" <<EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=maturita.C
|
|
Comment=Practice app for the Czech maturita exam
|
|
Exec=$DEST
|
|
Icon=maturita
|
|
Terminal=false
|
|
Categories=Education;
|
|
EOF
|
|
|
|
command -v update-desktop-database >/dev/null 2>&1 &&
|
|
update-desktop-database "$DESKTOP_DIR" >/dev/null 2>&1 || true
|
|
|
|
say ""
|
|
say "Done. Starting the app..."
|
|
"$DEST" >/dev/null 2>&1 &
|