Maximum Depth of Binary Tree #13
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 = /```(?:cpp)?\s*([\s\S]*?)\s*```/gm; | |
let code = ''; | |
let match; | |
while ((match = codeBlockRegex.exec(issueBody)) !== null) { | |
console.log('추출된 코드 블록:', match[1]); | |
code += match[1].trim() + '\n'; | |
} | |
if (!code) { | |
console.log('이슈 본문에서 코드 블록을 찾을 수 없습니다.'); | |
core.setFailed('코드 블록을 추출하지 못했습니다.'); | |
process.exit(1); | |
} | |
// 파일명과 폴더명에서 소문자 변환을 제거하여 대소문자 유지 | |
const sanitizedTitle = title.replace(/ /g, '_').replace(/[^a-zA-Z0-9_.-]/g, ''); | |
for (const label of labels) { | |
const sanitizedLabel = label.replace(/ /g, '_').replace(/[^a-zA-Z0-9_.-]/g, ''); | |
const folderPath = `${sanitizedLabel}`; | |
const filePath = `${folderPath}/${sanitizedTitle}.cpp`; | |
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: "*/*.cpp" | |
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 }} |