Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: PHP API CI

on:
pull_request:
push:
branches:
- develop
- main
tags:
- '*'
workflow_dispatch:

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out PHP API
uses: actions/checkout@v4

- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.5'
extensions: dom, json, libxml, mbstring, tokenizer, xml, xmlwriter
tools: composer:v2
coverage: none

- name: Cache Composer downloads
uses: actions/cache@v4
with:
path: ~/.cache/composer/files
key: composer-${{ runner.os }}-${{ hashFiles('composer.lock', 'composer.json') }}
restore-keys: |
composer-${{ runner.os }}-

- name: Install dependencies
run: composer install --no-interaction --prefer-dist --no-progress

- name: Validate package metadata and autoloading
run: |
composer validate --strict --no-check-publish
composer dump-autoload --optimize --strict-psr --no-interaction

- name: Verify release tag metadata
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
set -euo pipefail
VERSION_VALUE=$(tr -d '\r\n' < VERSION)
if [[ "${GITHUB_REF_NAME#v}" != "$VERSION_VALUE" ]]; then
echo "Tag '$GITHUB_REF_NAME' does not match VERSION '$VERSION_VALUE'." >&2
exit 1
Comment on lines +52 to +55

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip metadata checks for non-release tags

When any non-semver tag such as nightly is pushed, this equality check fails because the workflow subscribes to every tag, while .github/workflows/verify-release-version.yml lines 32–37 explicitly classifies such tags as non-release tags and skips validation. This makes the new PHP API CI report a failure for tag types the existing release workflow permits; either apply the same semver guard here or narrow the tag trigger to release tags.

Useful? React with 👍 / 👎.

fi

- name: Run PHP API tests
run: composer test -- --colors=never
8 changes: 8 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ These rules apply to `lenga/engine` package code and tests. They are version-con
- Prefer `use` imports over fully qualified class names. Keep fully qualified names only when there is a clear reason, such as global built-ins, unavoidable name collisions, or intentionally explicit runtime references.
- Keep files LF/Unix line endings. Do not introduce CRLF line endings.

## Remote Branch Policy

- Keep feature, fix, release-preparation, agent, and other topic branches local by default. Never push a non-`develop` branch to GitHub or another remote unless the user explicitly instructs you to push that named branch.
- The normal sharing workflow is to finish or merge local work into local `develop`, then push only `develop` to the remote `develop` branch. Do not push `main` directly unless the user explicitly instructs it.
- A request to implement, commit, continue, prepare a release, or create a branch is not permission to publish a topic branch. Do not infer remote-push permission from the broader task.
- Before every push, verify the current branch and use an explicit `develop:develop` refspec for the normal workflow. Never rely on a bare `git push` when it could publish another branch.
- If the user explicitly authorizes a remote topic branch, remove that remote branch after it is merged or closed unless the user asks to preserve it.

## Native Runtime Boundary

- Do not ship `EngineHeader.php` or any PHP declarations for native bridge functions.
Expand Down
17 changes: 17 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.0/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
cacheDirectory=".phpunit.cache">
<testsuites>
<testsuite name="Unit">
<directory>tests</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>src</directory>
</include>
</source>
</phpunit>
Loading