Sends messages to Google Chat spaces via webhooks, with automatic conversion of Markdown to Cards V2 format, image URL validation, and fallback to plain text messaging.
Google Chat Webhook MCP Server
An MCP (Model Context Protocol) server that sends messages to Google Chat via webhooks. Automatically converts Markdown to Google Chat Cards V2 format with image validation, structured logging, and fallback handling.
Features
π MCP Protocol Support: Integrates with Claude Code, GitHub Copilot, and other MCP clients
οΏ½ MCP Protocol Support: Integrates with Claude Code, GitHub Copilot, and other MCP clients
οΏ½π Markdown β Cards V2 Auto-conversion: Supports headers, lists, code blocks, tables, images, and more
πΌοΈ Image URL Validation: Validates with HEAD requests (HTTP status, Content-Type, size)
π Auto Fallback: Automatically falls back to text when Cards V2 fails
π Structured Logging: JSON format with 30-day retention
β Test Automation: Snapshot tests, integration tests, CI/CD pipeline
Installation
npm (Recommended)
From Source (Development)
Google Chat Webhook Setup
Before configuring the MCP server, create a Google Chat Webhook URL:
Open your Google Chat space
Menu β "Apps & integrations" β "Manage webhooks"
Click "Add webhook"
Enter a name and copy the URL
Use it in the configuration below
MCP Client Configuration
1. Claude Code
Config File Location
Windows:
%USERPROFILE%\.claude.jsonmacOS/Linux:
~/.claude.json
Note: Claude Desktop uses different paths:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
npm Installation
Source Installation
β οΈ Note: Use \\ or / for Windows paths (e.g., C:/path/to/...)
Configuration Scopes
Claude Code supports three configuration scopes:
User Scope (Global):
~/.claude.json- Available across all projectsProject Scope (Shared):
.mcp.jsonin project root - Version-controlled, team-sharedLocal Scope (Private): Project-specific, personal settings
Priority: Local > Project > User
Project-Scoped Configuration (.mcp.json)
For team-shared MCP servers, create .mcp.json in your project root:
Benefits:
β Version-controlled with Git
β Team-shared configuration
β Environment variable support:
${VAR}or${VAR:-default}β Project-specific MCP servers
Environment Variables: Each team member can set their own webhook URL:
How to Apply
User-scoped configuration (~/.claude.json):
Edit
~/.claude.json(or%USERPROFILE%\.claude.jsonon Windows)Save the file
Restart Claude Code if already running
Project-scoped configuration (.mcp.json):
Create
.mcp.jsonin project rootSet environment variables for sensitive data
Commit
.mcp.jsonto version controlUse commands like "Send a message to Google Chat"
2. GitHub Copilot (VS Code)
VS Code GitHub Copilot supports MCP through agent mode. Configure MCP servers in workspace or user settings.
Configuration File Locations
Choose one of the following:
User Settings:
~/.vscode/settings.jsonor%APPDATA%\Code\User\settings.json(Windows)Workspace Settings:
.vscode/settings.jsonin your project rootClaude Code Config (Auto-import): Copy from
~/.claude.json
Configuration (mcp.json format)
Add to settings.json:
Features
Agent Mode Integration: MCP tools available in agent workflow
Per-Session Tool Selection: Choose which tools to enable per session
STDIO & SSE Support: Both transport types supported
Debugging: Restart commands and output logging built-in
Using with Agent Mode
Open GitHub Copilot Chat in VS Code
Enable agent mode (if not already enabled)
Start a conversation - Copilot will automatically access MCP tools
Tools require approval before execution
Example:
π Note: GitHub Copilot's MCP support includes agent mode, allowing sophisticated workflows. Make sure you're using the latest VS Code and GitHub Copilot extension.
3. Other MCP Clients
Works with any MCP-compatible client:
Usage
MCP Tools (3 Tools)
Available tools in Claude Code or other MCP clients:
1. send_google_chat_text
Send simple text messages
Example (Claude Code):
Parameters:
2. send_google_chat_cards_v2
Send Cards V2 format directly (advanced users)
Parameters:
3. send_google_chat_markdown β Recommended
Convert Markdown to Cards V2 and send
Example (Claude Code):
Parameters:
Options:
cardTitle: Title shown at the top of the card (optional)fallbackToText: Auto-send as text on conversion failure (default: false)
Claude Code Usage Example
After setup, Claude will automatically use MCP tools when you chat naturally:
π€ User:
"Send a project status update to Google Chat. Show 3 completed tasks and 2 in-progress tasks as a markdown list."
π€ Claude:
(Automatically calls
send_google_chat_markdowntool)I've sent the message to Google Chat. The project status has been updated.
Supported Markdown Syntax
Markdown written in Claude or MCP clients is automatically converted to Google Chat Cards V2.
Syntax | Markdown Example | Google Chat Rendering |
Headers |
| Bold with size differences |
Bold |
| bold |
Italic |
| italic |
Inline Code |
|
|
Code Block |
| Syntax-highlighted box |
Ordered List |
| 1. First 2. Second |
Unordered List |
| β’ Item |
Nested List |
| γβ’ nested (Em space) |
Table |
| Monospace table |
Image |
| Image widget (after validation) |
Link |
| Clickable link |
Horizontal Rule |
| Divider |
Blockquote |
| Indented + gray text |
Example Markdown:
See documentation for details.
.env File (Development)
Create .env in project root:
Limitations
Google Chat API Constraints
Item | Limit | Workaround |
Image Protocol | HTTPS only | HTTP URLs replaced with text links |
Image Size | Max 5MB | Show as link on validation failure |
Image Auth | Public URLs only | No access if auth required |
Content-Type |
| HTML pages rejected |
Markdown Support | Limited | Unsupported syntax approximated |
Markdown Conversion Limitations
β Fully Supported:
Headers (H1~H6)
Bold, italic, inline code
Ordered/unordered lists (up to 3 levels)
Code blocks (syntax highlighting)
Tables (monospace)
Links, images
β οΈ Partial Support:
Complex nesting β Simplified
HTML tags β Converted to text
Blockquotes β Shown as indents
β Not Supported:
Footnotes
Definition lists
Math formulas (LaTeX)
Task checkboxes (
- [ ],- [x])Emoji shortcodes (
:smile:, Unicode emojis work)
FAQ
Q: Images not displaying
A: Image validation failure causes:
HTTPS only (HTTP not supported)
File size: Must be under 5MB
Public access: Must be accessible without auth
Content-Type: Response header must be
image/*
Debug:
Q: Cards V2 conversion fails
A: Use fallbackToText option:
Check logs for details:
Q: Too many log files
A: Adjust with environment variables:
Q: Multiple Google Chat spaces
A: Register separate MCP server instances:
License
MIT License - LICENSE
Links
Korean:
MCP (Model Context Protocol) μλ²λ‘ Google Chat μΉν μ ν΅ν΄ λ©μμ§λ₯Ό μ μ‘ν©λλ€. Markdownμ Google Chat Cards V2 νμμΌλ‘ μλ λ³ννλ©°, μ΄λ―Έμ§ κ²μ¦, μλ λ‘κΉ , ν΄λ°± μ²λ¦¬λ₯Ό μ§μν©λλ€.
μ£Όμ κΈ°λ₯
π MCP νλ‘ν μ½ μ§μ: Claude Code, GitHub Copilot λ±κ³Ό ν΅ν©
π Markdown β Cards V2 μλ λ³ν: ν€λ, 리μ€νΈ, μ½λλΈλ‘, ν, μ΄λ―Έμ§ λ± μ§μ
πΌοΈ μ΄λ―Έμ§ URL κ²μ¦: HEAD μμ²μΌλ‘ μ ν¨μ± νμΈ (HTTP μν, Content-Type, ν¬κΈ°)
π μλ ν΄λ°±: Cards V2 μ€ν¨ μ ν μ€νΈλ‘ μλ μ ν
π ꡬ쑰νλ λ‘κΉ : JSON νμ, 30μΌ μλ 보κ΄
β ν μ€νΈ μλν: μ€λ μ· ν μ€νΈ, ν΅ν© ν μ€νΈ, CI/CD νμ΄νλΌμΈ
μ€μΉ
npm μ€μΉ (κΆμ₯)
μμ€ μ€μΉ (κ°λ°μ©)
Google Chat Webhook URL μμ±
MCP μλ² μ€μ μ μ λ¨Όμ Google Chat Webhook URLμ μμ±ν΄μΌ ν©λλ€:
Google Chat μ€νμ΄μ€ μ΄κΈ°
μλ¨ λ©λ΄ β "μ± λ° ν΅ν©" β "Webhook κ΄λ¦¬"
"Webhook μΆκ°" ν΄λ¦
μ΄λ¦ μ λ ₯ ν URL 볡μ¬
μλ μ€μ μμ μ¬μ©
MCP ν΄λΌμ΄μΈνΈ μ€μ
1. Claude Code
μ€μ νμΌ μμΉ
Windows:
%USERPROFILE%\.claude.jsonmacOS/Linux:
~/.claude.json
μ°Έκ³ : Claude Desktopμ λ€λ₯Έ κ²½λ‘λ₯Ό μ¬μ©ν©λλ€:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
npm μ€μΉ μ
μμ€ μ€μΉ μ
β οΈ μ£Όμ: Windows κ²½λ‘λ \\ λλ / μ¬μ© (μ: C:/path/to/...)
μ€μ μ€μ½ν
Claude Codeλ 3κ°μ§ μ€μ μ€μ½νλ₯Ό μ§μν©λλ€:
User Scope (μ μ):
~/.claude.json- λͺ¨λ νλ‘μ νΈμμ μ¬μ© κ°λ₯Project Scope (곡μ ): νλ‘μ νΈ λ£¨νΈμ
.mcp.json- λ²μ κ΄λ¦¬, ν 곡μ κ°λ₯Local Scope (κ°μΈ): νλ‘μ νΈλ³ κ°μΈ μ€μ
μ°μ μμ: Local > Project > User
νλ‘μ νΈ μμ€ μ€μ (.mcp.json)
νκ³Ό 곡μ ν MCP μλ² μ€μ μ νλ‘μ νΈ λ£¨νΈμ .mcp.json νμΌμ μμ±νμΈμ:
μ₯μ :
β GitμΌλ‘ λ²μ κ΄λ¦¬ κ°λ₯
β νκ³Ό μ€μ 곡μ
β νκ²½ λ³μ μ§μ:
${VAR}λλ${VAR:-κΈ°λ³Έκ°}β νλ‘μ νΈλ³ MCP μλ² μ€μ
νκ²½ λ³μ μ€μ : κ° νμμ΄ μμ μ Webhook URLμ μ€μ ν μ μμ΅λλ€:
μ μ© λ°©λ²
User μμ€ μ€μ (~/.claude.json):
~/.claude.jsonνΈμ§ (Windowsλ%USERPROFILE%\.claude.json)νμΌ μ μ₯
Claude Codeκ° μ€ν μ€μ΄λ©΄ μ¬μμ
Project μμ€ μ€μ (.mcp.json):
νλ‘μ νΈ λ£¨νΈμ
.mcp.jsonμμ±λ―Όκ°ν λ°μ΄ν°λ νκ²½ λ³μλ‘ μ€μ
.mcp.jsonμ λ²μ κ΄λ¦¬ μμ€ν μ 컀λ°"Send a message to Google Chat" κ°μ λͺ λ Ή μ¬μ©
2. GitHub Copilot (VS Code)
VS Code GitHub Copilotμ μμ΄μ νΈ λͺ¨λλ₯Ό ν΅ν΄ MCPλ₯Ό μ§μν©λλ€. μν¬μ€νμ΄μ€ λλ μ¬μ©μ μ€μ μμ MCP μλ²λ₯Ό ꡬμ±ν μ μμ΅λλ€.
μ€μ νμΌ μμΉ
λ€μ μ€ νλλ₯Ό μ ν:
μ¬μ©μ μ€μ :
~/.vscode/settings.jsonλλ%APPDATA%\Code\User\settings.json(Windows)μν¬μ€νμ΄μ€ μ€μ : νλ‘μ νΈ λ£¨νΈμ
.vscode/settings.jsonClaude Code μ€μ (μλ κ°μ Έμ€κΈ°):
~/.claude.jsonμμ 볡μ¬
μ€μ λ°©λ² (mcp.json νμ)
settings.jsonμ μΆκ°:
κΈ°λ₯
μμ΄μ νΈ λͺ¨λ ν΅ν©: μμ΄μ νΈ μν¬νλ‘μ°μμ MCP λꡬ μ¬μ© κ°λ₯
μΈμ λ³ λꡬ μ ν: μΈμ λ§λ€ νμ±νν λꡬ μ ν κ°λ₯
STDIO & SSE μ§μ: λ μ μ‘ λ°©μ λͺ¨λ μ§μ
λλ²κΉ : μ¬μμ λͺ λ Ή λ° μΆλ ₯ λ‘κΉ λ΄μ₯
μμ΄μ νΈ λͺ¨λμμ μ¬μ©νκΈ°
VS Codeμμ GitHub Copilot μ±ν μ΄κΈ°
μμ΄μ νΈ λͺ¨λ νμ±ν (κΈ°λ³Έ νμ±νλ κ²½μ°λ μμ)
λν μμ - Copilotμ΄ μλμΌλ‘ MCP λꡬμ μ κ·Ό
λꡬ μ€ν μ μΉμΈ νμ
μμ:
π μ°Έκ³ : GitHub Copilotμ MCP μ§μμ μμ΄μ νΈ λͺ¨λλ₯Ό ν¬ν¨νμ¬ μ κ΅ν μν¬νλ‘μ°λ₯Ό μ§μν©λλ€. μ΅μ λ²μ μ VS Codeμ GitHub Copilot νμ₯μ μ¬μ©νμΈμ.
3. κΈ°ν MCP ν΄λΌμ΄μΈνΈ
MCP νλ‘ν μ½μ μ§μνλ λͺ¨λ ν΄λΌμ΄μΈνΈμμ μ¬μ© κ°λ₯ν©λλ€:
Send "Hello from Claude!" to Google Chat
2. send_google_chat_cards_v2
Cards V2 νμμΌλ‘ μ§μ μ μ‘ (κ³ κΈ μ¬μ©μμ©)
νλΌλ―Έν°:
3. send_google_chat_markdown β μΆμ²
Markdownμ Cards V2λ‘ μλ λ³ννμ¬ μ μ‘
μμ (Claude Code):
νλΌλ―Έν°:
μ΅μ :
cardTitle: μΉ΄λ μλ¨μ νμλ μ λͺ© (μ ν)fallbackToText: λ³ν μ€ν¨ μ ν μ€νΈλ‘ μλ μ μ‘ (κΈ°λ³Έκ°: false)
Claude Code μ¬μ© μμ
μ€μ μλ£ ν Claudeμ μμ°μ΄λ‘ λννλ©΄ μλμΌλ‘ MCP λꡬλ₯Ό μ¬μ©ν©λλ€:
π€ μ¬μ©μ:
"Google Chatμ νλ‘μ νΈ μν μ λ°μ΄νΈλ₯Ό 보λ΄μ€. μλ£λ μμ 3κ°, μ§ν μ€μΈ μμ 2κ°λ₯Ό λ§ν¬λ€μ΄ 리μ€νΈλ‘ μμ±ν΄μ."
π€ Claude:
(μλμΌλ‘
send_google_chat_markdownλꡬ νΈμΆ)Google Chatμ λ©μμ§λ₯Ό μ μ‘νμ΅λλ€. νλ‘μ νΈ μνκ° μ λ°μ΄νΈλμμ΅λλ€.
π€ μ¬μ©μ:
"λ°©κΈ λ³΄λΈ λ©μμ§μ μ½λ μμ λ μΆκ°ν΄μ€."
π€ Claude:
(λ€μ MarkdownμΌλ‘ λ©μμ§ μμ± λ° μ μ‘)
μ§μνλ Markdown λ¬Έλ²
Claudeλ MCP ν΄λΌμ΄μΈνΈμμ MarkdownμΌλ‘ λ©μμ§λ₯Ό μμ±νλ©΄ μλμΌλ‘ Google Chat Cards V2λ‘ λ³νλ©λλ€.
λ¬Έλ² | Markdown μμ | Google Chat λ λλ§ |
ν€λ |
| κ΅΅μ κΈμ¨ + ν¬κΈ° μ°¨λ± |
κ΅΅κ² |
| bold |
κΈ°μΈμ |
| italic |
μΈλΌμΈ μ½λ |
|
|
μ½λλΈλ‘ |
| ꡬ문 κ°μ‘° λ°μ€ |
μμ 리μ€νΈ |
| 1. First 2. Second |
λΉμμ 리μ€νΈ |
| β’ Item |
μ€μ²© 리μ€νΈ |
| γβ’ nested (Em space) |
ν |
| κ³ μ ν ν°νΈ ν |
μ΄λ―Έμ§ |
| μ΄λ―Έμ§ μμ ― (URL κ²μ¦ ν) |
λ§ν¬ |
| ν΄λ¦ κ°λ₯ν λ§ν¬ |
μνμ |
| ꡬλΆμ |
μΈμ©λ¬Έ |
| λ€μ¬μ°κΈ° + νμ ν μ€νΈ |
μμ Markdown:
μμΈν λ΄μ©μ λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.
.env νμΌ (κ°λ°μ©)
νλ‘μ νΈ λ£¨νΈμ .env νμΌ μμ±:
μμ€ν νκ²½ λ³μ
Windows (PowerShell):
Linux/macOS (Bash/Zsh):
κ°λ°
μν€ν μ²
λ‘κΉ
λ‘κ·Έ νμΌ κ΅¬μ‘°
λ‘κ·Έ ν¬λ§· (JSON)
λ‘κ·Έ μ΄λ²€νΈ
message_sent: λ©μμ§ μ μ‘ μ±κ³΅fallback_used: ν΄λ°± μ¬μ© (Cards V2 β Text)image_validation_failed: μ΄λ―Έμ§ κ²μ¦ μ€ν¨send_failed: μ μ‘ μ€ν¨validation_failed: κ²μ¦ μ€ν¨
λ‘κ·Έ μ 리
μλ² μμ μ μλ μ 리 (30μΌ μ΄μ λ‘κ·Έ μμ )
24μκ°λ§λ€ μλ μ€ν
νκ²½ λ³μ
LOG_RETENTION_DAYSλ‘ μ€μ κ°λ₯
μ νμ¬ν
Google Chat API μ μ½μ¬ν
νλͺ© | μ ν | λμ λ°©λ² |
μ΄λ―Έμ§ νλ‘ν μ½ | HTTPSλ§ μ§μ | HTTP URLμ ν μ€νΈ λ§ν¬λ‘ λ체 |
μ΄λ―Έμ§ ν¬κΈ° | μ΅λ 5MB | κ²μ¦ μ€ν¨ μ λ§ν¬λ‘ νμ |
μ΄λ―Έμ§ μΈμ¦ | κ³΅κ° URLλ§ κ°λ₯ | μΈμ¦ νμ μ μ κ·Ό λΆκ° |
Content-Type |
| HTML νμ΄μ§ λ±μ κ±°λΆ |
Markdown μ§μ | μ νμ | λ―Έμ§μ λ¬Έλ²μ κ·Όμ¬μΉλ‘ λ³ν |
Markdown λ³ν μ μ½μ¬ν
β μμ μ§μ:
ν€λ (H1~H6)
κ΅΅κ², κΈ°μΈμ, μΈλΌμΈ μ½λ
μμ/λΉμμ 리μ€νΈ (μ΅λ 3λ¨κ³ μ€μ²©)
μ½λλΈλ‘ (ꡬ문 κ°μ‘°)
ν (κ³ μ ν ν°νΈ)
λ§ν¬, μ΄λ―Έμ§
β οΈ λΆλΆ μ§μ:
볡μ‘ν μ€μ²© ꡬ쑰 β λ¨μνλ¨
HTML νκ·Έ β ν μ€νΈλ‘ λ³ν
μΈμ©λ¬Έ β λ€μ¬μ°κΈ°λ‘ νν
β λ―Έμ§μ:
κ°μ£Ό (footnotes)
μ μ 리μ€νΈ (definition lists)
μν μμ (LaTeX)
μμ 체ν¬λ°μ€ (
- [ ],- [x])Emoji λ¨μΆμ½λ (
:smile:λ±, μ λμ½λ μ΄λͺ¨μ§λ κ°λ₯)
μ±λ₯ λ° μ ν
μ΄λ―Έμ§ κ²μ¦ νμμμ: 5μ΄
Webhook μμ² νμμμ: 5μ΄
λ‘κ·Έ νμΌ ν¬κΈ°: 무μ ν (30μΌ μλ μμ )
λμ μμ²: μ ν μμ (Google Chat API μ ν μ€μ)
보μ κ³ λ €μ¬ν
β οΈ Webhook URLμ λ―Όκ° μ 보μ λλ€:
Gitμ 컀λ°νμ§ λ§μΈμ
κ³΅κ° μ μ₯μμ λ ΈμΆ κΈμ§
μ κΈ°μ μΌλ‘ μ¬μμ± κΆμ₯
.envνμΌμ.gitignoreμ ν¬ν¨ νμ
FAQ
Q: μ΄λ―Έμ§κ° νμλμ§ μμ΅λλ€
A: μ΄λ―Έμ§ URL κ²μ¦ μ€ν¨ μμΈ:
HTTPSλ§ μ§μ (HTTPλ λΆκ°)
νμΌ ν¬κΈ°: 5MB μ΄νμ¬μΌ ν¨
κ³΅κ° μ κ·Ό: μΈμ¦ μμ΄ μ κ·Ό κ°λ₯ν URLμ΄μ΄μΌ ν¨
Content-Type: μλ΅ ν€λκ°
image/*μ¬μΌ ν¨
λλ²κΉ :
κ²μ¦ μ€ν¨ μ λμ:
μ΄λ―Έμ§λ ν μ€νΈ λ§ν¬λ‘ λ체λ¨
μ:
β οΈ μ΄λ―Έμ§ λ‘λ μ€ν¨: https://... (HTTP 404: Not Found)
Q: Cards V2 λ³νμ΄ μ€ν¨ν©λλ€
A: λ€μμ νμΈνμΈμ:
fallbackToText μ΅μ μ¬μ©:
{ "markdown": "...", "fallbackToText": true }λ³ν μ€ν¨ μ μλμΌλ‘ ν μ€νΈλ‘ μ μ‘λ©λλ€.
λ‘κ·Έμμ μμΈ νμΈ:
cat logs/errors-YYYY-MM-DD.logμ§μνμ§ μλ Markdown λ¬Έλ²:
κ°μ£Ό (footnotes)
μ μ 리μ€νΈ (definition lists)
볡μ‘ν HTML νκ·Έ
Q: λ‘κ·Έ νμΌμ΄ λ무 λ§μ΄ μμ λλ€
A: νκ²½ λ³μλ‘ μ‘°μ :
LOG_LEVEL=ERROR: μλ¬λ§ κΈ°λ‘LOG_RETENTION_DAYS=7: 7μΌλ§ 보κ΄LOG_ENABLE_CONSOLE=false: μ½μ μΆλ ₯ λΉνμ±ν
Q: npx μ€ν μ "command not found" μ€λ₯
A: Node.jsμ npmμ΄ μ€μΉλμ΄ μλμ§ νμΈ:
μ€μΉλμ§ μμλ€λ©΄:
Windows: https://nodejs.org/ μμ λ€μ΄λ‘λ
macOS:
brew install nodeLinux:
sudo apt install nodejs npm(Ubuntu/Debian)
Q: Webhook URLμ μ΄λ»κ² μμ νκ² κ΄λ¦¬νλμ?
A:
νκ²½ λ³μ μ¬μ© (μ€μ νμΌμ μ§μ μ°μ§ λ§μΈμ)
Gitμ 컀λ°νμ§ λ§μΈμ (.gitignore νμΈ)
μ κΈ°μ μΌλ‘ μ¬μμ± (μ μΆ μμ¬ μ)
Google Chatμμ Webhook μμ λ‘ λ¬΄ν¨ν κ°λ₯
Q: μ¬λ¬ Google Chat μ€νμ΄μ€μ λ©μμ§λ₯Ό 보λ΄κ³ μΆμ΅λλ€
A: κ° μ€νμ΄μ€λ§λ€ λ€λ₯Έ MCP μλ² μΈμ€ν΄μ€ λ±λ‘:
Claudeμμ "Send to team-a" λλ "Send to team-b"λ‘ κ΅¬λΆνμ¬ μ¬μ©ν μ μμ΅λλ€.
CI/CD
GitHub Actionsλ‘ μλν:
β Node.js 18.x, 20.x λ§€νΈλ¦μ€ λΉλ
β ESLint, λΉλ, ν μ€νΈ
β μ€λ μ· ν μ€νΈ (12κ°)
β ν΅ν© ν μ€νΈ (master λΈλμΉ)
μν¬νλ‘μ°: .github/workflows/ci.yml
κΈ°μ¬
μ΄μμ PRμ νμν©λλ€!
λΌμ΄μ μ€
MIT License - LICENSE