Merge PRs and Generate Problem Folders #19
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: Merge PRs and Generate Problem Folders | |
on: | |
schedule: | |
- cron: '00 12 * * 1' # 월요일 21시 00분 KST (UTC 12:00) | |
- cron: '00 10 * * 4' # 목요일 19시 00분 KST (UTC 10:00) | |
- cron: '00 5 * * 5' # 금요일 14시 00분 KST (UTC 5:00) | |
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: | | |
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 | 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" >> $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,문제3} | |
touch $LIVE_FOLDER/$NEXT_TEST/문제1/.gitkeep | |
touch $LIVE_FOLDER/$NEXT_TEST/문제2/.gitkeep | |
touch $LIVE_FOLDER/$NEXT_TEST/문제3/.gitkeep | |
- name: Commit and Push Changes | |
if: env.pr_found == 'true' | |
run: | | |
git config --global user.name "GenerateBot" | |
git config --global user.email "generateBot@github.com" | |
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 |