[v5.x] chore: upgrade all dependencies, configs and tooling (#7445)

This commit is contained in:
🏔️ Peak 2025-12-03 15:04:15 +01:00 committed by GitHub
commit e7349727a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 1097 additions and 1122 deletions

View file

@ -9,18 +9,25 @@
node_modules
/vendor
*.log
.ai
CLAUDE.md
/.cursor
/.fleet
/.idea
/.junie
/.nova
/.vscode
/.windsurfrules
/.zed
*.log
.DS_Store
Thumbs.db
*.swo
*.swp
*.sqlite*
/auth.json
@ -36,9 +43,12 @@ Homestead.yaml
/public/build
/public/hot
/public/storage
/public/vendor
/storage/**
!/storage/**/
/storage/phpstan/**
/storage/rector/**
.git
.gitattributes

View file

@ -4,7 +4,12 @@ APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
# APP_MAINTENANCE_STORE=database
# PHP_CLI_SERVER_WORKERS=4
@ -16,6 +21,11 @@ LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
SESSION_DRIVER=database
SESSION_LIFETIME=120
@ -28,6 +38,7 @@ FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
CACHE_STORE=database
# CACHE_PREFIX=
MEMCACHED_HOST=127.0.0.1
@ -45,4 +56,10 @@ MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
VITE_APP_NAME="${APP_NAME}"

View file

@ -9,12 +9,16 @@ permissions:
discussions: write
pull-requests: write
concurrency:
group: lock-threads
cancel-in-progress: true
jobs:
lock-threads:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
steps:
- name: Lock threads after 30 days of inactivity
uses: dessant/lock-threads@v5
uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # https://github.com/dessant/lock-threads/releases/tag/v5.0.1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
issue-inactive-days: 30

View file

@ -8,12 +8,16 @@ permissions:
issues: write
pull-requests: write
concurrency:
group: stale-threads
cancel-in-progress: true
jobs:
stale-threads:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
steps:
- name: Manage stale threads (Issues & PRs)
uses: actions/stale@v10
uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # https://github.com/actions/stale/releases/tag/v10.1.0
with:
stale-issue-message: |
This issue has been marked as stale due to inactivity. It will be automatically closed in 7 days if no update is received.

View file

@ -8,40 +8,46 @@ on:
permissions:
contents: read
concurrency:
group: tests-${{ github.ref }}
cancel-in-progress: true
jobs:
composer-validate:
name: Validate composer.json
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # https://github.com/actions/checkout/releases/tag/v6.0.0
with:
persist-credentials: false
- name: Setup PHP
uses: shivammathur/setup-php@v2
- name: Setup PHP 8.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # https://github.com/shivammathur/setup-php/releases/tag/2.36.0
with:
php-version: "8.4"
php-version: "8.5.0" # https://github.com/php/php-src/releases/tag/php-8.5.0
- name: Validate composer.json
run: composer validate --check-lock --strict
composer-audit:
name: Composer Audit
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
needs: [composer-validate]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # https://github.com/actions/checkout/releases/tag/v6.0.0
with:
php-version: "8.4"
persist-credentials: false
- name: Setup PHP 8.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # https://github.com/shivammathur/setup-php/releases/tag/2.36.0
with:
php-version: "8.5.0" # https://github.com/php/php-src/releases/tag/php-8.5.0
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # https://github.com/actions/cache/releases/tag/v4.3.0
with:
path: /vendor
key: php-${{ hashFiles('composer.lock') }}
@ -55,39 +61,40 @@ jobs:
bun-audit:
name: Bun Audit
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
needs: [composer-validate]
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # https://github.com/actions/checkout/releases/tag/v6.0.0
with:
persist-credentials: false
- name: Setup Bun
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # https://github.com/oven-sh/setup-bun/releases/tag/v2.0.2
with:
bun-version: 1.2.16
bun-version: 1.3.3 # https://github.com/oven-sh/bun/releases/tag/bun-v1.3.3
- name: Run Bun audit
run: bun audit --frozen-lockfile
test:
name: Tests
runs-on: ubuntu-latest
runs-on: ubuntu-24.04 # https://github.com/actions/runner-images
needs: [composer-audit, bun-audit]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup PHP with Xdebug
uses: shivammathur/setup-php@v2
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # https://github.com/actions/checkout/releases/tag/v6.0.0
with:
php-version: "8.4"
coverage: xdebug
persist-credentials: false
# - name: Install aspell
# run: sudo apt-get update && sudo apt-get install -y aspell aspell-en
- name: Setup PHP 8.5 with Xdebug
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # https://github.com/shivammathur/setup-php/releases/tag/2.36.0
with:
php-version: "8.5.0" # https://github.com/php/php-src/releases/tag/php-8.5.0
coverage: xdebug-3.5.0 # https://github.com/xdebug/xdebug/releases/tag/3.5.0
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # https://github.com/actions/cache/releases/tag/v4.3.0
with:
path: /vendor
key: php-${{ hashFiles('composer.lock') }}

22
.gitignore vendored
View file

@ -2,7 +2,7 @@
.env.*
!.env.testing
!.env.example
!.env.development.example
!.env.local.example
!.env.production.example
.bash_history
@ -13,18 +13,25 @@
node_modules
/vendor
*.log
.ai
CLAUDE.md
/.cursor
/.fleet
/.idea
/.junie
/.nova
/.vscode
/.windsurfrules
/.zed
*.log
.DS_Store
Thumbs.db
*.swo
*.swp
*.sqlite*
/auth.json
@ -35,11 +42,14 @@ Thumbs.db
Homestead.json
Homestead.yaml
/public/build/
/public/hot/
/public/storage/
/public/build
/public/hot
/public/storage
/public/vendor
/storage/**
!/storage/app
!/storage/framework
!/storage/logs
!/storage/phpstan
!/storage/rector

View file

@ -45,7 +45,7 @@ final class AppServiceProvider extends ServiceProvider
*/
private function configureHttps(): void
{
if (App::isProduction() && (bool) config('app.force_https')) {
if (App::isProduction() && config()->boolean('app.force_https')) {
URL::forceScheme('https');
}
}
@ -85,6 +85,7 @@ final class AppServiceProvider extends ServiceProvider
if (! App::isProduction()) {
Model::preventLazyLoading();
}
Model::preventSilentlyDiscardingAttributes();
Model::preventAccessingMissingAttributes();

View file

@ -9,7 +9,7 @@
"concurrently": "^9.2.1",
"laravel-vite-plugin": "^2.0.1",
"tailwindcss": "^4.1.17",
"vite": "^7.2.2",
"vite": "^7.2.6",
},
},
},
@ -76,49 +76,49 @@
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.2", "", { "os": "android", "cpu": "arm" }, "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.53.3", "", { "os": "android", "cpu": "arm" }, "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.2", "", { "os": "android", "cpu": "arm64" }, "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.53.3", "", { "os": "android", "cpu": "arm64" }, "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.53.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.53.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.53.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.2", "", { "os": "linux", "cpu": "arm" }, "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.2", "", { "os": "linux", "cpu": "arm" }, "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.53.3", "", { "os": "linux", "cpu": "arm" }, "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.53.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A=="],
"@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.2", "", { "os": "linux", "cpu": "none" }, "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ=="],
"@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g=="],
"@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g=="],
"@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.53.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.2", "", { "os": "linux", "cpu": "none" }, "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g=="],
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.2", "", { "os": "linux", "cpu": "none" }, "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ=="],
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.53.3", "", { "os": "linux", "cpu": "none" }, "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.53.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.2", "", { "os": "linux", "cpu": "x64" }, "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.2", "", { "os": "linux", "cpu": "x64" }, "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q=="],
"@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.2", "", { "os": "none", "cpu": "arm64" }, "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A=="],
"@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.53.3", "", { "os": "none", "cpu": "arm64" }, "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.53.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.53.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA=="],
"@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.2", "", { "os": "win32", "cpu": "x64" }, "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw=="],
"@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.2", "", { "os": "win32", "cpu": "x64" }, "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.53.3", "", { "os": "win32", "cpu": "x64" }, "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ=="],
"@tailwindcss/node": ["@tailwindcss/node@4.1.17", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.17" } }, "sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg=="],
@ -228,7 +228,7 @@
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
"rollup": ["rollup@4.53.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.2", "@rollup/rollup-android-arm64": "4.53.2", "@rollup/rollup-darwin-arm64": "4.53.2", "@rollup/rollup-darwin-x64": "4.53.2", "@rollup/rollup-freebsd-arm64": "4.53.2", "@rollup/rollup-freebsd-x64": "4.53.2", "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", "@rollup/rollup-linux-arm-musleabihf": "4.53.2", "@rollup/rollup-linux-arm64-gnu": "4.53.2", "@rollup/rollup-linux-arm64-musl": "4.53.2", "@rollup/rollup-linux-loong64-gnu": "4.53.2", "@rollup/rollup-linux-ppc64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-gnu": "4.53.2", "@rollup/rollup-linux-riscv64-musl": "4.53.2", "@rollup/rollup-linux-s390x-gnu": "4.53.2", "@rollup/rollup-linux-x64-gnu": "4.53.2", "@rollup/rollup-linux-x64-musl": "4.53.2", "@rollup/rollup-openharmony-arm64": "4.53.2", "@rollup/rollup-win32-arm64-msvc": "4.53.2", "@rollup/rollup-win32-ia32-msvc": "4.53.2", "@rollup/rollup-win32-x64-gnu": "4.53.2", "@rollup/rollup-win32-x64-msvc": "4.53.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g=="],
"rollup": ["rollup@4.53.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.53.3", "@rollup/rollup-android-arm64": "4.53.3", "@rollup/rollup-darwin-arm64": "4.53.3", "@rollup/rollup-darwin-x64": "4.53.3", "@rollup/rollup-freebsd-arm64": "4.53.3", "@rollup/rollup-freebsd-x64": "4.53.3", "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", "@rollup/rollup-linux-arm-musleabihf": "4.53.3", "@rollup/rollup-linux-arm64-gnu": "4.53.3", "@rollup/rollup-linux-arm64-musl": "4.53.3", "@rollup/rollup-linux-loong64-gnu": "4.53.3", "@rollup/rollup-linux-ppc64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-gnu": "4.53.3", "@rollup/rollup-linux-riscv64-musl": "4.53.3", "@rollup/rollup-linux-s390x-gnu": "4.53.3", "@rollup/rollup-linux-x64-gnu": "4.53.3", "@rollup/rollup-linux-x64-musl": "4.53.3", "@rollup/rollup-openharmony-arm64": "4.53.3", "@rollup/rollup-win32-arm64-msvc": "4.53.3", "@rollup/rollup-win32-ia32-msvc": "4.53.3", "@rollup/rollup-win32-x64-gnu": "4.53.3", "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA=="],
"rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="],
@ -252,7 +252,7 @@
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
"vite": ["vite@7.2.2", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ=="],
"vite": ["vite@7.2.6", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ=="],
"vite-plugin-full-reload": ["vite-plugin-full-reload@1.2.0", "", { "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" } }, "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA=="],

View file

@ -2,38 +2,30 @@
"$schema": "https://getcomposer.org/schema.json",
"name": "coollabsio/coolify",
"type": "project",
"description": "Coolify a free, open-source & self-hostable PaaS alternative to Heroku, Netlify, Vercel and Railway.",
"description": "An open-source, self-hostable PaaS alternative to Vercel, Heroku & Netlify that lets you easily deploy static sites, databases, full-stack applications and 280+ one-click services on your own servers.",
"keywords": ["coolify", "php", "laravel", "inertiajs", "svelte", "svelte5", "self-hosted", "self-hosting", "docker", "docker-compose", "server", "deployment", "databases", "static-site", "nodejs", "nextjs", "mysql", "mariadb", "postgres", "redis"],
"homepage": "https://coolify.io",
"keywords": [
"coolify",
"deployment",
"self-hosted",
"open-source",
"docker",
"podman"
],
"license": "AGPL-3.0",
"require": {
"php": "^8.4",
"laravel/framework": "^12.9.2",
"laravel/tinker": "^2.10.1"
"php": "^8.5",
"laravel/framework": "^12.40.2",
"laravel/tinker": "^2.10.2"
},
"require-dev": {
"driftingly/rector-laravel": "^2.0.4",
"driftingly/rector-laravel": "^2.1.4",
"fakerphp/faker": "^1.24.1",
"larastan/larastan": "^3.4.0",
"laravel/pail": "^1.2.2",
"laravel/pint": "^1.22.0",
"larastan/larastan": "^3.8.0",
"laravel/pail": "^1.2.4",
"laravel/pint": "^1.26.0",
"mockery/mockery": "^1.6.12",
"nunomaduro/collision": "^8.8",
"peckphp/peck": "^0.1.3",
"pestphp/pest": "^3.8.2",
"pestphp/pest-plugin-laravel": "^3.2",
"pestphp/pest-plugin-type-coverage": "^3.5.1",
"phpstan/phpstan-deprecation-rules": "^2.0.1",
"phpstan/phpstan-strict-rules": "^2.0.4",
"rector/rector": "^2.0.11",
"spatie/laravel-ray": "^1.40.2"
"nunomaduro/collision": "^8.8.3",
"pestphp/pest": "^4.1.6",
"pestphp/pest-plugin-laravel": "^4.0.0",
"pestphp/pest-plugin-type-coverage": "^4.0.3",
"phpstan/phpstan-deprecation-rules": "^2.0.3",
"phpstan/phpstan-strict-rules": "^2.0.7",
"rector/rector": "^2.2.10",
"spatie/laravel-ray": "^1.43.1"
},
"autoload": {
"psr-4": {
@ -48,6 +40,19 @@
}
},
"scripts": {
"setup": [
"composer install",
"@php -r \"file_exists('.env') || copy('.env.local.example', '.env');\"",
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
"@php artisan key:generate --ansi",
"@php artisan migrate --force --ansi",
"bun install",
"bun run build"
],
"dev": [
"Composer\\Config::disableProcessTimeout",
"bunx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"bun run dev\" --names=server,queue,logs,vite --kill-others"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
@ -55,32 +60,22 @@
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
"post-install-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi",
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
"@php artisan migrate --graceful --ansi"
],
"dev": [
"@php artisan key:generate --ansi",
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
"@php artisan migrate --force --ansi",
"Composer\\Config::disableProcessTimeout",
"bunx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1\" \"php artisan pail --timeout=0\" \"bun run dev\" --names=server,queue,logs,vite"
"pre-package-uninstall": [
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
],
"refactor": "rector",
"format": "pint",
"lint": "phpstan --memory-limit=1G",
"format": "pint --parallel",
"lint": "phpstan --memory-limit=2G --ansi",
"test": [
"@php artisan config:clear --ansi",
"XDEBUG_MODE=coverage pest --parallel --coverage --exactly=100"
],
"test:refactor": "rector --dry-run",
"test:format": "pint --test",
"test:typos": "peck",
"test:type-coverage": "pest --parallel --type-coverage --memory-limit=1G --min=100",
"test:format": "pint --parallel --test",
"test:type-coverage": "pest --parallel --type-coverage --memory-limit=2G --min=100",
"test:all": [
"@test:refactor",
"@test:format",

1563
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -39,6 +39,11 @@ return [
'serialize' => false,
],
'session' => [
'driver' => 'session',
'key' => env('SESSION_CACHE_KEY', '_cache'),
],
'database' => [
'driver' => 'database',
'connection' => env('DB_CACHE_CONNECTION'),

View file

@ -36,11 +36,13 @@ return [
'url' => env('DB_URL'),
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
'prefix_indexes' => null,
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
'busy_timeout' => null,
'journal_mode' => null,
'synchronous' => null,
'transaction_mode' => 'DEFERRED',
'pragmas' => [],
],
'mysql' => [
@ -59,7 +61,7 @@ return [
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
(PHP_VERSION_ID >= 80500 ? Pdo\Mysql::ATTR_SSL_CA : Pdo\Mysql::ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
@ -79,7 +81,7 @@ return [
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
(PHP_VERSION_ID >= 80500 ? Pdo\Mysql::ATTR_SSL_CA : Pdo\Mysql::ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],

View file

@ -11,7 +11,7 @@ return [
'enable' => env('RAY_ENABLED', false),
/*
* When enabled, all cache events will automatically be sent to Ray.
* When enabled, all cache events will automatically be sent to Ray.
*/
'send_cache_to_ray' => env('SEND_CACHE_TO_RAY', false),
@ -100,7 +100,7 @@ return [
/*
* When enabled, all deprecation notices will be automatically sent to Ray.
*/
'send_deprecated_notices_to_ray' => env('SEND_DEPRECATED_NOTICES_TO_RAY', false),
'send_deprecated_notices_to_ray' => env('SEND_DEPRECATED_NOTICES_TO_RAY', true),
/*
* The host used to communicate with the Ray app.

View file

@ -1,5 +1,5 @@
{
"name": "coolify",
"$schema": "https://www.schemastore.org/package.json",
"private": true,
"type": "module",
"devDependencies": {
@ -7,7 +7,7 @@
"concurrently": "^9.2.1",
"laravel-vite-plugin": "^2.0.1",
"tailwindcss": "^4.1.17",
"vite": "^7.2.2"
"vite": "^7.2.6"
},
"scripts": {
"build": "vite build",

View file

@ -1,9 +0,0 @@
{
"preset": "laravel",
"ignore": {
"words": [
"php"
],
"paths": []
}
}

View file

@ -1,23 +1,30 @@
includes:
- vendor/phpstan/phpstan/conf/bleedingEdge.neon
- vendor/phpstan/phpstan-strict-rules/rules.neon
- vendor/phpstan/phpstan-deprecation-rules/rules.neon
- vendor/larastan/larastan/extension.neon
- vendor/nesbot/carbon/extension.neon
- vendor/phpstan/phpstan-deprecation-rules/rules.neon
- vendor/phpstan/phpstan-strict-rules/rules.neon
parameters:
level: max
checkModelProperties: true
checkOctaneCompatibility: true
checkMissingCallableSignature: true
# Additional Core PHPStan Rules
checkTooWideReturnTypesInProtectedAndPublicMethods: true
rememberPossiblyImpureFunctionValues: false
checkBenevolentUnionTypes: true
reportPossiblyNonexistentGeneralArrayOffset: true
reportPossiblyNonexistentConstantArrayOffset: true
reportAlwaysTrueInLastCondition: true
reportAnyTypeWideningInVarTag: true
checkMissingCallableSignature: true
tipsOfTheDay: false
# Additional Larastan Rules
noUnnecessaryEnumerableToArrayCalls: true
checkModelProperties: true
checkOctaneCompatibility: true
checkModelMethodVisibility: true
checkAuthCallsWhenInRequestScope: true
checkConfigTypes: true
tmpDir: ./storage/phpstan
paths:
- app
@ -32,4 +39,4 @@ parameters:
strictRules:
strictArrayFilter: false
ignoreErrors:
- '#Dynamic call to static method Illuminate\\Http\\Request::validate\(\)#'
# - '#Dynamic call to static method Illuminate\\Http\\Request::validate\(\)#'

View file

@ -60,6 +60,7 @@
"heredoc_indentation": {
"indentation": "same_as_start"
},
"indentation_type": false,
"logical_operators": true,
"long_to_shorthand_operator": true,
"mb_str_functions": true,
@ -67,8 +68,13 @@
"modernize_stripos": true
},
"modernize_types_casting": true,
"modifier_keywords": true,
"multiline_comment_opening_closing": true,
"multiline_promoted_properties": {
"minimum_number_of_parameters": 3
},
"multiline_string_to_heredoc": true,
"new_expression_parentheses": true,
"no_empty_comment": true,
"no_extra_blank_lines": {
"tokens": [
@ -113,6 +119,7 @@
},
"no_useless_else": true,
"no_useless_nullsafe_operator": true,
"no_useless_printf": true,
"no_useless_sprintf": true,
"no_whitespace_before_comma_in_array": {
"after_heredoc": true
@ -162,6 +169,7 @@
"phpdoc_no_alias_tag": true,
"phpdoc_no_empty_return": true,
"phpdoc_return_self_reference": true,
"phpdoc_scalar": true,
"phpdoc_tag_casing": true,
"phpdoc_trim_consecutive_blank_line_separation": true,
"phpdoc_types_order": {
@ -175,6 +183,7 @@
"self_accessor": true,
"set_type_to_cast": true,
"single_line_throw": true,
"single_space_around_construct": true,
"single_trait_insert_per_statement": false,
"strict_comparison": true,
"strict_param": true,
@ -191,13 +200,8 @@
]
},
"type_declaration_spaces": {
"elements": [
"constant",
"function",
"property"
]
"elements": ["constant", "function", "property"]
},
"visibility_required": true,
"whitespace_after_comma_in_array": {
"ensure_single_space": true
}

View file

@ -2,65 +2,20 @@
declare(strict_types=1);
use Rector\Caching\ValueObject\Storage\FileCacheStorage;
use Rector\Config\RectorConfig;
use Rector\Php80\Rector\NotIdentical\MbStrContainsRector;
use Rector\Php83\Rector\ClassMethod\AddOverrideAttributeToOverriddenMethodsRector;
use RectorLaravel\Rector\ArrayDimFetch\EnvVariableToEnvHelperRector;
use RectorLaravel\Rector\ArrayDimFetch\RequestVariablesToRequestFacadeRector;
use RectorLaravel\Rector\ArrayDimFetch\ServerVariableToRequestFacadeRector;
use RectorLaravel\Rector\ArrayDimFetch\SessionVariableToSessionFacadeRector;
use RectorLaravel\Rector\BooleanNot\AvoidNegatedCollectionContainsOrDoesntContainRector;
use RectorLaravel\Rector\Cast\DatabaseExpressionCastsToMethodCallRector;
use RectorLaravel\Rector\Class_\AddExtendsAnnotationToModelFactoriesRector;
use RectorLaravel\Rector\Class_\AddMockConsoleOutputFalseToConsoleTestsRector;
use RectorLaravel\Rector\Class_\AnonymousMigrationsRector;
use RectorLaravel\Rector\Class_\PropertyDeferToDeferrableProviderToRector;
use Rector\Php85\Rector\Expression\NestedFuncCallsToPipeOperatorRector;
use Rector\Php85\Rector\StmtsAwareInterface\SequentialAssignmentsToPipeOperatorRector;
use RectorLaravel\Rector\Class_\RemoveModelPropertyFromFactoriesRector;
use RectorLaravel\Rector\Class_\ReplaceExpectsMethodsInTestsRector;
use RectorLaravel\Rector\Class_\UnifyModelDatesWithCastsRector;
use RectorLaravel\Rector\ClassMethod\AddGenericReturnTypeToRelationsRector;
use RectorLaravel\Rector\ClassMethod\MigrateToSimplifiedAttributeRector;
use RectorLaravel\Rector\Empty_\EmptyToBlankAndFilledFuncRector;
use RectorLaravel\Rector\Expr\AppEnvironmentComparisonToParameterRector;
use RectorLaravel\Rector\Expr\SubStrToStartsWithOrEndsWithStaticMethodCallRector\SubStrToStartsWithOrEndsWithStaticMethodCallRector;
use RectorLaravel\Rector\FuncCall\DispatchNonShouldQueueToDispatchSyncRector;
use RectorLaravel\Rector\FuncCall\FactoryFuncCallToStaticCallRector;
use RectorLaravel\Rector\FuncCall\HelperFuncCallToFacadeClassRector;
use RectorLaravel\Rector\FuncCall\NotFilledBlankFuncCallToBlankFilledFuncCallRector;
use RectorLaravel\Rector\FuncCall\NowFuncWithStartOfDayMethodCallToTodayFuncRector;
use RectorLaravel\Rector\FuncCall\ConfigToTypedConfigMethodCallRector;
use RectorLaravel\Rector\FuncCall\RemoveDumpDataDeadCodeRector;
use RectorLaravel\Rector\FuncCall\RemoveRedundantValueCallsRector;
use RectorLaravel\Rector\FuncCall\RemoveRedundantWithCallsRector;
use RectorLaravel\Rector\FuncCall\SleepFuncToSleepStaticCallRector;
use RectorLaravel\Rector\FuncCall\TypeHintTappableCallRector;
use RectorLaravel\Rector\If_\AbortIfRector;
use RectorLaravel\Rector\If_\ReportIfRector;
use RectorLaravel\Rector\If_\ThrowIfRector;
use RectorLaravel\Rector\MethodCall\AssertSeeToAssertSeeHtmlRector;
use RectorLaravel\Rector\MethodCall\AssertStatusToAssertMethodRector;
use RectorLaravel\Rector\MethodCall\AvoidNegatedCollectionFilterOrRejectRector;
use RectorLaravel\Rector\MethodCall\DatabaseExpressionToStringToMethodCallRector;
use RectorLaravel\Rector\MethodCall\FactoryApplyingStatesRector;
use RectorLaravel\Rector\MethodCall\JsonCallToExplicitJsonCallRector;
use RectorLaravel\Rector\MethodCall\LumenRoutesStringActionToUsesArrayRector;
use RectorLaravel\Rector\MethodCall\LumenRoutesStringMiddlewareToArrayRector;
use RectorLaravel\Rector\MethodCall\RedirectBackToBackHelperRector;
use RectorLaravel\Rector\MethodCall\RedirectRouteToToRouteHelperRector;
use RectorLaravel\Rector\MethodCall\RefactorBlueprintGeometryColumnsRector;
use RectorLaravel\Rector\MethodCall\ReplaceWithoutJobsEventsAndNotificationsWithFacadeFakeRector;
use RectorLaravel\Rector\MethodCall\ResponseHelperCallToJsonResponseRector;
use RectorLaravel\Rector\MethodCall\ReverseConditionableMethodCallRector;
use RectorLaravel\Rector\MethodCall\UnaliasCollectionMethodsRector;
use RectorLaravel\Rector\MethodCall\UseComponentPropertyWithinCommandsRector;
use RectorLaravel\Rector\MethodCall\ValidationRuleArrayStringValueToArrayRector;
use RectorLaravel\Rector\MethodCall\WhereToWhereLikeRector;
use RectorLaravel\Rector\Namespace_\FactoryDefinitionRector;
use RectorLaravel\Rector\PropertyFetch\OptionalToNullsafeOperatorRector;
use RectorLaravel\Rector\PropertyFetch\ReplaceFakerInstanceWithHelperRector;
use RectorLaravel\Rector\StaticCall\CarbonSetTestNowToTravelToRector;
use RectorLaravel\Rector\StaticCall\DispatchToHelperFunctionsRector;
use RectorLaravel\Rector\StaticCall\Redirect301ToPermanentRedirectRector;
use RectorLaravel\Rector\StaticCall\ReplaceAssertTimesSendWithAssertSentTimesRector;
use RectorLaravel\Rector\StaticCall\RequestStaticValidateToInjectRector;
use RectorLaravel\Set\LaravelSetList;
use RectorLaravel\Set\LaravelSetProvider;
return RectorConfig::configure()
->withPaths([
@ -77,78 +32,47 @@ return RectorConfig::configure()
__DIR__.'/bootstrap/cache',
AddOverrideAttributeToOverriddenMethodsRector::class,
])
->withCache(__DIR__.'/storage/rector', FileCacheStorage::class)
->withPhpSets()
->withAttributesSets()
->withPreparedSets(
deadCode: true,
codeQuality: true,
codingStyle: true,
typeDeclarations: true,
typeDeclarationDocblocks: true,
privatization: true,
naming: true,
instanceOf: true,
earlyReturn: true,
carbon: true,
rectorPreset: true,
phpunitCodeQuality: true,
)
->withAttributesSets()
->withSetProviders(LaravelSetProvider::class)
->withComposerBased(laravel: true)
->withSets([
LaravelSetList::LARAVEL_ARRAYACCESS_TO_METHOD_CALL,
LaravelSetList::LARAVEL_ARRAY_STR_FUNCTION_TO_STATIC_CALL,
LaravelSetList::LARAVEL_CODE_QUALITY,
LaravelSetList::LARAVEL_COLLECTION,
LaravelSetList::LARAVEL_CONTAINER_STRING_TO_FULLY_QUALIFIED_NAME,
LaravelSetList::LARAVEL_FACADE_ALIASES_TO_FULL_NAMES,
LaravelSetList::LARAVEL_FACTORIES,
LaravelSetList::LARAVEL_IF_HELPERS,
LaravelSetList::LARAVEL_LEGACY_FACTORIES_TO_CLASSES,
LaravelSetList::LARAVEL_TESTING,
LaravelSetList::LARAVEL_TYPE_DECLARATIONS,
])
->withRules([
AbortIfRector::class,
AddExtendsAnnotationToModelFactoriesRector::class,
AddGenericReturnTypeToRelationsRector::class,
AddMockConsoleOutputFalseToConsoleTestsRector::class,
AnonymousMigrationsRector::class,
AppEnvironmentComparisonToParameterRector::class,
AssertSeeToAssertSeeHtmlRector::class,
AssertStatusToAssertMethodRector::class,
AvoidNegatedCollectionContainsOrDoesntContainRector::class,
AvoidNegatedCollectionFilterOrRejectRector::class,
CarbonSetTestNowToTravelToRector::class,
DatabaseExpressionCastsToMethodCallRector::class,
DatabaseExpressionToStringToMethodCallRector::class,
DispatchNonShouldQueueToDispatchSyncRector::class,
DispatchToHelperFunctionsRector::class,
// Core Rector Rules
SequentialAssignmentsToPipeOperatorRector::class,
NestedFuncCallsToPipeOperatorRector::class,
MbStrContainsRector::class,
// Laravel Rector Rules
EmptyToBlankAndFilledFuncRector::class,
EnvVariableToEnvHelperRector::class,
FactoryApplyingStatesRector::class,
FactoryDefinitionRector::class,
FactoryFuncCallToStaticCallRector::class,
HelperFuncCallToFacadeClassRector::class,
JsonCallToExplicitJsonCallRector::class,
LumenRoutesStringActionToUsesArrayRector::class,
LumenRoutesStringMiddlewareToArrayRector::class,
MigrateToSimplifiedAttributeRector::class,
NotFilledBlankFuncCallToBlankFilledFuncCallRector::class,
NowFuncWithStartOfDayMethodCallToTodayFuncRector::class,
OptionalToNullsafeOperatorRector::class,
PropertyDeferToDeferrableProviderToRector::class,
Redirect301ToPermanentRedirectRector::class,
RedirectBackToBackHelperRector::class,
RedirectRouteToToRouteHelperRector::class,
RefactorBlueprintGeometryColumnsRector::class,
RemoveDumpDataDeadCodeRector::class,
ConfigToTypedConfigMethodCallRector::class,
RemoveModelPropertyFromFactoriesRector::class,
RemoveRedundantValueCallsRector::class,
RemoveRedundantWithCallsRector::class,
ReplaceAssertTimesSendWithAssertSentTimesRector::class,
ReplaceExpectsMethodsInTestsRector::class,
ReplaceFakerInstanceWithHelperRector::class,
ReplaceWithoutJobsEventsAndNotificationsWithFacadeFakeRector::class,
ReportIfRector::class,
RequestStaticValidateToInjectRector::class,
RequestVariablesToRequestFacadeRector::class,
ResponseHelperCallToJsonResponseRector::class,
ReverseConditionableMethodCallRector::class,
ServerVariableToRequestFacadeRector::class,
SessionVariableToSessionFacadeRector::class,
SleepFuncToSleepStaticCallRector::class,
SubStrToStartsWithOrEndsWithStaticMethodCallRector::class,
ThrowIfRector::class,
TypeHintTappableCallRector::class,
UnaliasCollectionMethodsRector::class,
UnifyModelDatesWithCastsRector::class,
UseComponentPropertyWithinCommandsRector::class,
ValidationRuleArrayStringValueToArrayRector::class,
])
->withConfiguredRule(RemoveDumpDataDeadCodeRector::class, [
'dd',

2
storage/rector/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*
!.gitignore

View file

@ -14,12 +14,14 @@ arch('App')
->expect('App')
->not->toBeEnums()
->ignoring('App\Enums')
->not->toImplement(Throwable::class)
->ignoring('App\Exceptions')
->not->toExtend(\Illuminate\Database\Eloquent\Model::class)
->ignoring('App\Models')
->not->toExtend(\Illuminate\Foundation\Http\FormRequest::class)
->ignoring('App\Http\Requests')
->not->toExtend(\Illuminate\Http\Resources\Json\JsonResource::class)
->ignoring('App\Http\Resources')
->not->toExtend(\Illuminate\Http\Resources\Json\ResourceCollection::class)
->ignoring('App\Http\Resources')
->not->toExtend(\Illuminate\Console\Command::class)
->ignoring('App\Console\Commands')
->not->toExtend(\Illuminate\Mail\Mailable::class)
@ -28,29 +30,33 @@ arch('App')
->ignoring('App\Notifications')
->not->toExtend(\Illuminate\Support\ServiceProvider::class)
->ignoring('App\Providers')
->not->toHaveSuffix('ServiceProvider')
->ignoring('App\Providers')
->not->toHaveSuffix('Controller')
->ignoring('App\Http\Controllers')
->not->toImplement(Throwable::class)
->ignoring('App\Exceptions')
->not->toImplement(\Illuminate\Contracts\Queue\ShouldQueue::class)
->ignoring('App\Jobs')
->not->toUseTrait(\Illuminate\Foundation\Bus\Dispatchable::class)
->ignoring('App\Jobs')
->not->toExtend(\Illuminate\Http\Resources\Json\JsonResource::class)
->ignoring('App\Http\Resources')
->not->toExtend(\Illuminate\Http\Resources\Json\ResourceCollection::class)
->ignoring('App\Http\Resources')
->not->toUseTrait(\Illuminate\Queue\SerializesModels::class)
->ignoring('App\Events');
->ignoring('App\Events')
->not->toHaveSuffix('Controller')
->ignoring('App\Http\Controllers')
->not->toHaveSuffix('ServiceProvider')
->ignoring('App\Providers');
arch('Actions')
->expect('App\Actions')
->toBeClasses()
arch('Contracts')
->expect('App\Contracts')
->toBeInterfaces()
->toExtendNothing()
->toImplementNothing()
->not->toHavePublicMethodsBesides(['handle'])
->toHaveLineCountLessThan(250)
->toHaveSuffix('Action');
->toHaveLineCountLessThan(100);
arch('Attributes')
->expect('App\Attributes')
->toBeClasses()
->toHaveMethod(method: 'resolve')
->toHaveAttribute('Attribute')
->toImplement(\Illuminate\Contracts\Container\ContextualAttribute::class)
->toHaveLineCountLessThan(100);
arch('Concerns')
->expect('App\Concerns')
@ -60,21 +66,13 @@ arch('Concerns')
->toHaveLineCountLessThan(100)
->toHavePrefix('Has');
arch('Commands')
->expect('App\Console\Commands')
->toBeClasses()
->toExtend(\Illuminate\Console\Command::class)
->toImplementNothing()
->not->toHavePublicMethodsBesides(['handle'])
->toHaveLineCountLessThan(150)
->toHaveSuffix('Command');
arch('Contracts')
->expect('App\Contracts')
->toBeInterfaces()
arch('Traits')
->expect('App\Traits')
->toBeTraits()
->toExtendNothing()
->toImplementNothing()
->toHaveLineCountLessThan(100);
->toHaveLineCountLessThan(100)
->toHavePrefix('Has');
arch('Enums')
->expect('App\Enums')
@ -84,21 +82,6 @@ arch('Enums')
->toImplementNothing()
->toHaveLineCountLessThan(80);
arch('Features')
->expect('App\Features')
->toBeClasses()
->ignoring('App\Features\Concerns')
->toHaveMethod('resolve')
->toHaveLineCountLessThan(250);
arch('Events')
->expect('App\Events')
->toBeClasses()
->toExtendNothing()
->toUseTrait(\Illuminate\Queue\SerializesModels::class)
->toHaveLineCountLessThan(100)
->not->toHaveSuffix('Event');
arch('Exceptions')
->expect('App\Exceptions')
->toBeClasses()
@ -112,6 +95,12 @@ arch('Http')
->toBeClasses()
->toOnlyBeUsedIn('App\Http');
arch('Middleware')
->expect('App\Http\Middleware')
->toBeClasses()
->toHaveMethod('handle')
->toHaveLineCountLessThan(150);
arch('Controllers')
->expect('App\Http\Controllers')
->toBeClasses()
@ -121,17 +110,11 @@ arch('Controllers')
->ignoring('App\Http\Controllers\Api')
->toHaveSuffix('Controller');
arch('Middleware')
->expect('App\Http\Middleware')
->toBeClasses()
->not->toHavePublicMethodsBesides(['handle'])
->toHaveLineCountLessThan(150);
arch('Requests')
->expect('App\Http\Requests')
->toBeClasses()
->toHaveMethod(method: 'rules')
->toExtend(\Illuminate\Foundation\Http\FormRequest::class)
->toHaveMethod('rules')
->toOnlyBeUsedIn('App\Http\Controllers')
->toHaveLineCountLessThan(150)
->toHaveSuffix('Request');
@ -144,20 +127,52 @@ arch('Resources')
->toHaveLineCountLessThan(150)
->toHaveSuffix('Resource');
arch('Jobs')
->expect('App\Jobs')
arch('Actions')
->expect('App\Actions')
->toBeClasses()
->toImplement(\Illuminate\Contracts\Queue\ShouldQueue::class)
->toUseTrait(\Illuminate\Foundation\Bus\Dispatchable::class)
->not->toHavePublicMethodsBesides(['handle'])
->toExtendNothing()
->toImplementNothing()
->toHaveLineCountLessThan(250)
->toHaveSuffix('Job');
->not->toHaveSuffix('Action');
arch('Services')
->expect('App\Services')
->toBeClasses()
->toHaveLineCountLessThan(250)
->toHaveSuffix('Service');
arch('Events')
->expect('App\Events')
->toBeClasses()
->toExtendNothing()
->toUseTrait(\Illuminate\Queue\SerializesModels::class)
->toHaveLineCountLessThan(100)
->not->toHaveSuffix('Event');
arch('Listeners')
->expect('App\Listeners')
->toBeClasses()
->not->toHavePublicMethodsBesides(['__construct', 'handle'])
->toHaveLineCountLessThan(150);
->toHaveLineCountLessThan(100);
arch('Commands')
->expect('App\Console\Commands')
->toBeClasses()
->not->toHavePublicMethodsBesides(['handle'])
->toExtend(\Illuminate\Console\Command::class)
->toImplementNothing()
->toHaveLineCountLessThan(150)
->toHaveSuffix('Command');
arch('Jobs')
->expect('App\Jobs')
->toBeClasses()
->not->toHavePublicMethodsBesides(['handle'])
->toImplement(\Illuminate\Contracts\Queue\ShouldQueue::class)
->toUseTrait(\Illuminate\Foundation\Bus\Dispatchable::class)
->toHaveLineCountLessThan(250)
->toHaveSuffix('Job');
arch('Mail')
->expect('App\Mail')
@ -166,20 +181,28 @@ arch('Mail')
->toImplement(\Illuminate\Contracts\Queue\ShouldQueue::class)
->toHaveLineCountLessThan(150);
arch('Models')
->expect('App\Models')
->toBeClasses()
->toOnlyUse('Illuminate\Database')
->not->toUseTrait(\Illuminate\Database\Eloquent\SoftDeletes::class)
->toHaveLineCountLessThan(250)
->not->toHaveSuffix('Model');
arch('Notifications')
->expect('App\Notifications')
->toBeClasses()
->toExtend(\Illuminate\Notifications\Notification::class)
->toHaveLineCountLessThan(150)
->not->toHaveSuffix('Notification');
->toHaveLineCountLessThan(200)
->toHaveSuffix('Notification');
arch('Models')
->expect('App\Models')
->toBeClasses()
->toExtend(\Illuminate\Database\Eloquent\Model::class)
->not->toUseTrait(\Illuminate\Database\Eloquent\SoftDeletes::class)
->toOnlyUse('Illuminate\Database')
->toHaveLineCountLessThan(250)
->not->toHaveSuffix('Model');
arch('Queries')
->expect('App\Queries')
->toBeClasses()
->toExtend(\Illuminate\Database\Eloquent\Builder::class)
->not->toHavePublicMethodsBesides(['__construct', 'builder'])
->toHaveLineCountLessThan(150);
arch('Policies')
->expect('App\Policies')
@ -190,31 +213,11 @@ arch('Policies')
arch('Providers')
->expect('App\Providers')
->toBeClasses()
->toHaveSuffix('ServiceProvider')
->toExtend(\Illuminate\Support\ServiceProvider::class)
->not->toBeUsed()
->toHaveLineCountLessThan(250);
arch('Queries')
->expect('App\Queries')
->toBeClasses()
->toExtend(\Illuminate\Database\Eloquent\Builder::class)
->not->toHavePublicMethodsBesides(['__construct', 'builder'])
->toHaveLineCountLessThan(150);
arch('Services')
->expect('App\Services')
->toBeClasses()
->toHaveSuffix('Service')
->toHaveLineCountLessThan(250);
arch('Traits')
->expect('App\Traits')
->toBeTraits()
->toExtendNothing()
->toImplementNothing()
->toHaveLineCountLessThan(100);
->toHaveLineCountLessThan(250)
->toHaveSuffix('ServiceProvider');
arch('Functions')
->expect(['dd', 'ddd', 'dump', 'env', 'exit'])
->expect(['dd', 'ddd', 'dump', 'env', 'exit', 'ray'])
->not->toBeUsed();