Commit graph

41012 commits

Author SHA1 Message Date
TheMilek
280b4e5524
Resolve conflicts between 2.2 and 2.3 2026-06-02 13:52:15 +02:00
Grzegorz Sadowski
80cfea8f52
Fix application's version
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
2026-06-02 12:50:57 +02:00
Grzegorz Sadowski
a90d41c9bf
Change application's version to v2.2.7-dev 2026-06-02 12:48:34 +02:00
Grzegorz Sadowski
a1a074a079
Generate changelog for v2.2.6 2026-06-02 12:48:14 +02:00
Grzegorz Sadowski
1da96abc9c
Change application's version to v2.2.6 2026-06-02 12:47:08 +02:00
Grzegorz Sadowski
45c6c33184
[UPMERGE] 2.1 -> 2.2 (#19042)
This PR has been generated automatically.
For more details see
[upmerge_pr.yaml](/Sylius/Sylius/blob/2.3/.github/workflows/upmerge_pr.yaml).

**Remember!** The upmerge should always be merged with using `Merge pull
request` button.

In case of conflicts, please resolve them manually with usign the
following commands:
```
git fetch upstream
gh pr checkout <this-pr-number>
git merge upstream/2.2 -m "Resolve conflicts between 2.1 and 2.2"
```

If you use other name for the upstream remote, please replace `upstream`
with the name of your remote pointing to the `Sylius/Sylius` repository.

Once the conflicts are resolved, please run `git merge --continue` and
push the changes to this PR.
2026-06-02 12:43:40 +02:00
TheMilek
197648f0ed
Resolve conflicts between 2.1 and 2.2 2026-06-02 12:43:00 +02:00
Grzegorz Sadowski
9315d9e1f4
[UPMERGE] 2.1 -> 2.2 (#19041)
This PR has been generated automatically.
For more details see
[upmerge_pr.yaml](/Sylius/Sylius/blob/2.3/.github/workflows/upmerge_pr.yaml).

**Remember!** The upmerge should always be merged with using `Merge pull
request` button.

In case of conflicts, please resolve them manually with usign the
following commands:
```
git fetch upstream
gh pr checkout <this-pr-number>
git merge upstream/2.2 -m "Resolve conflicts between 2.1 and 2.2"
```

If you use other name for the upstream remote, please replace `upstream`
with the name of your remote pointing to the `Sylius/Sylius` repository.

Once the conflicts are resolved, please run `git merge --continue` and
push the changes to this PR.
2026-06-02 12:37:42 +02:00
TheMilek
903f5f5d1e
Resolve conflicts between 2.1 and 2.2 2026-06-02 12:21:47 +02:00
Grzegorz Sadowski
f2914c3200
Change application's version to v2.1.16-dev
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
2026-06-02 12:19:24 +02:00
Grzegorz Sadowski
894f297317
Generate changelog for v2.1.15 2026-06-02 12:18:44 +02:00
Grzegorz Sadowski
673da7c3a7
Change application's version to v2.1.15 2026-06-02 12:17:23 +02:00
Grzegorz Sadowski
e837ef08a7
[2.1] Check payment request ownership (#19040)
| Q               | A
|-----------------|-----
| Branch?         | 2.1 <!-- see the comment below -->
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->
2026-06-02 12:07:05 +02:00
Grzegorz Sadowski
eed16c4c7c
[2.1][API] Enforce channel eligibility check when changing payment method via account endpoint (#19039)
| Q               | A
|-----------------|-----
| Branch?         | 2.1 <!-- see the comment below -->
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->
2026-06-02 12:06:22 +02:00
Grzegorz Sadowski
e8764931d7
[2.1] Prevent stale cart LiveComponents from mutating completed orders (#19038)
| Q               | A
|-----------------|-----
| Branch?         | 2.1 <!-- see the comment below -->
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->
2026-06-02 12:05:30 +02:00
TheMilek
0af90b6e96
Check payment request ownership on POST 2026-06-02 08:50:05 +02:00
Wojdylak
19dbca7440
Cover createdByGuest case in payment request ownership 2026-06-02 08:50:05 +02:00
TheMilek
77f3d23992
Check payment request ownership 2026-06-02 08:50:04 +02:00
TheMilek
ca0e3eff98 Fixes 2026-06-01 16:14:43 +02:00
TheMilek
88f2d401aa Add upgrade file 2026-06-01 16:14:32 +02:00
TheMilek
538c6b422e Filter out properly the disabled products from item get by code 2026-06-01 16:13:33 +02:00
Tomasz Kaliński
4c120f3f05 Prevent stale cart LiveComponents from mutating completed orders 2026-05-27 12:45:01 +02:00
Grzegorz Sadowski
177b60dbeb
[API] Make PaymentMethodChanger resolver argument nullable 2026-05-26 12:23:22 +02:00
Grzegorz Sadowski
1178ecb72b
[API] Enforce channel eligibility check when changing payment method via account endpoint 2026-05-26 12:23:15 +02:00
Grzegorz Sadowski
6f5464b6a9
[API] Add regression tests for payment method channel eligibility 2026-05-26 12:23:08 +02:00
Grzegorz Sadowski
5aa6e48fa3
[API] Slim down Swagger UI override and drop broken auto-auth JS (#19026)
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes?
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | 
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->
2026-05-25 11:27:45 +02:00
Grzegorz Sadowski
3f1297c409
[API] Slim down Swagger UI override and drop broken auto-auth JS 2026-05-25 10:44:45 +02:00
Michał Pysiak
805b660545
[API] Add regression tests for cross-customer cart item access (#19025)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | 
| License         | MIT

<!--
 - Bug fixes must be submitted against the 2.2 branch
 - Features and deprecations must be submitted against the 2.3 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->
2026-05-25 10:17:08 +02:00
Grzegorz Sadowski
048b69ad44
[API] Add regression tests for cross-customer cart item access 2026-05-25 09:36:39 +02:00
Grzegorz Sadowski
45e654e831
[2.2] [AttributeBundle] make Add and Delete button translatable in product attribute select type (#19024)
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | fixes #X
| License         | MIT

**Description**

So far it wasnt possible to translate the "Add" and "Delete" button when
creating Product Attributes with the "Select" type.

<img width="1289" height="884" alt="image"
src="https://github.com/user-attachments/assets/1e06ff47-4b88-4663-a7c1-61cca8c67464"
/>
2026-05-25 06:36:21 +02:00
Simon Krull
8346daac29 [2.2] [AttributeBundle] make add and delete button translatable in product attribute select 2026-05-24 11:33:54 +02:00
Karol Wojdyła
5bac4c62cb
[Admin] Support clickable navbar notifications with translation parameters (#19015)
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
| Q               | A
|-----------------|-----
| Branch?         | 2.3
| Bug fix?        | no
| New feature?    | yes
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | 
| License         | MIT

Extends the admin navbar notifications contract so plugins can surface
clickable, parameterized notifications without overriding the navbar
template.

Each notification returned by a `NotificationProviderInterface` may now
carry five optional keys honored by the default template:

  - `message_parameters` — passed to `|trans`
- `uri` (string, optional) — plain URI used as the notification link,
takes precedence over `route` when both are present
- `route` + `route_parameters` — when present, the item renders as `<a
href="{{ path(...) }}">`
  - `translation_domain` — passed to `|trans`
- `type` (`info` | `warning` | `danger`, default `danger`) — drives
status-dot color

The loop body in `notifications.html.twig` is now emitted through a twig
hook (`sylius_admin.common.component.navbar.items.notifications.item`,
default node), so plugins can also fully replace the item rendering by
registering their own node with higher priority.

Fully backward compatible: existing providers returning only `message`
render identically.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Navbar notifications are now rendered via pluggable items, supporting
clickable links (URI or route), translated messages with parameters, and
configurable status types (info, warning, danger; default danger).

* **Tests**
* Added tests to ensure notification payloads—including optional fields
and routing—are preserved end-to-end.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/Sylius/Sylius/pull/19015?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-21 15:00:30 +02:00
Karol Wojdyła
d57823973a
[ApiBundle] Fix 404 on GET /shop/products/{code} when all associated products are disabled (#19018)
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | https://github.com/Sylius/Sylius/issues/19013
| License         | MIT

  ### Summary

`GET /api/v2/shop/products/{code}` returned **404** for an `enabled`
product whenever
*all* of its associated products (across all its associations) were
disabled.

  Root cause: `EnabledWithinProductAssociationExtension` applied
`andWhere('product.associations IS EMPTY OR associatedProduct.id IS NOT
NULL')`
both in `applyToCollection` and `applyToItem`. For an item query, the OR
collapsed
to `false` whenever the product had associations but none of their
associated
  products were enabled — excluding the product itself from the result.

  ### Fix

Removed the `andWhere` from the extension. Eager-loading of enabled
associated
products (`LEFT JOIN ... WITH associatedProduct.enabled = true`) stays
in place
and mirrors the convention used by the neighbouring
`EnabledVariantsExtension`.
2026-05-21 14:14:32 +02:00
Grzegorz Sadowski
249fedec2b
Add appendError method to ResponseCheckerInterface (#19017)
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | 
| License         | MIT

A missing interface method signature `appendError` is missing in the
`ResponseCheckerInterface`, I don't know why PHPStan did not spot this
but this method is used here :
https://github.com/Sylius/Sylius/blob/2.2/src/Sylius/Behat/Client/ApiPlatformClient.php#L357
therefore the interface method must exists.
2026-05-21 13:40:11 +02:00
Michał Kaczmarek
cb751d0bb7 Fix 404 bug for endpoint api 2026-05-21 12:57:10 +02:00
Grzegorz Sadowski
d42ea9117e
[Admin] Support plain URIs in navbar notifications and refine item template 2026-05-21 12:50:16 +02:00
Francis Hilaire
b07a3db6d2
Add appendError method to ResponseCheckerInterface 2026-05-21 12:39:04 +02:00
Grzegorz Sadowski
405f0346b3
[Admin] Support clickable navbar notifications with translation parameters 2026-05-21 06:28:52 +02:00
Karol Wojdyła
fd2a52305c
Bugfix/csrf token (#19001)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | https://github.com/Sylius/Sylius/pull/18324
| License         | MIT

This PR removes hard-coded references to the **Symfony Form CSRF field**
(`_token`)
from form templates and replaces them with dynamic rendering in the form
theme,
based on block prefixes. This ensures compatibility with Symfony Forms'
configurable
  CSRF protection (`framework.form.csrf_protection.field_name`).

  **Out of scope** of this PR:
- Hardcoded Security firewall CSRF parameters
(`_csrf_admin_security_token`,
`_csrf_shop_security_token`) in login templates — separate issue, will
be
    addressed in a follow-up PR
  - Hardcoded `_csrf_token` field name used by manual CSRF protection in
delete/cancel/transition actions — Sylius convention, not configurable
in Symfony
2026-05-20 09:21:58 +02:00
Karol Wojdyła
652bdbdbe1
[ApiBundle] Fix "Undefined array key 0" in PathPrefixProvider when path equals API route (#19012)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions
| Q               | A
|-----------------|-----
| Branch?         | 2.2 
| Bug fix?        | yes
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | 
| License         | MIT

## Description:

When the request path equals the configured API route exactly (e.g.
/api/v2 — the Swagger UI docs URL), PathPrefixProvider::getPathPrefix()
produced an empty $pathElements array and
  triggered a PHP warning on $pathElements[0].

This surfaced after upgrading api-platform/symfony to 4.3.x, where
SwaggerUiProcessor normalizes the OpenAPI doc — which calls
IriConverter::getIriFromResource() with request_uri =
  /api/v2 and hits this code path.

Fix: return null early when no path segments remain after stripping the
API route prefix.

Tests: added two regression tests covering path == apiRoute and path ==
apiRoute . '/'.
2026-05-19 13:28:00 +02:00
Michał Kaczmarek
5e41cb5207 Fix bug 2026-05-19 12:48:52 +02:00
Grzegorz Sadowski
fbf3e994db
[ApiBundle][Tests] Add regression test for anonymous cart pickup wit… (#19009)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions
| Q               | A
|-----------------|-----
| Branch?         | 2.2
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| Deprecations?   | no
| Related tickets | n/a
| License         | MIT
2026-05-18 10:24:50 +02:00
Wojdylak
bdf55e7f43
[ApiBundle][Tests] Add regression test for anonymous cart pickup with registered email 2026-05-18 09:34:54 +02:00
Michał Kaczmarek
0b5709f4dc Merge branch '2.2' into bugfix/csrf-token 2026-05-15 10:45:33 +02:00
Michał Kaczmarek
f2dc071959 fix crashes on admin related with csrf token 2026-05-15 10:43:29 +02:00
Kamil Grygierzec
f4add488e4
Relax version constraint for sylius-labs/doctrine-migrations-extra-bundle (#19007)
Some checks failed
Continuous Integration (Minimal) / Static checks (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MariaDB) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Has been cancelled
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Has been cancelled
Continuous Integration (Minimal) / Frontend (push) Has been cancelled
Continuous Integration (Minimal) / Packages (push) Has been cancelled
| Q               | A
|-----------------|-----
| Branch?         | 2.3
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| License         | MIT

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Broadened dependency compatibility to support multiple versions of the
database migration bundle.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/Sylius/Sylius/pull/19007)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-14 08:29:08 +02:00
Tomasz Kaliński
1178a0adc1 Relax version constraint for sylius-labs/doctrine-migrations-extra-bundle in composer.json 2026-05-14 08:02:55 +02:00
Grzegorz Sadowski
34ec5039ed
Builds reorganisation (#19005)
Some checks are pending
Continuous Integration (Minimal) / Static checks (push) Waiting to run
Continuous Integration (Minimal) / Tests (MariaDB) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Javascript Tests (MySQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Tests (PostgreSQL) (push) Blocked by required conditions
Continuous Integration (Minimal) / Frontend (push) Blocked by required conditions
Continuous Integration (Minimal) / Packages (push) Blocked by required conditions
| Q               | A
|-----------------|-----
| Branch?         | 2.3 <!-- see the comment below -->
| Bug fix?        | no
| New feature?    | no
| BC breaks?      | no
| License         | MIT

<!--
 - Bug fixes must be submitted against the 1.14 or 2.1 branch
 - Features and deprecations must be submitted against the 2.2 branch
 - Make sure that the correct base branch is set

To be sure you are not breaking any Backward Compatibilities, check the
documentation:

https://docs.sylius.com/en/latest/book/organization/backward-compatibility-promise.html
-->


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

* **Chores**
  * Updated continuous integration to test against versions 2.2 and 2.3
  * Removed CI workflows for deprecated versions 1.14 and 2.1
  * Standardized Node.js version to 24.x across all CI jobs
* Updated pull request template branch guidance to target 2.2 and 2.3
branches

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-13 14:12:00 +02:00
TheMilek
81a0deef68
Update PR tempalte 2026-05-13 12:37:13 +02:00
TheMilek
9409284ad4
Reorganise build 2026-05-13 12:35:23 +02:00