{
"title": "ade_manisss02_2022-05-10_10-01-23",
"type": "mp4",
"kind": "video",
"src": "https://cdn.yadisini.com/ade_manisss02_2022-05-10_10-01-23.mp4",
"thumb": "https://cdn.yadisini.com/ade_manisss02_2022-05-10_10-01-23.jpg",
"duration": 11,
"size": 2544791
},
====================
▶ node generate.js
data.json generated with metadata!
✅ PUBLISH DONE
user@DESKTOP-3L56DM4 MINGW64 /d/video-site (main)
$ git add .{
"title": "ade_manisss02_2022-05-10_10-01-23",
"type": "mp4",
"kind": "video",
"src": "https://cdn.yadisini.com/ade_manisss02_2022-05-10_10-01-23.mp4",
"thumb": "https://cdn.yadisini.com/ade_manisss02_2022-05-10_10-01-23.jpg",
"duration": 11,
"size": 2544791
},
▶ node generate.js
data.json generated with metadata!
✅ PUBLISH DONE
user@DESKTOP-3L56DM4 MINGW64 /d/video-site (main)
$ git add .
Done CORS Policy successfully updated. Your bucket is now configured with the specified CORS rules.Bagus. CORS sudah beres, berarti jalur R2 kamu makin solid.
Sekarang status sistem kamu kurang lebih sudah seperti ini:
- frontend di Pages
- media di R2
data.jsonpakai URL CDN- publish pipeline sudah jalan
- CORS sudah benar
Itu fondasi yang bagus banget.
Sekarang tinggal apa?
Langkah paling masuk akal sekarang adalah rapikan workflow jadi satu perintah penuh.
Saat ini kamu masih kemungkinan melakukan ini:
npm run publish
git add .
git commit -m "..."
git push origin main
Kita bisa bikin jadi:
npm run release
Lalu otomatis:
- upload ke R2
- generate
data.json - git add
- git commit
- git push
Tapi sebelum itu, satu cek penting
Buka langsung 1 file R2 di browser, misalnya:
https://cdn.yadisini.com/ade_manisss02_2022-05-10_10-01-23.mp4
Kalau file itu:
- bisa diputar atau terunduh normal → aman
- error → masih ada issue di public bucket/custom domain
Kalau itu sudah normal, kita lanjut full automation.
Next step yang saya sarankan: release.js
Buat file release.js begini:
import { execSync } from "child_process";
function run(cmd) {
console.log(`\n▶ ${cmd}`);
execSync(cmd, { stdio: "inherit" });
}
function getCommitMessage() {
const argMessage = process.argv.slice(2).join(" ").trim();
return argMessage || "update media library";
}
try {
const message = getCommitMessage();
console.log("🚀 START RELEASE");
run("node upload-r2.js");
run("node generate.js");
run("git add .");
run(`git commit -m "${message}"`);
run("git push origin main");
console.log("\n✅ RELEASE DONE");
} catch (err) {
console.error("\n❌ RELEASE FAILED");
process.exit(1);
}
Update package.json
Tambahkan script ini:
"release": "node release.js"
Jadi bagian scripts bisa seperti ini:
"scripts": {
"build": "node build.js",
"generate": "node generate.js",
"thumb": "node generate-thumb.js",
"r2": "node upload-r2.js",
"publish": "node publish.js",
"release": "node release.js"
}
Cara pakainya nanti
Kalau ada media baru:
npm run release -- "add new videos"
Atau kalau malas kasih pesan:
npm run release
Default commit message-nya akan jadi:
update media library
Kenapa ini step terbaik sekarang
Karena kamu sudah tidak butuh teori lagi.
Kamu butuh workflow yang makin sedikit gesekan.
Begitu ini jadi, alur kamu tinggal:
- taruh file di
media/ - jalankan
npm run release -- "pesan commit" - selesai
Itu enak banget dipakai harian.
Setelah release.js, pilihan kuat berikutnya ada dua
Yang paling masuk akal:
A. auto skip upload file yang sudah ada di R2
supaya tidak upload ulang semua file tiap kali release.
B. auto detect orientation video
supaya konten Instagram/TikTok bisa dilabeli vertical/horizontal.
Menurut saya, setelah release.js, yang paling berguna adalah skip upload file yang sudah ada, karena itu langsung menghemat waktu dan bandwidth.
Kalau mau, saya lanjut bikinkan release.js final + upload-r2 skip existing files.