Skip to content

Merge PRs and Generate Problem Folders #66

Merge PRs and Generate Problem Folders

Merge PRs and Generate Problem Folders #66

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