นักพัฒนาแชร์เครื่องมือและเวิร์กโฟลว์สำหรับการกระจายแพ็กเกจ Homebrew อัตโนมัติ

ทีมชุมชน BigGo
นักพัฒนาแชร์เครื่องมือและเวิร์กโฟลว์สำหรับการกระจายแพ็กเกจ Homebrew อัตโนมัติ

ชุมชนนักพัฒนาได้มีการพูดคุยกันอย่างกระตือรือร้นเกี่ยวกับเครื่องมือและเวิร์กโฟลว์อัตโนมัติต่างๆ สำหรับการกระจายแพ็กเกจซอฟต์แวร์ผ่าน Homebrew ซึ่งเป็นตัวจัดการแพ็กเกจยอดนิยมของ Apple สำหรับ macOS การสนทนานี้เกิดขึ้นจากความท้าทายในการดูแลรักษา Homebrew taps แบบกำหนดเองและการอัปเดตสูตรแพ็กเกจให้ทันกับรุ่นใหม่

เครื่องมือเฉพาะภาษาเสนอแนวทางทางเลือก

นักพัฒนาหลายคนได้เน้นย้ำถึงเครื่องมือเฉพาะสำหรับภาษาโปรแกรมมิ่งต่างๆ ที่สามารถทำให้กระบวนการกระจาย Homebrew ง่ายขึ้น สำหรับนักพัฒนา Go นั้น Goreleaser ได้กลายเป็นโซลูชันที่มีประโยชน์เป็นพิเศษ ที่ทำให้การสร้างและจัดการสูตร Homebrew เป็นแบบอัตโนมัติเมื่อกระจายแอปพลิเคชันไบนารี เครื่องมือนี้จัดการกับความซับซ้อนส่วนใหญ่ที่เกี่ยวข้องกับการดูแลรักษาคำจำกัดความของแพ็กเกจ และสามารถลดงานที่ต้องทำด้วยมือสำหรับแต่ละรุ่นได้อย่างมาก

นักพัฒนา Python เผชิญกับความท้าทายเฉพาะตัวเมื่อกระจายผ่าน Homebrew เนื่องจากแพลตฟอร์มต้องการการจัดการ dependencies และ virtual environments อย่างระมัดระวัง ชุมชนได้พัฒนาเครื่องมือเช่น uvbrew เพื่อช่วยสร้างคำจำกัดความทรัพยากรที่จำเป็นสำหรับแพ็กเกจ Python แม้ว่านักพัฒนาบางคนจะประสบความสำเร็จกับ wrapper scripts ที่ง่ายกว่า ซึ่งใช้การจัดการ dependency แบบ built-in ของ uv

หมายเหตุ: Goreleaser เป็นเครื่องมือโอเพ่นซอร์สที่ทำให้การสร้างและปล่อยโปรเจ็กต์ Go ข้ามหลายแพลตฟอร์มและตัวจัดการแพ็กเกจเป็นแบบอัตโนมัติ

เครื่องมือหลักสำหรับการแจกจ่าย Homebrew

เครื่องมือ ภาษา วัตถุประสงค์
Goreleaser Go ทำให้การแจกจ่าย binary และการสร้าง formula เป็นแบบอัตโนมัติ
uvbrew Python สร้างคำจำกัดความ resource ของ Homebrew สำหรับแพ็กเกจ Python
homebrew-bump-revision ใดๆ GitHub Action สำหรับการอัปเดต formula แบบอัตโนมัติ
brew test-bot ใดๆ การทดสอบแบบอัตโนมัติสำหรับ formula ของ Homebrew

เวิร์กโฟลว์อัตโนมัติลดภาระการดูแลรักษา

