跳到主要内容
返回文章列表

CodeQL ติดข้อจำกัดบน macOS 27, Xcode 27 และ Swift 6.4: วิธีคงสแกนใน CI

GitHub แนะนำ pin runner และ toolchain รุ่น 26 หรือต่ำกว่าเมื่อใช้ traced extraction

CodeQL ติดข้อจำกัดบน macOS 27, Xcode 27 และ Swift 6.4: วิธีคงสแกนใน CI

GitHub ประกาศเมื่อ 19 ตุลาคม 2026 ว่า CodeQL มีข้อจำกัดกับ macOS 27, Xcode 27 และ Swift 6.4 เพราะ Apple ไม่รวมโค้ด Intel x86_64 ใน system binaries และ libraries บางส่วนที่ CodeQL ต้องใช้เพื่อ trace การ build ผลกระทบสำคัญคือ workflow สแกนที่อาศัย traced extraction อาจหยุดทำงานหลังอัปเดต runner หรือ toolchain โดยทีมไม่ได้เปลี่ยนโค้ดแอปเลย

ภาษาและสภาพแวดล้อมที่กระทบ

เมื่อมี Xcode 27, traced extraction ใช้ไม่ได้สำหรับ C/C++, C#, Go, Java, Kotlin และ Swift บน macOS 27 ความสามารถดังกล่าวอาจไม่พร้อมสำหรับภาษาข้างต้น ส่วน Swift 6.4 นั้น CodeQL ยังไม่รองรับบนแพลตฟอร์มใดตามประกาศ GitHub ยังแจ้งว่าจะยุติการรองรับ Intel-based Macs ในช่วงกลางเดือนธันวาคม 2026 จึงควรวางแผน runner ระยะยาว ไม่ใช่แก้เฉพาะ build ครั้งถัดไป

จุดที่ทีม CI ต้องตรวจวันนี้

เปิด workflow ของ CodeQL และดูว่ามีการใช้ runner label แบบ latest หรือเลือก Xcode แบบอัตโนมัติหรือไม่ หาก runner อัปเดตเป็น macOS 27 หรือ Xcode 27 โดยไม่มีการ pin สแกนที่เคยผ่านอาจเริ่มล้มเหลว ให้บันทึกเวอร์ชัน runner, Xcode, Swift และ CodeQL จาก job log แล้วเทียบกับ matrix ที่ประกาศ อย่าพยายามแก้ด้วยการข้ามขั้น CodeQL เงียบ ๆ เพราะ pipeline สีเขียวแต่สูญการสแกนช่องโหว่เป็นความเสี่ยงอีกแบบ

GitHub แนะนำให้ pin workflow ไปที่ macOS 26 หรือเก่ากว่า และ Xcode 26 หรือเก่ากว่า หากสแกน Swift หรือใช้ traced build สำหรับภาษาอื่น บน GitHub Actions ให้ pin ทั้ง runner image และ toolchain แทนพึ่งชื่อเวอร์ชันล่าสุด สำหรับ C/C++, C# และ Java มีทางเลือก build mode none ซึ่งไม่ต้อง trace build แต่ควรทดสอบว่าความครอบคลุมและผลลัพธ์ของ repository ตนเองเหมาะหรือไม่ ไม่ควรสมมติว่าใช้แทน traced extraction ได้แบบไม่มีผลต่าง

วางแผนทางผ่านและการย้ายในอนาคต

ทำ branch ทดลองที่ใช้ toolchain ใหม่แล้วดู log ของ CodeQL แยกจาก build test ปกติ หาก build ผ่านแต่ extraction ไม่รองรับ ต้องรายงานเป็นสถานะความครอบคลุมการสแกน ไม่ใช่ defect ของโค้ด Swift ทันที สำหรับทีม iOS ที่ต้องใช้ Xcode 27 เพื่อ build แอปใหม่ อาจต้องแยก job build กับ job security scan บน toolchain ที่รองรับตามข้อจำกัด และบันทึกว่าผลสแกนไม่ได้ครอบคลุม syntax ใหม่ที่ CodeQL ยังไม่รองรับ

ติดตามประกาศ GitHub เรื่องการรองรับ Swift 6.4 และตาราง runner ก่อนย้ายกลับสู่ toolchain ล่าสุด ระหว่างนี้กำหนดวันทบทวน pin เพื่อไม่ให้ใช้เวอร์ชันเก่าอย่างถาวรโดยไม่มีเหตุผล การแก้ปัญหาที่ดีคือทำให้ CodeQL ยังคงรันจริง พร้อมเห็นชัดว่าข้อจำกัดใดเป็นของเครื่องมือและข้อจำกัดใดเป็นของโปรเจกต์

ประกาศต้นทาง: https://github.blog/changelog/2026-10-19-codeql-changes-for-macos-27-xcode-27-and-swift-6-4/