Compare commits

..

19 Commits

Author SHA1 Message Date
pesu98
db7b8751ec runner v7
All checks were successful
CI Deploy Laravel / Test (push) Successful in 1m33s
CI Deploy Laravel / Build (push) Successful in 3m21s
CI Deploy Laravel / Deploy (push) Successful in 1m27s
2026-05-13 15:23:31 +08:00
pesu98
d00fea4ecb update ci.yaml 2
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m47s
CI Deploy Laravel / Build (push) Successful in 3m17s
CI Deploy Laravel / Deploy (push) Failing after 1m25s
2026-05-13 15:13:09 +08:00
pesu98
5289b0b215 runner v9
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m49s
CI Deploy Laravel / Build (push) Successful in 3m8s
CI Deploy Laravel / Deploy (push) Failing after 1m36s
2026-05-13 15:05:00 +08:00
pesu98
6411bc66b7 runner v7
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m42s
CI Deploy Laravel / Build (push) Successful in 3m25s
CI Deploy Laravel / Deploy (push) Failing after 1m51s
2026-05-13 14:49:13 +08:00
pesu98
42049b6bc7 update ci.yaml
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m37s
CI Deploy Laravel / Build (push) Successful in 3m38s
CI Deploy Laravel / Deploy (push) Failing after 1m31s
2026-05-13 14:21:18 +08:00
pesu98
4262fa83b1 runner v7
Some checks failed
Test Build Deploy / Test (push) Successful in 1m13s
Test Build Deploy / Build (push) Successful in 1m33s
Test Build Deploy / Deploy (push) Failing after 26s
2026-05-13 12:49:15 +08:00
pesu98
653581a16e runner v6
Some checks failed
Test Build Deploy / Test (push) Successful in 1m25s
Test Build Deploy / Build (push) Successful in 1m34s
Test Build Deploy / Deploy (push) Failing after 10s
2026-05-13 12:42:42 +08:00
pesu98
c90ab7c990 runner v5
Some checks failed
Test Build Deploy / Test (push) Successful in 1m18s
Test Build Deploy / Build (push) Successful in 1m13s
Test Build Deploy / Deploy (push) Failing after 15s
2026-05-13 12:18:36 +08:00
pesu98
9c15de9f6a runner v4
Some checks failed
Test Build Deploy / Test (push) Successful in 1m13s
Test Build Deploy / Build (push) Failing after 1m14s
Test Build Deploy / Deploy (push) Has been skipped
2026-05-13 12:13:41 +08:00
pesu98
08281db28f runner v3
Some checks failed
Test Build Deploy / Test (push) Successful in 1m13s
Test Build Deploy / Build (push) Failing after 1m29s
Test Build Deploy / Deploy (push) Has been skipped
2026-05-13 12:08:19 +08:00
pesu98
abeb796fd0 runner v2
Some checks failed
Test Build Deploy / Test (push) Successful in 1m17s
Test Build Deploy / Build (push) Failing after 1m14s
Test Build Deploy / Deploy (push) Has been skipped
2026-05-13 11:54:07 +08:00
pesu98
16fd1c5ef3 update runner
Some checks failed
Test Build Deploy / Test (push) Successful in 1m18s
Test Build Deploy / Build (push) Failing after 2m27s
Test Build Deploy / Deploy (push) Has been skipped
2026-05-13 11:47:27 +08:00
pesu98
cec4b79951 runner
Some checks failed
Test Build Deploy / Test (push) Failing after 1m30s
Test Build Deploy / Build (push) Has been skipped
Test Build Deploy / Deploy (push) Has been skipped
2026-05-13 11:40:17 +08:00
pesu98
315798f7b4 update hook 3
Some checks failed
CI / Run Tests (push) Failing after 2m1s
2026-05-13 09:39:49 +08:00
pesu98
c8237c68b4 tambah word webhook 3
Some checks failed
CI / Run Tests (push) Has been cancelled
2026-05-12 16:36:34 +08:00
pesu98
f746e54399 test webhook 2
Some checks failed
CI / Run Tests (push) Has been cancelled
2026-05-12 16:13:17 +08:00
pesu98
348519fa2d tambah word webhook
Some checks failed
CI / Run Tests (push) Has been cancelled
2026-05-12 16:06:31 +08:00
pesu98
2737cf04ed test runner
Some checks failed
CI / Run Tests (push) Has been cancelled
2026-05-11 16:21:32 +08:00
pesu98
18f090ec71 tambah first day 2026-05-11 15:47:09 +08:00
6 changed files with 329 additions and 2 deletions

