Stages a fake AppImage layout in /tmp without a real .AppImage build:
$ROOT/usr/bin/<app> — copy of the host binary
$ROOT/usr/bin/frankenphp — symlink to system frankenphp
$ROOT/usr/share/<app>/symfony — staged --no-dev composer copy
$ROOT/usr/share/<app>/Caddyfile
The staged Symfony tree is `chmod -R a-w` to actually exercise the
read-only-mount cache/log redirect (Kernel::getCacheDir +
APP_CACHE_DIR override) — without the override, Symfony would fail
to mkdir var/cache/prod and migrations would error out.
Then runs the host with BRIDGE_URL unset (forces bundled mode), polls
/healthz, and asserts:
- status=ok + bundle="PhpQml\Bridge\Publisher" — proves the
HealthController deep-load (predecessor commit) actually
autowired Publisher, i.e. BridgeBundle is reachable.
- User data dir's var/cache exists — APP_CACHE_DIR override fired.
- Staged tree's var/cache/prod is empty — Symfony didn't write into
the read-only mount.
Together this catches every v0.1.0 shakedown bug in CI:
- doubled bin/frankenphp path (resolveFrankenphpBin)
- composer path-repo symlink dangling (staging-symfony's symlink:false sed)
- read-only mount cache failure (Kernel + supervisor env-vars)
- bundle autoload broken (HealthController canary)
Implementation gotcha (caught during dev): the host binary must be
COPIED into the staged layout, not symlinked. Qt's
applicationDirPath() reads /proc/self/exe which dereferences
symlinks, so a symlinked host would resolve to the original build/
dir and the supervisor would hunt for frankenphp + symfony there
instead of the staged tree. Real AppImages copy the binary, mimicking
that here.
Wiring:
- examples/todo/Makefile: extracted the staging-symfony logic out
of the appimage target into its own staging-symfony target. New
integration-bundled target depends on `build` + `staging-symfony`
and runs tests/bundled-supervisor.sh. quality target now invokes
integration-bundled after the existing dev-mode integration test.
- .gitea/workflows/ci.yml: new "Bundled-mode supervisor integration
test" step right after the dev-mode integration step.
Closes the v0.1.1 follow-up "Bundled-mode integration test" tracked
in PLAN.md §13.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
102 lines
2.7 KiB
YAML
102 lines
2.7 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
quality:
|
|
name: Quality
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: '8.4'
|
|
extensions: curl, json, mbstring
|
|
tools: composer:v2
|
|
coverage: none
|
|
|
|
- name: Cache Composer
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/composer
|
|
key: composer-${{ hashFiles('framework/php/composer.json') }}
|
|
|
|
- name: Install bundle dependencies
|
|
working-directory: framework/php
|
|
run: composer install --no-interaction --prefer-dist
|
|
|
|
- name: PHPStan
|
|
working-directory: framework/php
|
|
run: composer phpstan
|
|
|
|
- name: php-cs-fixer (check)
|
|
working-directory: framework/php
|
|
run: composer cs:check
|
|
|
|
- name: PHPUnit
|
|
working-directory: framework/php
|
|
run: composer phpunit
|
|
|
|
- name: Setup Python (for install-qt-action's aqtinstall)
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Install build tools
|
|
run: sudo apt-get install -y cmake ninja-build rsync
|
|
|
|
- name: Setup Qt 6
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: '6.5.*'
|
|
dir: ${{ github.workspace }}/qt
|
|
cache: true
|
|
setup-python: false
|
|
|
|
- name: Cache CMake build
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: framework/skeleton/build
|
|
key: cmake-${{ runner.os }}-${{ hashFiles('framework/qml/**', 'framework/skeleton/qml/**') }}
|
|
|
|
- name: Build QML module + skeleton
|
|
working-directory: framework/skeleton
|
|
run: |
|
|
cmake -S qml -B build/qml
|
|
cmake --build build/qml --parallel
|
|
|
|
- name: qmllint
|
|
working-directory: framework/skeleton
|
|
run: cmake --build build/qml --target all_qmllint
|
|
|
|
- name: Install FrankenPHP
|
|
run: |
|
|
curl -fsSL -o /usr/local/bin/frankenphp \
|
|
https://github.com/php/frankenphp/releases/download/v1.12.2/frankenphp-linux-x86_64
|
|
chmod +x /usr/local/bin/frankenphp
|
|
|
|
- name: Maker-output snapshot test
|
|
run: framework/php/tests/snapshot/run.sh
|
|
|
|
- name: Build the todo example
|
|
working-directory: examples/todo
|
|
run: |
|
|
make install
|
|
make build
|
|
|
|
- name: Bridge-integration test (HTTP/SSE round-trip + crash-recover)
|
|
working-directory: examples/todo
|
|
run: ./tests/integration.sh
|
|
|
|
- name: Bundled-mode supervisor integration test
|
|
working-directory: examples/todo
|
|
run: make integration-bundled
|