|
14 | 14 | types: [trigger-release]
|
15 | 15 |
|
16 | 16 | jobs:
|
17 |
| - release: |
| 17 | + check-changes: |
18 | 18 | runs-on: ubuntu-latest
|
19 |
| - |
| 19 | + outputs: |
| 20 | + release_required: ${{ steps.release-check.outputs.release_required }} |
| 21 | + bump_type: ${{ steps.release-check.outputs.bump_type }} |
20 | 22 | steps:
|
21 |
| - |
22 | 23 | - name: Checkout Repo
|
23 | 24 | uses: actions/checkout@v4
|
24 | 25 | with:
|
25 | 26 | token: ${{ secrets.ACTIONS_PAT }}
|
26 | 27 | fetch-depth: 0
|
27 | 28 |
|
28 |
| - - name: Determine Bump Type Based on Trigger |
29 |
| - id: determine-bump-type |
| 29 | + - name: Determine Release Type and Necessity |
| 30 | + id: release-check |
30 | 31 | run: |
|
31 | 32 | if [ "${{ github.event_name }}" == "schedule" ]; then
|
32 | 33 | LAST_RELEASE_TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
|
33 |
| - echo "LAST_RELEASE_TAG was $LAST_RELEASE_TAG" |
| 34 | + echo "LAST_RELEASE_TAG: $LAST_RELEASE_TAG" |
34 | 35 |
|
35 | 36 | LAST_RELEASE_COMMIT=$(git rev-list -n 1 $LAST_RELEASE_TAG)
|
36 |
| - echo "LAST_RELEASE_COMMIT was $LAST_RELEASE_COMMIT" |
| 37 | + echo "LAST_RELEASE_COMMIT: $LAST_RELEASE_COMMIT" |
| 38 | +
|
37 | 39 | changed_files=$(git diff-tree --no-commit-id --name-only $LAST_RELEASE_COMMIT HEAD | grep '^app' || echo "none")
|
| 40 | + echo "Changed files: $changed_files" |
| 41 | +
|
38 | 42 | if [ "$changed_files" != "none" ]; then
|
39 | 43 | echo "App directory has changed since the last release, proceeding with new release"
|
| 44 | + echo "release_required=true" >> $GITHUB_OUTPUT |
| 45 | + echo "bump_type=patch" >> $GITHUB_OUTPUT |
40 | 46 | else
|
41 | 47 | echo "No app directory changes since the last release. Skipping release."
|
42 |
| - exit 0 |
| 48 | + echo "release_required=false" >> $GITHUB_OUTPUT |
43 | 49 | fi
|
44 |
| - BUMP_TYPE="patch" |
45 | 50 | elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
46 |
| - BUMP_TYPE="${{ github.event.inputs.bump_type }}" |
| 51 | + echo "release_required=true" >> $GITHUB_OUTPUT |
| 52 | + echo "bump_type=${{ github.event.inputs.bump_type }}" >> $GITHUB_OUTPUT |
47 | 53 | elif [ "${{ github.event_name }}" == "repository_dispatch" ]; then
|
48 |
| - BUMP_TYPE="${{ github.event.client_payload.bump_type }}" |
| 54 | + echo "release_required=true" >> $GITHUB_OUTPUT |
| 55 | + echo "bump_type=${{ github.event.client_payload.bump_type }}" >> $GITHUB_OUTPUT |
49 | 56 | else
|
50 | 57 | echo "Unknown trigger source."
|
51 | 58 | exit 1
|
52 | 59 | fi
|
| 60 | + release: |
| 61 | + runs-on: ubuntu-latest |
| 62 | + needs: check-changes |
| 63 | + if: needs.check-changes.outputs.release_required == 'true' |
| 64 | + steps: |
53 | 65 |
|
54 |
| - if [[ ! "$BUMP_TYPE" =~ ^(major|minor|patch)$ ]]; then |
55 |
| - echo "Invalid bump type: $BUMP_TYPE" |
56 |
| - exit 1 |
57 |
| - fi |
58 |
| - echo "BUMP_TYPE=$BUMP_TYPE" >> $GITHUB_ENV |
| 66 | + - name: Checkout Repo |
| 67 | + uses: actions/checkout@v4 |
| 68 | + with: |
| 69 | + token: ${{ secrets.ACTIONS_PAT }} |
| 70 | + fetch-depth: 0 |
59 | 71 |
|
60 | 72 | - name: Bump Version in version.properties
|
61 | 73 | id: bump-version
|
62 | 74 | run: |
|
63 |
| - echo "Bumping version with BUMP_TYPE: $BUMP_TYPE" |
| 75 | + bump_type="${{ needs.check-changes.outputs.bump_type }}" |
| 76 | + echo "Bumping version with BUMP_TYPE: $bump_type" |
64 | 77 |
|
65 | 78 | source version.properties
|
66 | 79 |
|
67 |
| - if [ "$BUMP_TYPE" == "major" ]; then |
| 80 | + if [ "$bump_type" == "major" ]; then |
68 | 81 | majorVersion=$((majorVersion + 1))
|
69 | 82 | minorVersion=0
|
70 | 83 | patchVersion=0
|
71 |
| - elif [ "$BUMP_TYPE" == "minor" ]; then |
| 84 | + elif [ "$bump_type" == "minor" ]; then |
72 | 85 | minorVersion=$((minorVersion + 1))
|
73 | 86 | patchVersion=0
|
74 | 87 | else
|
|
80 | 93 | echo "patchVersion=$patchVersion" >> version.properties
|
81 | 94 |
|
82 | 95 | VERSION=$majorVersion.$minorVersion.$patchVersion
|
| 96 | + VERSION_CODE=$((majorVersion * 10000 + minorVersion * 100 + patchVersion)) |
83 | 97 | echo "VERSION=$VERSION" >> $GITHUB_ENV
|
| 98 | + echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV |
84 | 99 |
|
85 |
| - - name: Process Changelog Changes |
| 100 | + - name: Update changelog.xml |
| 101 | + id: update-changelog-xml |
| 102 | + run: | |
| 103 | +
|
| 104 | + # Read the Unreleased section and process notes based on type |
| 105 | + RELEASE_CONTENT="" CURRENT_TYPE="" |
| 106 | + while IFS= read -r note; do |
| 107 | + if [[ "$note" == "### Added"* ]]; then |
| 108 | + CURRENT_TYPE="new" |
| 109 | + elif [[ "$note" == "### Changed"* ]]; then |
| 110 | + CURRENT_TYPE="info" |
| 111 | + elif [[ "$note" == "### Fixed"* ]]; then |
| 112 | + CURRENT_TYPE="bugfix" |
| 113 | + elif [[ "$note" =~ ^- ]]; then |
| 114 | + clean_note=$(echo "$note" | sed -E 's/^- //; s/ *\(.*\)//') |
| 115 | + RELEASE_CONTENT+=" <${CURRENT_TYPE}>${clean_note}</${CURRENT_TYPE}>\n" |
| 116 | + #pr_number=$(echo "$note" | grep -oP 'pull/\K[0-9]+' || echo "N/A") |
| 117 | + #RELEASE_CONTENT+=" <${CURRENT_TYPE}>${clean_note} (#${pr_number})</${CURRENT_TYPE}>\n" |
| 118 | + |
| 119 | + fi |
| 120 | + done < <(sed -n '/## \[Unreleased\]/,/^## /p' CHANGELOG.md | sed '1,2d' | sed '$d') |
| 121 | +
|
| 122 | + # Generate, insert, and log the new release block |
| 123 | + today=$(date +'%Y-%m-%d') |
| 124 | + RELEASE_BLOCK=" <release date=\"$today\" versionCode=\"$VERSION_CODE\" versionName=\"v$VERSION\">\n" |
| 125 | + RELEASE_BLOCK+="$RELEASE_CONTENT" |
| 126 | + RELEASE_BLOCK+=" </release>" |
| 127 | + sed -i "/<changelog>/a \\\n$RELEASE_BLOCK" app/src/main/res/raw/changelog.xml |
| 128 | + echo "Generated release block:" |
| 129 | + echo -e "$RELEASE_BLOCK" |
| 130 | +
|
| 131 | + - name: Process CHANGELOG.md |
86 | 132 | id: process-changelog
|
87 | 133 | run: |
|
88 | 134 | unreleased_section=$(sed -n '/## \[Unreleased\]/,/^## /p' CHANGELOG.md | sed '1,2d' | sed '$d')
|
@@ -149,9 +195,7 @@ jobs:
|
149 | 195 | if: ${{ success() }}
|
150 | 196 | uses: EndBug/add-and-commit@v7
|
151 | 197 | with:
|
152 |
| - add: | |
153 |
| - version.properties |
154 |
| - CHANGELOG.md |
| 198 | + add: "version.properties CHANGELOG.md app/src/main/res/raw/changelog.xml" |
155 | 199 | message: "Bump ${{ env.BUMP_TYPE }} and update changelog for v${{ env.VERSION }}"
|
156 | 200 | token: ${{ secrets.ACTIONS_PAT }}
|
157 | 201 |
|
|
0 commit comments