Skip to content

Commit 88b2f27

Browse files
authored
Merge pull request #32 from agitnaeta/upgrade/laravel-12
Upgrade Laravel 10 → 12 + PHPUnit 11 + CI
2 parents 4bbdefa + 8fafdfc commit 88b2f27

84 files changed

Lines changed: 3587 additions & 13073 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ master, "upgrade/**" ]
6+
pull_request:
7+
branches: [ master ]
8+
9+
jobs:
10+
phpunit:
11+
name: PHPUnit (PHP ${{ matrix.php }})
12+
runs-on: ubuntu-latest
13+
14+
strategy:
15+
fail-fast: false
16+
matrix:
17+
php: ['8.2', '8.3']
18+
19+
services:
20+
mysql:
21+
image: mysql:8.0
22+
env:
23+
MYSQL_ROOT_PASSWORD: secret
24+
MYSQL_DATABASE: absensi_testing
25+
ports:
26+
- 3306:3306
27+
options: >-
28+
--health-cmd="mysqladmin ping -h 127.0.0.1 -u root --password=secret"
29+
--health-interval=10s
30+
--health-timeout=5s
31+
--health-retries=10
32+
33+
env:
34+
DB_CONNECTION: mysql
35+
DB_HOST: 127.0.0.1
36+
DB_PORT: 3306
37+
DB_DATABASE: absensi_testing
38+
DB_USERNAME: root
39+
DB_PASSWORD: secret
40+
41+
steps:
42+
- uses: actions/checkout@v4
43+
44+
- name: Setup PHP
45+
uses: shivammathur/setup-php@v2
46+
with:
47+
php-version: ${{ matrix.php }}
48+
extensions: mbstring, pdo_mysql, bcmath, gd, zip, intl, exif
49+
coverage: none
50+
tools: composer:v2
51+
52+
- name: Cache Composer packages
53+
uses: actions/cache@v4
54+
with:
55+
path: vendor
56+
key: composer-${{ matrix.php }}-${{ hashFiles('composer.lock') }}
57+
restore-keys: composer-${{ matrix.php }}-
58+
59+
- name: Install dependencies
60+
run: composer install --no-interaction --prefer-dist --no-progress
61+
62+
- name: Setup Node
63+
uses: actions/setup-node@v4
64+
with:
65+
node-version: '20'
66+
cache: 'npm'
67+
68+
- name: Build frontend assets (Vite)
69+
# Test yang me-render view butuh public/build/manifest.json.
70+
run: |
71+
npm ci
72+
npm run build
73+
74+
- name: Install PyMuPDF (CV extraction)
75+
# CvExtractionService memakai python3 + pymupdf untuk baca teks PDF.
76+
run: pip install --quiet pymupdf
77+
78+
- name: Prepare environment
79+
run: |
80+
cp .env.example .env
81+
php artisan key:generate
82+
# phpunit.xml hanya override DB_DATABASE; host/port/user/password diambil
83+
# dari .env — set eksplisit agar cocok dengan MySQL service di atas.
84+
sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env
85+
sed -i 's/^DB_PORT=.*/DB_PORT=3306/' .env
86+
sed -i 's/^DB_DATABASE=.*/DB_DATABASE=absensi_testing/' .env
87+
sed -i 's/^DB_USERNAME=.*/DB_USERNAME=root/' .env
88+
sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=secret/' .env
89+
90+
- name: Wait for MySQL
91+
run: |
92+
for i in $(seq 1 30); do
93+
if mysqladmin ping -h 127.0.0.1 -u root --password=secret --silent; then
94+
echo "MySQL is up"; break
95+
fi
96+
echo "waiting for mysql... ($i)"; sleep 2
97+
done
98+
99+
- name: Run migrations
100+
run: php artisan migrate --force --database=mysql
101+
env:
102+
DB_DATABASE: absensi_testing
103+
104+
- name: Run PHPUnit
105+
# artisan test OOM di app ini (render menu) — pakai phpunit langsung + flag memory.
106+
run: php -d memory_limit=2G -d xdebug.mode=off vendor/bin/phpunit --no-coverage

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
</p>
77

