Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
106 changes: 106 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: CI

on:
push:
branches: [ master, "upgrade/**" ]
pull_request:
branches: [ master ]

jobs:
phpunit:
name: PHPUnit (PHP ${{ matrix.php }})
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
php: ['8.2', '8.3']

services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: absensi_testing
ports:
- 3306:3306
options: >-
--health-cmd="mysqladmin ping -h 127.0.0.1 -u root --password=secret"
--health-interval=10s
--health-timeout=5s
--health-retries=10

env:
DB_CONNECTION: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_DATABASE: absensi_testing
DB_USERNAME: root
DB_PASSWORD: secret

steps:
- uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: mbstring, pdo_mysql, bcmath, gd, zip, intl, exif
coverage: none
tools: composer:v2

- name: Cache Composer packages
uses: actions/cache@v4
with:
path: vendor
key: composer-${{ matrix.php }}-${{ hashFiles('composer.lock') }}
restore-keys: composer-${{ matrix.php }}-

- name: Install dependencies
run: composer install --no-interaction --prefer-dist --no-progress

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Build frontend assets (Vite)
# Test yang me-render view butuh public/build/manifest.json.
run: |
npm ci
npm run build

- name: Install PyMuPDF (CV extraction)
# CvExtractionService memakai python3 + pymupdf untuk baca teks PDF.
run: pip install --quiet pymupdf

- name: Prepare environment
run: |
cp .env.example .env
php artisan key:generate
# phpunit.xml hanya override DB_DATABASE; host/port/user/password diambil
# dari .env — set eksplisit agar cocok dengan MySQL service di atas.
sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env
sed -i 's/^DB_PORT=.*/DB_PORT=3306/' .env
sed -i 's/^DB_DATABASE=.*/DB_DATABASE=absensi_testing/' .env
sed -i 's/^DB_USERNAME=.*/DB_USERNAME=root/' .env
sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=secret/' .env

- name: Wait for MySQL
run: |
for i in $(seq 1 30); do
if mysqladmin ping -h 127.0.0.1 -u root --password=secret --silent; then
echo "MySQL is up"; break
fi
echo "waiting for mysql... ($i)"; sleep 2
done

- name: Run migrations
run: php artisan migrate --force --database=mysql
env:
DB_DATABASE: absensi_testing

- name: Run PHPUnit
# artisan test OOM di app ini (render menu) — pakai phpunit langsung + flag memory.
run: php -d memory_limit=2G -d xdebug.mode=off vendor/bin/phpunit --no-coverage
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
</p>

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

Dibangun dengan Laravel 10 dan Backpack CRUD 6 (edisi gratis) di atas MySQL 8.
Dibangun dengan Laravel 12 dan Backpack CRUD 6 (edisi gratis) di atas MySQL 8.

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

Ekstensi PHP yang dibutuhkan mengikuti kebutuhan standar Laravel 10, ditambah
Ekstensi PHP yang dibutuhkan mengikuti kebutuhan standar Laravel 12, ditambah
`gd` untuk pembuatan QR dan kartu karyawan.

---
Expand Down
26 changes: 13 additions & 13 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,33 @@
"keywords": ["laravel", "framework"],
"license": "MIT",
"require": {
"php": "^8.1",
"backpack/basset": "^1.2",
"backpack/crud": "^6.5",
"php": "^8.2",
"backpack/basset": "^1.3",
"backpack/crud": "^6.8",
"backpack/theme-tabler": "^1.2",
"barryvdh/laravel-dompdf": "^2.0",
"barryvdh/laravel-dompdf": "^3.0",
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.3",
"laravel/tinker": "^2.8",
"laravel/framework": "^12.0",
"laravel/sanctum": "^4.0",
"laravel/tinker": "^2.9",
"league/flysystem-aws-s3-v3": "^3.0",
"league/flysystem-webdav": "^3.0",
"maatwebsite/excel": "^3.1",
"masbug/flysystem-google-drive-ext": "^2.0",
"opcodesio/log-viewer": "^3.1",
"simplesoftwareio/simple-qrcode": "^4.2",
"spatie/laravel-backup": "^8.5",
"spatie/laravel-backup": "^9.0",
"spatie/laravel-permission": "^6.25"
},
"require-dev": {
"backpack/generators": "^4.0",
"fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.1",
"spatie/laravel-ignition": "^2.0"
"laravel/sail": "^1.26",
"mockery/mockery": "^1.6",
"nunomaduro/collision": "^8.8",
"phpunit/phpunit": "^11.0",
"spatie/laravel-ignition": "^2.4"
},
"autoload": {
"psr-4": {
Expand Down
Loading
Loading