Prediksi ML Harian #49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |