- ขณะย้ายบางโปรเจ็กต์ จาก GitHub ไปยัง Codeberg ผู้เขียนได้สรุปวิธีเริ่มย้ายโดยใช้ความพยายามให้น้อยที่สุด
- ผ่าน ฟีเจอร์นำเข้าที่เก็บโค้ด ของ Codeberg สามารถย้ายได้ครบทั้ง issue, PR และ release และ UI กับเวิร์กโฟลว์ก็คล้าย GitHub
- การโฮสต์หน้าเว็บแบบสแตติก สามารถใช้ codeberg.page แทนได้ และยังมีทางเลือกอย่าง grebedoc.dev หรือ statichost.eu
- ความยากที่สุดคือ การตั้งค่าสภาพแวดล้อม CI โดยต้องยอมเสีย macOS runner และโควตาการรันฟรีของ GitHub และสามารถใช้ Forgejo Actions หรือ Woodpecker CI แทนได้
- หลังย้ายแล้ว สามารถคงที่เก็บโค้ดบน GitHub ไว้เป็น อาร์ไคฟ์แบบอ่านอย่างเดียวหรือทำมิเรอร์ เพื่อไม่ตัดขาดจากระบบนิเวศโอเพนซอร์สโดยสิ้นเชิง
กระบวนการย้ายจาก GitHub ไปยัง Codeberg
- อธิบายระดับความยากและความสะดวกของการย้ายจริง โดยอิงจากประสบการณ์ที่เริ่ม ย้ายบางที่เก็บโค้ดจาก GitHub ไป Codeberg
- แม้จะเคยเลื่อนการย้ายออกไปเพราะคิดว่า Codeberg ยังไม่พร้อมพอ แต่สำหรับบางโปรเจ็กต์ การย้ายอาจง่ายกว่าที่คิด
- เป้าหมายไม่ใช่การตั้งค่าที่สมบูรณ์แบบ แต่คือการหาวิธี เริ่มย้ายได้ง่ายที่สุด
-
การย้ายที่เก็บโค้ดและ issue
- Codeberg มีฟีเจอร์ นำเข้าที่เก็บโค้ดจาก GitHub (import) และสามารถย้าย issue, PR, release และ artifact ที่เกี่ยวข้องได้พร้อมกัน
- ระหว่างกระบวนการนี้ หมายเลข issue, label และข้อมูลผู้เขียน จะยังคงเดิม
- UI ของ Codeberg แทบจะเหมือน GitHub และให้ประสบการณ์ที่ง่ายกว่าขั้นตอนซับซ้อนที่มักต้องใช้เมื่อย้ายจาก issue tracker อื่นมายัง GitHub มาก
-
การโฮสต์หน้าเว็บแบบสแตติก
- หากเดิมใช้ GitHub Pages ก็สามารถใช้ codeberg.page แทนได้
- แม้จะไม่มี การรับประกันความพร้อมใช้งานอย่างเป็นทางการ (SLO) แต่ผู้เขียนระบุว่ายังไม่เคยพบ downtime จริง
- ใช้วิธี push HTML ไปยัง branch ซึ่งมี โครงสร้างคล้าย GitHub Pages
- อีกทางเลือกคือ grebedoc.dev หรือ statichost.eu
-
ความท้าทายของสภาพแวดล้อม CI (การผสานรวมต่อเนื่อง)
- ส่วนที่ยากที่สุดระหว่างการย้ายคือ การตั้งค่าสภาพแวดล้อม CI
- GitHub มี macOS runner ฟรี และ โควตาการรันไม่จำกัดสำหรับที่เก็บโค้ดสาธารณะ แต่บน Codeberg ต้องยอมเสียสิ่งเหล่านี้
- แนวทางแก้คือใช้ การ cross-compile ตามภาษา และ self-hosting ของ Forgejo Actions runner
-
Forgejo Actions กับ Woodpecker CI
- บน Codeberg นั้น Woodpecker CI มีความเสถียรกว่า แต่ Forgejo Actions ให้สภาพแวดล้อมที่คุ้นเคยกว่าสำหรับผู้ใช้ GitHub Actions
- ทั้ง UI และ ไวยากรณ์ YAML แทบเหมือนกัน และเวิร์กโฟลว์ GitHub Actions เดิมส่วนใหญ่ก็ทำงานได้ตามเดิม
- ตัวอย่างเช่น ส่วนที่ใช้
uses: dtolnay/rust-toolchain ใน GitHub Actions
บน Forgejo Actions ก็แค่เปลี่ยนเป็น uses: https://github.com/dtolnay/rust-toolchain
- ปัจจุบันเอกสารของ Forgejo Actions บน Codeberg ยังไม่อัปเดตล่าสุด และมี PR ที่เกี่ยวข้องอยู่
-
กรณีที่ต้องใช้ macOS runner
- หากจำเป็นต้องมีการ build บน macOS จริง ๆ ก็สามารถ ใช้ GitHub Actions ต่อไป แล้วทำมิเรอร์ commit จากที่เก็บโค้ดบน Codeberg ไปยัง GitHub ได้
- สามารถตั้งค่าให้ Forgejo Actions โพล GitHub API เพื่อ ซิงก์สถานะ CI กลับมายัง Codeberg ได้
- ผู้เขียนยังลองใช้บริการ CI อื่นที่รองรับการ build บน macOS ด้วย แต่การเชื่อมต่อกับ Codeberg ก็ไม่ได้ง่ายไปกว่า GitHub Actions
-
วิธีจัดการกับที่เก็บโค้ดบน GitHub
- หลังย้ายแล้ว มีการแก้ README ของที่เก็บโค้ดบน GitHub และตั้งเป็นอาร์ไคฟ์
- สามารถตั้งให้ Codeberg push commit กลับไป GitHub ได้เช่นกัน แต่ในกรณีนั้นผู้ใช้ก็ยังสามารถ เปิด PR และคอมเมนต์ใน issue ได้อยู่
- บางกรณีมีการ ปิดฟีเจอร์ issue ของที่เก็บโค้ดบน GitHub แต่ถ้าทำแบบนั้น issue ทั้งหมดจะหายไปเป็น 404 และ ไม่สามารถปิด PR ได้
- ตัวอย่างเช่น ที่เก็บโค้ด
libvirt/libvirt ใช้ GitHub Action ที่ปิด PR ทั้งหมดอัตโนมัติ
- แนวทางแบบนี้อาจส่งผล เชิงลบต่อการโฮสต์เองและระบบนิเวศโอเพนซอร์สโดยรวม
- ผู้ใช้อาจหมดแรงจูงใจที่จะช่วยปรับปรุงการเพิ่มประสิทธิภาพการ build หรือความถี่ในการดาวน์โหลดไฟล์ release
- ในช่วงเปลี่ยนผ่าน อาจพิจารณา คงมิเรอร์แบบอ่านอย่างเดียว หรือ ใช้งาน GitHub Pages และ Actions ควบคู่กัน ได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ไม่ได้เกลียด Codeberg เองหรอก แต่ก็ยัง ไม่ใช่ตัวแทน GitHub แบบครบถ้วน
มันมีข้อจำกัดเยอะถ้าจะใช้ลงคลังโค้ดส่วนตัวหรือสคริปต์ทดลอง และ private repository ก็จำกัดที่ 100MB
อีกทั้งยังโฮสต์เว็บไซต์แบบ GitHub Pages ไม่ได้ด้วย ถ้าจะใช้ในลักษณะนี้ การ self-host Forgejo เองน่าจะเป็นทางเลือกที่ใช้งานได้จริงกว่า
รายละเอียดที่เกี่ยวข้องสรุปไว้ดีใน Codeberg FAQ
เหตุผลง่าย ๆ ที่ผมเอาโปรเจกต์ OSS ไปไว้บน GitHub ก็เพราะ ชุมชนอยู่ที่นั่น
ถ้าจะแค่เก็บโค้ด ผมโฮสต์เองตรง ๆ ผ่าน SSH หรือ SFTP
ผมลงทุกอย่างไว้แค่ใน Gitea instance ส่วนตัว และไม่ได้สนใจเรื่องดาวหรือการโปรโมต
ผมใช้ Forgejo แบบ self-host จัดการโปรเจกต์ส่วนตัวทั้งหมดอยู่ และไม่คิดถึง GitHub เลย
ยังจำกัดการเข้าถึงด้วย Tailscale เพื่อ บล็อก AI crawler ได้ด้วย
ต่อไปการประเมิน GitHub ทางเลือกน่าจะยิ่งสำคัญขึ้น
แต่ GitHub ได้สร้าง มาตรฐานด้าน CI และ multi-architecture build ไปแล้ว ทำให้ทางเลือกที่ขับเคลื่อนโดยชุมชนแข่งได้ยาก
GitHub ให้หลายอย่างแบบ “ฟรี” ก็จริง แต่สิ่งที่ต้องจ่ายอาจเป็นการถูกเอาไป เก็บข้อมูลและใช้ฝึกโมเดล
ส่วน Codeberg ไม่รองรับ private repository ทำให้แม้แต่จะกัน Copilot ไม่ให้ไล่เก็บ public repository ก็ยังทำไม่ได้
ตาม Codeberg FAQ ถ้าต้องการ private project ก็แนะนำให้ self-host Forgejo
บริษัทของเราได้ย้ายจาก GitHub ไปเป็น GitLab แบบ self-host เต็มตัวแล้ว
วางไว้หลัง Tailscale เลยไม่ต้องปวดหัวกับ SSO และรัน CI runner บน EKS กับ GPU cluster ถ้าใครกำลังคิดจะย้ายแบบคล้าย ๆ กัน ผมน่าจะช่วยได้
การพูดแค่ว่า “มาแทน GitHub กันเถอะ” ไม่ค่อยมีความหมาย ต้องมี นิสัยการใช้งานใหม่และคุณค่าที่นำเสนอใหม่
เหมือนที่ GitHub เคยมาแทน SourceForge แพลตฟอร์มรุ่นถัดไปจะต้อง เชื่อมการเขียนโค้ดกับการทำงานร่วมกันแบบเรียลไทม์
เช่นอาจกลายเป็นโครงสร้างแบบ Google Docs ที่ ทุก prompt สร้าง commit ได้เลย
Codeberg ฟังดูเป็นอุดมคติ แต่ในความเป็นจริง ปัญหาเรื่องเสถียรภาพ ยังใหญ่
เพราะรันโดยไม่ใช้ Cloudflare จึง เปราะบางต่อ DDoS และมี downtime บ่อย ระหว่างพัฒนาแล้วเข้า remote repository ไม่ได้มันน่าหงุดหงิดมาก
แทบไม่ได้ใช้ GitHub เลยตั้งแต่ Microsoft เข้าซื้อไป ผมกลับชอบ workflow แบบอิงอีเมลที่เรียบง่ายของ Sourcehut มากกว่า
และคิดว่า CI ถ้าจะให้พอก็แค่เป็นแบบ ใช้คำสั่งที่รันจาก local ได้ ก็พอ
repository โค้ดโดยเนื้อแท้แล้วควรเป็น โครงสร้างแบบกระจายศูนย์และเฟเดอเรต
ด้วย ระบบลายเซ็นเชิงเข้ารหัสของ git (GPG/SSH) เราจึงแยกความน่าเชื่อถือของ repository ออกจากความน่าเชื่อถือของ commit ได้
ส่วนกลางควรมีแค่ key server กับการจัดการ namespace ที่เหลือควรกระจายออกไป