Release: merge development into beta - #10
Open
github-actions[bot] wants to merge 33 commits into
Open
Conversation
Convert from PHP Nextcloud app to ExApp with Docker-based deployment. Add standardized CI/CD workflows for unstable release, dev-to-beta PR creation, branch protection, and lint checks. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enforce that PRs to main can only come from beta or hotfix branches, and PRs to beta can only come from development or hotfix branches. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace existing license (Apache-2.0/AGPL) with EUPL-1.2 across all metadata files: LICENSE, appinfo/info.xml, composer.json, package.json. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Nextcloud App Store schema does not accept EUPL-1.2 as a valid licence value, causing all release uploads to fail with HTTP 400. Revert to 'agpl' which is in the accepted set. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AppAPI requires a successful heartbeat before calling /init, but the
wrapper returned 503 when the internal Django service wasn't running yet.
Return 200 with {"status":"waiting"} to break the chicken-and-egg cycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add phpcs.xml, phpmd.xml, psalm.xml, custom NamedParametersSniff, and update composer.json with quality dependencies. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: Return HTTP 200 from heartbeat endpoint during init wait
AppAPI requires a successful heartbeat before calling /init, but the
wrapper returned 503 when the internal Django service wasn't running yet.
Return 200 with {"status":"waiting"} to break the chicken-and-egg cycle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: Add PHPCS/PHPMD/Psalm quality tooling
Add phpcs.xml, phpmd.xml, psalm.xml, custom NamedParametersSniff, and
update composer.json with quality dependencies.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… into development
Aligns the composer platform pin with the runtime constraint
('require.php' bumped to ^8.3 fleet-wide yesterday). Keeps composer's
resolver consistent — it'll pick package versions assuming PHP 8.3 is
the target runtime, which matches what the container (PHP 8.3.30) and
CI matrices already use.
Part of the fleet-wide PHP 8.3 sweep.
Brings the composer require.php constraint in line with the runtime the container + CI already use (PHP 8.3). Drops formal support for PHP 8.1 and 8.2. Several vendor packages (e.g. azjezz/psl@4.3.0) use PHP 8.3 typed class constants, making the codebase functionally 8.3-only already. Part of the fleet-wide PHP 8.3 sweep.
…ling (#9) Aligns appinfo/info.xml with the fleet canonical: - <php min-version="8.3"> — matches the composer require.php constraint (^8.3 fleet-wide) - <nextcloud min-version="28" max-version="34"> — converge the fleet on one NC support range - <licence>agpl</licence> — fix the casing/value drift (fleet had agpl / eupl / EUPL-1.2 / AGPL-3.0-or-later — 4 spellings). Stays on "agpl" workaround per the EUPL store-listing pattern; switch to "EUPL-1.2" once NC 34 is the fleet floor (ConductionNL/.github#98). Per-app fields (<id>, <name>, <description>, <version>, etc.) are preserved. Drift surfaced in https://github.com/ConductionNL/nextcloud-app-template/blob/development/docs/fleet-drift-deeper.md#4-appinfoinfoxml--significant-drift
NC renders SVGs via Imagick where stroke-based icons with currentColor are invisible. Replace stroke-only icon with filled path using fill: #fff CSS class.
Nextcloud 34's app-management page inlines the raw app.svg and recolors it via 'fill: currentcolor' on the <svg> element. A fill carried on <path>/<style>/class beats the inherited value, so the icon rendered white-on-white and vanished from the list. Moving the fill to the <svg> element lets Nextcloud recolor the icon; visuals are unchanged everywhere the icon is shown on a dark/colored surface.
…n' (#4) from fix/app-icon-svg-level-fill into development
Makes psalm/phpstan/phpmd real gates instead of always exiting 0.
test:unit and test:all ended in ./vendor/bin/phpunit --colors=always || echo 'No PHP test suite in this repo ... skipping...' so phpunit's exit status was discarded unconditionally. The message was true today (this repo is a Python ExApp wrapper with no PHP test suite) but the mechanism was not conditional on it: any real test failure, now or after a test suite is added, would have been swallowed the same way. Replaced with a guard on the actual precondition, so an absent suite is a visible stated fact and a present-but-failing suite fails the gate: if [ -f phpunit.xml ] || [ -f phpunit.xml.dist ]; then ./vendor/bin/phpunit --colors=always; else echo 'SKIPPED: no phpunit.xml ...'; fi Positive control, measured on this tree in a PHP 8.3.32 container with a freshly installed vendor/, injecting a phpunit.xml plus one deliberately failing test: old composer.json + failing test -> check:strict exit 0 (swallowed) new composer.json + failing test -> check:strict exit 1, naming test:all new composer.json, test removed -> check:strict exit 0, loud SKIPPED Tooling only.
Wires the repo to the ConductionNL/.github reusable workflows so the two org-required check contexts are reported on every PR.
…paced code (#17) Every Conduction repo enables rulesets/design.xml/DevelopmentCodeFragment, and it has never reported anything in any of them. The cause is a config gap, not a phpmd bug: PDepend resolves an unqualified call inside a namespaced file to the current-namespace-qualified image, so `var_dump($x)` written inside `namespace OCA\MyApp\Service;` reaches the rule as `OCA\MyApp\Service\var_dump` and never matches the `unwanted-functions` list. All of our production PHP is namespaced, so with the default the rule is dead. The rule's own `ignore-namespaces` property is the switch. This mirrors the configuration already merged in openregister (ConductionNL/openregister#2286). Proof, phpmd 2.15.0 / PHP 8.3.32, against this repo's own phpmd.xml: namespaced probe class calling var_dump() -> exit 2, DevelopmentCodeFragment same class with the call removed -> exit 0, no finding Before the change the identical namespaced probe exited 0. Blast radius on this repo: measured 0 new findings over the scanned path on the base branch, with a per-run positive control (dropping the namespaced probe into the same extracted tree does produce exit 2, so the zero is a true zero). Nothing is baselined or suppressed here. Note: this repo does not run the shared quality workflow, so phpmd is not executed in CI here. This change fixes `composer check:strict` when run locally and stops the broken configuration propagating; it does not by itself add a CI gate.
contents: read plus the issues/pull-requests write the Quality Report PR comment needs (resolves CodeQL actions/missing-workflow-permissions).
The caller's permissions block is a static ceiling for every job in the called quality.yml — including disabled ones — so it must cover the widest declared grant (journeydoc/update-baseline/features-extract need contents/actions write; the Quality Report comment needs issues/pull-requests write). Also satisfies CodeQL actions/missing-workflow-permissions and cancels superseded runs.
All 7 CI jobs ran unbounded, so a hung runner could burn the full 6-hour GitHub default before failing. Each job now carries a timeout-minutes sibling of runs-on, sized from observed fleet-wide durations (successful + failed executions, skipped excluded): - lint-check (15): n=176, median 0.6 min, max 1.4 min - check-branch (10): n=123, max 0.1 min - create-pr (20): n=152, max 5.6 min - release-management (45): n=26, max 0.7 min - bounded loosely because a spurious release failure is expensive - build (30): no observed runs; docker build Bounds are deliberately loose: a timeout that fires under normal runner contention turns a slow run into a phantom defect. Co-authored-by: Conduction Release Bot <release-bot@conduction.nl>
ci: align workflows with fleet standard (ConductionNL/.github)
…epo with no PHP tests (#20) This is a Python ExApp with no phpunit.xml and no PHP test suite. The test:unit/test:all scripts echoed SKIPPED and exited 0, and the check chains counted that as a passing test leg. Removed; the check chains now state plainly that they are static analysis only.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.