Skip to content

Unique Number of Occurrences #4

Unique Number of Occurrences

Unique Number of Occurrences #4

Workflow file for this run

name: 이슈 닫힘 시 LeetCode 파일 생성
on:
issues:
types: [closed]
permissions:
contents: write
jobs:
create_leetcode_file:
runs-on: ubuntu-latest
steps:
- name: 이슈에 LeetCode 라벨이 있는지 확인
id: check_label
uses: actions/github-script@v6
with:
script: |
const labels = context.payload.issue.labels;
const hasLabel = labels.some(label => label.name === 'LeetCode');
core.setOutput('hasLabel', hasLabel);
- name: LeetCode 라벨이 없으면 중지
if: steps.check_label.outputs.hasLabel != 'true'
run: |
echo "이슈에 LeetCode 라벨이 없습니다. 작업을 종료합니다."
exit 0
- name: 레포지토리 체크아웃
uses: actions/checkout@v3
- name: 이슈 본문에서 코드 추출 및 파일 생성
id: create_file
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const issueBody = context.payload.issue.body || '';
console.log('이슈 본문:', issueBody);
const codeBlockRegex = /```(?:cpp)?\s*([\s\S]*?)\s*```/g;
let code = '';
let match;
while ((match = codeBlockRegex.exec(issueBody)) !== null) {
console.log('추출된 코드 블록:', match[1]);
code += match[1].trim() + '\n';
}
if (!code) {
console.log('이슈 본문에서 코드 블록을 찾을 수 없습니다.');
code = issueBody.trim(); // 코드 블록이 없을 경우 전체 이슈 본문을 저장
}
const title = context.payload.issue.title || 'untitled';
const sanitizedTitle = title.toLowerCase().replace(/ /g, '_').replace(/[^a-z0-9_.-]/g, '');
const filepath = `LeetCode/${sanitizedTitle}.cpp`;
fs.mkdirSync('LeetCode', { recursive: true });
fs.writeFileSync(filepath, code);
console.log('생성된 파일 경로:', filepath);
core.setOutput('filepath', filepath);
core.setOutput('issue_number', context.payload.issue.number);
- name: 변경 사항 커밋 및 푸시
uses: EndBug/add-and-commit@v9
with:
message: "이슈 #${{ steps.create_file.outputs.issue_number }}에서 LeetCode 솔루션 추가"
add: "${{ steps.create_file.outputs.filepath }}"
author_name: GitHub Action
author_email: [email protected]
committer_name: GitHub Action
committer_email: [email protected]
token: ${{ secrets.GITHUB_TOKEN }}