mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
Bumps the actions group with 2 updates: [actions/setup-java](https://github.com/actions/setup-java) and [crowdin/github-action](https://github.com/crowdin/github-action). Updates `actions/setup-java` from 6.0.0 to 6.0.1 - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v6.0.0...v6.0.1) Updates `crowdin/github-action` from 2 to 3 - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](https://github.com/crowdin/github-action/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: crowdin/github-action dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com>
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@v6.0.1
|
|
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@v6.0.1
|
|
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
|