진료순서 정하기 #258
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 이슈 닫힘 시 라벨별로 파일 생성 | |
on: | |
issues: | |
types: [closed] | |
permissions: | |
contents: write | |
jobs: | |
create_files_by_label: | |
runs-on: ubuntu-latest | |
steps: | |
- name: 레포지토리 체크아웃 | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # 전체 커밋 기록을 가져옵니다. | |
- name: 이슈 정보 가져오기 및 코드 추출 | |
id: create_file | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
const fs = require('fs'); | |
const issue = context.payload.issue; | |
const issueBody = issue.body || ''; | |
const title = issue.title || 'untitled'; | |
const labels = issue.labels.map(label => label.name); | |
console.log('이슈 제목:', title); | |
console.log('이슈 라벨:', labels); | |
console.log('이슈 본문:', issueBody); | |
if (labels.length === 0) { | |
console.log('이슈에 라벨이 없습니다. 작업을 종료합니다.'); | |
process.exit(0); | |
} | |
// 코드 블록 추출 (언어 정보 포함) | |
const codeBlockRegex = /```(\w*)\s*([\s\S]*?)\s*```/gm; | |
let match; | |
while ((match = codeBlockRegex.exec(issueBody)) !== null) { | |
const language = match[1] || 'cpp'; // 언어 정보가 없으면 기본 cpp로 설정 | |
let code = match[2].trim(); | |
console.log('추출된 코드 블록:', code); | |
console.log('코드 언어:', language); | |
// 파일 확장자 결정 | |
const fileExtension = { | |
'cpp': 'cpp', | |
'cs': 'cs', | |
'python': 'py', | |
'java': 'java', | |
'js': 'js', | |
'ts': 'ts', | |
'rb': 'rb', | |
'go': 'go', | |
'php': 'php', | |
'html': 'html', | |
'css': 'css', | |
}[language] || 'txt'; // 알 수 없는 언어의 경우 txt 확장자 사용 | |
// 파일명과 폴더명에서 한글 포함하도록 수정 | |
const sanitizedTitle = title.replace(/ /g, '_').replace(/[^\p{L}\p{N}_.-]/gu, ''); | |
for (const label of labels) { | |
const sanitizedLabel = label.replace(/ /g, '_').replace(/[^\p{L}\p{N}_.-]/gu, ''); | |
const folderPath = `${sanitizedLabel}`; | |
const filePath = `${folderPath}/${sanitizedTitle}.${fileExtension}`; | |
fs.mkdirSync(folderPath, { recursive: true }); | |
fs.writeFileSync(filePath, code); | |
console.log(`파일 생성: ${filePath}`); | |
} | |
} | |
core.setOutput('issue_number', issue.number); | |
- name: 변경 사항 커밋 및 푸시 | |
uses: EndBug/add-and-commit@v9 | |
with: | |
message: "이슈 #${{ steps.create_file.outputs.issue_number }}에서 솔루션 추가" | |
add: "*/*" | |
author_name: GitHub Action | |
author_email: [email protected] | |
committer_name: GitHub Action | |
committer_email: [email protected] | |
pull_strategy: NO_REBASE # 푸시 전에 git pull을 수행합니다. | |
token: ${{ secrets.GITHUB_TOKEN }} |