Phase 1 sub-commit 1: scaffold framework, skeleton, CI
All checks were successful
CI / Quality (push) Successful in 48s

Stands up the directory structure Phase 1 fills in over subsequent
sub-commits: framework/php (Composer package php-qml/bridge),
framework/qml (Qt module placeholder), framework/skeleton (Caddyfile +
Makefile stubs), and .gitea/workflows/ci.yml. Root .gitignore covers
the build/composer/Symfony/Qt/CMake/IDE artefacts the rest of Phase 1
will produce. No bundle code, no Qt module sources, no working dev mode
yet — those land in sub-commits 2-7. Spike still in place.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-02 00:59:06 +02:00
parent 16dfffd916
commit 9001386f92
6 changed files with 127 additions and 0 deletions

20
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,20 @@
name: CI
on:
push:
branches: [dev, main]
pull_request:
branches: [dev, main]
jobs:
quality:
name: Quality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Quality (placeholder)
run: |
echo "quality job — populated in Phase 1 sub-commit 7"
echo "will run: PHPStan, php-cs-fixer (check), PHPUnit, qmllint"

36
.gitignore vendored Normal file
View File

@@ -0,0 +1,36 @@
# Build artefacts
build/
**/build/
# Composer
vendor/
composer.phar
# PHPUnit
.phpunit.cache/
.phpunit.result.cache
# PHP CS Fixer
.php-cs-fixer.cache
# Symfony / app data
**/var/
.env.local
.env.*.local
.env.local.php
# Qt / CMake intermediates
CMakeCache.txt
CMakeFiles/
*.pro.user
.qt/
.rcc/
.qmlls.ini
moc_*.cpp
moc_*.h
qrc_*.cpp
ui_*.h
# OS / editor
.DS_Store
*.swp

View File

@@ -0,0 +1,28 @@
{
"name": "php-qml/bridge",
"description": "Symfony bundle bridging PHP applications to a Qt/QML host (part of the php-qml framework).",
"type": "symfony-bundle",
"license": "proprietary",
"require": {
"php": "^8.3",
"symfony/framework-bundle": "^7.1"
},
"require-dev": {
"phpunit/phpunit": "^11",
"phpstan/phpstan": "^2",
"phpstan/phpstan-symfony": "^2",
"friendsofphp/php-cs-fixer": "^3",
"symfony/phpunit-bridge": "^7.1"
},
"autoload": {
"psr-4": {
"PhpQml\\Bridge\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"PhpQml\\Bridge\\Tests\\": "tests/"
}
},
"minimum-stability": "stable"
}

View File

@@ -0,0 +1,17 @@
# php-qml framework — Qt module (PhpQml.Bridge).
#
# Consumed by the application's top-level CMakeLists.txt
# (see framework/skeleton/qml/CMakeLists.txt) via add_subdirectory.
#
# Module sources arrive in:
# - Phase 1 sub-commit 4: BackendConnection, SingleInstance
# - Phase 1 sub-commit 5: MercureClient, RestClient (QML/JS)
#
# Until then this file is a placeholder so the directory is tracked in
# git and find_package picks up the right Qt before subsequent commits.
cmake_minimum_required(VERSION 3.21)
if(NOT TARGET Qt6::Core)
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Gui Quick Qml Network)
endif()

View File

@@ -0,0 +1,3 @@
# Placeholder Caddyfile. Populated in Phase 1 sub-commit 6 alongside
# the Symfony app at framework/skeleton/symfony/. See PLAN.md §13,
# Phase 1, "Skeleton wiring".

View File

@@ -0,0 +1,23 @@
# php-qml framework skeleton — Make targets.
# Filled in across Phase 1 sub-commits 3, 6, and 7.
.DEFAULT_GOAL := help
.PHONY: help
help: ## Show available targets
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-12s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.PHONY: dev
dev: ## (TBD) Run the skeleton in dev mode (FrankenPHP --watch + Qt host)
@echo "dev: not yet implemented (Phase 1 sub-commit 6)"
@exit 1
.PHONY: doctor
doctor: ## (TBD) Run bridge:doctor against the running backend
@echo "doctor: not yet implemented (Phase 1 sub-commit 3)"
@exit 1
.PHONY: quality
quality: ## (TBD) Run PHPStan, php-cs-fixer (check), PHPUnit, qmllint
@echo "quality: not yet implemented (Phase 1 sub-commit 7)"
@exit 1