Root cause & solusi permanen tanpa GitHub App
Beberapa waktu lalu, saya mengalami masalah yang membuat frustrasi:
Cloudflare Pages tiba-tiba gagal deploy dengan error
Repository not found. Semua deployments setelahnya berstatus
"No deployment available".
Padahal sebelumnya berjalan normal — commit ke GitHub, auto-deploy ke Cloudflare Pages. Saya cek log: "fatal: repository 'https://github.com/...' not found". Repository jelas ada, SSH masih berfungsi. Ada apa?
Cloudflare Pages menggunakan GitHub App untuk meng-clone repository saat deploy. App ini terinstall di akun GitHub Anda dengan izin akses ke repo tertentu. Masalah terjadi ketika:
target_id di konfigurasi CloudflareRepository not found atau Not Found?target_id=...&state=... yang stale
Akar masalahnya ada di state management Cloudflare.
Saat Anda pertama kali menghubungkan GitHub ke CF Pages, Cloudflare menyimpan
installation_id dari GitHub App. Ketika App di-uninstall (karena expired
atau revoke), ID itu menjadi tidak valid — tapi Cloudflare tetap menyimpannya.
Akibatnya, setiap kali Anda klik "Configure installation", Cloudflare mengirim request ke GitHub dengan ID yang sudah mati, dan GitHub menjawab 404. Bahkan setelah uninstall manual dari GitHub sekalipun, state di Cloudflare tetap nyangkut.
Memang ini bug di sisi Cloudflare — mereka seharusnya melakukan refresh token. Tapi yang penting bagi kita: ada solusi yang lebih baik.
Solusi paling stabil: Skip GitHub App sepenuhnya. Gunakan GitHub Actions yang memanggil Wrangler CLI untuk deploy.
Keuntungannya:
1. Buat CF API Token
Masuk ke Cloudflare Dashboard → My Profile → API Tokens → Create Token. Pilih "Create Custom Token":
[project-name]-pages-deployCopy token saat muncul pertama kali — hanya keluar sekali.
2. Simpan Token di GitHub Secrets
Buka repo di GitHub → Settings → Secrets and variables → Actions → New repository secret:
CF_API_TOKEN3. Buat Workflow File
Buat file .github/workflows/deploy.yml di root repo:
name: Deploy to Cloudflare Pages
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: <CF_ACCOUNT_ID>
command: pages deploy . --project-name=<PROJECT_NAME> --branch=main
Ganti <CF_ACCOUNT_ID> dengan Account ID dari Cloudflare Dashboard
(ada di URL dashboard atau di ~/.wrangler/cache/wrangler-account.json).
Ganti <PROJECT_NAME> dengan nama project Pages Anda.
4. Push & Deploy
Commit workflow file dan push ke GitHub. Buka tab Actions di repo Anda untuk melihat progress deployment. Selesai!
Jika Anda tetap ingin menggunakan GitHub App, berikut cara bersihkannya:
https://github.com/settings/installationshttps://github.com/settings/apps → tab Authorized OAuth Appshttps://github.com/apps/cloudflare-workers-and-pages/installations/newCatatan: Jika Anda punya beberapa akun GitHub, pastikan App terinstall di akun yang pemilik repo, bukan akun lain.
Error 404 saat setup GitHub App Cloudflare Pages bukan masalah yang langka. Root cause-nya adalah stale state di Cloudflare yang menyimpan ID instalasi lama setelah App di-uninstall atau token expired.
Solusi paling stabil: Gunakan GitHub Actions + Wrangler CLI. Metode ini tidak bergantung pada GitHub App, tidak pernah 404, dan memberikan kontrol lebih atas proses deployment.
Semoga membantu Anda yang mengalami masalah serupa. Feel free untuk reach out lewat kontak di bawah jika ada pertanyaan.
Di balik error 404 ini, ada pelajaran yang lebih dalam dari sekadar teknis. Saat tekanan menumpuk dan task dikerjakan paralel, produktivitas justru turun. Kami mencoba mengerjakan dua repo sekaligus, dua task berbeda — dan hasilnya? 0% selesai. Dua-duanya mentok.
Prinsip yang sering kami pegang: "Apa yang kita fokuskan, itulah yang membesar." Fokus ke dua hal = tidak fokus ke satu pun = tidak ada yang membesar. Mengerjakan tugas secara sequential (satu per satu, 100% baru lanjut) jauh lebih produktif daripada paralel yang cuma 50%-50%.
Empat domain kehidupan — belajar, keluarga, bisnis, dakwah — semuanya harus 100% seimbang. Bukan 100% di satu domain, 0% di sisanya. Di sinilah kegagalan CF 404 ini menjadi guru: jika tidak 100%, hasilnya 0%. Error 404 itu adalah bukti bahwa kami tidak fokus 100%.
Semoga yang membaca error serupa tidak hanya menemukan solusi teknis, tapi juga cahaya dari pengalaman yang kami lewati.
Punya project yang butuh deployment automation?
Kami bantu setup CI/CD, Cloudflare Pages, atau infrastruktur lainnya.
🔧 Cara Membersihkan Webshell dari Hosting
🏢 Kenapa Shared Hosting Bahaya untuk Multi-Site
🔬 Anatomi Automated Attack