Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
264 commits
Select commit Hold shift + click to select a range
78bad25
fix: phpstan error
Aug 27, 2026
fb11c18
Error Page Redesign for 4.x
Aug 27, 2026
b734481
Error Page Redesign for 4.x
Aug 27, 2026
ec55987
Error Page Redesign for 4.x
Aug 27, 2026
c92e608
Rename ServiceProvider to ServiceLauncher (#292)
rrr63 Aug 28, 2026
977f038
Redesign Error Page for 4.x Version (#293)
techmahedy Aug 28, 2026
139f180
Remove CastToDate for 4.x
Aug 28, 2026
ed81bd6
Remove CastToDate for 4.x (#294)
techmahedy Aug 28, 2026
8b853e3
Relocate Framework Attributes for 4.x
Aug 28, 2026
f02e4da
fix: phpstan error
Aug 28, 2026
fe4e4f5
Relocate Framework Attributes for 4.x (#295)
rrr63 Aug 28, 2026
3aab899
Prompt for launcher selection in vendor:publish
Aug 28, 2026
9531a74
Prompt for launcher selection in vendor:publish (#297)
techmahedy Aug 28, 2026
e90f550
Migrate Mailer from PHPMailer to Symfony Mailer (Doppar 4.x)
Aug 29, 2026
78899aa
fix: phpstan error
Aug 29, 2026
663391a
Migrate Mailer from PHPMailer to Symfony Mailer (Doppar 4.x) (#298)
rrr63 Aug 29, 2026
cc1abf3
session regenerate after successfull login:
Sep 8, 2026
1fcdce7
session regenerate after successfull login: (#299)
techmahedy Sep 8, 2026
2ad67e7
fix: mass-assignment on update:
Sep 8, 2026
e39b309
fix: phpstan error:
Sep 8, 2026
cf612de
fix: mass-assignment on update: (#300)
techmahedy Sep 8, 2026
147a1c0
use odo compiler in response()->view()
rrr63 Sep 8, 2026
e483a4e
fix: SQL identifier injection
Sep 8, 2026
b0ba939
fix: SQL identifier injection (#302)
techmahedy Sep 8, 2026
131f9d2
fix: Route response()->view() through the Odo rendering engine (#301)
techmahedy Sep 8, 2026
d1d1689
fix : Fixed cross-platform absolute path handling in base_path()
rrr63 Sep 8, 2026
9186df2
fix : cross-platform absolute path handling in base_path() (#303)
techmahedy Sep 9, 2026
dca0f0e
feat: attribute validation
rrr63 Sep 9, 2026
4eb9652
ci
rrr63 Sep 9, 2026
519e97e
PHPDoc
rrr63 Sep 9, 2026
f418c39
feat: add attribute-based DTO validation (#304)
techmahedy Sep 9, 2026
87559d6
fix: base_path() ambiguity crashes Router::getControllerClasses() on …
Sep 9, 2026
ec3730f
Merge branch '4.x' of https://github.com/techmahedy/framework into te…
Sep 9, 2026
298f949
fix: base_path() ambiguity crashes Router::getControllerClasses() on …
techmahedy Sep 9, 2026
ee56e3b
Fix #4 done: path traversal in Storage
Sep 9, 2026
3fd320c
Fix #5 done: encryption — APP_KEY decode bug + move to AEAD
Sep 9, 2026
b37c939
Fix #4 done: path traversal in Storage (#306)
techmahedy Sep 9, 2026
b072c6f
Fix #5 encryption — APP_KEY decode bug + move to AEAD (#307)
techmahedy Sep 9, 2026
1c66a28
Fix #9 after_created hook ordering
Sep 9, 2026
ee34715
Fix #9 after_created hook ordering (#308)
techmahedy Sep 9, 2026
79132ba
Fix Model::__get() swallowing \Throwable
Sep 9, 2026
726cb69
Fix Model::__get() swallowing \Throwable (#309)
techmahedy Sep 10, 2026
63da2b7
resolve terminating callback dependencies via container
Sep 10, 2026
63797a0
resolve terminating callback dependencies via container (#310)
techmahedy Sep 10, 2026
566399f
fix postgre enum type validation:
Sep 10, 2026
2e3e9ff
fix: enforce enum column values on Postgres and SQLite (#311)
techmahedy Sep 10, 2026
46f1c0c
fix: Schema::table() generated CREATE TABLE instead of ALTER TABLE on…
Sep 10, 2026
49dc664
fix: Schema::table() generated CREATE TABLE instead of ALTER TABLE on…
techmahedy Sep 10, 2026
e657ed0
Fix: DI resolution-order bug
Sep 10, 2026
a33d153
Fix: DI resolution-order bug (#313)
techmahedy Sep 10, 2026
f93559f
refactor: Router depends on GatewayInterface instead of extending App…
Sep 10, 2026
542918a
base path is now injected via the constructor, no global BASE_PATH co…
Sep 10, 2026
1f5364c
base path is now injected via the constructor, no global BASE_PATH co…
techmahedy Sep 11, 2026
78e2e81
Environment configuration switches from .env to env.toml
Sep 11, 2026
4405886
Environment configuration switches from .env to env.toml (#316)
techmahedy Sep 11, 2026
68a6ea7
Fix 2FA QR code generation for chillerlan/php-qrcode v6
Sep 12, 2026
7b389f3
Fix 2FA QR code generation for chillerlan/php-qrcode v6 (#317)
techmahedy Sep 12, 2026
fb6bdd2
welcome page updated for 4.x as per selected frontend framework
Sep 12, 2026
8eb6066
Redesign the 4.x welcome page across all frontend install stubs (#318)
techmahedy Sep 12, 2026
2ec2b46
welcome page related change unit test issue fix:
Sep 12, 2026
d234a74
welcome page related change unit test issue fix: (#319)
techmahedy Sep 12, 2026
e6ff5f6
finalize the doppar 4.x version welcome page
Sep 12, 2026
dc36046
finalize the doppar 4.x version welcome page (#320)
techmahedy Sep 12, 2026
7a1450f
readme.md updated for 4.x version:
Sep 16, 2026
88b4c68
readme.md updated for 4.x version: (#321)
techmahedy Sep 16, 2026
4f182ef
Separate Request::capture() from superglobal reads
Sep 18, 2026
04d62ac
fix: phpstan error and request data merge issue:
Sep 18, 2026
29b5861
Separate Request::capture() from superglobal reads (#322)
techmahedy Sep 18, 2026
ca5a0d4
fix: Harden Support\File against path traversal and spoofed MIME types
Sep 18, 2026
b0500b6
fix: Harden Support\File against path traversal and spoofed MIME type…
techmahedy Sep 18, 2026
eaaa1dc
Detect real file content for the mimes validation rule
Sep 18, 2026
2a18d17
Bump dev master 3.x to 4.x
Sep 18, 2026
85eb4ef
Detect real file content for the mimes validation rule (#324)
techmahedy Sep 18, 2026
b61ead7
Bump dev master 3.x to 4.x (#325)
techmahedy Sep 18, 2026
a892ce8
readme.md updated
Sep 18, 2026
be60cb2
readme.md updated (#326)
techmahedy Sep 18, 2026
e4ae4f2
README.md updated
Sep 19, 2026
25059b0
README.md updated (#328)
techmahedy Sep 19, 2026
7de8574
Update version to v4.0.0
techmahedy Sep 19, 2026
0a1b3ab
Update CHANGELOG
techmahedy Sep 19, 2026
ef18770
Fix error page paths on Windows.
rrr63 Sep 20, 2026
a217420
fix: error page paths on Windows (#329)
techmahedy Sep 20, 2026
47ca0eb
Update version to v4.0.1
techmahedy Sep 20, 2026
cc740af
Update CHANGELOG
techmahedy Sep 20, 2026
5451ced
container bindings static to this scope
Sep 22, 2026
c59be7d
container bindings static to this scope
Sep 22, 2026
acfc0a2
createFromGlobals only call once not duplicate
Sep 22, 2026
78a9aaa
(fix) request state Isolation in Persistent Workers (#330)
techmahedy Sep 23, 2026
b017b60
fix: correct facade @method docblocks
Sep 24, 2026
a2b57aa
Merge branch '4.x' of https://github.com/techmahedy/framework into te…
Sep 24, 2026
6a00a56
remove dead code as per php8.5
Sep 24, 2026
c550247
fix: correct facade @method docblocks so PHPStan passes (#334)
techmahedy Sep 24, 2026
aa88e40
Implement Authenticatable contract for flexible authentication models
sanzgrapher Sep 24, 2026
7138d64
fix(auth): satisfy phpstan for Authenticatable
sanzgrapher Sep 24, 2026
74244ca
refactor(auth): rename Authenticatable to Authable
sanzgrapher Sep 24, 2026
282eac2
refactor(auth): make Authable a Model base class
sanzgrapher Sep 24, 2026
f483b0f
Extract auth into Authable base class (#333)
techmahedy Sep 24, 2026
128d21f
Update version to v4.1.0
techmahedy Sep 25, 2026
fd645bf
Update CHANGELOG
techmahedy Sep 25, 2026
233cd65
fix: bump framework version from github action file:
Sep 25, 2026
478c09b
pull request template update:
Sep 25, 2026
09aaa37
pull request template update:
Sep 25, 2026
934f47b
Pull request template file change and use latest version in action fi…
techmahedy Sep 25, 2026
767ed7d
Add Router::pushGlobalMiddleware() so launchers can register global m…
Sep 25, 2026
da187cb
Add Router::pushGlobalMiddleware() so launchers can register global m…
techmahedy Sep 25, 2026
9444419
remove ErrorHistoryRecorder class from skeleton by adding it in frame…
Sep 25, 2026
20a06dc
remove ErrorHistoryRecorder class from skeleton by adding it in frame…
techmahedy Sep 25, 2026
487f981
Fix Paginator prev/next links leaking merged request input into URLs
Sep 25, 2026
5419273
Fix Paginator prev/next links leaking merged request input into URLs…
techmahedy Sep 25, 2026
ba14b8d
Fix cron:run and the scheduler: non-blocking background tasks
Sep 26, 2026
ec20cd8
fix: unit test lock issues:
Sep 26, 2026
2f947d0
fix: unit test implicit passing null issue
Sep 26, 2026
424a53d
Fix cron:run and the scheduler: non-blocking background tasks (#340)
techmahedy Sep 26, 2026
cabf2c7
Update version to v4.1.1
techmahedy Sep 26, 2026
971ad6c
Update CHANGELOG
techmahedy Sep 26, 2026
d06b4b4
fix: Router class variable order:
Sep 26, 2026
7bee8d4
reduce per request cost to cache attribute and reflection calling:
Sep 26, 2026
f0d0301
fix: windows unit test issue
Sep 26, 2026
c86f31b
fix: make PresenterBundle directly returnable as a JSON API resource …
techmahedy Sep 28, 2026
d65b7e1
(feat) Router: compile controller actions into cached "action plans" …
techmahedy Sep 28, 2026
ff7cbe7
Update version to v4.2.0
techmahedy Sep 28, 2026
340afcf
Update CHANGELOG
techmahedy Sep 28, 2026
7e139a3
Refactor big-data processing trait, add chunkById(), remove Fiber var…
Oct 1, 2026
9c97c7b
Refactor big-data processing trait, add chunkById(), remove Fiber var…
techmahedy Oct 1, 2026
3314652
Add blank, filled, with, rescue, retry and benchmark helpers
Oct 1, 2026
e2d698d
(feat) Add blank, filled, with, rescue, retry and benchmark helpers (…
techmahedy Oct 2, 2026
7233f9f
Migration builder: table-level indexes, column modifiers, drop/rename…
Oct 2, 2026
02281a1
Migration builder: table-level indexes, column modifiers, drop/rename…
techmahedy Oct 2, 2026
12d8a6d
Update version to v4.3.0
techmahedy Oct 2, 2026
a855531
Update CHANGELOG
techmahedy Oct 2, 2026
1292b67
server:start: Doppar banner and per-request log with execution time
Oct 2, 2026
d75f802
Migrations: rollback, reset, refresh, status, db:wipe, pretend, locki…
Oct 2, 2026
2cadf6a
Container: using() for temporary, self-restoring overrides
Oct 2, 2026
ecee1c4
Routing: route parameter constraints
Oct 2, 2026
1510645
Merge branch '4.x' of https://github.com/techmahedy/framework into ro…
Oct 2, 2026
1103a97
Pool console: full signature syntax, original exceptions, and resilie…
Oct 2, 2026
6338a87
Cache: rate limiting fixes, Redis/prefix safety, Cache::store(), Cach…
Oct 3, 2026
2cac0fd
Collection: bug fixes, dot notation, multi-key sorting, 21 new method…
Oct 3, 2026
24ace0d
added some function to streamcollection after update collection class
Oct 3, 2026
ce8cd0e
server:start: Doppar banner and per-request log with execution time (…
techmahedy Oct 3, 2026
4d5eaab
(feat) Container: using() for temporary, self-restoring overrides (#348)
techmahedy Oct 3, 2026
dd91ae3
Migrations: rollback, reset, refresh, status, db:wipe, pretend, locki…
techmahedy Oct 3, 2026
ec8ebf4
Collection: bug fixes, dot notation, multi-key sorting, 21 new method…
techmahedy Oct 3, 2026
7035047
Cache: rate limiting fixes, Redis/prefix safety, Cache::store(), Cach…
techmahedy Oct 3, 2026
e60576b
Pool console: full signature syntax, original exceptions, and resilie…
techmahedy Oct 3, 2026
9bafce0
(feat) Routing: route parameter constraints (#349)
techmahedy Oct 3, 2026
4e554f9
Update version to v4.4.0
techmahedy Oct 3, 2026
9b204d6
Update CHANGELOG
techmahedy Oct 3, 2026
c4132e2
Fix: query builder treats column names like date/time as callbacks
abdulmajidcse Oct 6, 2026
8cc3da2
Fix: query builder treats column names like date/time as callbacks (#…
techmahedy Oct 7, 2026
f37849d
(feat) ORM: soft deletes via #[SoftDeletes]
abdulmajidcse Oct 8, 2026
eefe929
(feat) ORM: soft deletes via #[SoftDeletes] (#354)
techmahedy Oct 9, 2026
12d16ce
Fix callback conditions in present() ifExists() being dropped or rewr…
Oct 9, 2026
e864a9c
Fix callback conditions in present() ifExists() being dropped or rewr…
techmahedy Oct 9, 2026
f26f476
Update version to v4.5.0
techmahedy Oct 9, 2026
dd3c930
Update CHANGELOG
techmahedy Oct 9, 2026
0075e72
Drop pre-8.5 PDO MySQL constant fallbacks and tidy migrate:temporal o…
Oct 11, 2026
3fe44d3
Drop pre-8.5 PDO MySQL constant fallbacks and tidy migrate:temporal o…
techmahedy Oct 11, 2026
801de70
Update version to v4.5.1
techmahedy Oct 11, 2026
85bcb48
Update CHANGELOG
techmahedy Oct 11, 2026
1c93d29
Fix: Encryption ignores APP_KEY from env.toml and silently uses a pub…
abdulmajidcse Oct 11, 2026
12bab08
Fix: legacy CBC decrypt can return garbage when the wrong key passes …
abdulmajidcse Oct 11, 2026
c32abb0
Fix: Encryption ignores APP_KEY from env.toml and silently uses a pub…
techmahedy Oct 12, 2026
7b9853b
Update version to v4.5.2
techmahedy Oct 12, 2026
c800ccf
Update CHANGELOG
techmahedy Oct 12, 2026
62deecb
(feat) Application: Go-style defer() for guaranteed cleanup
Oct 13, 2026
35e99da
Fixed. When a terminating() callback throws, deferred-callback failures
Oct 13, 2026
5038117
defer fallback to error_log if log not bound in container
Oct 14, 2026
8164b15
(feat) deliver domain notifications only after a transaction commits
Oct 14, 2026
d24bafe
(feat) Application: Go-style defer() for guaranteed cleanup (#365)
techmahedy Oct 14, 2026
9fe7685
fix: signal command path issue:
Oct 15, 2026
99b7b06
(feat) deliver domain notifications only after a transaction commits …
techmahedy Oct 15, 2026
8897cde
(feat) Branchable temporal records with explainable history
abdulmajidcse Oct 15, 2026
32aac1a
Merge branch '4.x' of https://github.com/techmahedy/framework into te…
Oct 16, 2026
726a051
Request-scoped lifecycle and context propagation
Oct 16, 2026
431b52c
Address review: branch writes, restore guards, cross-driver tests
abdulmajidcse Oct 16, 2026
aeaaa0a
Merge branch '4.x' into techmahedy-4.x
techmahedy Oct 16, 2026
e7563d6
(feat) Request-scoped lifecycle and context propagation (#368)
techmahedy Oct 16, 2026
f3f7e3c
Update version to v4.6.0
techmahedy Oct 16, 2026
433a8b6
Update CHANGELOG
techmahedy Oct 16, 2026
baa764c
Merge branch 'feature/temporal-branches' of https://github.com/abdulm…
Oct 16, 2026
1d96736
Fix withoutHook() and add withHooks() for bulk queries
Oct 17, 2026
94d8ddb
Fix withoutHook() and add withHooks() for bulk queries (#369)
techmahedy Oct 17, 2026
eadca09
Freeze #[Immutable] services registered with a closure or instance()
Oct 17, 2026
c397980
Clearer errors for frozen services
Oct 17, 2026
e56a8e7
Freeze #[Immutable] services registered with a closure or instance() …
techmahedy Oct 17, 2026
a0a2165
fix: Restore MockHook's own hooks after temporary test hooks
Oct 17, 2026
a370047
Clearer errors for frozen services (#371)
techmahedy Oct 17, 2026
d6b5bb3
Update version to v4.7.0
techmahedy Oct 17, 2026
5dcb242
Update CHANGELOG
techmahedy Oct 17, 2026
b3fa670
Fix temporal lookups that bring back deleted records
Oct 17, 2026
312a43b
Fix temporal lookups that bring back deleted records (#372)
techmahedy Oct 17, 2026
4c96e04
Fix: Temporal diff() incorrectly compares cast values as strings
Oct 17, 2026
afadecc
Fix: Temporal diff() incorrectly compares cast values as strings (#373)
techmahedy Oct 17, 2026
9a96ea0
Fix: Temporal orWhere() filtering accepts every model
Oct 17, 2026
b080f00
Fix: Temporal orWhere() filtering accepts every model (#374)
techmahedy Oct 17, 2026
6b59d12
Fix: Suspended child contexts survive after their parent ends
Oct 17, 2026
4e2cbc6
Fix: Suspended child contexts survive after their parent ends (#375)
techmahedy Oct 17, 2026
87f14ee
Fix: Context-ending listener failures can mask the original applicati…
Oct 17, 2026
847eebe
Fix: Context-ending listener failures can mask the original applicati…
techmahedy Oct 17, 2026
d30e7c4
Address review round 2: safe main writes, diff types, branch API polish
abdulmajidcse Oct 17, 2026
ffd7271
Merge upstream 4.x into feature/temporal-branches
abdulmajidcse Oct 17, 2026
8a0c5f4
Follow the PHPDoc convention for temporal branch functions
abdulmajidcse Oct 17, 2026
1f31727
(feat) Branchable temporal records with explainable history (#367)
techmahedy Oct 17, 2026
4029e97
Update version to v4.7.1
techmahedy Oct 17, 2026
c1839d5
Update CHANGELOG
techmahedy Oct 17, 2026
3574d00
Merge branch '4.x' of https://github.com/techmahedy/framework into te…
Oct 17, 2026
e0a54d8
Optional relationship keys and typed relation classes
Oct 17, 2026
0eb1122
PHPDoc convetion missing for snake_case function
Oct 17, 2026
3d59f24
Optional relationship keys and typed relation classes (#377)
techmahedy Oct 17, 2026
09bd8d6
(feat) Create and save records through relationships
Oct 17, 2026
0e1a2c1
fix: Keep relationship queries inside their parent
Oct 17, 2026
e6d6837
fix: associate() didn't check the parent's class — confirmed and fixed
Oct 18, 2026
f14fb6b
fix: Add create and store through many-to-many relationships with the…
Oct 18, 2026
9ad682d
(feat) Create and save records through relationships (#378)
techmahedy Oct 18, 2026
555a91b
Update version to v4.8.0
techmahedy Oct 18, 2026
3577cef
Update CHANGELOG
techmahedy Oct 18, 2026
9adfd1d
Fix SQL injection via unvalidated table, view and column identifiers
Oct 19, 2026
295d96e
Fix PostgreSQL temporal lookups reading times in the session timezone
Oct 19, 2026
e0a45ec
Escape table name as a string literal in the PostgreSQL column lookup
Oct 19, 2026
fbd3577
Fix SQL injection via unvalidated table, view and column identifiers …
techmahedy Oct 19, 2026
e381a4a
Update version to v4.8.1
techmahedy Oct 19, 2026
690c63e
Update CHANGELOG
techmahedy Oct 19, 2026
65d23dc
Honor overridden query() on instance calls to the model
Oct 19, 2026
34552e4
test: cover instance-call query() override and bind methods on models
Oct 19, 2026
8e6a28b
Honor overridden query() on instance calls to the model (#380)
techmahedy Oct 19, 2026
2359dd8
Update version to v4.8.2
techmahedy Oct 26, 2026
163b817
Update CHANGELOG
techmahedy Oct 26, 2026
59b80db
Session Interface Contract instead of concrete Session class (#381)
techmahedy Oct 28, 2026
e1c3955
Add a Contract for Password Hashing Services (#382)
techmahedy Oct 28, 2026
3e95288
Add a Contract for Encryption Services (#383)
techmahedy Oct 29, 2026
53b30d3
Add a Contract for Request Abortion Services (#384)
techmahedy Oct 29, 2026
6c4c8a2
Add a Contract for Mail Services (#385)
techmahedy Oct 29, 2026
8b6985a
Add a Contract for Storage Services (#386)
techmahedy Oct 30, 2026
f842fdc
Add a Contract for URL Generation Services (#387)
techmahedy Oct 30, 2026
d690e8c
Address review: accept mixed in isValid, resolve url() via contract, …
techmahedy Oct 30, 2026
7d08fb9
Introduce a string service contract (#389)
techmahedy Oct 30, 2026
b63d118
Introduce a signal bus contract (#390)
techmahedy Oct 30, 2026
bb15c48
Fix save() leaving the model dirty after a quiet save (#391)
techmahedy Oct 30, 2026
b8dc97f
Fix save() leaving the model dirty after an insert (#392)
techmahedy Oct 30, 2026
0947f3b
Fix StringService edge cases: mask, isPalindrome, random, truncate an…
techmahedy Oct 30, 2026
1b2ee85
Fix validator regex alternation, array input 500s and duplicated erro…
techmahedy Oct 30, 2026
b21a2a3
Fix whereIn/orWhereIn with empty lists, qualify OR columns, add where…
techmahedy Oct 30, 2026
c9f36f5
Fix whereIn/orWhereIn with empty lists, qualify OR columns, add where…
techmahedy Oct 30, 2026
c949936
Update version to v4.8.3
techmahedy Oct 31, 2026
25ec6ae
Update CHANGELOG
techmahedy Oct 31, 2026
ae42fab
Fix vendor:publish dumping all assets for unknown tags (#396)
xentixar Oct 31, 2026
d668810
Update version to v4.8.4
techmahedy Oct 31, 2026
721f5fc
Update CHANGELOG
techmahedy Oct 31, 2026
54ad29f
Add fiber-native task groups
abdulmajidcse Nov 1, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Code of Conduct

The Doppar Code of Conduct can be found in the [Doppar documentation](https://doppar.com/versions/3.x/contributions.html#code-of-conduct).
The Doppar Code of Conduct can be found in the [Doppar documentation](https://doppar.com/versions/4.x/contributions#code-of-conduct).
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Doppar Contribution Guide

The Doppar contributing guide can be found in the [Doppar documentation](https://doppar.com/versions/3.x/contributions.html#contribution-guide).
The Doppar contributing guide can be found in the [Doppar documentation](https://doppar.com/versions/4.x/contributions#contribution-guide).
26 changes: 22 additions & 4 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
<!--
If you are unsure which branch your pull request should be sent to, please read: https://doppar.com/versions/3.x/contributions.html#which-branch
## Pull Request Checklist

| Q | A |
| ------------- | --- |
| Branch? | 4.x |
| Bug fix? | yes |
| New feature? | no |
| Deprecations? | no |
| Issues | - |
| License | MIT |

## Description

<!--
Explain what this pull request changes.
If you are unsure which branch your pull request should be sent to, please read: https://doppar.com/versions/4.x/contributions#which-branch
Pull requests without a descriptive title, thorough description, or tests will be closed.
-->

## Checklist

In addition, please describe the benefit to end users; the reasons it does not break any existing features; how it makes building web applications easier, etc.
-->
- [ ] Tests have been added or updated
- [ ] Documentation has been updated if necessary
- [ ] Code follows the project coding standards
- [ ] All tests pass locally
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## Reporting a Vulnerability

If you discover a security vulnerability within Doppar, please send an email to Mahedi Hasan at mahedi@doppar.com. All security vulnerabilities will be promptly addressed. Please see [Reporting a Vulnerability](https://doppar.com/versions/3.x/contributions.html#security-vulnerabilities)
If you discover a security vulnerability within Doppar, please send an email to Mahedi Hasan at mahedi@doppar.com. All security vulnerabilities will be promptly addressed. Please see [Reporting a Vulnerability](https://doppar.com/versions/4.x/contributions#security-vulnerabilities)

### Public PGP Key

Expand Down
2 changes: 1 addition & 1 deletion .github/SUPPORT.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Support Questions

The Doppar support guide can be found in the [Doppar documentation](https://doppar.com/versions/3.x/contributions.html).
The Doppar support guide can be found in the [Doppar documentation](https://doppar.com/versions/4.x/contributions).
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2

updates:
- package-ecosystem: composer
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 10

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
71 changes: 71 additions & 0 deletions .github/workflows/security-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: security analysis

on:
push:
branches:
- master
- '*.x'
pull_request:
schedule:
- cron: '0 3 * * *'

permissions:
contents: read

jobs:
composer-audit:
runs-on: ubuntu-24.04

name: Composer audit

permissions:
contents: read

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

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.5
tools: composer:v2
coverage: none

- name: Set Framework version
run: composer config version "2.x-dev"

- name: Install dependencies
uses: nick-fields/retry@v3
with:
timeout_minutes: 5
max_attempts: 5
command: composer update --prefer-stable --prefer-dist --no-interaction --no-progress

- name: Audit dependencies for known vulnerabilities
run: composer audit --no-dev --format=table --locked

semgrep:
runs-on: ubuntu-24.04

name: Semgrep

permissions:
contents: read
security-events: write

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

- name: Run Semgrep
uses: semgrep/semgrep-action@v1
with:
config: p/security-audit p/php
generateSarif: '1'

- name: Upload SARIF results
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: semgrep.sarif
9 changes: 6 additions & 3 deletions .github/workflows/static-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
matrix:
directory: [src]

name: ${{ matrix.directory == 'src'}}
name: PHPStan (${{ matrix.directory }})

steps:
- name: Checkout code
Expand All @@ -25,7 +25,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
php-version: 8.5
tools: composer:v2
coverage: none

Expand All @@ -37,4 +37,7 @@ jobs:
with:
timeout_minutes: 5
max_attempts: 5
command: composer update --prefer-stable --prefer-dist --no-interaction --no-progress
command: composer update --prefer-stable --prefer-dist --no-interaction --no-progress

- name: Run PHPStan
run: composer analyse -- --no-progress --error-format=github
30 changes: 8 additions & 22 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,9 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.3, 8.4, 8.5]
phpunit: ['12.5.0', '12.5.8']
php: [8.5]
phpunit: ['13.3.0', '13.3.1']
stability: [prefer-lowest, prefer-stable]
exclude:
- php: 8.3
phpunit: '12.0.0'
- php: 8.4
phpunit: '12.0.0'
- php: 8.5
phpunit: '12.0.0'

name: PHP ${{ matrix.php }} - PHPUnit ${{ matrix.phpunit }} - ${{ matrix.stability }}

Expand All @@ -61,7 +54,7 @@ jobs:
REDIS_LIBS: liblz4-dev, liblzf-dev, libzstd-dev

- name: Set Framework version
run: composer config version "2.x-dev"
run: composer config version "4.x-dev"

- name: Install dependencies
uses: nick-fields/retry@v3
Expand Down Expand Up @@ -123,14 +116,14 @@ jobs:
coverage: none

- name: Set Framework version
run: composer config version "2.x-dev"
run: composer config version "4.x-dev"

- name: Install dependencies
uses: nick-fields/retry@v3
with:
timeout_minutes: 5
max_attempts: 5
command: composer update --prefer-stable --prefer-dist --no-interaction --no-progress --with="phpunit/phpunit:~12.5.8"
command: composer update --prefer-stable --prefer-dist --no-interaction --no-progress --with="phpunit/phpunit:~13.3.1"

- name: Execute MySQL model query tests
if: matrix.driver == 'mysql'
Expand Down Expand Up @@ -168,16 +161,9 @@ jobs:
strategy:
fail-fast: true
matrix:
php: [8.3, 8.4, 8.5]
phpunit: ['12.5.0', '12.5.8']
php: [8.5]
phpunit: ['13.3.0', '13.3.1']
stability: [prefer-lowest, prefer-stable]
exclude:
- php: 8.3
phpunit: '12.0.0'
- php: 8.4
phpunit: '12.0.0'
- php: 8.5
phpunit: '12.0.0'

name: PHP ${{ matrix.php }} - PHPUnit ${{ matrix.phpunit }} - ${{ matrix.stability }} - Windows

Expand All @@ -199,7 +185,7 @@ jobs:
coverage: none

- name: Set Framework version
run: composer config version "2.x-dev"
run: composer config version "4.x-dev"

- name: Install dependencies
uses: nick-fields/retry@v3
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/.phpunit.cache
/.phpstan.cache
/vendor
/storage
composer.phar
Expand Down
Loading
Loading