|
| 1 | +name: Release |
| 2 | + |
| 3 | +on: |
| 4 | + issue_comment: |
| 5 | + types: [created] |
| 6 | + |
| 7 | +jobs: |
| 8 | + release: |
| 9 | + if: | |
| 10 | + !github.event.issue.pull_request && |
| 11 | + startsWith(github.event.issue.title, '๐ค [Release]') && |
| 12 | + startsWith(github.event.comment.body, '/start') && |
| 13 | + contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association) |
| 14 | + |
| 15 | + runs-on: ubuntu-latest |
| 16 | + permissions: |
| 17 | + contents: write |
| 18 | + issues: write |
| 19 | + |
| 20 | + steps: |
| 21 | + - name: Checkout |
| 22 | + uses: actions/checkout@v4 |
| 23 | + with: |
| 24 | + fetch-depth: 0 |
| 25 | + |
| 26 | + - name: Parse Version |
| 27 | + id: parse_version |
| 28 | + env: |
| 29 | + GH_TOKEN: ${{ github.token }} |
| 30 | + run: | |
| 31 | + # 1. ๋ฒ์ ํ์ฑ |
| 32 | + RAW_VERSION=$(echo "${{ github.event.comment.body }}" | awk '{print $2}') |
| 33 | + |
| 34 | + # 2. ๋ฒ์ ๋๋ฝ ์ฒดํฌ |
| 35 | + if [ -z "$RAW_VERSION" ]; then |
| 36 | + echo "VERSION_MISSING=true" >> $GITHUB_ENV |
| 37 | + exit 1 |
| 38 | + fi |
| 39 | + |
| 40 | + # 3. ํ๊ฒฝ ๋ณ์ ์ค์ |
| 41 | + STRIPPED_VERSION=$(echo $RAW_VERSION | sed 's/^v//') |
| 42 | + echo "RAW_VERSION=$RAW_VERSION" >> $GITHUB_ENV |
| 43 | + echo "STRIPPED_VERSION=$STRIPPED_VERSION" >> $GITHUB_ENV |
| 44 | +
|
| 45 | + # 4. ์์ ์ฝ๋ฉํธ ๋จ๊ธฐ๊ธฐ (๋ฒ์ ์ด ์์ ๋๋ง ์คํ๋จ) |
| 46 | + gh issue comment ${{ github.event.issue.number }} --body "๐ **๋ฆด๋ฆฌ์ฆ ์์
์ด ์์๋์์ต๋๋ค. ($RAW_VERSION)**" |
| 47 | +
|
| 48 | + - name: Git Config Setup |
| 49 | + run: | |
| 50 | + git config user.name "github-actions[bot]" |
| 51 | + git config user.email "github-actions[bot]@users.noreply.github.com" |
| 52 | +
|
| 53 | + - name: Process Release and Direct Merge |
| 54 | + env: |
| 55 | + GH_TOKEN: ${{ github.token }} |
| 56 | + run: | |
| 57 | + RAW_VER=${{ env.RAW_VERSION }} |
| 58 | + STRIP_VER=${{ env.STRIPPED_VERSION }} |
| 59 | + RELEASE_BRANCH="release/$RAW_VER" |
| 60 | + XCODE_PROJ_PATH="QueenCam/QueenCam.xcodeproj/project.pbxproj" |
| 61 | + TODAY=$(date +'%Y-%m-%d') |
| 62 | + REPO_URL="https://github.com/${{ github.repository }}" |
| 63 | +
|
| 64 | + # 1. ์ด์ ๋ฒ์ ์ถ์ถ |
| 65 | + LAST_VERSION_STRIP=$(grep -oE '^## \[[0-9]+\.[0-9]+\.[0-9]+\]' CHANGELOG.md | head -n 1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') |
| 66 | + LAST_VERSION_TAG="v$LAST_VERSION_STRIP" |
| 67 | +
|
| 68 | + git checkout develop |
| 69 | + git checkout -b $RELEASE_BRANCH |
| 70 | +
|
| 71 | + # 2. Xcode Version & Build ์
๋ฐ์ดํธ |
| 72 | + sed -i "s/MARKETING_VERSION = .*/MARKETING_VERSION = $STRIP_VER;/g" $XCODE_PROJ_PATH |
| 73 | + OLD_BUILD_NUMBER=$(grep -m 1 "CURRENT_PROJECT_VERSION =" $XCODE_PROJ_PATH | sed -E 's/.*=[[:space:]]*([0-9]+);/\1/') |
| 74 | + NEW_BUILD_NUMBER=$((OLD_BUILD_NUMBER + 1)) |
| 75 | + sed -i "s/CURRENT_PROJECT_VERSION = .*/CURRENT_PROJECT_VERSION = $NEW_BUILD_NUMBER;/g" $XCODE_PROJ_PATH |
| 76 | + |
| 77 | + git add . |
| 78 | + git commit -m "[Chore] release: $RAW_VER ๋น๋ ๋๋ฒ ์ฆ๊ฐ ($NEW_BUILD_NUMBER)" |
| 79 | +
|
| 80 | + # 3. CHANGELOG ์
๋ฐ์ดํธ ์์ |
| 81 | + |
| 82 | + # 3-1. ๊ธฐ์กด [Unreleased] ํค๋๋ฅผ ํ์ฌ ๋ฒ์ ์ผ๋ก ๊ต์ฒด |
| 83 | + sed -i "s/.*## \[Unreleased\]/## [$STRIP_VER] - $TODAY/" CHANGELOG.md |
| 84 | + |
| 85 | + # 3-2. ์๋ก์ด [Unreleased] ํ
ํ๋ฆฟ ์ฝ์
|
| 86 | + printf "\n## [Unreleased]\n\n### Added\n\n### Changed\n\n### Deprecated\n\n### Removed\n\n### Fixed\n\n### Security\n" > unreleased_tmp.txt |
| 87 | + |
| 88 | + # 'r' ๋ช
๋ น์ด๋ฅผ ํตํด ์ง์ ํ ์์น '๋ค'์ ํ์ผ ๋ด์ฉ์ ์ฝ์ด์จ๋ค |
| 89 | + sed -i "/๊ธฐ์ค์ผ๋ก ์ํํ๋ค\./r unreleased_tmp.txt" CHANGELOG.md |
| 90 | + rm unreleased_tmp.txt |
| 91 | + |
| 92 | + # 3-3. ํ๋จ ๋งํฌ ์น์
์
๋ฐ์ดํธ |
| 93 | + NEW_DIFF_LINK="[$STRIP_VER]: $REPO_URL/compare/$LAST_VERSION_TAG...$RAW_VER" |
| 94 | + NEW_UNRELEASED_LINK="[Unreleased]: $REPO_URL/compare/$RAW_VER...HEAD" |
| 95 | + |
| 96 | + # ๊ธฐ์กด [Unreleased] ๋งํฌ ์ญ์ (์ค๋ณต ๋ฐฉ์ง) |
| 97 | + sed -i "/^\[Unreleased\]:/d" CHANGELOG.md |
| 98 | + |
| 99 | + # ๋งํฌ ์ถ๊ฐ |
| 100 | + sed -i "0,/^\[.*\]:/{s|^\[.*\]:|$NEW_DIFF_LINK\n&|}" CHANGELOG.md |
| 101 | + sed -i "0,/^\[.*\]:/{s|^\[.*\]:|$NEW_UNRELEASED_LINK\n&|}" CHANGELOG.md |
| 102 | +
|
| 103 | + git add CHANGELOG.md |
| 104 | + git commit -m "[Docs] release: $RAW_VER CHANGELOG.md" |
| 105 | +
|
| 106 | + # 4. ๋ธ๋์น ๋ณํฉ ๋ฐ ํธ์ |
| 107 | + git push origin $RELEASE_BRANCH |
| 108 | + git checkout main |
| 109 | + git merge --no-ff $RELEASE_BRANCH -m "Merge release branch $RELEASE_BRANCH into main" |
| 110 | + git tag -a "$RAW_VER" -m "Release $RAW_VER" |
| 111 | + git checkout develop |
| 112 | + git merge --no-ff $RELEASE_BRANCH -m "Merge release branch $RELEASE_BRANCH back to develop" |
| 113 | +
|
| 114 | + git push origin main develop --tags |
| 115 | + git branch -d $RELEASE_BRANCH |
| 116 | +
|
| 117 | + - name: Post Failure Comment |
| 118 | + if: failure() |
| 119 | + env: |
| 120 | + GH_TOKEN: ${{ github.token }} |
| 121 | + run: | |
| 122 | + if [ "${{ env.VERSION_MISSING }}" == "true" ]; then |
| 123 | + gh issue comment ${{ github.event.issue.number }} --body "โ **๋ฒ์ ์ ์
๋ ฅํ์ง ์์์ต๋๋ค.** \`/start v1.2.3\` ๊ณผ ๊ฐ์ ํ์์ผ๋ก ์
๋ ฅํด ์ฃผ์ธ์." |
| 124 | + else |
| 125 | + gh issue comment ${{ github.event.issue.number }} --body "โ **๋ฆด๋ฆฌ์ฆ ์์
๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. (${{ env.RAW_VERSION }})** |
| 126 | + |
| 127 | + Actions ํญ์์ ์์ธ ๋ก๊ทธ๋ฅผ ํ์ธํด ์ฃผ์ธ์." |
| 128 | + fi |
| 129 | +
|
| 130 | + - name: Post Success Comment |
| 131 | + if: success() |
| 132 | + env: |
| 133 | + GH_TOKEN: ${{ github.token }} |
| 134 | + run: | |
| 135 | + gh issue comment ${{ github.event.issue.number }} --body "โ
**๋ฆด๋ฆฌ์ฆ ์์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค! (${{ env.RAW_VERSION }})** |
| 136 | + |
| 137 | + - **App Version:** ${{ env.STRIPPED_VERSION }}" |
0 commit comments