diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index cd481d9a9..cff96df39 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -9,3 +9,77 @@ jobs: steps: - uses: actions/checkout@v4 - uses: fernandrone/linelint@0.0.6 + + label-lang: + runs-on: ubuntu-latest + continue-on-error: true + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Create package.json + run: echo '{}' > package.json + + - name: Install dependencies + run: npm install @octokit/rest node-fetch + + - name: Detect languages and add labels + env: + GITHUB_TOKEN: ${{ github.token }} + PR_NUM: ${{ github.event.number }} + run: | + node --input-type=module -e " + import { Octokit } from '@octokit/rest'; + import path from 'path'; + import fetch from 'node-fetch'; + + const octokit = new Octokit({ + auth: process.env.GITHUB_TOKEN, + request: { fetch } + }); + + const extensionsToLanguages = { + js: 'js', + ts: 'ts', + py: 'py', + java: 'java', + kt: 'kotlin', + cpp: 'c++', + go: 'go', + exs: 'elixir', + swift: 'swift' + // 필요한 다른 확장자와 언어 매핑 추가 + }; + + async function run() { + const { data: files } = await octokit.pulls.listFiles({ + owner: process.env.GITHUB_REPOSITORY.split('/')[0], + repo: process.env.GITHUB_REPOSITORY.split('/')[1], + pull_number: process.env.PR_NUM, + }); + + const languages = new Set(); + files.forEach(file => { + const ext = path.extname(file.filename).slice(1); + if (extensionsToLanguages[ext]) { + languages.add(extensionsToLanguages[ext]); + } + }); + + if (languages.size > 0) { + await octokit.issues.addLabels({ + owner: process.env.GITHUB_REPOSITORY.split('/')[0], + repo: process.env.GITHUB_REPOSITORY.split('/')[1], + issue_number: process.env.PR_NUM, + labels: Array.from(languages), + }); + } + } + + run().catch(err => console.error(err)); + "