12 Commits

Author SHA1 Message Date
2b2ce9d645 fixinf ci.yml .htaccess
All checks were successful
CI Deploy Laravel / Test (push) Successful in 1m22s
CI Deploy Laravel / Build (push) Successful in 3m9s
CI Deploy Laravel / Deploy (push) Successful in 1m29s
2026-05-13 14:55:47 +08:00
320bb420e2 fixing test and deploy script
All checks were successful
CI Deploy Laravel / Test (push) Successful in 1m24s
CI Deploy Laravel / Build (push) Successful in 3m6s
CI Deploy Laravel / Deploy (push) Successful in 1m45s
2026-05-13 14:39:13 +08:00
9007daad49 fixing test and deploy script
All checks were successful
CI Deploy Laravel / Test (push) Successful in 1m32s
CI Deploy Laravel / Build (push) Successful in 3m35s
CI Deploy Laravel / Deploy (push) Successful in 1m29s
2026-05-13 12:39:02 +08:00
606faeda2a fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m20s
CI Deploy Laravel / Build (push) Successful in 3m41s
CI Deploy Laravel / Deploy (push) Failing after 1m38s
2026-05-13 12:24:56 +08:00
76ac6bbd9e fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m18s
CI Deploy Laravel / Build (push) Successful in 1m4s
CI Deploy Laravel / Deploy (push) Failing after 11s
2026-05-13 12:10:30 +08:00
9f699c581c fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m29s
CI Deploy Laravel / Build (push) Failing after 1m10s
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 12:06:22 +08:00
5dfbc44589 fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m19s
CI Deploy Laravel / Build (push) Failing after 1m5s
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 12:02:13 +08:00
f4c1878426 fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Successful in 1m35s
CI Deploy Laravel / Build (push) Failing after 1m19s
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 11:54:29 +08:00
6ac4b8f32c fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Failing after 1m19s
CI Deploy Laravel / Build (push) Has been skipped
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 11:50:46 +08:00
9fbd0b6edb fixing test and deploy script
Some checks failed
CI Deploy Laravel / Test (push) Failing after 1m20s
CI Deploy Laravel / Build (push) Has been skipped
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 11:47:46 +08:00
c6b9466a15 deploy test
Some checks failed
CI Deploy Laravel / Test (push) Failing after 2m19s
CI Deploy Laravel / Build (push) Has been skipped
CI Deploy Laravel / Deploy (push) Has been skipped
2026-05-13 11:40:17 +08:00
8a56581628 updated keramat 2026-05-12 16:28:24 +08:00
3 changed files with 203 additions and 2 deletions

201
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,201 @@
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 sshpass
run: sudo apt-get update && sudo apt-get install -y sshpass
- name: Install rsync
run: sudo apt-get install -y rsync
- name: Add SSH host to known_hosts
env:
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_KNOWN_HOSTS: ${{ secrets.DEPLOY_KNOWN_HOSTS }}
run: |
if [ -n "$DEPLOY_KNOWN_HOSTS" ]; then
echo "$DEPLOY_KNOWN_HOSTS" >> ~/.ssh/known_hosts
else
ssh-keyscan -p "${DEPLOY_PORT:-22}" "$DEPLOY_HOST" >> ~/.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
rsync -az --delete \
-e "sshpass -e ssh -p ${DEPLOY_PORT:-22}" \
--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}" "${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}" "${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}" "${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).

View File

@@ -53,7 +53,7 @@
<p class="text-xs font-semibold uppercase tracking-wider text-emerald-700">Local Neighborhood Portal</p> <p class="text-xs font-semibold uppercase tracking-wider text-emerald-700">Local Neighborhood Portal</p>
<div class="mt-3 flex flex-col gap-4 md:flex-row md:items-end md:justify-between"> <div class="mt-3 flex flex-col gap-4 md:flex-row md:items-end md:justify-between">
<div> <div>
<h1 class="text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl">Seremban News</h1> <h1 class="text-3xl font-bold tracking-tight text-slate-900 sm:text-4xl">Keramat News</h1>
<p class="mt-2 max-w-2xl text-sm text-slate-700 sm:text-base"> <p class="mt-2 max-w-2xl text-sm text-slate-700 sm:text-base">
Friendly updates from around the block. Stories are placeholders for now, but the spirit is real. Friendly updates from around the block. Stories are placeholders for now, but the spirit is real.
</p> </p>

View File

@@ -5,7 +5,7 @@ it('returns a successful response', function () {
$response $response
->assertSuccessful() ->assertSuccessful()
->assertSee('Taman Melawati News') ->assertSee('Keramat News')
->assertSee('Community Garden Harvest Day Set for Saturday') ->assertSee('Community Garden Harvest Day Set for Saturday')
->assertSee('Login') ->assertSee('Login')
->assertSee('Register'); ->assertSee('Register');