88
<p align="center">
9-
<img alt="Laravel 10" src="https://img.shields.io/badge/Laravel-10-FF2D20?logo=laravel&logoColor=white">
10-
<img alt="PHP 8.2" src="https://img.shields.io/badge/PHP-8.2-777BB4?logo=php&logoColor=white">
9+
<img alt="Laravel 12" src="https://img.shields.io/badge/Laravel-12-FF2D20?logo=laravel&logoColor=white">
10+
<img alt="PHP 8.2+" src="https://img.shields.io/badge/PHP-8.2+-777BB4?logo=php&logoColor=white">
1111
<img alt="MySQL 8" src="https://img.shields.io/badge/MySQL-8-4479A1?logo=mysql&logoColor=white">
1212
<img alt="Backpack CRUD 6" src="https://img.shields.io/badge/Backpack%20CRUD-6-2C3E50">
13+
<img alt="CI" src="https://github.com/agitnaeta/ritmehr/actions/workflows/ci.yml/badge.svg">
1314
<img alt="Tests 403 passing" src="https://img.shields.io/badge/tests-403%20passing-2fb344">
1415
<img alt="License MIT" src="https://img.shields.io/badge/license-MIT-blue">
1516
</p>
@@ -25,7 +26,7 @@ Cocok sebagai **aplikasi absensi karyawan**, **software payroll Indonesia**, dan
2526
**sistem HR** untuk UMKM hingga perusahaan multi-cabang — self-hosted, open source,
2627
tanpa biaya lisensi per pengguna.
2728

28-
Dibangun dengan Laravel 10 dan Backpack CRUD 6 (edisi gratis) di atas MySQL 8.
29+
Dibangun dengan Laravel 12 dan Backpack CRUD 6 (edisi gratis) di atas MySQL 8.
2930

3031
**Dokumentasi:** [Panduan Pengguna](docs/PANDUAN-PENGGUNA.md) ·
3132
[Panduan Developer](docs/PANDUAN-DEVELOPER.md)
@@ -99,7 +100,7 @@ data.
99100
| Docker | untuk MySQL 8 |
100101
| Node.js | 18+ — hanya bila menjalankan pengujian browser |
101102

102-
Ekstensi PHP yang dibutuhkan mengikuti kebutuhan standar Laravel 10, ditambah
103+
Ekstensi PHP yang dibutuhkan mengikuti kebutuhan standar Laravel 12, ditambah
103104
`gd` untuk pembuatan QR dan kartu karyawan.
104105

105106
---

composer.json

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,33 @@
55
"keywords": ["laravel", "framework"],
66
"license": "MIT",
77
"require": {
8-
"php": "^8.1",
9-
"backpack/basset": "^1.2",
10-
"backpack/crud": "^6.5",
8+
"php": "^8.2",
9+
"backpack/basset": "^1.3",
10+
"backpack/crud": "^6.8",
1111
"backpack/theme-tabler": "^1.2",
12-
"barryvdh/laravel-dompdf": "^2.0",
12+
"barryvdh/laravel-dompdf": "^3.0",
1313
"guzzlehttp/guzzle": "^7.2",
14-
"laravel/framework": "^10.10",
15-
"laravel/sanctum": "^3.3",
16-
"laravel/tinker": "^2.8",
14+
"laravel/framework": "^12.0",
15+
"laravel/sanctum": "^4.0",
16+
"laravel/tinker": "^2.9",
1717
"league/flysystem-aws-s3-v3": "^3.0",
1818
"league/flysystem-webdav": "^3.0",
1919
"maatwebsite/excel": "^3.1",
2020
"masbug/flysystem-google-drive-ext": "^2.0",
2121
"opcodesio/log-viewer": "^3.1",
2222
"simplesoftwareio/simple-qrcode": "^4.2",
23-
"spatie/laravel-backup": "^8.5",
23+
"spatie/laravel-backup": "^9.0",
2424
"spatie/laravel-permission": "^6.25"
2525
},
2626
"require-dev": {
2727
"backpack/generators": "^4.0",
2828
"fakerphp/faker": "^1.9.1",
2929
"laravel/pint": "^1.0",
30-
"laravel/sail": "^1.18",
31-
"mockery/mockery": "^1.4.4",
32-
"nunomaduro/collision": "^7.0",
33-
"phpunit/phpunit": "^10.1",
34-
"spatie/laravel-ignition": "^2.0"
30+
"laravel/sail": "^1.26",
31+
"mockery/mockery": "^1.6",
32+
"nunomaduro/collision": "^8.8",
33+
"phpunit/phpunit": "^11.0",
34+
"spatie/laravel-ignition": "^2.4"
3535
},
3636
"autoload": {
3737
"psr-4": {

0 commit comments

Comments
 (0)