Skip to content

Commit dbefae8

Browse files
authored
Merge branch 'master' into media-referrerpolicy
2 parents 7fa8aaf + f5630f9 commit dbefae8

93 files changed

Lines changed: 1383 additions & 701 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.ddev/config.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: bootstrap-package
22
type: typo3
33
docroot: .build/public
4-
php_version: "8.2"
4+
php_version: "8.5"
55
webserver_type: apache-fpm
66
router_http_port: "80"
77
router_https_port: "443"
@@ -20,7 +20,7 @@ web_environment:
2020
- typo3DatabaseName=t3func
2121
- typo3DatabasePassword=root
2222
- typo3DatabaseUsername=root
23-
nodejs_version: "16"
23+
nodejs_version: "24"
2424
corepack_enable: false
2525

2626
# Key features of DDEV's config.yaml:

‎.gitattributes‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
/Tests export-ignore
77

88
# Files
9+
AGENTS.md export-ignore
10+
CLAUDE.md export-ignore
911
.editorconfig export-ignore
1012
.gitattributes export-ignore
1113
.gitignore export-ignore

‎.github/PULL_REQUEST_TEMPLATE.md‎

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,49 @@
1-
# Pull Request
1+
## Description
22

3-
## Related Issues
3+
<!-- What does this change do, and why is it needed? -->
44

5-
* Closes #
6-
* Fixes # [bug]
7-
* Resolves # [feature/question]
5+
## Type of change
86

9-
## Prerequisites
7+
* [ ] Bugfix
8+
* [ ] Task
9+
* [ ] Feature
10+
* [ ] Documentation
1011

11-
* [ ] Changes have been tested on TYPO3 v11.5 LTS
12-
* [ ] Changes have been tested on TYPO3 v12.4 LTS
13-
* [ ] Changes have been tested on PHP 7.4
14-
* [ ] Changes have been tested on PHP 8.0
15-
* [ ] Changes have been tested on PHP 8.1
16-
* [ ] Changes have been tested on PHP 8.2
17-
* [ ] Changes have been checked for CGL compliance `php-cs-fixer fix`
18-
* [ ] CSS has been rebuilt (only if there are SCSS changes `cd Build; npm ci; npm run build`)
12+
## Related issues
1913

20-
## Description
14+
<!-- Closes #123, Fixes #456 — leave empty if there is none. -->
15+
16+
## How to validate
17+
18+
<!-- The steps a reviewer follows to see the change working. -->
19+
20+
1.
21+
2.
22+
23+
## AI assistance
24+
25+
<!-- Working with an agent is welcome and never a reason to reject a
26+
pull request. Every change is read and verified here either way;
27+
we ask because it tells us where a change comes from and what
28+
maturity to expect. Fill in what applies, or write "none" if this
29+
is hand written. -->
2130

22-
[Description of changes proposed in this pull request]
31+
* Agent and version:
32+
* Model and effort/reasoning level:
33+
* Share written by the agent:
34+
* Reviewed and understood before pushing:
2335

24-
## Steps to Validate
36+
## Checklist
2537

26-
1. [First Step]
27-
2. [Second Step]
28-
3. [and so on...]
38+
* [ ] Targets `master`
39+
* [ ] Commits are signed off (`git commit -s`)
40+
* [ ] Commit subjects follow `[BUGFIX|TASK|FEATURE] Subject`
41+
* [ ] `composer cgl` leaves the code unchanged
42+
* [ ] `composer phpstan` passes
43+
* [ ] `composer test` passes
44+
* [ ] A bugfix comes with a test that fails without it — appreciated,
45+
not required
46+
* [ ] Holds on every TYPO3 and PHP version declared in `composer.json`
47+
* [ ] Assets rebuilt and committed if SCSS, JavaScript or icons changed
48+
(`npm --prefix Build ci && npm --prefix Build run build`)
49+
* [ ] Documentation updated if the change is user facing

