refactor #853 Use version. #115
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: Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| concurrency: | |
| group: ${{ github.workflow }} | |
| cancel-in-progress: true | |
| jobs: | |
| draft: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| release_tag: ${{ steps.check_release.outputs.tag_title }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Check if release exists | |
| id: check_release | |
| env: | |
| TZ: 'Asia/Tokyo' | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| VERSION_FILE=buildSrc/src/main/java/property/Version.kt | |
| MAJOR=$(cat $VERSION_FILE | grep MAJOR | head -1 | awk '{print $6}') | |
| MIDDLE=$(cat $VERSION_FILE | grep MIDDLE | head -1 | awk '{print $6}') | |
| MINOR=$(cat $VERSION_FILE | grep MINOR | head -1 | awk '{print $6}') | |
| CURRENT_VERSION=$MAJOR.$MIDDLE.$MINOR | |
| echo $CURRENT_VERSION | |
| tag_title="${CURRENT_VERSION}_draft" | |
| echo "tag_title=${tag_title}" >> $GITHUB_OUTPUT | |
| releases=$(curl -s -H "Authorization: token ${GH_TOKEN}" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/${{ github.repository }}/releases?per_page=50") | |
| RELEASE_EXISTS=$(echo $releases | jq --arg search_name $tag_title '[.[] | select(.draft == true and .name == $search_name)] | length > 0') | |
| echo $RELEASE_EXISTS | |
| if [[ $RELEASE_EXISTS == true ]]; then | |
| echo "release_exists=true" >> $GITHUB_OUTPUT | |
| echo "Release ${tag_title} already exists, skipping creation." | |
| else | |
| echo "release_exists=false" >> $GITHUB_OUTPUT | |
| echo "Release ${tag_title} does not exist. I will create it on next step." | |
| fi | |
| shell: bash | |
| - name: Create Release | |
| id: create_release | |
| if: steps.check_release.outputs.release_exists == 'false' | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| gh release create ${{ steps.check_release.outputs.tag_title }} --title ${{ steps.check_release.outputs.tag_title }} --draft | |
| shell: bash | |
| build: | |
| needs: draft | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest] | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install | |
| timeout-minutes: 3 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'corretto' # See 'Supported distributions' for available options | |
| java-version: '21' | |
| - name: Download Android SDK | |
| uses: android-actions/setup-android@v2 | |
| with: | |
| api-level: 35 | |
| build-tools: 35.0.0 | |
| - name: Prepare credentials | |
| id: prepare-credentials | |
| timeout-minutes: 1 | |
| run: | | |
| echo "${{ secrets.RELEASE_KEYSTORE }}" | base64 -d > release_keystore.jks | |
| echo "store_file=$(realpath release_keystore.jks)" >> "${GITHUB_OUTPUT}" | |
| - name: Grant permission of Gradle wrapper | |
| timeout-minutes: 1 | |
| run: chmod +x gradlew | |
| - name: Build Release APK | |
| timeout-minutes: 16 | |
| run: | | |
| ./gradlew assembleRelease | |
| env: | |
| _JAVA_OPTIONS: '-Duser.language=ja -Duser.country=JP' | |
| KEY_ALIAS: ${{ secrets.KEY_ALIAS }} | |
| KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} | |
| KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} | |
| STORE_FILE_PATH: ${{ steps.prepare-credentials.outputs.store_file }} | |
| - name: Clean up credentials | |
| timeout-minutes: 1 | |
| if: ${{ always() }} | |
| run: | | |
| rm release_keystore.jks | |
| - name: Upload artifacts | |
| timeout-minutes: 2 | |
| if: ${{ success() }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Release artifacts | |
| path: | | |
| app/build/outputs/ | |
| - name: Upload APK to artifact | |
| timeout-minutes: 2 | |
| if: ${{ success() }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Release APK | |
| path: | | |
| app/build/outputs/apk/release/*.apk | |
| - name: Upload artifact to release | |
| timeout-minutes: 5 | |
| if: ${{ success() }} | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| RELEASE_TAG: ${{ needs.draft.outputs.release_tag }} | |
| run: | | |
| tag_title=$RELEASE_TAG | |
| gh release upload ${tag_title} app/build/outputs/apk/release/*.apk --clobber | |
| shell: bash | |
| test: | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest] | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: install | |
| timeout-minutes: 3 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'corretto' # See 'Supported distributions' for available options | |
| java-version: '21' | |
| cache: gradle | |
| - name: Grant permission of Gradle wrapper | |
| timeout-minutes: 1 | |
| run: chmod +x gradlew | |
| - name: Coverage | |
| timeout-minutes: 15 | |
| env: | |
| TZ: 'Asia/Tokyo' | |
| _JAVA_OPTIONS: '-Duser.language=ja -Duser.country=JP -Duser.timezone=Asia/Tokyo' | |
| run: "./gradlew testDebugUnitTest jacocoTestReport" | |
| - name: Merge reports | |
| timeout-minutes: 5 | |
| if: ${{ success() }} | |
| run: "./gradlew jacocoMergedTestReport" | |
| - name: Upload configuration cache | |
| timeout-minutes: 3 | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Configuration cache | |
| path: | | |
| build/reports/configuration-cache/ | |
| build/reports/problems/problems-report.html | |
| - name: Upload Unit Test Results | |
| timeout-minutes: 3 | |
| if: ${{ always() }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Unit Test Results | |
| path: | | |
| */build/reports/tests | |
| - name: Upload Coverage Results | |
| timeout-minutes: 3 | |
| if: ${{ success() }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Coverage Results | |
| path: | | |
| build/reports/jacoco | |
| - name: Print summary | |
| timeout-minutes: 1 | |
| if: ${{ success() }} | |
| run: ./gradlew printCoverageSummary | |
| - name: Store summary | |
| timeout-minutes: 1 | |
| if: ${{ success() }} | |
| run: | | |
| echo "## Test coverage" >> $GITHUB_STEP_SUMMARY | |
| ./gradlew printCoverageSummary >> $GITHUB_STEP_SUMMARY | |
| cat $GITHUB_STEP_SUMMARY | |
| shell: bash |