221
.gitea/workflows/ci.yaml Normal file
View File

@@ -0,0 +1,221 @@
name: CI Deploy Laravel
on:
push:
branches:
- master
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: mbstring, ctype, fileinfo, openssl, pdo, tokenizer, xml
coverage: none
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
- name: Install Composer dependencies
run: composer install --no-interaction --no-progress --prefer-dist
- name: Prepare environment
run: |
cp .env.example .env
php artisan key:generate --force
- name: Install NPM dependencies
run: npm ci || npm install --no-audit --no-fund
- name: Build frontend assets for tests
run: npm run build
- name: Run tests
run: php artisan test --compact
build:
name: Build
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.4'
extensions: mbstring, ctype, fileinfo, openssl, pdo, tokenizer, xml
coverage: none
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: npm
- name: Install production Composer dependencies
run: composer install --no-dev --no-interaction --no-progress --prefer-dist --optimize-autoloader
- name: Install NPM dependencies
run: npm ci || npm install --no-audit --no-fund
- name: Build frontend assets
run: npm run build
- name: Upload deployment artifact
uses: actions/upload-artifact@v3.2.2-node20
with:
name: laravel-build
include-hidden-files: true
path: |
app
bootstrap
config
database
public
public/.htaccess
resources
routes
vendor
artisan
composer.json
package.json
vite.config.js
if-no-files-found: error
deploy:
name: Deploy
runs-on: ubuntu-latest
needs: build
steps:
- name: Download build artifact
uses: actions/download-artifact@v3-node20
with:
name: laravel-build
path: release
- name: Install SSH deployment tools
run: sudo apt-get update && sudo apt-get install -y openssh-client sshpass rsync
- name: Configure SSH
env:
DEPLOY_KNOWN_HOSTS: ${{ secrets.DEPLOY_KNOWN_HOSTS }}
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
if [ -n "$DEPLOY_KNOWN_HOSTS" ]; then
echo "$DEPLOY_KNOWN_HOSTS" >> ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
fi
- name: Deploy files with rsync over SSH
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
SSHPASS: ${{ secrets.DEPLOY_PASSWORD }}
run: |
if [ -z "$DEPLOY_PASSWORD" ]; then
echo "DEPLOY_PASSWORD secret is empty."
exit 1
fi
mkdir -p ~/.ssh
sshpass -e rsync -az --delete \
-e "ssh -p ${DEPLOY_PORT:-22} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password -o PubkeyAuthentication=no -o NumberOfPasswordPrompts=1" \
--exclude='.env' \
--exclude='storage/' \
--exclude='storage/logs/*' \
--exclude='storage/framework/cache/*' \
--exclude='storage/framework/sessions/*' \
--exclude='storage/framework/views/*' \
release/ "${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}"
sshpass -e ssh \
-p "${DEPLOY_PORT:-22}" \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
-o NumberOfPasswordPrompts=1 \
"${DEPLOY_USER}@${DEPLOY_HOST}" \
"test -f \"${DEPLOY_PATH}/public/.htaccess\" || { echo 'public/.htaccess missing after rsync'; exit 1; }"
- name: Create .env on server from secret
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
DEPLOY_ENV_FILE: ${{ secrets.DEPLOY_ENV_FILE }}
SSHPASS: ${{ secrets.DEPLOY_PASSWORD }}
run: |
if [ -z "$DEPLOY_ENV_FILE" ]; then
echo "DEPLOY_ENV_FILE secret is empty."
exit 1
fi
if [ -z "$DEPLOY_PASSWORD" ]; then
echo "DEPLOY_PASSWORD secret is empty."
exit 1
fi
printf '%s' "$DEPLOY_ENV_FILE" | sshpass -e ssh \
-p "${DEPLOY_PORT:-22}" \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
-o NumberOfPasswordPrompts=1 \
"${DEPLOY_USER}@${DEPLOY_HOST}" \
"mkdir -p \"${DEPLOY_PATH}\" && cat > \"${DEPLOY_PATH}/.env\" && chmod 600 \"${DEPLOY_PATH}/.env\""
- name: Run post-deploy Laravel commands
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
SSHPASS: ${{ secrets.DEPLOY_PASSWORD }}
run: |
if [ -z "$DEPLOY_PASSWORD" ]; then
echo "DEPLOY_PASSWORD secret is empty."
exit 1
fi
sshpass -e ssh \
-p "${DEPLOY_PORT:-22}" \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
-o NumberOfPasswordPrompts=1 \
"${DEPLOY_USER}@${DEPLOY_HOST}" \
"cd ${DEPLOY_PATH} && mkdir -p storage/framework/cache/data storage/framework/sessions storage/framework/views storage/logs bootstrap/cache && chmod -R ug+rw storage bootstrap/cache && php artisan optimize:clear && php artisan config:cache && php artisan route:cache && php artisan view:cache"
# Required repository secrets:
# - DEPLOY_HOST: Server hostname or IP.
# - DEPLOY_PORT: SSH port (optional, defaults to 22).
# - DEPLOY_USER: SSH user for deployment.
# - DEPLOY_PASSWORD: SSH password for deployment user.
# - DEPLOY_PATH: Absolute path of the Laravel app on the server.
# - DEPLOY_KNOWN_HOSTS: Optional pinned known_hosts line(s) for stricter host verification.
# - DEPLOY_ENV_FILE: Full .env content as a multiline secret (contains APP_KEY, DB_*, etc).