‎.github/workflows/ci.yml‎

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,24 @@ jobs:
1717
fail-fast: false
1818
max-parallel: 5
1919
matrix:
20-
typo3: ['^13', '^14.0']
21-
php: ['8.2', '8.3']
20+
typo3: ['^13.4', '^14.3']
21+
php: ['8.2', '8.3', '8.4', '8.5']
22+
services:
23+
mysql:
24+
image: mysql:8.0
25+
env:
26+
MYSQL_ROOT_PASSWORD: root
27+
ports:
28+
- 3306:3306
29+
options: >-
30+
--health-cmd="mysqladmin ping"
31+
--health-interval=10s
32+
--health-timeout=5s
33+
--health-retries=5
2234
steps:
2335
- id: checkout
2436
name: Checkout Code
25-
uses: actions/checkout@v4
26-
- id: setup_mysql
27-
name: Set up MySQL 8.0
28-
uses: mirromutth/mysql-action@v1.1
29-
with:
30-
mysql version: 8.0
31-
mysql root password: 'root'
37+
uses: actions/checkout@v7
3238
- id: setup_php
3339
name: Set up PHP ${{ matrix.php }}
3440
uses: shivammathur/setup-php@v2
@@ -41,7 +47,7 @@ jobs:
4147
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
4248
echo "timestamp=$(date +"%s")" >> $GITHUB_OUTPUT
4349
- name: Cache Composer dependencies
44-
uses: actions/cache@v4
50+
uses: actions/cache@v6
4551
with:
4652
path: ${{ steps.composer-cache-vars.outputs.dir }}
4753
key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ matrix.typo3 }}-${{ steps.composer-cache-vars.outputs.timestamp }}
@@ -71,12 +77,12 @@ jobs:
7177
composer phpstan -- --error-format=github
7278
- id: tests_unit
7379
name: Unit Tests
74-
if: ${{ always() && steps.install.conclusion == 'success' && matrix.php == '8.3' }}
80+
if: ${{ always() && steps.install.conclusion == 'success' && matrix.php == '8.5' }}
7581
run: |
7682
composer test:php:unit
7783
- id: tests_functional
7884
name: Functional Tests
79-
if: ${{ always() && steps.install.conclusion == 'success' && matrix.php == '8.3' }}
85+
if: ${{ always() && steps.install.conclusion == 'success' && matrix.php == '8.5' }}
8086
run: |
8187
composer test:php:functional
8288
env:
@@ -90,11 +96,11 @@ jobs:
9096
name: Build Frontend
9197
runs-on: ubuntu-latest
9298
steps:
93-
- uses: actions/checkout@v4
99+
- uses: actions/checkout@v7
94100
- name: Setup node
95-
uses: actions/setup-node@v4
101+
uses: actions/setup-node@v7
96102
with:
97-
node-version: 22
103+
node-version: 24
98104
- name: Install
99105
run: |
100106
cd Build
@@ -118,18 +124,18 @@ jobs:
118124
if: (github.ref == 'refs/heads/master') && github.event_name != 'pull_request' && (github.repository == 'benjaminkott/bootstrap_package')
119125
steps:
120126
- name: Checkout
121-
uses: actions/checkout@v4
122-
- name: Set up PHP Version 7.4
127+
uses: actions/checkout@v7
128+
- name: Set up PHP
123129
uses: shivammathur/setup-php@v2
124130
with:
125-
php-version: 7.4
131+
php-version: 8.4
126132
tools: composer:v2
127133
- name: Download Deployer
128134
run: |
129-
curl -LO https://deployer.org/deployer.phar;
130-
sudo mv deployer.phar /usr/local/bin/dep;
131-
sudo chmod +x /usr/local/bin/dep;
132-
dep self-update;
135+
curl -fLO https://github.com/deployphp/deployer/releases/download/v8.0.5/deployer.phar
136+
sudo mv deployer.phar /usr/local/bin/dep
137+
sudo chmod +x /usr/local/bin/dep
138+
dep --version
133139
- name: Setup SSH Key
134140
env:
135141
SSH_AUTH_SOCK: /tmp/ssh-auth.sock

‎.github/workflows/publish.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121

2222
steps:
2323
- name: Checkout repository
24-
uses: actions/checkout@v4
24+
uses: actions/checkout@v7
2525
with:
2626
ref: ${{ github.event.inputs.tag || github.ref }}
2727

@@ -53,7 +53,7 @@ jobs:
5353
- name: Setup PHP
5454
uses: shivammathur/setup-php@v2
5555
with:
56-
php-version: 7.4
56+
php-version: 8.4
5757
extensions: intl, mbstring, json, zip, curl
5858

5959
- name: Install tailor

‎.gitignore‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ nbproject
77

88
config/
99
var/
10+
11+
# mcp
12+
.mcp.json

