- Forgejo v16.0 ที่ออกเมื่อวันที่ 16 กรกฎาคม 2026 ได้เพิ่มการควบคุมการแจ้งเตือนแยกตามที่เก็บ, ความคืบหน้าของการย้ายข้อมูล, การรีวิว pull request รวมถึงขยายความสามารถของ Actions และ API
- เสริมการป้องกัน SSRF โดยบล็อก HTTP redirect ของ Git mirror และรีโมตที่เปลี่ยนชื่อหรือเปลี่ยนเจ้าของแล้วจะต้องอัปเดตที่อยู่ mirror ด้วยตนเอง
- หากใช้การยืนยันตัวตนผ่าน reverse proxy ในคอนเทนเนอร์ ต้องระบุ ช่วงที่อยู่ proxy ที่เชื่อถือได้ และบางคอนฟิกเดิมที่เปิดพอร์ตเว็บเริ่มต้นออกสู่เครือข่ายที่ไม่น่าเชื่อถือจะไม่ทำงานอีกต่อไป
- เพิ่มการรีวิวหลายบรรทัด, การติดตามตำแหน่งคอมเมนต์ด้วย
git blame --reverse, ลำดับความสำคัญของการรัน Actions, Authorized Integrations แบบอิง JWT และ API สำหรับ log, artifact และการยกเลิก workflow - v16.0 เป็น รีลีสแบบไม่ใช่ LTS ที่รองรับถึง 29 ตุลาคม 2026 และควรสำรองข้อมูลทั้งหมดพร้อมตรวจสอบการเปลี่ยนแปลงด้านความเข้ากันได้ทั้งหมดก่อนอัปเกรด
การออกเวอร์ชันและการอัปเกรด
- Forgejo v16.0 คือแพลตฟอร์ม โฮสต์เองสำหรับการทำงานร่วมกันบนโค้ด แบบน้ำหนักเบาที่ขับเคลื่อนโดยชุมชน เปิดตัวเมื่อวันที่ 16 กรกฎาคม 2026
- ดูรายการการเปลี่ยนแปลงทั้งหมดได้จากบันทึกประจำรุ่น และมีอินสแตนซ์ทดสอบเฉพาะให้ใช้งานด้วย
- ก่อนอัปเกรดควรสร้าง ข้อมูลสำรองทั้งหมด ตามคู่มืออัปเกรด และตรวจสอบการเปลี่ยนแปลงด้านความเข้ากันได้ทั้งหมด
- วิธีอัปเกรดคือแทนที่ไบนารีหรืออิมเมจคอนเทนเนอร์ด้วยเวอร์ชันที่รองรับ v16.0
- มีทั้งไบนารี Forgejo v16.0.0 และอิมเมจคอนเทนเนอร์
- หากใช้งานแท็กคอนเทนเนอร์
16.0ก็จะตามแพตช์รีลีส16.0.Yล่าสุดโดยอัตโนมัติ
การเปลี่ยนแปลงด้านความเข้ากันได้และการเสริมความปลอดภัย
-
การป้องกัน SSRF ของ Git mirror
- แก้ปัญหาที่
[migrations].ALLOWED_DOMAINS,LOCKED_DOMAINS,ALLOW_LOCALNETWORKSใช้งานไม่ถูกต้องในบางกรณียกเว้น - ใช้
http.followRedirects=falseเพื่อป้องกันไม่ให้ Git ตาม redirect ระหว่างการเข้าถึงที่เก็บ HTTP(S) แล้วข้ามการตั้งค่าที่กำหนดไว้ - สำหรับรีโมต Forgejo ที่เปลี่ยนชื่อหรือถูกย้ายไปยังเจ้าของใหม่ ระบบจะมอง redirect เป็นข้อผิดพลาด ดังนั้น mirror เดิมต้อง อัปเดตเป็นที่อยู่ที่เก็บใหม่
- แก้ปัญหาที่
-
นำฟังก์ชันลบ EXIF ของอวาตาร์ออก
- ฟังก์ชัน ลบข้อมูลเมตา EXIF ออกจากภาพอวาตาร์ที่เพิ่มเข้ามาใน v13.0 ถูกนำออก เนื่องจากมีปัญหาเรื่องไลเซนส์จากการใช้ไลบรารี AGPL อย่างไม่ถูกต้อง
- ระหว่างที่กำลังพิจารณาวิธีติดตั้งใช้งานแบบอื่น จึงนำฟังก์ชันนี้ออกเพื่อให้กลับมาสอดคล้องกับข้อกำหนดด้านไลเซนส์
-
การตั้งค่า trusted proxy ของคอนเทนเนอร์
- คอนเทนเนอร์ Forgejo เดิมใช้ค่าเริ่มต้น
REVERSE_PROXY_TRUSTED_PROXIES = * - หากตรงตามเงื่อนไขทั้งหมดต่อไปนี้ ผู้ใช้ที่ไม่ได้รับอนุญาตอาจปลอมตัวเป็นผู้ใช้อื่นได้ผ่านเฮดเดอร์
X-WebAuth-User- ดีพลอยด้วยคอนเทนเนอร์บน Docker หรือ Podman
- ตั้งค่า
[service].ENABLE_REVERSE_PROXY_AUTHENTICATION=true - ไม่ได้เปลี่ยนค่าเริ่มต้น
*ของ[security].REVERSE_PROXY_TRUSTED_PROXIES - เปิดพอร์ตเว็บเริ่มต้น
:3000ออกสู่เครือข่ายที่ไม่น่าเชื่อถือ จนสามารถข้าม reverse proxy ที่ใช้ยืนยันตัวตนได้
- ใน v16 จะไม่ยอมรับการตั้งค่า reverse proxy ลักษณะนี้อีกต่อไป จึงต้องระบุ ช่วงที่อยู่ proxy ที่เชื่อถือได้ สำหรับทราฟฟิกขาเข้า
- ตัวอย่างการตั้งค่าผ่านตัวแปรแวดล้อมคือ
FORGEJO__security__REVERSE_PROXY_TRUSTED_PROXIES=127.0.0.0/8,::1/128,172.16.X.X/X - ใน
app.iniให้ตั้งค่าREVERSE_PROXY_TRUSTED_PROXIESใต้[security]ด้วยรายการที่อยู่แบบเดียวกัน
- คอนเทนเนอร์ Forgejo เดิมใช้ค่าเริ่มต้น
ความสะดวกในการใช้งานของที่เก็บและองค์กร
- ตอนนี้สามารถสมัครรับการแจ้งเตือนของที่เก็บโดยแยกเป็น 3 หมวดคือ Issues, Pull requests, Releases
- แบ็กเอนด์การแจ้งเตือนที่ออกแบบใหม่จะเป็นฐานรองรับการตั้งค่าที่ละเอียดขึ้นในอนาคต
- เป้าหมายคือให้ผู้ใช้ควบคุมการแจ้งเตือนได้ โดยไม่ต้องแสดงตัวเลือกมากเกินไป
- หน้าจอการย้ายที่เก็บจะแสดง ความคืบหน้า ของการย้าย issue และ pull request จากต้นทางเป็นชุด ๆ เพื่อให้ตรวจสอบได้ว่างานที่ใช้เวลานานหยุดค้างหรือไม่
- ขนาดชุดข้อมูลเริ่มต้นคือ 45 รายการ และจำนวนขั้นต่ำที่จะเริ่มแสดงความคืบหน้าก็คือ 45 รายการ
- สร้างอวาตาร์แบบย่อ 2 ขนาดสำหรับตำแหน่งที่ไม่ต้องใช้ภาพขนาดเต็ม เพื่อลด การใช้แบนด์วิดท์และเวลาโหลด
- จากรายชื่อสมาชิกองค์กร สามารถเปิดกล่องโต้ตอบเพื่อเพิ่มสมาชิกใหม่ได้โดยตรง และกำหนดให้หลายทีมพร้อมกันได้
- Git จะตรวจสอบและปฏิเสธความไม่สอดคล้องหลายรูปแบบในอ็อบเจ็กต์ที่รับเข้ามา เพื่อป้องกันไม่ให้ที่เก็บอยู่ในสถานะ ไม่สอดคล้องหรือเสียหาย
- จะไม่สร้างไฟล์ example hook ของ Git ในที่เก็บแบ็กเอนด์อีกต่อไป และ Git hook ส่วนกลางของอินสแตนซ์ก็จะไม่ถูกคัดลอกไปทุกที่เก็บ แต่เก็บไว้แบบรวมศูนย์
- ประหยัดพื้นที่ได้ประมาณ 20KiB ต่อที่เก็บ
- ไฟล์ตัวอย่างและไฟล์ที่สร้างซ้ำอัตโนมัติในที่เก็บเดิมสามารถลบได้ตามคู่มืออัปเกรด
- แก้บั๊กตั้งแต่ v7.0.0 ที่ทำให้ผู้ใช้ใหม่ไม่เห็นคำแนะนำให้เปิดใช้ความสามารถของที่เก็บเพิ่มเติม และปรับให้ค้นหาการตั้งค่าปิดคำแนะนำนี้ได้ง่ายขึ้น
- ข้อความ “Enable more” จะปรากฏเฉพาะเมื่อผู้ดูแลระบบหรือเจ้าของที่เก็บปิดบางความสามารถของที่เก็บไว้โดยชัดเจนเท่านั้น
Pull request และการรีวิวโค้ด
- ปรับเลย์เอาต์รายการคอมมิตในหน้า pull request ใหม่ให้อ่านง่ายขึ้นและรองรับขนาดหน้าจอได้ดีขึ้น
- ตอนนี้ใช้เฉพาะในหน้า pull request และมีแผนจะขยายไปยังหน้ารายการคอมมิตอื่น ๆ แบบค่อยเป็นค่อยไป
- รองรับ การรีวิวหลายบรรทัด ที่ผูกหลายบรรทัดที่เปลี่ยนแปลงเข้ากับคอมเมนต์รีวิวเดียว
- กด
Shiftค้างไว้ คลิกปุ่มบวกข้างบรรทัดแรก แล้วลากไปยังบรรทัดสุดท้ายเพื่อเลือกหลายบรรทัดเข้ากับคอมเมนต์เดียว
- กด
- แก้ปัญหาที่คอมเมนต์รีวิวไปแสดงใน diff หรือจุดบนหน้าจอที่ผิด หรือหลุดจากการเชื่อมโยงกับ diff
git blameแบบเดิมอาจหา位置ผิดเมื่อโค้ดเป้าหมายของคอมเมนต์ถูกย้ายในคอมมิตภายหลัง- ภายในระบบใช้
git blame --reverseเพื่อติดตามการเปลี่ยนแปลงของโค้ดมายังตำแหน่งปัจจุบัน - คำนวณตำแหน่งคอมเมนต์จากทั้ง base และ head ที่ผู้รีวิวกำลังดู รวมถึงคอมมิตของโค้ดที่กำลังแสดง ไม่ใช่อ้างอิงเฉพาะ HEAD ของ pull request ปัจจุบัน
- สำหรับบรรทัดที่ถูกลบ ระบบจะหาจุดเวลาที่ลบ ตรวจสอบว่าถูกลบในตำแหน่งเดียวกันของ diff ปัจจุบันหรือไม่ แล้วจึงวางคอมเมนต์หรือทำเครื่องหมายว่าเป็นคอมเมนต์เก่า
Forgejo Actions และการรวม JWT
-
ลำดับความสำคัญของการรันและการจัดการ workflow
- สามารถกำหนดให้การรัน workflow รายการใดรายการหนึ่งถูก เร่งลำดับความสำคัญ ได้ด้วยตนเอง และ Forgejo Actions จะประมวลผลก่อนการรันทั่วไป
- หากเป็นไปได้ Forgejo จะประเมินเงื่อนไข
ifเองโดยตรง แทนการส่งงานไปยัง Forgejo Runner ทำให้เริ่มรันได้เร็วขึ้น - สามารถลบการรัน workflow ที่เสร็จแล้ว รวมถึง log และ artifact ได้จากทั้ง UI หรือ HTTP API
- เฉพาะผู้ดูแลที่เก็บหรือ access token ที่มีสิทธิ์
write:repositoryเท่านั้นที่ลบได้
- เฉพาะผู้ดูแลที่เก็บหรือ access token ที่มีสิทธิ์
- นิพจน์
cronรองรับทั้งรูปแบบเดิมCRON_TZและ ไวยากรณ์ระบุเขตเวลา แบบ GitHub - เช็กที่ถูกข้ามซึ่งในเวอร์ชันก่อนหน้าแสดงว่า successful จะถูกแสดงเป็น skipped ตั้งแต่ v16 เป็นต้นไป
-
Authorized Integrations
- ต่อจาก v15 ที่เพิ่มความสามารถสร้าง JWT เพื่อให้ระบบภายนอกใช้ยืนยันตัวตนได้ v16 ได้เพิ่ม Authorized Integrations สำหรับยืนยันตัวตนการเข้าถึง Forgejo API และ Git ด้วย JWT
- ใช้กับ Forgejo Actions ภายในเครื่องได้ หรือจะตั้งกฎให้ Forgejo ตรวจสอบ JWT ใด ๆ ก็ได้
- เมื่อต้องการสิทธิ์ที่มากกว่าสิทธิ์ทั่วไปของ
${{ forgejo.token }}ก็สามารถตั้งค่า access token แบบคงที่ได้โดยไม่ต้องมาคอยหมุนเปลี่ยนในอนาคต - ไม่เปิดช่องให้ผู้เขียน workflow มอบสิทธิ์ที่เกินคาดให้ตัวเอง
- ใช้งานข้ามหลายที่เก็บของ Forgejo ได้
- ระบบภายนอกที่ตรงตามข้อกำหนดทางเทคนิคสามารถเข้าถึง Forgejo API และที่เก็บ Git ได้โดยตรงผ่าน Authorized Integration ของผู้ใช้ โดยไม่ต้องใช้ secret คงที่ระหว่างระบบ
- ตัวอย่างได้แก่ Amazon Web Services, GitHub Actions และ GitLab CI/CD
Actions และ API สำหรับผู้ดูแล
- เพิ่ม API สำหรับดึง log ของทั้งการรัน workflow ทั้งชุดหรือของแต่ละ job
- มี endpoint สำหรับแสดงรายการ ดาวน์โหลด และลบ artifact
- ส่วน endpoint ที่มีเอกสารสำหรับอัปโหลด artifact ยังอยู่ในรายการงานที่จะทำต่อไปในอนาคต
- เพิ่ม API สำหรับยกเลิกการรัน workflow รายการเดี่ยว
/actions/runจะคืนค่า ข้อมูลการรัน workflow ที่ผูกกับโทเคนอัตโนมัติFORGEJO_TOKEN- การเปลี่ยนแปลง API อื่น ๆ มีดังนี้
- โมเดลองค์กรที่หลาย endpoint ส่งกลับจะมีเวลา creation เพิ่มเข้ามา
- ค้นหา pull request โดยกรองตามชื่อสาขา base และ head ได้
- ผู้ดูแลอินสแตนซ์สามารถแสดงรายการ ออก และลบ access token ของผู้ใช้ได้
- กรองรายชื่อผู้ใช้ตามสถานะ 2FA ได้
ระยะเวลาการรองรับและบิลด์ทดสอบ
- รีลีสหลักออกทุก 3 เดือน ส่วนแพตช์รีลีสจะออกถี่กว่านั้นตามความรุนแรงของบั๊กหรือแพตช์ความปลอดภัยที่รวมอยู่
- v16.0 เป็น รีลีสแบบไม่ใช่ LTS ที่รองรับถึง 29 ตุลาคม 2026
- v11.0 LTS สิ้นสุดการรองรับเมื่อ 16 กรกฎาคม 2026
- v15.0 LTS รองรับถึง 15 กรกฎาคม 2027
- v17.0 มีกำหนดออกในวันที่ 15 ตุลาคม 2026 และจะรองรับถึง 28 มกราคม 2027
- สร้าง daily build
16.0-testจากการเปลี่ยนแปลงล่าสุดของสาขาพัฒนาv16.0/forgejoแล้วดีพลอยไปยังอินสแตนซ์ทดสอบ- มีทั้งroot OCI image, rootless OCI image, และไบนารี
- ชื่อบิลด์คงเดิม แต่จะถูกแทนที่ด้วยบิลด์ใหม่ทุกวัน
1 ความคิดเห็น
ความคิดเห็นจาก Lobste.rs
@pushcx, ลิงก์ suggest หายไปไหนแล้ว? ผมจะเสนอแท็ก
vcsแต่ตอนนี้ไม่เห็นลิงก์ในโพสต์ไหนเลยขอบคุณผู้มีส่วนร่วมทุกคน โดยเฉพาะ ทีม merge ส่วนตัวภูมิใจที่ได้มีส่วนช่วยแก้ไข https://forgejo.org/2026-07-release-v16-0/#repository-units-hint
ช่วงหลายวันที่ผ่านมา ผมตั้งค่าและปรับแต่ง Forge ส่วนตัวที่ https://forge.l3x.in พร้อมค่อย ๆ ย้ายจาก GitHub มา และประสบการณ์ โฮสต์ Forgejo เอง นั้นน่าพอใจมาก ขอแนะนำอย่างยิ่ง
ได้ยินว่า SourceHut ก็ดี แต่ยังไม่ได้ลองใช้เอง ตอนนี้กำลังโฟกัสกับ Forgejo
ดีใจที่มีฟีเจอร์ รีวิวหลายบรรทัดและการระบุตำแหน่งคอมเมนต์รีวิว ที่
$JOBไม่มี code review เลยไม่ค่อยคุ้น แต่ตอนที่ส่งแพตช์ไปยังโปรเจกต์เสรี/โอเพนซอร์สให้รีวิว ผมเคยเข้าใจผิดอยู่หลายครั้งว่าคอมเมนต์ชี้ไปที่บล็อกโค้ดไหนตั้งตารอ การตั้งค่าการ subscribe แบบละเอียด มาก เป็นฟีเจอร์ที่เคยใช้ใน GitHub เลยรู้สึกขาดมากใน Forgejo
ใน GitHub เองก็อยากได้ฟีเจอร์ให้ subscribe เมื่อมี issue และ PR ถูกสร้างใหม่ มานานแล้ว เพราะจะได้ติดตามสถานะการพัฒนาของโปรเจกต์ที่มีส่วนร่วมเป็นครั้งคราว โดยไม่ต้องคอย unsubscribe การแจ้งเตือนที่ไม่สนใจ 90% ทีละรายการ
ได้เปิด feature request ไว้ในรีโป Forgejo แล้ว: https://codeberg.org/forgejo/forgejo/issues/13494
ผมรัน Forgejo ในโฮมแล็บมาระยะหนึ่งแล้วและพอใจมาก ย้ายรีโปที่เคยอยู่บน Github.com มาประมาณ 500 รายการ กระบวนการแทบไม่ยุ่งยาก และตอนนี้รัน Forgejo กับ runner อยู่ใน k8s
จุดที่สะดวกเป็นพิเศษคือ Forgejo Runner ใช้ workflow definition แบบเดียวกับ GitHub Actions แค่สร้าง label ที่ถูกต้องให้ local runner ก็พอ
ยังไม่ได้ตัดสินใจว่าจะปล่อย GitHub ไว้แบบอ่านอย่างเดียว ลบทิ้ง หรือคงไว้เป็น mirror ที่เท่าเทียม ไม่ว่าจะทางไหน ตอนนี้ก็ push โดยตรงไปยังอินสแตนซ์ Forgejo แทน GitHub แล้ว และทุกอย่างเร็วขึ้นมากในระดับไม่กี่วินาที