- อธิบายขั้นตอนและผลลัพธ์อย่างละเอียดของ การย้ายโครงการส่วนตัวและเว็บไซต์จาก GitHub ไปยัง Codeberg
- ใช้ฟังก์ชัน “migrate from GitHub” ของ Forgejo เพื่อย้ายรีโพซิทอรี, Issue, PR, wiki และ release ได้อย่างสมบูรณ์
- ทำการแปลงลิงก์และจัดการ stub ของรีโพซิทอรี GitHub ด้วยสคริปต์อัตโนมัติ เพื่อระบุว่ามีการย้ายอย่างชัดเจน
- ในการย้าย CI/CD ใช้ Forgejo Actions ของ Codeberg และออกแบบ workflow ให้มีขนาดเล็กลงให้เหมาะกับข้อจำกัดด้านสภาพแวดล้อม
- ใช้ git-pages และ Grebedoc ย้ายเว็บไซต์แบบไม่หยุดทำงาน และเสร็จสิ้นการย้ายทั้งหมดภายในสุดสัปดาห์
ภาพรวมการย้าย
- ย้ายเว็บไซต์ที่โฮสต์บน GitHub Pages และรีโพซิทอรี 45 แห่งไปยัง Codeberg
- กระบวนการไม่จบแค่คลิกเดียว และต้องทำงานด้วยตัวเองหลายขั้นตอน
- กระบวนการทั้งหมดเสร็จสิ้นภายในช่วงสุดสัปดาห์ โดยราบรื่น
- วัตถุประสงค์คือเพื่อแสดงให้เห็นว่า นักพัฒนาอื่น ๆ ก็สามารถย้ายได้อย่างง่ายดาย
ขั้นตอนที่ 1: การย้ายรีโพซิทอรี
- Codeberg เป็นแพลตฟอร์มที่พัฒนาบน Forgejo และมีฟังก์ชัน “migrate from GitHub”
- สร้าง Personal Access Token (PAT) ใน GitHub เพื่อดึงข้อมูล metadata อย่างเช่น issue มาได้ด้วย
- เนื่องจากข้อจำกัด rate limit ของ GitHub API การดึงข้อมูลหลายรีโพซิทอรีพร้อมกันอาจล้มเหลวได้
- Issue, PR, wiki และ release ถูกย้ายมาได้ครบถ้วน ทำให้ไม่จำเป็นต้องอ้างอิง GitHub อีกต่อไป
ขั้นตอนที่ 2: การกำหนดเส้นทางลิงก์ใหม่
- แปลงลิงก์ GitHub ภายในรีโพซิทอรีในเครื่องให้เป็นที่อยู่ของ Codeberg แบบรวมเป็นชุด
- ใช้คำสั่ง
sed และ find สำหรับการแทนที่ข้อความแบบอัตโนมัติด้วยการประมวลผลข้อความ (text-based)
- อัปเดต
git remote URL ของแต่ละรีโพซิทอรีเป็น Codeberg แล้ว push ไปยังทุกรีโพซิทอรี
ขั้นตอนที่ 3: การจัดการ stub ของรีโพซิทอรี GitHub
- เพิ่ม README ประกาศการย้ายข้อมูลในรีโพซิทอรี GitHub และแก้คำอธิบายพร้อมลิงก์หน้าเว็บหลักไปยัง Codeberg
- เขียนสคริปต์อัตโนมัติแล้วนำไปใช้กับรีโพซิทอรีหลายตัวพร้อมกัน
- ใช้คำสั่ง
gh repo archive เพื่อ archive repository
ขั้นตอนที่ 4: การย้าย CI/CD
- เอกสาร CI ของ Codeberg เน้นหลักการลดการใช้พลังงานอย่างมาก
- จึงคงไว้เฉพาะโปรเจกต์ที่จำเป็นต้องมี CI เท่านั้น (เช่น เว็บไซต์, การ build เอกสาร)
- Codeberg รองรับระบบ CI สองแบบ คือ Woodpecker และ Forgejo Actions
- เลือกใช้ Forgejo Actions ที่ใกล้เคียงกับ GitHub Actions มากที่สุด
- ความแตกต่างหลัก
- Actions ส่วนใหญ่ทำงานได้เช่นเดิม
- มีให้เฉพาะ Linux runner เท่านั้น ไม่รองรับ macOS·Windows
- ติดตั้งซอฟต์แวร์เริ่มต้นน้อย และทรัพยากรมีจำกัด
- การใช้ lazy runners ช่วยให้กระจายโหลดและทำงานแบบเป็นมิตรต่อสิ่งแวดล้อมได้
- เพื่อปรับปรุงประสิทธิภาพ CI ได้ใช้ Docker image ที่มี LaTeX ติดตั้งล่วงหน้า แต่เนื่องจากปัญหาเรื่องเวอร์ชันจึงต้องกลับไปใช้ภาพ Ubuntu พื้นฐาน
ขั้นตอนที่ 5: การย้ายโฮสต์เว็บไซต์ใหม่
- ต้องการย้ายเว็บไซต์ที่รันอยู่บน GitHub Pages ไปยัง Codeberg Pages แต่ฟีเจอร์ดังกล่าวอยู่ในโหมด maintenance mode
- การอัปเดตถูกเลื่อนออกไปเนื่องจากความซับซ้อนและปัญหาด้านประสิทธิภาพ
- ทางเลือกคือการค้นพบและใช้ git-pages และ Grebedoc
- รองรับการอัปโหลดก่อนการเปลี่ยน DNS ทำให้สามารถย้ายแบบไม่มี downtime ได้
- รองรับ server-side redirection และ custom headers
- ย้ายเสร็จโดยยังคงลิงก์เดิม (
eldred.fr/fortISSimO)
- Codeberg มีแผนค่อยๆ ย้ายไปใช้ git-pages ในอนาคต
- พึงพอใจมากกว่า GitHub Pages จึงเข้าร่วมการสนับสนุนผ่าน Patreon ของผู้พัฒนา git-pages
เวลาที่ใช้
- การย้ายรีโพซิทอรี (ขั้นตอนที่ 1~3): ครึ่งวัน
- การย้าย CI (ขั้นตอนที่ 4): ครึ่งวัน
- การย้ายเว็บไซต์ (ขั้นตอนที่ 5): ใช้เวลาเป็นวัน โดยรวมการจัดการ technical debt
- โดยรวมแล้วทำเสร็จ ภายในสุดสัปดาห์ งานง่ายกว่าที่คาด
หลังการย้าย
- เว็บไซต์ยังทำงานได้ตามปกติ ไม่มีปัญหาฟังก์ชัน ปรับขนาดสาขา
master ของ GitHub เท่านั้น
- ลิงก์ถาวร (permalink) ยังคงทำงานได้
- การลบรีโพซิทอรี GitHub ถูกหยุดชั่วคราวเนื่องจากไม่มีการ redirect
- บัญชี GitHub ยังคงไว้สำหรับใช้ร่วมพัฒนากับโปรเจกต์อื่น
- การย้ายไป Codeberg อาจทำให้จำนวนผู้ร่วมมีแนวโน้มลดลง แต่มีผู้ใช้บางส่วนที่สร้างบัญชี Codeberg แล้วและยังคงร่วมพัฒนาต่อเนื่อง
ขอบคุณ
- Catherine ‘whitequark’: การรันและดูแล git-pages และ Grebedoc
- ทีม SERVFAIL network: การให้บริการ DNS
- ผู้ร่วมพัฒนา Codeberg และ Forgejo: การจัดเตรียมโครงสร้างพื้นฐานเพื่อการย้าย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สิ่งที่สะดุดตาใน เรื่องการย้ายครั้งนี้ ไม่ใช่ประเด็นทางเทคนิค แต่คือประเด็นที่ว่า ‘feature parity’ ไม่ใช่อุปสรรคที่แท้จริง
Codeberg เพียงพอสำหรับเวิร์กโฟลว์ประจำวัน แต่ยังขาด network effect และ inertia ที่ GitHub สั่งสมมา
มันถูกออกแบบบนพื้นฐานของโปรโตคอลอย่าง Bluesky เพื่อให้ อัตลักษณ์และความเชื่อมโยง ยังคงอยู่ไม่ว่า Git จะโฮสต์อยู่ที่ไหน
หายากที่จะกลับไปหา issue ที่เคยเห็นชัดๆ มาก่อนอีกครั้ง ประสิทธิภาพช่วงหลังก็ดีขึ้นแล้ว แต่ถ้าเป็นโปรเจกต์ที่มี issue หลายร้อยรายการ ก็ควรลองทำ test migration ก่อน
เรื่องอย่าง CI/CD ไม่จำเป็นที่ทั้งทีมต้องรู้ แค่มีสักคนที่เชี่ยวชาญก็พอ
Codeberg เป็นฟอร์กของ Gitea และ Gitea ก็เป็นฟอร์กของ Gogs
ทั้งสองฟอร์กเริ่มต้นขึ้นด้วย เหตุผลทางปรัชญา มากกว่าเหตุผลทางเทคนิค และ Joe Chen ผู้สร้าง Gogs ก็มีบทบาทสำคัญมาก
Gitea ถูกฟอร์กเพราะมีนักพัฒนาคนหนึ่งผูกขาดสิทธิ์ในรีโพซิทอรี ส่วน Forgejo เป็นฟอร์กที่สร้างขึ้นเพื่อทวงคืนสิทธิ์ในเครื่องหมายการค้าของ Gitea
สงสัยว่ามีใครใช้ Codeberg ร่วมกับ F-Droid บ้างไหม
อยากรู้ว่ามันสามารถตรวจจับรีลีสอัตโนมัติได้เหมือน GitHub หรือเปล่า
ดูเหมือนว่าจะถึง จุด threshold effect แล้ว
ช่วงไม่กี่วันที่ผ่านมาเห็นหลายโปรเจกต์ ย้ายออก จาก GitHub
เลยสงสัยว่ามีเหตุการณ์หรือเทรนด์อะไรอยู่หรือไม่
ความไม่พอใจในชุมชนโอเพนซอร์สสะสมมาเรื่อยๆ จนถึงจุดวิกฤต
ประเด็นถกเถียงเรื่อง AI และการทำเป็นแพลตฟอร์มโฆษณา ของ Microsoft โดยรวม รวมถึงการสิ้นสุดการสนับสนุน Windows 10 ก็น่าจะมีผลด้วย
แนวคิดนี้ถูกเสนอครั้งแรกใน เธรด Twitter นี้
รู้สึกว่าสมัยที่ยังใช้ Rails นั้นดีกว่า
คืออาจเป็นเพียงกระแสชั่วคราวที่ได้รับความสนใจมากเกินจริงเมื่อเทียบกับความเป็นจริง
สงสัยว่ามีทางเลือกแทน GitHub แบบไหนที่เหมาะกับ ทีมเล็กหรือผู้พัฒนาเดี่ยว บ้าง
Codeberg ดูเน้น FOSS จึงอาจไม่เหมาะกับการใช้งานเชิงพาณิชย์
GitLab มีฟีเจอร์เยอะ แต่ดูแลรักษาหนัก
นอกจากนี้ยังมีฟอร์จ FOSS หลากหลายแบบ เช่น Gitea, Gogs, Phorge
มันไม่ได้ลอก UI ของ GitHub และฉันชอบ อินเทอร์เฟซที่ตอบสนองทันที แบบเดียวกับการทำงานบนเครื่องโลคัล
ไม่จำเป็นต้องย้ายเพียงเพราะ “ไม่ชอบ Microsoft”
สุดท้ายเลยเอาโปรเจกต์ใหม่ขึ้น Codeberg และคงบางส่วนไว้เป็น private mirror บน GCP
ฉันยังเคยตั้ง เธรด Ask HN ที่เกี่ยวข้อง แต่ก็ไม่มีใครตอบ
ถ้าดู บล็อกโพสต์ของ eldred.fr เหตุผลของผู้เขียนก็ดูสมเหตุสมผล แต่ในมุมผู้ใช้ แทบไม่รู้สึกว่าดีขึ้นเลย
พอลองใช้ Codeberg แล้ว
ตัวอย่าง: https://codeberg.org/dnkl/foot
ดูเหมือนว่าการวาง README ไว้เป็นหน้าหลักจะดีกว่า
ในเวอร์ชันเสียเงินยังสามารถปรับแต่งรูปภาพได้ด้วย
ถ้าทำให้ต่างเกินไปก็อาจยิ่งโดนต่อต้าน
การซ่อนปุ่มล็อกอิน GitHub เป็นการตัดสินใจที่ยึดชุมชนเป็นศูนย์กลาง และถ้าต้องการก็สามารถ เสนอผ่าน PR ได้
เป้าหมายคือหาทางเลือกที่ มีจริยธรรมมากกว่า แต่ยังมีฟังก์ชันเหมือน GitHub
ถ้าไม่ถือว่า AI scan ของ GitHub เป็นปัญหา ก็สงสัยว่ามีเหตุผลแบบ ไม่เกี่ยวกับการเมือง ไหมที่ควรย้าย
สงสัยว่า Codeberg มี CI runner ฟรี ให้หรือไม่
มีการคาดกันว่า GitHub ใช้งบกับ CI มากกว่า 100 ล้านดอลลาร์ต่อปี
แต่การพูดถึงต้นทุนด้านสิ่งแวดล้อมอาจกลับทำให้ผู้ใช้ไม่อยากมีส่วนร่วม
สำหรับคนสายเทคนิค การอธิบายในฐานะ ปัญหาการปรับประสิทธิภาพ น่าจะได้ผลมากกว่า
ฉันเคยผิดหวังที่ Codeberg เอาเหตุการณ์ สแปมในอดีต ไปขยายความเป็น “แคมเปญแห่งความเกลียดชังจากฝ่ายขวาจัด” พร้อมชมตัวเองเกินจริง
แค่ยอมรับว่าป้องกันไม่สำเร็จก็น่าจะพอแล้ว แต่กลับเอาไปใส่กรอบทางการเมือง
ลิงก์ที่เกี่ยวข้อง: issue, การถกเถียงบน HN, บล็อกโพสต์
ถ้าคุณหมดความเคารพเพราะเรื่องนั้น ปัญหาก็อาจไม่ได้อยู่ที่โปรเจกต์ แต่อยู่ที่มุมมองนั้นเอง
ฉันเองก็เคย ย้ายรีโพซิทอรี ไป Codeberg แล้วสุดท้ายก็กลับมาที่ GitHub
แม้จะไม่ชอบหลายฟีเจอร์ของ GitHub แต่ Codeberg ยังขาด แรงดึงดูดด้านการทำงานร่วมกัน
สำหรับคนดูแลโปรเจกต์คนเดียว การมองเห็นและ network effect เป็นสิ่งจำเป็นมาก