Skip to content

feat: add configuration and testing for API types and providers - #1

Merged
n-devs merged 13 commits into
mainfrom
fix/test
Jun 26, 2026
Merged

feat: add configuration and testing for API types and providers#1
n-devs merged 13 commits into
mainfrom
fix/test

Conversation

@nattbl49

Copy link
Copy Markdown
Collaborator
  • Introduced config.ts to manage API type paths, provider bases, and default types.
  • Implemented functions to resolve API types and URLs based on provider and environment variables.
  • Added unit tests for API type paths, provider bases, and utility functions using Vitest.
  • Updated index.ts to utilize new configuration and resolution functions, improving maintainability.
  • Enhanced package.json with Vitest as a testing dependency and added test scripts.

- Introduced `config.ts` to manage API type paths, provider bases, and default types.
- Implemented functions to resolve API types and URLs based on provider and environment variables.
- Added unit tests for API type paths, provider bases, and utility functions using Vitest.
- Updated `index.ts` to utilize new configuration and resolution functions, improving maintainability.
- Enhanced package.json with Vitest as a testing dependency and added test scripts.
@github-actions

Copy link
Copy Markdown

🤖 GitHub Copilot Code Review Bot

⚠️ AI API returned status 400. Response: bad request: Authorization header is badly formatted

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-4o-mini via github-models