81
package-lock.json generated
View File

@@ -32,6 +32,25 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/@emnapi/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
"integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/@emnapi/runtime": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/wasi-threads": { "node_modules/@emnapi/wasi-threads": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
@@ -667,6 +686,68 @@
"node": ">=14.0.0" "node": ">=14.0.0"
} }
}, },
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
"version": "1.10.0",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
"version": "1.10.0",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
"version": "1.2.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.4",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@tybys/wasm-util": "^0.10.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
},
"peerDependencies": {
"@emnapi/core": "^1.7.1",
"@emnapi/runtime": "^1.7.1"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
"version": "0.10.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
"version": "2.8.1",
"dev": true,
"inBundle": true,
"license": "0BSD",
"optional": true
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz",

View File

@@ -0,0 +1,17 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
{{ __('Settings') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white dark:bg-gray-800 overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900 dark:text-gray-100">
{{ __('Settings') }}
</div>
</div>
</div>
</div>
</x-app-layout>

View File

@@ -48,7 +48,7 @@
@endif @endif
</header> </header>
<h1 class="text-2xl font-bold text-gray-800 dark:text-white">Git Courses</h1> <h1 class="text-2xl font-bold text-gray-800 dark:text-white">Test WebHook 5 Git Courses First Day</h1>
<div class="flex items-center justify-center w-full transition-opacity opacity-100 duration-750 lg:grow starting:opacity-0"> <div class="flex items-center justify-center w-full transition-opacity opacity-100 duration-750 lg:grow starting:opacity-0">
<main class="flex max-w-[335px] w-full flex-col-reverse lg:max-w-4xl lg:flex-row"> <main class="flex max-w-[335px] w-full flex-col-reverse lg:max-w-4xl lg:flex-row">

View File

@@ -20,6 +20,7 @@ Route::middleware('auth')->group(function () {
Route::get('/roles', [RoleController::class, 'index'])->name('roles.index'); Route::get('/roles', [RoleController::class, 'index'])->name('roles.index');
Route::get('/roles/create', [RoleController::class, 'create'])->name('roles.create'); Route::get('/roles/create', [RoleController::class, 'create'])->name('roles.create');
Route::post('/roles', [RoleController::class, 'store'])->name('roles.store'); Route::post('/roles', [RoleController::class, 'store'])->name('roles.store');
Route::view('/settings', 'settings.index')->name('settings.index');
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');

View File

@@ -2,9 +2,16 @@
namespace Tests; namespace Tests;
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase; use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase abstract class TestCase extends BaseTestCase
{ {
// protected function setUp(): void
{
parent::setUp();
$this->withoutVite();
$this->withoutMiddleware(PreventRequestForgery::class);
}
} }