diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..21d348d --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + container: archlinux:latest + steps: + - name: Install dependencies + run: | + pacman -Syu --noconfirm --needed git nodejs base-devel cmake ninja extra-cmake-modules \ + qt6-base qt6-declarative kirigami ki18n kcoreaddons kcrash kconfig \ + mpvqt qcoro qtkeychain-qt6 ffmpeg + - uses: actions/checkout@v4 + - name: Configure + run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTING=ON + - name: Build + run: cmake --build build + - name: Test + env: + QT_QPA_PLATFORM: offscreen + run: ctest --test-dir build --output-on-failure diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..b9c6ed0 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,48 @@ +name: Release + +on: + push: + tags: ['v*'] + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + container: archlinux:latest + steps: + - name: Install dependencies + run: | + pacman -Syu --noconfirm --needed git nodejs base-devel cmake ninja extra-cmake-modules \ + qt6-base qt6-declarative qt6-svg qt6-wayland kirigami ki18n kcoreaddons kcrash kconfig \ + mpvqt qcoro qtkeychain-qt6 ffmpeg plasma-integration qqc2-desktop-style breeze union \ + curl jq file + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Source tarball + run: | + git config --global --add safe.directory "$PWD" + version="${GITHUB_REF_NAME#v}" + mkdir -p dist + git archive --format=tar --prefix="qtpotato-$version/" "$GITHUB_REF_NAME" \ + | gzip -n > "dist/qtpotato-$version.tar.gz" + - name: AppImage + run: | + LDAI_OUTPUT="$PWD/dist/QtPotato-${GITHUB_REF_NAME#v}-x86_64.AppImage" \ + packaging/appimage/build-appimage.sh "$PWD/build-appimage" + - name: Publish release + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + cd dist + sha256sum -- * > SHA256SUMS + api="$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY" + id=$(jq -n --arg tag "$GITHUB_REF_NAME" '{tag_name: $tag, name: ("QtPotato " + ($tag | ltrimstr("v")))}' \ + | curl -fsS -X POST -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' \ + --data @- "$api/releases" | jq -r .id) + for f in *; do + curl -fsS -X POST -H "Authorization: token $TOKEN" \ + -F "attachment=@$f" "$api/releases/$id/assets?name=$f" > /dev/null + done diff --git a/packaging/aur/qtpotato-git/.SRCINFO b/packaging/aur/qtpotato-git/.SRCINFO new file mode 100644 index 0000000..cfa37f6 --- /dev/null +++ b/packaging/aur/qtpotato-git/.SRCINFO @@ -0,0 +1,31 @@ +pkgbase = qtpotato-git + pkgdesc = KDE video player built on mpv that translates subtitles with an LLM (development version) + pkgver = 0.1.0 + pkgrel = 1 + url = https://git.trivk.dev/tri/QtPotato + arch = x86_64 + license = GPL-3.0-or-later + makedepends = git + makedepends = cmake + makedepends = ninja + makedepends = extra-cmake-modules + depends = qt6-base + depends = qt6-declarative + depends = kirigami + depends = ki18n + depends = kcoreaddons + depends = kcrash + depends = kconfig + depends = mpvqt + depends = qcoro + depends = qtkeychain-qt6 + depends = ffmpeg + depends = hicolor-icon-theme + optdepends = qqc2-desktop-style: Plasma look for the interface + optdepends = plasma-integration: Plasma file dialogs, colours and icons + provides = qtpotato=0.1.0 + conflicts = qtpotato + source = qtpotato::git+https://git.trivk.dev/tri/QtPotato.git + sha256sums = SKIP + +pkgname = qtpotato-git diff --git a/packaging/aur/qtpotato-git/PKGBUILD b/packaging/aur/qtpotato-git/PKGBUILD new file mode 100644 index 0000000..137e497 --- /dev/null +++ b/packaging/aur/qtpotato-git/PKGBUILD @@ -0,0 +1,44 @@ +# Maintainer: Tri Vo Khac + +pkgname=qtpotato-git +_pkgname=qtpotato +pkgver=0.1.0 +pkgrel=1 +pkgdesc='KDE video player built on mpv that translates subtitles with an LLM (development version)' +arch=('x86_64') +url='https://git.trivk.dev/tri/QtPotato' +license=('GPL-3.0-or-later') +depends=('qt6-base' 'qt6-declarative' 'kirigami' 'ki18n' 'kcoreaddons' 'kcrash' 'kconfig' + 'mpvqt' 'qcoro' 'qtkeychain-qt6' 'ffmpeg' 'hicolor-icon-theme') +makedepends=('git' 'cmake' 'ninja' 'extra-cmake-modules') +optdepends=('qqc2-desktop-style: Plasma look for the interface' + 'plasma-integration: Plasma file dialogs, colours and icons') +provides=("$_pkgname=$pkgver") +conflicts=("$_pkgname") +source=("$_pkgname::git+$url.git") +sha256sums=('SKIP') + +pkgver() { + cd "$_pkgname" + if git describe --tags --long >/dev/null 2>&1; then + git describe --tags --long --abbrev=7 | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g' + else + printf 'r%s.%s' "$(git rev-list --count HEAD)" "$(git rev-parse --short=7 HEAD)" + fi +} + +build() { + cmake -B build -S "$_pkgname" -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=ON + cmake --build build +} + +check() { + QT_QPA_PLATFORM=offscreen ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/packaging/aur/qtpotato/.SRCINFO b/packaging/aur/qtpotato/.SRCINFO new file mode 100644 index 0000000..bce9805 --- /dev/null +++ b/packaging/aur/qtpotato/.SRCINFO @@ -0,0 +1,28 @@ +pkgbase = qtpotato + pkgdesc = KDE video player built on mpv that translates subtitles with an LLM + pkgver = 0.1.0 + pkgrel = 1 + url = https://git.trivk.dev/tri/QtPotato + arch = x86_64 + license = GPL-3.0-or-later + makedepends = cmake + makedepends = ninja + makedepends = extra-cmake-modules + depends = qt6-base + depends = qt6-declarative + depends = kirigami + depends = ki18n + depends = kcoreaddons + depends = kcrash + depends = kconfig + depends = mpvqt + depends = qcoro + depends = qtkeychain-qt6 + depends = ffmpeg + depends = hicolor-icon-theme + optdepends = qqc2-desktop-style: Plasma look for the interface + optdepends = plasma-integration: Plasma file dialogs, colours and icons + source = https://git.trivk.dev/tri/QtPotato/releases/download/v0.1.0/qtpotato-0.1.0.tar.gz + sha256sums = SKIP + +pkgname = qtpotato diff --git a/packaging/aur/qtpotato/PKGBUILD b/packaging/aur/qtpotato/PKGBUILD new file mode 100644 index 0000000..e21f99f --- /dev/null +++ b/packaging/aur/qtpotato/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Tri Vo Khac + +pkgname=qtpotato +pkgver=0.1.0 +pkgrel=1 +pkgdesc='KDE video player built on mpv that translates subtitles with an LLM' +arch=('x86_64') +url='https://git.trivk.dev/tri/QtPotato' +license=('GPL-3.0-or-later') +depends=('qt6-base' 'qt6-declarative' 'kirigami' 'ki18n' 'kcoreaddons' 'kcrash' 'kconfig' + 'mpvqt' 'qcoro' 'qtkeychain-qt6' 'ffmpeg' 'hicolor-icon-theme') +makedepends=('cmake' 'ninja' 'extra-cmake-modules') +optdepends=('qqc2-desktop-style: Plasma look for the interface' + 'plasma-integration: Plasma file dialogs, colours and icons') +source=("$url/releases/download/v$pkgver/$pkgname-$pkgver.tar.gz") +# Filled in by update-pkgbuild.sh from the release's SHA256SUMS. +sha256sums=('SKIP') + +build() { + cmake -B build -S "$pkgname-$pkgver" -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=ON + cmake --build build +} + +check() { + QT_QPA_PLATFORM=offscreen ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} diff --git a/packaging/aur/update-pkgbuild.sh b/packaging/aur/update-pkgbuild.sh new file mode 100755 index 0000000..86e60b2 --- /dev/null +++ b/packaging/aur/update-pkgbuild.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Point the qtpotato PKGBUILD at a published release and regenerate .SRCINFO. +# +# Usage: packaging/aur/update-pkgbuild.sh (e.g. 0.2.0, after the v0.2.0 release) +set -euo pipefail + +version="${1#v}" +dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +url="https://git.trivk.dev/tri/QtPotato/releases/download/v$version" +sum="$(curl -fsSL "$url/SHA256SUMS" | awk -v f="qtpotato-$version.tar.gz" '$2 == f { print $1 }')" +[[ -n "$sum" ]] || { echo "qtpotato-$version.tar.gz not found in $url/SHA256SUMS" >&2; exit 1; } + +cd "$dir/qtpotato" +sed -i -e "s/^pkgver=.*/pkgver=$version/" -e "s/^pkgrel=.*/pkgrel=1/" \ + -e "s/^sha256sums=.*/sha256sums=('$sum')/" PKGBUILD +makepkg --printsrcinfo > .SRCINFO +cd "$dir/qtpotato-git" +makepkg --printsrcinfo > .SRCINFO