⚠️ AI API returned status 413. Response: {"error":{"code":"tokens_limit_reached","message":"Request body too large for gpt-4o-mini model. Max size: 8000 tokens.","details":"Request body too large for gpt-4o-mini model. Max size: 8000 tokens.

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-4o via github-models

⚠️ AI API returned status 413. Response: {"error":{"code":"tokens_limit_reached","message":"Request body too large for gpt-4o model. Max size: 8000 tokens.","details":"Request body too large for gpt-4o model. Max size: 8000 tokens."}}

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-4o via github-models

รีวิวโค้ด

โค้ดที่คุณเขียนมาน่าสนใจทีเดียว มีการอัปเกรดหลายส่วนและมีความพยายามในการปรับปรุงโค้ดให้เป็นโมดูลย่อยและรองรับผู้ให้บริการ AI หลายเจ้า อย่างไรก็ตาม ยังมีบางส่วนที่สามารถปรับปรุงเพิ่มเติม และมีความเสี่ยงด้านความปลอดภัยที่ควรระวัง ดังนี้:


ข้อเสนอแนะในการปรับปรุง

  1. จัดการ Environment Variables ให้เรียบร้อยมากขึ้น

    • มีการใช้งาน environment variables หลายตัว มีโค้ดบางส่วนยังซ้ำซ้อน เช่น process.env.INPUT_API_KEY ?? process.env.API_KEY ?? GH_PAT ?? "".
    • อาจจัดกลุ่ม environment variables เหล่านี้เป็น config class/ module แยก เพื่อการจัดการที่ง่ายขึ้น และช่วยเพิ่มความ readability ของโค้ด เช่น:
      const config = {
         ghPat: process.env.INPUT_GH_PAT || process.env.GH_PAT,
         prNumber: process.env.INPUT_PR_NUMBER || process.env.PR_NUMBER,
         ...
      };
  2. จัดการค่าผู้ให้บริการ (Providers)

    • คุณได้เริ่มแยก provider constants ออกมาที่โมดูล config_1 อย่างดีแล้ว แต่ยังสามารถเพิ่มโครงสร้างให้ project ดู modular มากขึ้น เช่น สามารถแยก provider-specific logic สำหรับการตั้งค่า header และ behaviours แยกใน class/ function เจาะจงของแต่ละ provider.
  3. แก้ไขโค้ดที่ไม่จ��เป็น

    • ในส่วน console.log("Copilot token obtained."); อาจใช้ logging library เพื่อการ debug/debugging อย่างเหมาะสมและสามารถเปิด/ปิดได้ง่าย
  4. Documentation และ Comment

    • มีบางจุดขาด Comment ที่สำคัญ เช่นฟังก์ชัน getCopilotToken. อธิบายวิธีการใช้งานและ Input/Output อย่างชัดเจนจะเป็นประโยชน์สำหรับผู้ที่มาดูโค้ดภายหลัง

ความเสี่ยงด้านความปลอดภัย

  1. Hardcoded URL

    • URL ในโค้ดหลายจุดระบุไว้ตรงๆ เช่น https://api.github.com/repos/${REPO}/issues/${PR_NUMBER}/comments. ถ้า service หรือ URL เปลี่ยน ตัวโค้ดจะเสียได้ และยังเสียง่ายต่อการโจมตี supply chain attack. ควรมีการจัดการ URL ให้เป็น config หรือตั้งค่าจาก environment ตัวอย่างเช่น:
      const GITHUB_API_BASE_URL = process.env.GITHUB_API_BASE_URL || "https://api.github.com";
  2. การจัดการ Secrets ไม่ปลอดภัยพอ

    • ตัว EXPLICIT_API_KEY และ GH_PAT มีการอ่านและเก็บค่าในตัวแปรโดยตรง หากมีการเขียน log ในกระบวนการโดยไม่ได้ระมัดระวัง อาจทำให้ Secrets เหล่านี้ถูกเปิดเผย.
    • แนะนำใช้ library เช่น dotenv หรือ secret management library ที่เหมาะสม.
  3. การตั้งค่า Headers สำหรับ API

    • การตั้งค่า Header อาจส่งผลกระทบในด้านความปลอดภัย หากเจอ headers ที่ custom หรือไม่ได้ทำ sanitization ในการใช้งาน ขอแนะนำให้ตรวจสอบและ sanitize ข้อมูลที่รับเข้าอย่างระมัดระวัง
  4. ไม่มีการ Validate Input

    • ตัวโค้ดไม่ได้มีการ validate input ที่รับเข้ามาอย่างเพียงพอ เช่น PR_NUMBER หรือ LANGUAGE ควรเพิ่มการตรวจสอบค่า เพื่อป้องกัน input ที่ผิดพลาดหรือ malicious input แฝงมา.
  5. โหมด Default ที่ปลอดภัย

    • Default provider ที่ใช้ตั้งค่าเป็น copilot โดยอัตโนมัติ แนะนำให้เปลี่ยนเป็นการให้ผู้ใช้งานเลือก provider อย่างชัดเจนหรือแจ้งเตือนเมื่อไม่สามารถกำหนดค่าที่ถูกต้องได้.

โดยรวมถือว่าโค้ดมีทิศทางที่ดีมาก โดยเฉพาะการเพิ่มฟังก์ชันใหม่ๆ และใช้ประโยชน์จากโมดูลที่ถูกออกแบบใหม่ อย่างไรก็ตาม การแก้ไขในจุดที่กล่าวมาข้างต้นจะช่วยให้ Codebase มีความปลอดภัยและมีประสิทธิภาพสูงขึ้น สมค���รทำการทดสอบในกรณีต่างๆ อย่างละเอียดเสมอก่อน merge เข้าสู่ master/main branch.

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-5-mini via github-models

⚠️ AI API returned status 400. Response: {"error":{"code":"unavailable_model","message":"Unavailable model: gpt-5-mini","details":"Unavailable model: gpt-5-mini"}}

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-5-mini via github-models

⚠️ AI API returned status 400. Response: {"error":{"code":"unavailable_model","message":"Unavailable model: gpt-5-mini","details":"Unavailable model: gpt-5-mini"}}

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-5-mini via github-models

⚠️ AI API returned status 400. Response: {"error":{"code":"unavailable_model","message":"Unavailable model: gpt-5-mini","details":"Unavailable model: gpt-5-mini"}}

@github-actions

Copy link
Copy Markdown

AI Code Review — gpt-4o via github-models

สวัสดีครับ! ต่อไปนี้คือบทวิเคราะห์เกี่ยวกับโค้ด diff ที่ได้รับมา:

คำแนะนำการปรับปรุง

  1. ชื่อโมเดลที่ใช้ใน default

    • ในไฟล์ action.yml คุณได้เปลี่ยนค่าดีฟอลต์ของโมเดลจาก "gpt-5-mini" เป็น "gpt-4o" ซึ่งอาจทำให้เกิดปัญหาถ้าหากผู้ใช้งานต้องการโมเดลที่เล็กและเร็วกว่า เช่น "gpt-5-mini". อาจจำเป็นต้องให้ผู้ใช้งานเลือกโมเดลที่เหมาะสมกับการใช้งานแทนการเปลี่ยนค่า default.
  2. เพิ่มความชัดเจนในเอกสาร

    • การเพิ่มคำอธิบายที่ชัดเจนเกี่ยวกับ api_key ในไฟล์ action.yml เป็นสิ่งที่ดี แต่ส่วนที่เกี่ยวกับ github-models ยังไม่ชัดเจนพอเกี่ยวกับการใช้งาน GITHUB_TOKEN ซึ่งควรมีตัวอย่างให้ผู้ใช้งานทราบเช่นว่า:
      • ถ้าต้องการใช้ github-models ในไฟล์ workflow ควรใช้ GITHUB_TOKEN โดยตรงหรือมีการตั้งค่าอะไรเพิ่มเติมหรือไม่
  3. การตั้งค่าค่า language

    • ในการเพิ่ม "Thai" ตรง language ควรจะระบุในเอกสารว่า feature รองรับภาษาหรือไม่ และระบุว่าอาจมีการจำกัดการให้บริการของ AI model ในบางภาษา เช่น ภาษาไทย เพื่อให้ผู้ใช้งานทราบก่อนเริ่มใช้งาน
  4. เพิ่มการตรวจสอบความถูกต้องของค่า Input

    • สำหรับค่า api_key ในกรณีที่ provider คือ copilot คุณควรมีการตรวจสอบ หรือแจ้งเตือนเมื่อพบว่า GITHUB_TOKEN ถูกใช้แทนหรือเป็นค่า default API key โดยไม่ได้มี Copilot subscription.
  5. เพิ่มตัวแปรความเข้ากันได้

    • มีการเปลี่ยนชื่อ provider จาก copilot เป็น github-models ซึ่งอาจทำให้เกิดความสับสนสำหรับผู้ใช้งานที่เคยชินกับโครงสร้างฟังก์ชันแบบดั้งเดิม ดังนั้นควรรักษาความเข้ากันได้ (backward compatibility) เพื่อให้ใช้งานได้ทั้งชื่อ copilot และ github-models.

ข้อผิดพลาดด้านความปลอดภัย

  1. การใช้ GITHUB_TOKEN เป็น api_key

    • แม้ว่าการใช้ GITHUB_TOKEN จะปลอดภัยสำหรับบาง use case เช่น GitHub Models แต่คุณต้องระวังในกรณีที่ Token ดังกล่าวถูกบันทึกลงใน log file เนื่องจากอาจเปิดเผย token ของระบบ GitHub Actions ได้ ดังนั้นการปกป้องข้อมูล token ผ่านการติด debug log หรือ error log ควรทำการตรวจสอบว่าไม่มีการพิมพ์ออกมาในที่ที่ไม่ปลอดภัย.
  2. ความปลอดภัยในการใช้งาน api_url

    • ในบาง provider เช่น ollama และ custom ต้องระบุ URL เอง ซึ่งอาจนำไปสู่การใช้งานเซิร์ฟเวอร์ที่ไม่ปลอดภัย หรือไม่ได้รับรองความปลอดภัยโดย GitHub ส่งผลให้ข้อมูลสำคัญอาจถูกขโมยหรือถูกโจมตีได้.
  3. ขาดการเข้ารหัสข้อความ

    • หากข้อความที่ถูกส่งไปยัง provider (เช่น diff code) ไม่มีการเข้ารหัสก่อนถูกส่งไปยัง endpoint API อาจเสี่ยงต่อการถูกโจมตีแบบ man-in-the-middle ซึ่งอาจส่งข้อมูลสำคัญหลุดได้

ข้อเสนอแนะแนวทางการแก้ไขเพิ่มเติม

  • ใส่การแจ้งเตือน/ตรวจสอบเพิ่มเติมเพื่อปกป้องข้อมูลสำคัญใน logs ของ GitHub Actions โดยเฉพาะ api_key หรือ GITHUB_TOKEN.
  • เพิ่มฟังก์ชันเข้ารหัสข้อมูลใน dist/index.js ก่อนส่งไปยัง API endpoints เพื่อเพิ่มความปลอดภัย.
  • ทบทวนการเปลี่ยนชื่อและค่าที่เป็น default หากมีผลกระทบต่อ backward compatibility ควรเพิ่มการรองรับสำหรับผู้ใช้งานที่คุ้นเคยกับโปรเจคในเวอร์ชันก่อนหน้า

@n-devs
n-devs merged commit 4a774b4 into main Jun 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants