Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
0eb516c
docs: map existing codebase
matthewnessworthy Mar 2, 2026
3c983c5
docs: initialize project
matthewnessworthy Mar 2, 2026
ce1279e
chore: add project config
matthewnessworthy Mar 2, 2026
bf211ef
docs: complete project research
matthewnessworthy Mar 2, 2026
754f3c0
docs: define v1 requirements
matthewnessworthy Mar 2, 2026
241ddaf
docs: create roadmap (4 phases)
matthewnessworthy Mar 2, 2026
13e0e8c
docs(phase-1): research dependency update phase
matthewnessworthy Mar 2, 2026
afc080c
docs(01-dependency-update): create phase plan
matthewnessworthy Mar 2, 2026
c996ab7
fix(01): revise plans based on checker feedback
matthewnessworthy Mar 2, 2026
24a1b87
feat(01-01): update dependency constraints and remove backward-compat…
matthewnessworthy Mar 2, 2026
20f72f6
docs(01-01): complete plan execution — summary, state, and roadmap up…
matthewnessworthy Mar 2, 2026
aeb778e
docs(phase-01): add verification report — all 8 requirements passed
matthewnessworthy Mar 2, 2026
d605e9f
docs(phase-01): complete phase execution — roadmap, state, requiremen…
matthewnessworthy Mar 2, 2026
b75780f
docs(02): capture phase context
matthewnessworthy Mar 2, 2026
b160188
docs(02): research phase domain
matthewnessworthy Mar 2, 2026
5f907a0
docs(02): create phase plans and update roadmap
matthewnessworthy Mar 2, 2026
50f0e59
docs(02): add plan verification report — all dimensions passed
matthewnessworthy Mar 2, 2026
10949e1
refactor: modernize src/ to PHP 8.3 idioms via Rector
matthewnessworthy Mar 2, 2026
d07d8fd
chore: add rector/rector and driftingly/rector-laravel for PHP 8.3 mo…
matthewnessworthy Mar 2, 2026
9fac78d
docs(02-01): complete plan execution — Rector modernization applied t…
matthewnessworthy Mar 2, 2026
0ea1980
chore: remove Rector and driftingly/rector-laravel from dev dependencies
matthewnessworthy Mar 2, 2026
fac8ad7
docs(02-02): complete plan execution — Rector dependencies removed, r…
matthewnessworthy Mar 2, 2026
b061f8f
docs(phase-02): complete phase execution — roadmap, state, requiremen…
matthewnessworthy Mar 2, 2026
e804825
docs(03): capture phase context
matthewnessworthy Mar 2, 2026
8848bc3
docs(03): complete phase research — Pest migration and test expansion
matthewnessworthy Mar 2, 2026
8229e70
docs(03): create phase plans — Pest infrastructure, test migration, n…
matthewnessworthy Mar 2, 2026
3db7727
docs(03): fix key_links inaccuracy in Plan 03 — EventOrderingTest use…
matthewnessworthy Mar 2, 2026
c7336c1
chore: add pestphp/pest and pestphp/pest-plugin-laravel for test migr…
matthewnessworthy Mar 2, 2026
aded5c5
chore: set up Pest infrastructure — remove Helpers.php, create Pest.p…
matthewnessworthy Mar 2, 2026
58480b7
docs(03-01): complete plan execution — Pest infrastructure setup
matthewnessworthy Mar 2, 2026
058d2ac
test: migrate UserUnitTest and WorkflowSubscriberTest to Pest syntax
matthewnessworthy Mar 2, 2026
c04f0e9
docs(03-02): complete plan execution — test migration to Pest syntax
matthewnessworthy Mar 2, 2026
bdf38d6
test: add new test coverage — multi-workflow, event ordering, error h…
matthewnessworthy Mar 2, 2026
4b35176
docs(03-03): complete plan execution — new test coverage added
matthewnessworthy Mar 2, 2026
f5a4928
docs(phase-03): complete phase execution — roadmap, state, requiremen…
matthewnessworthy Mar 2, 2026
6f84ed7
docs(04): capture phase context
matthewnessworthy Mar 2, 2026
66deea4
docs(04): research phase domain
matthewnessworthy Mar 2, 2026
3da81b8
docs(04): create phase plans — CI workflow and documentation
matthewnessworthy Mar 2, 2026
fadf1c9
ci: modernize GitHub Actions matrix for PHP 8.3+/Laravel 11+
matthewnessworthy Mar 2, 2026
19a9281
docs: update README with requirements section and compatibility matrix
matthewnessworthy Mar 2, 2026
7042e78
docs: create CHANGELOG.md for v5.0.0 modernization upgrade
matthewnessworthy Mar 2, 2026
d6d3ca8
docs(04): add plan execution summaries
matthewnessworthy Mar 2, 2026
551e1c3
docs(phase-04): complete phase execution — roadmap, state, requiremen…
matthewnessworthy Mar 2, 2026
186f5be
Remove .planning
matthewnessworthy Mar 2, 2026
a4045f3
Code style updates
matthewnessworthy Mar 2, 2026
7c496d7
Remove CHANGELOG.md, GitHub releases functions as the primary source …
matthewnessworthy Mar 2, 2026
f89d2ab
Revert GH test workflow name to maintain branch protection rules
matthewnessworthy Mar 2, 2026
3f5fca5
Pest 4
matthewnessworthy Mar 2, 2026
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
38 changes: 20 additions & 18 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Unit Test
name: Unit Tests

