mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 19:53:08 +00:00
Sweep every dependency coordinate in the version catalog, the hardcoded
ones in amethyst/build.gradle.kts, the Gradle wrapper and the GitHub
Actions against their upstream metadata, and take the newest release
that keeps each pin on the same stability channel it was already on.
Version catalog:
appcompat 1.7.1 -> 1.8.0
benchmark 1.5.0-alpha07 -> 1.5.0-rc01
biometricKtx 1.2.0-alpha05 -> 1.4.0-alpha02
composeBom 2026.06.01 -> 2026.08.00
composeRuntimeAnnotation 1.11.4 -> 1.12.0
composemediaplayer 0.11.3 -> 0.11.4
firebaseBom 34.16.0 -> 34.17.0
fragmentKtx 1.8.9 -> 1.9.0
ksp 2.3.10 -> 2.3.11
ktor 3.5.1 -> 3.5.2
media3 1.10.1 -> 1.11.0
secp256k1KmpJniAndroid 0.23.0 -> 0.24.0
uiautomator 2.3.0 -> 2.4.0
webkit 1.16.0 -> 1.17.0
composeRuntimeAnnotation is not an independent choice: the 2026.08.00
BOM pins runtime/foundation at 1.12.0, so the standalone annotation
artifact has to move with it.
A shared version ref can only advance to the lowest release available
across every artifact that uses it. `appfunctions` is the one ref here
where the artifacts do not publish in lockstep: `appfunctions` and
`appfunctions-compiler` are at alpha10 but `appfunctions-service` stops
at alpha09, so the ref stays at alpha09 and a comment now records the
cap. Every other multi-artifact ref (media3, secp256k1, ktor, benchmark,
coil, camera, ...) agrees across all of its artifacts.
Hardcoded in amethyst/build.gradle.kts:
tink-android 1.17.0 -> 1.23.0
tracing-perfetto(+binary) 1.0.0 -> 1.0.1
Gradle wrapper 9.5.0 -> 9.7.0 (distributionSha256Sum updated to the
checksum published for 9.7.0), and actions/setup-java v5.6.0 -> v5.7.0
across build, create-release and smoke-test-desktop. Every other action
already floats on its current major tag.
Left alone on purpose:
- vico stays at 3.2.3; the only newer build is the 3.3.0-next.2
prerelease and the current pin is stable.
- negentropy-kmp stays at v1.2.0, already the newest; the 1.0.1 that
shows up in Maven metadata is an older artifact under a different
tag scheme.
- AGP, Kotlin, compose-multiplatform and the JetBrains material3 pin
are all already the latest stable; newer builds are alphas/RCs.
- The @moq/* npm pins in nestsClient/tests/browser-interop, because
that directory's REV file ties the 0.2.x (moq-lite-03) line to the
moq-relay git rev pinned in hang-interop/REV. Bumping to 0.3.x is a
wire-protocol change that has to move with the Rust relay pin.
No new dependencies are introduced, so no new licenses enter the build.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013UYmEazSQkEwsVCvrG96mB
169 lines
6.1 KiB
YAML
169 lines
6.1 KiB
YAML
name: Desktop Smoke Test
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
paths:
|
|
- 'desktopApp/**'
|
|
- '.github/workflows/smoke-test-desktop.yml'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: smoke-desktop-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# -------------------------------------------------------------------------
|
|
# 1) Compose UI test — verifies the composable tree renders (login screen)
|
|
# under the dev classpath. Catches missing string resources, broken
|
|
# composables, and basic dependency-graph issues.
|
|
# -------------------------------------------------------------------------
|
|
compose-ui-test:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v7
|
|
|
|
- name: Set up JDK 21
|
|
uses: actions/setup-java@v5.7.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Set up Gradle
|
|
uses: gradle/actions/setup-gradle@v6
|
|
with:
|
|
cache-read-only: true
|
|
|
|
- name: Install xvfb
|
|
run: sudo apt-get update && sudo apt-get install -y xvfb
|
|
|
|
- name: Run desktop tests (including UI smoke test)
|
|
run: xvfb-run --auto-servernum ./gradlew :desktopApp:test
|
|
|
|
# -------------------------------------------------------------------------
|
|
# 2) Release .deb build + launch — builds the ProGuard'd, jlink'd .deb
|
|
# package, installs it, and verifies the process stays alive for 10s.
|
|
# Catches ProGuard stripping (JNI, reflection), missing jlink modules
|
|
# (java.management, java.prefs), and native lib bundling issues.
|
|
#
|
|
# Runs on both x64 and arm64 hosted runners so release-time arm64 breakage
|
|
# (e.g. ProGuard rules missing an arch-specific reflection root) is caught
|
|
# at PR time instead of on the tag build.
|
|
# -------------------------------------------------------------------------
|
|
release-deb-launch:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, ubuntu-24.04-arm]
|
|
runs-on: ${{ matrix.os }}
|
|
timeout-minutes: 45
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v7
|
|
|
|
- name: Set up JDK 21
|
|
uses: actions/setup-java@v5.7.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Set up Gradle
|
|
uses: gradle/actions/setup-gradle@v6
|
|
with:
|
|
cache-read-only: true
|
|
|
|
- name: Install xvfb + packaging deps
|
|
run: sudo apt-get update && sudo apt-get install -y xvfb fakeroot
|
|
|
|
- name: Build release .deb
|
|
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0
|
|
with:
|
|
max_attempts: 2
|
|
timeout_minutes: 20
|
|
command: ./gradlew --no-daemon :desktopApp:packageReleaseDeb
|
|
|
|
- name: Relax libicu dependency
|
|
run: |
|
|
set -euo pipefail
|
|
chmod +x scripts/relax-deb-libicu.sh
|
|
scripts/relax-deb-libicu.sh desktopApp/build/compose/binaries/main-release/deb/*.deb
|
|
|
|
# Mirrors the same step in create-release.yml so this job exercises the
|
|
# exact .deb release ships. libskiko-linux-arm64.so has libEGL.so.1 in
|
|
# DT_NEEDED and jpackage does not scan lib/app/ for Depends, so without
|
|
# this the arm64 app dies at startup with
|
|
# UnsatisfiedLinkError: libEGL.so.1: cannot open shared object file
|
|
# See scripts/add-deb-libegl-dep.sh for the full rationale.
|
|
- name: Add libegl1 dep to arm64 .deb
|
|
run: |
|
|
set -euo pipefail
|
|
chmod +x scripts/add-deb-libegl-dep.sh
|
|
scripts/add-deb-libegl-dep.sh desktopApp/build/compose/binaries/main-release/deb/*.deb
|
|
|
|
- name: Install .deb
|
|
run: |
|
|
# Installed via apt (not `dpkg -i`) so the .deb's declared Depends are
|
|
# actually resolved — that is what pulls in libegl1 on the arm64
|
|
# runner, which does not ship it preinstalled.
|
|
#
|
|
# jpackage's post-install script runs xdg-desktop-menu which fails
|
|
# on CI runners ("No writable system menu directory"). The files are
|
|
# extracted successfully; only the menu registration fails. Allow the
|
|
# install error, then verify the binary was actually installed.
|
|
sudo apt-get install -y ./desktopApp/build/compose/binaries/main-release/deb/*.deb || true
|
|
echo "Installed files:"
|
|
dpkg -L amethyst | head -30
|
|
# Fail if the binary wasn't actually extracted
|
|
test -d /opt/amethyst || test -d /opt/Amethyst || {
|
|
echo "FAIL: /opt/amethyst not found after dpkg -i"
|
|
exit 1
|
|
}
|
|
|
|
- name: Smoke test — app launches and stays alive
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# Find the launcher binary
|
|
LAUNCHER=$(find /opt -name "Amethyst" -type f -executable 2>/dev/null | head -1)
|
|
if [[ -z "$LAUNCHER" ]]; then
|
|
# Fallback: search dpkg file list
|
|
LAUNCHER=$(dpkg -L amethyst | grep -E '/bin/[Aa]methyst$' | head -1)
|
|
fi
|
|
if [[ -z "$LAUNCHER" ]]; then
|
|
echo "FAIL: could not find Amethyst launcher binary"
|
|
dpkg -L amethyst
|
|
exit 1
|
|
fi
|
|
echo "Launcher: $LAUNCHER"
|
|
|
|
# Launch under xvfb with a timeout safety net
|
|
xvfb-run --auto-servernum timeout 30 "$LAUNCHER" &
|
|
APP_PID=$!
|
|
echo "PID: $APP_PID"
|
|
|
|
# Wait 10s — if the process is still alive, the app launched successfully
|
|
sleep 10
|
|
|
|
if kill -0 "$APP_PID" 2>/dev/null; then
|
|
echo "PASS: Application launched and stayed alive for 10s"
|
|
kill "$APP_PID" || true
|
|
wait "$APP_PID" 2>/dev/null || true
|
|
else
|
|
wait "$APP_PID" 2>/dev/null
|
|
EXIT_CODE=$?
|
|
echo "FAIL: Application exited with code $EXIT_CODE within 10s"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Upload .deb artifact (for manual testing)
|
|
if: always()
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
# Artifact names must be unique across a run — disambiguate per arch.
|
|
name: Release DEB (smoke-tested, ${{ matrix.os }})
|
|
path: desktopApp/build/compose/binaries/main-release/deb/*.deb
|