Skip to content

Prediksi ML Harian

Prediksi ML Harian #49

Workflow file for this run

name: Prediksi ML Harian
on:
schedule:
# 22:00 UTC = 05:00 WIB (target). Digeser 1 jam lebih awal sebagai buffer:
# scheduled workflow GitHub kerap molor 30-60 menit di awal jam, jadi run
# nyata biasanya mendarat ~05:30-06:00 WIB (sebelum/pas pukul 06:00).
- cron: "0 22 * * *"
workflow_dispatch: {}
jobs:
predict:
runs-on: ubuntu-latest
timeout-minutes: 30
# Hanya jalan di repo utama (bukan fork) supaya secrets tersedia.
if: github.repository == 'udinvoldigoad/SAIBAR'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: ml-api/requirements.txt
- name: Install dependensi
working-directory: ml-api
run: pip install -r requirements.txt
- name: Tes konektivitas API cuaca dari runner
run: |
failed=0
for url in \
"https://api.open-meteo.com/v1/forecast?latitude=-5.45&longitude=105.26&daily=precipitation_sum&timezone=Asia%2FJakarta" \
"https://marine-api.open-meteo.com/v1/marine?latitude=-5.55&longitude=105.32&daily=wave_height_max&timezone=Asia%2FJakarta" \
"https://archive-api.open-meteo.com/v1/archive?latitude=-5.45&longitude=105.26&start_date=2026-07-01&end_date=2026-07-02&daily=precipitation_sum&timezone=Asia%2FJakarta"; do
echo "== $url"
# -f: HTTP >= 400 ikut menggagalkan (curl exit 22); kegagalan jaringan
# dicatat dan dijumlahkan, lalu job keluar non-zero di akhir — kalau
# tidak, step ini tak pernah menggagalkan run walau semua API mati.
if curl -fsS --max-time 20 -o /dev/null -w " HTTP %{http_code} dalam %{time_total}s\n" "$url"; then
:
else
echo " GAGAL/TIMEOUT"
failed=1
fi
done
exit $failed
- name: Jalankan prediksi & tulis ke database
working-directory: ml-api
timeout-minutes: 15
env:
PYTHONUNBUFFERED: "1"
PYTHONFAULTHANDLER: "1"
DB_CONNECTION: pgsql
DB_HOST: ${{ secrets.SUPABASE_DB_HOST }}
DB_PORT: ${{ secrets.SUPABASE_DB_PORT }}
DB_DATABASE: ${{ secrets.SUPABASE_DB_DATABASE }}
DB_USERNAME: ${{ secrets.SUPABASE_DB_USERNAME }}
DB_PASSWORD: ${{ secrets.SUPABASE_DB_PASSWORD }}
# timeout SIGABRT: bila proses menggantung >10 menit, faulthandler
# mencetak stack trace Python tepat di titik macetnya lalu keluar.
run: timeout --signal=SIGABRT 10m python main.py --mode predict