‎AGENTS.md‎

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# AGENTS.md
2+
3+
## Rules
4+
5+
* No persistent agent memory for this project. Source of truth: this
6+
file, the checkout, the git history. Durable knowledge → PR against
7+
this file.
8+
* **Never** write package or version facts into this file — no TYPO3/PHP
9+
versions, no branch versions, no matrix. They are read from the branch
10+
you are on: `composer.json`, `.github/workflows/ci.yml`,
11+
`Build/.nvmrc`, `.ddev/config.yaml`. A change has to hold on every
12+
TYPO3 major that branch declares, not just the installed one.
13+
* Don't guess TYPO3 APIs, TCA keys, icons, labels — read
14+
`.build/vendor/typo3/`.
15+
* Only report checks you actually ran.
16+
* Everything that only serves development is `export-ignore`d in
17+
`.gitattributes` — this file included; it never ships in the package
18+
artifact.
19+
20+
## Style
21+
22+
* Short, tight, precise — in code, comments, commit messages, PRs and
23+
docs alike
24+
* Comments say why, never what the code already says; no captain
25+
obvious, no restated signatures, no block comment where a good name
26+
does the job
27+
* No over-explained code and no ceremony; a stale comment gets deleted,
28+
not updated
29+
* Describe what is, never what was — no history, no "previously", no
30+
"changed from", no former behaviour in code, comments or docs
31+
* Match the surrounding code: naming, structure, comment density
32+
* Wrap Markdown and reST at 72 characters
33+
34+
## Commands
35+
36+
* `ddev start` · `ddev launch typo3` · `ddev composer …` (provides the
37+
DB for functional tests)
38+
* `composer test` — lint + unit + functional; functional needs the DB →
39+
`ddev composer test:php:functional`
40+
* `composer cgl:ci` (check) · `composer cgl` (rewrites)
41+
* `composer phpstan` — `Build/phpstan.neon`
42+
* `composer changelog` · `composer set-version`
43+
* `npm --prefix Build ci && npm --prefix Build run build` — full asset
44+
build
45+
* PHPStan baselines are split per TYPO3 major
46+
(`Build/phpstan-baseline-*.neon`); `composer phpstan:baseline` writes
47+
elsewhere — move the entries, prefer fixing
48+
49+
## Tests
50+
51+
* `Tests/Unit` and `Tests/Functional`; functional tests boot the fixture
52+
package `Tests/Packages/demo_package`
53+
* A bugfix you write comes with a test that fails without it — that is
54+
the proof. Skip it only when it cannot be tested, and say so in the PR
55+
* For human contributors the same test is a wish, not a requirement —
56+
never reject a pull request over it
57+
58+
## Frontend build
59+
60+
* Sources: `Build/`, `Resources/Public/Scss/`
61+
* Build output is committed:
62+
`Resources/Public/Css|JavaScript|Fonts|Icons`
63+
* SCSS/JS/icon change → rebuild, commit generated files in the same
64+
commit; CI job `build-frontend` fails on a dirty tree
65+
* Node lives in `Build/.nvmrc` and `Build/package.json`; keep
66+
`nodejs_version` in `.ddev/config.yaml` and the CI setup on it
67+
68+
## Branches
69+
70+
* Work always happens on a topic branch, ideally in its own git
71+
worktree — never directly in the shared checkout, and never on
72+
`master` or a release branch
73+
* Topic branches are named after what they do, prefixed by type:
74+
`task/…`, `bugfix/…`, `feature/…` — e.g.
75+
`bugfix/indexed-search-pagination`
76+
* Every change goes to `master` first, always as a pull request, never
77+
as a direct push
78+
* Once it is merged, backport it: cherry-pick onto the release branches
79+
it affects, one pull request per branch — check whether it applies
80+
there, declared versions and tooling differ per branch
81+
* Release branches are named `BP_<major>_<minor>`
82+
83+
## Commits and PRs
84+
85+
* PRs are always squash-merged into `[TYPE] Subject (#<PR number>)`,
86+
e.g. `[TASK] Drop empty ext_tables.php files (#1641)`
87+
* Types: `[BUGFIX]`, `[TASK]`, `[FEATURE]`; no issue number in the
88+
subject
89+
* Don't squash a PR branch yourself — the merge does it, original
90+
commits keep attribution
91+
* Every commit carries a `Signed-off-by:` trailer with the contributor's
92+
name and mail from `git config` — commit with `git commit -s`
93+
94+
## Agent attribution
95+
96+
* Agent involvement belongs in the PR's *AI assistance* section, and
97+
nowhere else. Fill it in fully and honestly: agent and version, model
98+
and effort level, share written by the agent, human review
99+
* Never expose agent sessions: no session links, no tool footers, no
100+
"generated with …" lines in commit messages, PR titles or PR bodies
101+
* Never add an agent as author or `Co-Authored-By` — commits and pull
102+
requests carry the human contributor only
103+
104+
## Worktrees
105+
106+
* Never move a branch ref (`git branch -f master <commit>`) — the
107+
checkout holding that branch stays behind and shows the whole delta as
108+
staged changes
109+
* Commit in the worktree, push a topic branch, open a PR; check
110+
`git worktree list` before touching any ref
111+
112+
## Documentation
113+
114+
* User-facing changes → `Documentation/` (reST); `CHANGELOG.md` is
115+
generated
116+
* Human contribution notes: `Documentation/Contribution/Index.rst` —
117+
keep in sync with this file

‎Build/.nvmrc‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v22.18
1+
v24.15

‎Build/Gruntfile.js‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,6 @@ module.exports = function(grunt) {
389389
inputDir: '../Resources/Public/Icons/BootstrapPackageIcon',
390390
outputDir: '../Resources/Public/Fonts',
391391
fontTypes: [
392-
'eot',
393392
'woff2',
394393
'woff',
395394
'ttf'
@@ -413,7 +412,6 @@ module.exports = function(grunt) {
413412
pathOptions: {
414413
json: './bootstrappackageicon.json',
415414
css: '../Resources/Public/Fonts/bootstrappackageicon.css',
416-
eot: '../Resources/Public/Fonts/bootstrappackageicon.eot',
417415
ttf: '../Resources/Public/Fonts/bootstrappackageicon.ttf',
418416
woff: '../Resources/Public/Fonts/bootstrappackageicon.woff',
419417
woff2: '../Resources/Public/Fonts/bootstrappackageicon.woff2'

0 commit comments

Comments
 (0)