Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
e0d0cd5
feat: add migration logging required fields (#38)
larskemper Aug 18, 2025
d2468fd
refactor: add migration logging optional fields (#40)
larskemper Aug 21, 2025
638b84d
refactor!: migration connection usage (#43)
larskemper Aug 26, 2025
d077e38
fix: phpstan log array types (#47)
larskemper Aug 27, 2025
5d495b8
feat: fill logs with meaningful data src/Migration (#46)
jozsefdamokos Aug 27, 2025
4a5b659
feat: add iterative log building helper (#48)
larskemper Aug 28, 2025
b50abbf
feat: fill logs with meaningful data (#49)
larskemper Aug 29, 2025
cb0f6b1
docs: update changelog
larskemper Sep 1, 2025
8646a89
feat: refactor connection credentials page (#42)
jozsefdamokos Sep 2, 2025
62cb5dd
refactor!: convert to ts (#39)
larskemper Sep 2, 2025
54d4550
fix: phpstan for feature branch (#52)
larskemper Sep 5, 2025
8536708
feat: add migration fixes table (#56)
larskemper Sep 15, 2025
f69773c
feat: add migration validation of converted data (#51)
larskemper Sep 17, 2025
d5d1cdc
refactor: cleanup wording (#59)
larskemper Sep 22, 2025
19f4267
chore: drop migration cli commands (#60)
larskemper Sep 22, 2025
b93a071
fix: adjust profile icon paths (#61)
vintagesucks Sep 22, 2025
976d4b4
refactor: use meteor tokens (#58)
larskemper Sep 23, 2025
fc4372d
fix: adjust log file generation (#64)
larskemper Oct 2, 2025
4ed6c64
refactor: improve ui/ux (#68)
larskemper Oct 6, 2025
001ed93
12367/add entity classes (#76)
DennisGarding Oct 24, 2025
5be00ca
feat: checksum and reset via mq (#57)
larskemper Oct 29, 2025
6deb24e
Merge remote-tracking branch 'origin/trunk' into feature/migration-lo…
larskemper Oct 29, 2025
85bccaa
fix: phpstan
larskemper Oct 29, 2025
271b787
fix: phpunit
larskemper Oct 30, 2025
35709d7
feat: apply fixes prototype (#63)
DennisGarding Oct 31, 2025
63dbef2
feat: split message queue process (#74)
jozsefdamokos Oct 31, 2025
7ce1a74
feat: add acl constraints (#77)
larskemper Nov 3, 2025
d6af580
13248/change swag migration fix table (#81)
DennisGarding Nov 6, 2025
8a16844
Chore: 13247/change table swag migration logging (#80)
DennisGarding Nov 7, 2025
ac67406
refactor: change swag migration mapping (#82)
DennisGarding Nov 10, 2025
222c0bd
refactor: remove main mapping id from migration fix (#83)
larskemper Nov 10, 2025
3356c13
ci: add check for conventional commits (#84)
larskemper Nov 10, 2025
6c36b6d
refactor: re-group migrations (#86)
larskemper Nov 10, 2025
7f5da1d
refactor: load fixes (#88)
DennisGarding Nov 17, 2025
4409572
refactor: use xxh hash (#85)
larskemper Nov 18, 2025
a05f7e7
feat: add error resolution ui (#53)
larskemper Nov 28, 2025
8f780ff
chore: check naming consistency across error resolution (#94)
larskemper Nov 28, 2025
de33168
chore: fix package de sync (#95)
larskemper Dec 1, 2025
5d4ec50
refactor: remove validation from converter (#79)
DennisGarding Dec 2, 2025
134e9eb
test: error resolution ui (#90)
larskemper Dec 8, 2025
14f548b
fix: change connection modal (#98)
vintagesucks Dec 9, 2025
aba7961
fix: typos in error resolution "no option available" banner (#101)
vintagesucks Dec 9, 2025
0b0a124
refactor: unify public api (#100)
larskemper Dec 15, 2025
1cea903
refactor: use domain exception (#102)
larskemper Dec 17, 2025
a288248
feat: prevent multiple connections to the same system (#93)
larskemper Dec 17, 2025
590c900
feat: prepare ui for different resolving types (#108)
larskemper Dec 24, 2025
538ae17
fix: abort mq pickup (#106)
larskemper Dec 24, 2025
7da8e5c
docs: changelog and upgrade (#103)
larskemper Jan 6, 2026
88c2a58
feat: add reset of single fixes (#109)
larskemper Jan 6, 2026
3999eb6
fix: currency conversion (#111)
jozsefdamokos Jan 8, 2026
8cf9795
fix: use item-specific tax in order conversion (#114)
vintagesucks Jan 14, 2026
4fc04a4
Merge branch 'trunk' of github.com:shopware/SwagMigrationAssistant in…
MalteJanz Jan 22, 2026
856c558
fix: try to fix phpunit tests
MalteJanz Jan 22, 2026
abde712
prettier
vintagesucks Jan 22, 2026
c29b1e0
fix: DataProviderControllerTest
jozsefdamokos Jan 22, 2026
9e168a1
Merge branch 'trunk' into feature/migration-logging-refactor
vintagesucks Jan 22, 2026
2f9d9cf
refactor!: remove "Delete migration data" history action (#115)
vintagesucks Jan 27, 2026
adbd55e
test: add visual tests (#123)
larskemper Jan 30, 2026
b8f5f04
fix: missing migration state checks (#121)
larskemper Jan 30, 2026
144fa7d
refactor!: refactored log classes naming pattern (#124)
larskemper Jan 30, 2026
d6b9251
fix: phpstan (#129)
larskemper Feb 2, 2026
a8d139f
refactor: logging service (#120)
larskemper Feb 2, 2026
d1b70fd
fix: use stable ID for `main_category` mapping (#125)
vintagesucks Feb 2, 2026
c193560
fix: default category type (#127)
jozsefdamokos Feb 2, 2026
2a9950f
refactor: select all performance (#107)
ennasus4sun Feb 3, 2026
9cab510
fix: log naming pattern (#130)
larskemper Feb 3, 2026
aa9189f
refactor: migration validation (#117)
larskemper Feb 5, 2026
d7a2bcb
fix: selected counter in select all mode (#131)
vintagesucks Feb 10, 2026
404abac
test: migration ats (#126)
larskemper Feb 10, 2026
45d1f46
fix: revisit ui (#122)
larskemper Feb 10, 2026
9863dc1
fix: phpstan unserialize errors (#134)
MalteJanz Feb 16, 2026
103a6d1
chore: benchmark and performance improvements (#132)
MalteJanz Feb 16, 2026
e719441
chore: align cs fixer rules (#135)
larskemper Feb 17, 2026
156846b
fix: restore converter checks (#133)
larskemper Feb 17, 2026
cbdfa30
feat: enable required field validation for nested entities (#136)
larskemper Feb 18, 2026
d462ba5
fix: display nested resolution (#139)
larskemper Feb 19, 2026
2aba997
fix: select all item count (#138)
larskemper Feb 19, 2026
f3b76bb
fix: skip app-owned custom field sets (#141)
vintagesucks Feb 25, 2026
270e9b5
fix: validate new connection before storing (#137)
ennasus4sun Feb 25, 2026
bdff587
chore: prepare release 16.0.0 (#140)
larskemper Feb 25, 2026
77b5249
Merge branch 'trunk' into feature/migration-logging-refactor
MalteJanz Feb 26, 2026
d97a09f
fix: strip exception traces from snapshot test (#142)
vintagesucks Feb 27, 2026
c26f0ad
fix: acceptance test expected entity counts (#143)
MalteJanz Feb 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
99 changes: 99 additions & 0 deletions .github/workflows/acceptance.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Acceptance

on:
schedule:
- cron: '0 3 * * *' # nightly at 3 am utc
workflow_dispatch:
inputs:
update_snapshots:
description: 'Update snapshots'
required: false
type: boolean
default: false
push:
branches:
- trunk
pull_request:
paths:
- src/**
- tests/acceptance/**
- .github/workflows/acceptance.yaml

jobs:
playwright:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
PLATFORM_BRANCH: ["trunk"]
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: shopware
ports:
- 3306:3306
env:
DATABASE_URL: mysql://root:root@127.0.0.1:3306/shopware

steps:
- uses: shopware/github-actions/setup-extension@main
with:
extensionName: ${{ github.event.repository.name }}
shopwareVersion: ${{ matrix.PLATFORM_BRANCH }}
install: true
install-admin: true
install-storefront: false
mysqlVersion: skip
env: prod
extraRepositories: |
{
"${{ github.event.repository.name }}": {
"type": "path",
"url": "custom/plugins/${{ github.event.repository.name }}",
"symlink": true
}
}

- name: Setup Migration Assistant
run: |
composer run build:js:admin
cd custom/plugins/${{ github.event.repository.name }}/tests
mysql -uroot < _fixtures/database/shopware55corrupted.sql

- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ hashFiles('custom/plugins/**/tests/acceptance/package-lock.json') }}

- name: Install playwright
working-directory: custom/plugins/${{ github.event.repository.name }}/tests/acceptance
run: |
npm ci
npx playwright install --with-deps

- name: Run Playwright
working-directory: custom/plugins/${{ github.event.repository.name }}/tests/acceptance
env:
DATABASE_URL: mysql://root:root@127.0.0.1:3306/shopware55
UPDATE_SNAPSHOTS: ${{ github.event.inputs.update_snapshots }}
run: npm run test

- uses: actions/upload-artifact@v4
if: always()
with:
name: e2e-${{ github.event.repository.name }}-${{ github.sha }}-${{ matrix.PLATFORM_BRANCH }}
path: |
custom/plugins/${{ github.event.repository.name }}/tests/acceptance/test-results/
custom/plugins/${{ github.event.repository.name }}/tests/acceptance/playwright-report/
retention-days: 3

- name: Upload updated snapshots
if: github.event.inputs.update_snapshots == 'true'
uses: actions/upload-artifact@v4
with:
name: visual-snapshots-${{ matrix.PLATFORM_BRANCH }}
path: custom/plugins/${{ github.event.repository.name }}/tests/acceptance/snapshots/
retention-days: 3
10 changes: 6 additions & 4 deletions .github/workflows/admin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ on:
workflow_call:
Comment thread
MalteJanz marked this conversation as resolved.

jobs:
eslint:
name: ESLint
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: shopware/github-actions/setup-extension@main
Expand All @@ -33,7 +33,9 @@ jobs:
}
- run: |
composer -d custom/plugins/${{ github.event.repository.name }} run admin:install
composer -d custom/plugins/${{ github.event.repository.name }} run admin:lint
composer -d custom/plugins/${{ github.event.repository.name }} run lint:admin
composer -d custom/plugins/${{ github.event.repository.name }} run format:admin
composer -d custom/plugins/${{ github.event.repository.name }} run format:md

stylelint:
name: Stylelint
Expand All @@ -55,7 +57,7 @@ jobs:
}
- run: |
composer -d custom/plugins/${{ github.event.repository.name }} run admin:install
composer -d custom/plugins/${{ github.event.repository.name }} run admin:lint:scss
composer -d custom/plugins/${{ github.event.repository.name }} run lint:admin:scss

jest:
name: Jest
Expand Down
33 changes: 33 additions & 0 deletions .github/workflows/check-pr-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Check PR title

on:
pull_request:
types:
- opened
- reopened
- edited
- synchronize

permissions:
pull-requests: read

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # 6.1.1
with:
types: |
feat
fix
chore
docs
style
refactor
perf
test
build
ci
revert
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
62 changes: 1 addition & 61 deletions .github/workflows/integration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
}
- name: Import SW5 TestData DB
working-directory: custom/plugins/${{ github.event.repository.name }}/tests
run: mysql -uroot < testData/sw55.sql
run: mysql -uroot < _fixtures/database/shopware55.sql
- name: Run PHPUnit
working-directory: custom/plugins/${{ github.event.repository.name }}
run: php -d pcov.enabled=1 -d pcov.directory=${PWD} -d pcov.exclude='~(vendor|tests|node_modules)~' ${GITHUB_WORKSPACE}/vendor/bin/phpunit --configuration phpunit.xml.dist
Expand All @@ -79,63 +79,3 @@ jobs:
}
- name: Uninstall Plugin
run: php bin/console plugin:uninstall ${{ github.event.repository.name }}

acceptance:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
PLATFORM_BRANCH: ["trunk"] # TODO add min version 6.7.0 here when trunk becomes > 6.7.0
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: shopware
ports:
- 3306:3306
env:
DATABASE_URL: mysql://root:root@127.0.0.1:3306/shopware
steps:
- uses: shopware/github-actions/setup-extension@main
with:
extensionName: ${{ github.event.repository.name }}
shopwareVersion: ${{ matrix.PLATFORM_BRANCH }}
install: true
install-admin: true
install-storefront: true
mysqlVersion: skip
env: prod
extraRepositories: |
{
"${{ github.event.repository.name }}": {
"type": "path",
"url": "custom/plugins/${{ github.event.repository.name }}",
"symlink": true
}
}
- name: Setup Migration Assistant
run: |
composer run build:js:admin
cd custom/plugins/${{ github.event.repository.name }}/tests
mysql -uroot < testData/sw55.sql
- name: Install playwright
working-directory: custom/plugins/${{ github.event.repository.name }}/tests/acceptance
run: |
npm ci
npx playwright install --with-deps
# - name: Run Playwright with reporting
# working-directory: custom/plugins/${{ github.event.repository.name }}/tests/acceptance
# run: |
# npx pwc --project-id ${{ secrets.CURRENTS_PROJECT_ID }} --key ${{ secrets.CURRENTS_RECORD_KEY }} --ci-build-id ${{ github.repository }}-${{ github.run_id }}-${{ matrix.PLATFORM_BRANCH }}-${{ github.run_attempt }} -- --trace=on
- name: Run Playwright
working-directory: custom/plugins/${{ github.event.repository.name }}/tests/acceptance
run: npx playwright test --trace=on
- uses: actions/upload-artifact@v4
if: always()
with:
name: e2e-${{ github.event.repository.name }}-${{ github.sha }}-${{ matrix.PLATFORM_BRANCH }}
path: |
custom/plugins/${{ github.event.repository.name }}/tests/acceptance/test-results/
custom/plugins/${{ github.event.repository.name }}/tests/acceptance/playwright-report/
retention-days: 3
37 changes: 27 additions & 10 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,32 @@
.idea
.vscode
coverage/
.phpunit.cache
.phpunit.result.cache
vendor
node_modules
phpstan.neon
# ide
.idea/
.vscode/

# os
.DS_Store

# node
node_modules/
*.hot-update.js
/var/

# php
vendor/
phpstan.neon
composer.lock
src/Resources/public/administration/
.phpunit.cache
.phpunit.result.cache

# tests
coverage/

# build
src/Resources/public/static/
src/Resources/public/administration/
src/Resources/app/administration/.tmp

# runtime
/var/
.env

# plugin
/migration_assistant.cache
63 changes: 37 additions & 26 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,49 +13,60 @@
->setRules([
'@Symfony' => true,
'@Symfony:risky' => true,
'linebreak_after_opening_tag' => false,

'blank_line_after_opening_tag' => false,
'phpdoc_summary' => false,
'phpdoc_annotation_without_dot' => false,
'phpdoc_to_comment' => false,
'class_attributes_separation' => ['elements' => ['property' => 'one', 'method' => 'one']],
'concat_space' => ['spacing' => 'one'],
'declare_strict_types' => true,
'strict_comparison' => true,
'strict_param' => true,
'no_useless_else' => true,
'void_return' => true,
'phpdoc_line_span' => true,
'php_unit_dedicate_assert_internal_type' => true,
'php_unit_mock' => true,
'php_unit_test_case_static_method_calls' => ['call_type' => 'static'],
'no_useless_return' => true,
'yoda_style' => [
'equal' => false,
'identical' => false,
'less_and_greater' => false,
],
'single_line_throw' => false,
'fopen_flags' => false,
'self_accessor' => false,
'phpdoc_align' => ['align' => 'left'],
'phpdoc_order' => ['order' => ['param', 'throws', 'return']],
'class_attributes_separation' => ['elements' => ['property' => 'one', 'method' => 'one']],
'general_phpdoc_annotation_remove' => ['annotations' => ['copyright', 'category']],
'linebreak_after_opening_tag' => false,
'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'],
'concat_space' => ['spacing' => 'one'],
'native_function_invocation' => [
'scope' => 'namespaced',
'strict' => false,
'exclude' => ['ini_get'],
],
'general_phpdoc_annotation_remove' => ['annotations' => ['copyright', 'category']],
'no_superfluous_phpdoc_tags' => ['allow_unused_params' => true, 'allow_mixed' => true],
'no_useless_else' => true,
'no_useless_return' => true,
'ordered_class_elements' => true,
'phpdoc_align' => ['align' => 'left'],
'phpdoc_annotation_without_dot' => false,
'phpdoc_line_span' => true,
'phpdoc_order' => ['order' => ['param', 'throws', 'return']],
'phpdoc_summary' => false,
'phpdoc_to_comment' => false,
'php_unit_dedicate_assert' => ['target' => 'newest'],
'php_unit_dedicate_assert_internal_type' => true,
'php_unit_mock' => true,
'php_unit_test_case_static_method_calls' => ['methods' => [
'any' => 'this',
'never' => 'this',
'atLeast' => 'this',
'atLeastOnce' => 'this',
'once' => 'this',
'exactly' => 'this',
'atMost' => 'this',
]],
'self_accessor' => false,
'single_line_throw' => false,
'single_quote' => ['strings_containing_single_quote_chars' => true],
'strict_comparison' => true,
'strict_param' => true,
'trailing_comma_in_multiline' => ['after_heredoc' => true, 'elements' => ['array_destructuring', 'arrays', 'match']],
'void_return' => true,
'yoda_style' => [
'equal' => false,
'identical' => false,
'less_and_greater' => false,
],
'header_comment' => ['header' => '(c) shopware AG <info@shopware.com>
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.', 'separate' => 'bottom', 'location' => 'after_declare_strict', 'comment_type' => 'comment'],
])
->setUsingCache(true)
->setCacheFile(Path::join($_SERVER['SHOPWARE_TOOL_CACHE_ECS'] ?? __DIR__, '/var/cache/php-cs-fixer.cache'))
->setCacheFile(Path::join($_SERVER['SHOPWARE_TOOL_CACHE_ECS'] ?? 'var/cache/cs_fixer', 'cs_fixer.cache'))
->setFinder(
(new Finder())
->in([__DIR__ . '/src', __DIR__ . '/tests'])
Expand Down
5 changes: 5 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**/node_modules
**/static
**/.tmp
**/public/
**/coverage/
10 changes: 10 additions & 0 deletions .prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"singleQuote": true,
"tabWidth": 4,
"printWidth": 125,
"trailingComma": "all",
"multilineArraysWrapThreshold": 1,
"plugins": [
"prettier-plugin-multiline-arrays"
]
}
Loading