on:
pull_request:
Expand All @@ -17,40 +17,42 @@ jobs:
strategy:
fail-fast: false
matrix:
php: [8.1, 8.2, 8.3]
laravel: [10.*, 11.*, 12.*]
php: [8.3, 8.4]
laravel: ['11.*', '12.*']
dependency-version: [prefer-lowest, prefer-stable]
exclude:
- laravel: 11.*
php: 8.1
- laravel: 12.*
php: 8.1
include:
- laravel: '11.*'
testbench: '^9.0'
- laravel: '12.*'
testbench: '^10.0'

name: PHP${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }}
name: PHP ${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }}

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{matrix.php}}
php-version: ${{ matrix.php }}
coverage: none

- name: Get Composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache Composer dependencies
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ${{ steps.composer-cache.outputs.dir }}
# Use composer.json for key, if composer.lock is not committed.
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: Install Composer dependencies
run: |
composer require "laravel/framework:${{ matrix.laravel }}" --no-interaction --no-update
composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update
composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction

- name: Run PHPUnit tests
run: |
vendor/bin/phpunit
- name: Run tests
run: vendor/bin/pest
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
/*.cache
/vendor/
phpunit.xml.bak
.planning/
211 changes: 211 additions & 0 deletions .php-cs-fixer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
<?php

$config = [
'preset' => 'psr12',
'rules' => [
'@PHP83Migration' => true,
'@PSR12' => true,
'align_multiline_comment' => true,
'array_indentation' => true,
'array_push' => true,
'array_syntax' => true,
'backtick_to_shell_exec' => true,
'binary_operator_spaces' => true,
'blank_line_before_statement' => [
'statements' => [
'return',
'throw',
],
],
'cast_spaces' => true,
'class_attributes_separation' => [
'elements' => [
'const' => 'one',
'method' => 'one',
'property' => 'one',
],
],
'concat_space' => [
'spacing' => 'one',
],
'ereg_to_preg' => true,
'function_declaration' => true,
'function_typehint_space' => true,
'general_phpdoc_annotation_remove' => [
'annotations' => [
'author',
'package',
'subpackage',
],
],
'general_phpdoc_tag_rename' => true,
'include' => true,
'linebreak_after_opening_tag' => true,
'magic_constant_casing' => true,
'magic_method_casing' => true,
'method_argument_space' => [
'after_heredoc' => false,
],
'method_chaining_indentation' => true,
'modernize_strpos' => true,
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'multiline_whitespace_before_semicolons' => [
'strategy' => 'no_multi_line',
],
'native_function_casing' => true,
'new_with_parentheses' => true,
'no_alias_functions' => true,
'no_alias_language_construct_call' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_empty_statement' => true,
'no_extra_blank_lines' => true,
'no_mixed_echo_print' => [
'use' => 'echo',
],
'no_multiline_whitespace_around_double_arrow' => true,
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_superfluous_phpdoc_tags' => [
'allow_mixed' => false,
'allow_unused_params' => true,
'remove_inheritdoc' => true,
],
'no_trailing_comma_in_singleline_array' => true,
'no_unused_imports' => true,
'no_whitespace_before_comma_in_array' => true,
'normalize_index_brace' => true,
'nullable_type_declaration' => [
'syntax' => 'union',
],
'object_operator_without_whitespace' => true,
'operator_linebreak' => true,
'ordered_imports' => [
'imports_order' => [
'const',
'class',
'function',
],
'sort_algorithm' => 'alpha',
],
'ordered_types' => [
'null_adjustment' => 'always_last',
'sort_algorithm' => 'alpha',
],
'phpdoc_add_missing_param_annotation' => [
'only_untyped' => false,
],
'phpdoc_align' => [
'align' => 'left',
],
'phpdoc_indent' => true,
'phpdoc_no_alias_tag' => [
'replacements' => [
'link' => 'see',
'type' => 'var',
],
],
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => true,
'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_order' => true,
'phpdoc_scalar' => true,
'phpdoc_separation' => true,
'phpdoc_summary' => false,
'phpdoc_trim' => true,
'phpdoc_types' => true,
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
'psr_autoloading' => true,
'random_api_migration' => true,
'set_type_to_cast' => true,
'single_class_element_per_statement' => true,
'single_line_comment_style' => [
'comment_types' => [
'asterisk',
'hash',
],
],
'single_line_empty_body' => false,
'single_quote' => true,
'single_space_around_construct' => [
'constructs_followed_by_a_single_space' => [
'abstract',
'as',
'case',
'catch',
'class',
'const',
'const_import',
'do',
'else',
'elseif',
'enum',
'final',
'finally',
'for',
'foreach',
'function',
'function_import',
'if',
'insteadof',
'interface',
'match',
'named_argument',
'namespace',
'new',
'private',
'protected',
'public',
'readonly',
'static',
'switch',
'trait',
'try',
'type_colon',
'use',
'use_lambda',
'while',
],
'constructs_preceded_by_a_single_space' => [
'as',
'else',
'elseif',
'use_lambda',
],
],
'space_after_semicolon' => true,
'standardize_not_equals' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline' => [
'after_heredoc' => true,
'elements' => [
'arguments',
'array_destructuring',
'arrays',
'match',
'parameters',
],
],
'trim_array_spaces' => true,
'types_spaces' => true,
'unary_operator_spaces' => true,
'whitespace_after_comma_in_array' => [
'ensure_single_space' => true,
],
'yield_from_array_to_yields' => true,
'yoda_style' => false,
],
];

return (new PhpCsFixer\Config())
->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect())
->setRules($config['rules'])
->setFinder(
PhpCsFixer\Finder::create()
->exclude($config['exclude'] ?? [])
->notPath($config['notPath'] ?? [])
->in(__DIR__),
);
Loading