Merge PRs and Generate Problem Folders #59
This file contains hidden or 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: Merge PRs and Generate Problem Folders | |
on: | |
schedule: | |
- cron: '00 9 * * 1' # 월요일 18시 00분 KST | (UTC 09:00) + 9 | |
- cron: '00 4 * * 3' # 수요일 13시 00분 KST | (UTC 04:00) + 9 | |
- cron: '00 4 * * 5' # 금요일 13시 00분 KST | (UTC 04:00) + 9 | |
workflow_dispatch: | |
jobs: | |
merge-prs-and-create-folders: | |
if: github.repository_owner == 'Live-Coding-Test' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check if the repository is from Live-Coding-Test | |
run: | | |
if [ "${{ github.repository_owner }}" != "Live-Coding-Test" ]; then | |
echo "This workflow is only allowed to run in the main repository (Live-Coding-Test)." | |
exit 0 | |
fi | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
- name: Set Up GitHub CLI | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '16' | |
- name: Install GitHub CLI | |
run: | | |
sudo apt-get install gh -y | |
echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token | |
- name: Merge All Open PRs | |
id: merge-prs | |
run: | | |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
echo "Manual trigger detected. Forcing pr_found=true" | |
echo "pr_found=true" >> $GITHUB_ENV | |
exit 0 | |
fi | |
PR_LIST=$(gh pr list --state open --json number -q '.[].number') | |
if [ -n "$PR_LIST" ]; then | |
for PR in $PR_LIST; do | |
echo "Fetching details for PR #$PR..." | |
BASE_BRANCH=$(gh pr view $PR --json baseRefName -q '.baseRefName') | |
echo "Updating base branch '$BASE_BRANCH'..." | |
git fetch origin $BASE_BRANCH | |
git checkout $BASE_BRANCH | |
git pull origin $BASE_BRANCH | |
echo "Attempting to merge PR #$PR..." | |
gh pr merge $PR --merge --admin || { | |
echo "Merge failed for PR #$PR. Skipping..." | |
continue | |
} | |
done | |
echo "pr_found=true" >> $GITHUB_ENV | |
else | |
echo "No open PRs to merge." | |
echo "pr_found=false" >> $GITHUB_ENV | |
fi | |
- name: Determine Next Test Folder | |
id: determine-folder | |
if: env.pr_found == 'true' | |
run: | | |
LATEST_TEST=$(find live* -type d -name 'test[0-9]*' 2>/dev/null | sort -V | tail -n 1 | grep -o '[0-9]*$' || echo "0") | |
NEXT_TEST=$((LATEST_TEST + 1)) | |
LIVE_GROUP=$(((NEXT_TEST - 1) / 10)) | |
echo "NEXT_TEST=test$NEXT_TEST" | |
echo "LIVE_FOLDER=live$LIVE_GROUP" | |
echo "NEXT_TEST=test$NEXT_TEST" >> $GITHUB_ENV | |
echo "LIVE_FOLDER=live$LIVE_GROUP" >> $GITHUB_ENV | |
- name: Create Next Test Folder | |
if: env.pr_found == 'true' | |
run: | | |
mkdir -p $LIVE_FOLDER/$NEXT_TEST/{문제1,문제2} | |
touch $LIVE_FOLDER/$NEXT_TEST/문제1/.gitkeep | |
touch $LIVE_FOLDER/$NEXT_TEST/문제2/.gitkeep | |
echo "✅ Created folder: $LIVE_FOLDER/$NEXT_TEST" | |
- name: Commit and Push Changes | |
if: env.pr_found == 'true' | |
run: | | |
git config --global user.name "GenerateBot" | |
git config --global user.email "[email protected]" | |
git pull origin main | |
git add . | |
NEXT_TEST_NUM=$(echo $NEXT_TEST | grep -o '[0-9]*') | |
git commit -m "$NEXT_TEST_NUM차 폴더 생성" | |
git push origin main |