การอภิปรายเผยให้เห็นแนวทางหลายวิธีในการทำให้กระบวนการอัปเดตสูตร Homebrew เป็นแบบอัตโนมัติเมื่อมีการปล่อยซอฟต์แวร์เวอร์ชันใหม่ นักพัฒนาบางคนชอบการอัปเดตสูตรจากด้านโปรเจ็กต์ต้นทาง โดยผลักดันการเปลี่ยนแปลงไปยัง Homebrew tap ของตนโดยอัตโนมัติเมื่อใดก็ตามที่พวกเขาแท็กรุ่นใหม่ ส่วนคนอื่นๆ สนับสนุนการทำงานอัตโนมัติฝั่ง tap ที่สแกนหาการอัปเดตเป็นระยะและสร้าง pull requests พร้อมการทดสอบที่เหมาะสม

ในความคิดเห็นของผม อาจจะเหมาะสมกว่าที่จะทำการอัปเดตจากฝั่ง tap คล้ายกับที่ upstream ทำ เวิร์กโฟลว์นี้ช่วยให้คุณจัดการการอัปเดตได้แม้กระทั่งสำหรับ formulae/casks ที่คุณไม่ได้เป็นเจ้าของ

ชุมชนได้สร้าง GitHub Actions และเวิร์กโฟลว์ต่างๆ เพื่อจัดการการอัปเดตเหล่านี้โดยอัตโนมัติ โดยโซลูชันบางตัวเสนอการทดสอบแบบครอบคลุมผ่านระบบ test-bot ของ Homebrew เพื่อให้แน่ใจว่าการอัปเดตทำงานได้อย่างถูกต้องก่อนการปรับใช้

แนวทางการทำงานอัตโนมัติ

  • การอัปเดตจากฝั่งต้นทาง: อัปเดต tap โดยอัตโนมัติเมื่อมีการติดแท็กรุ่นใหม่ในโปรเจกต์หลัก
  • การสแกนจากฝั่ง Tap: ตรวจสอบการอัปเดตเป็นระยะและสร้าง pull request ที่ผ่านการทดสอบแล้ว
  • การผสานรวมกับ GitHub Actions: ใช้ workflow เพื่อจัดการการอัปเดตและการทดสอบ formula
  • Personal Access Tokens: จำเป็นสำหรับการ commit อัตโนมัติไปยัง tap repository

ชุมชนสำรวจโซลูชันการจัดการแพ็กเกจทางเลือก

แม้ว่า Homebrew จะยังคงได้รับความนิยม แต่สมาชิกชุมชนบางคนกำลังสำรวจระบบการจัดการแพ็กเกจทางเลือก Nix ได้รับความสนใจในฐานะโซลูชันที่ครอบคลุมมากขึ้นสำหรับการจัดการระบบ แม้ว่าจะมาพร้อมกับเส้นโค้งการเรียนรู้ที่ชันกว่า การอภิปรายเน้นย้ำว่าเครื่องมือต่างๆ ตอบสนองความต้องการที่แตกต่างกัน โดย Homebrew เป็นเลิศในด้านความเรียบง่ายและการผสานรวมกับ GitHub ในขณะที่โซลูชันอื่นๆ เสนอฟีเจอร์ขั้นสูงกว่า เช่น reproducible builds และความเข้ากันได้ข้ามแพลตฟอร์ม

การสนทนาที่กำลังดำเนินอยู่แสดงให้เห็นถึงลักษณะที่กระตือรือร้นของชุมชนนักพัฒนาในการแบ่งปันความรู้และสร้างเครื่องมือที่ทำให้การกระจายซอฟต์แวร์เข้าถึงได้ง่ายขึ้น ความพยายามร่วมมือเหล่านี้ช่วยลดอุปสรรคสำหรับนักพัฒนาอิสระที่ต้องการกระจายเครื่องมือ command-line ของตนผ่านตัวจัดการแพ็กเกจที่มีชื่อเสียง โดยไม่ต้องติดอยู่กับงานดูแลรักษาที่ซับซ้อน

อ้างอิง: DISTRIBUTING YOUR OWN SCRIPTS VIA HOMEBREW