From 233f9afa810bdfe5eb32838429d42574e759233b Mon Sep 17 00:00:00 2001 From: Christian Rowlands Date: Tue, 19 Mar 2024 17:12:53 -0400 Subject: [PATCH] Created a GitHub Action workflow for releasing Ninja Chat --- .github/workflows/ninja-chat-ci.yaml | 4 +- .github/workflows/ninja-chat-release.yaml | 173 ++++++++++++++++++++++ 2 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ninja-chat-release.yaml diff --git a/.github/workflows/ninja-chat-ci.yaml b/.github/workflows/ninja-chat-ci.yaml index b8e58215d..14a7585c8 100644 --- a/.github/workflows/ninja-chat-ci.yaml +++ b/.github/workflows/ninja-chat-ci.yaml @@ -37,11 +37,11 @@ jobs: - name: Get APK name run: echo "base_name=`./gradlew properties -q | grep 'archivesBaseName:' | awk '{print $2}'`" >> $GITHUB_ENV - - name: Upload Regular APK + - name: Upload Debug APK uses: actions/upload-artifact@v3 with: name: Ninja Chat Debug APK - path: build/outputs/apk/conversationsFree/debug/${{ env.base_name }}-conversations-free-universal-debug.apk + path: build/outputs/apk/conversationsFree/debug/${{ env.base_name }}-conversations-free-arm64-v8a-debug.apk test: diff --git a/.github/workflows/ninja-chat-release.yaml b/.github/workflows/ninja-chat-release.yaml new file mode 100644 index 000000000..a017e8bb7 --- /dev/null +++ b/.github/workflows/ninja-chat-release.yaml @@ -0,0 +1,173 @@ +name: Ninja Chat Release + +on: + push: + tags: + - 'v*' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + test: + name: Run Tests + runs-on: macos-latest + + strategy: + matrix: + api-level: [ 26, 34 ] + target: [ default, google_apis ] + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + cache: 'gradle' + + - name: Save google-services.json + env: + GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + run: echo "$GOOGLE_SERVICES" > google-services.json + + - name: Unit Tests + run: ./gradlew -Pci --console=plain testConversationsFreeDebugUnitTest + + # Only upload the reports on failure + - name: Upload Reports + uses: actions/upload-artifact@v3 + with: + name: Test-Reports + path: build/reports + if: failure() + + bumpVersion: + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ninja-master + + - name: Extract version from tag + uses: damienaicheh/extract-version-from-tag-action@v1.1.0 + + - name: Extract existing version code + run: | + # Set new version name from tag + if [[ -z "${{ env.PATCH }}" ]]; then + version_name=${{ env.MAJOR }}.${{ env.MINOR }} + else + version_name=${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }} + fi + + # Get existing version code from build.gradle + version_code=$(grep "versionCode " build.gradle | awk '{print $2}' | tr -d '\n') + + # Increment existing version code by 1 + version_code=$((version_code + 1)) + + # Set environment variable for later use + echo "VERSION_NAME=$version_name" >> $GITHUB_ENV + echo "VERSION_CODE=$version_code" >> $GITHUB_ENV + + - name: Increase version code and change version name + run: | + # Update build.gradle with new version code and name + echo "${{ env.VERSION_CODE }} - ${{ env.VERSION_NAME }}" + sed -i "s/versionCode [0-9]\+/versionCode ${{ env.VERSION_CODE }}/g" build.gradle + sed -i "s/versionName \"[^\"]*\"/versionName \"${{ env.VERSION_NAME }}\"/g" build.gradle + + - name: Commit and push changes + run: | + git config user.email "github-actions@github.com" + git config user.name "Github Actions" + git add . + git commit -am "Bump version code and change version name to ${{ env.VERSION_NAME }}" + git push origin ninja-master + + + buildRelease: + needs: bumpVersion + runs-on: ubuntu-latest + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + with: + ref: develop + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + cache: 'gradle' + + - name: Save Keystore + env: + KEYSTORE_FILE: ${{ secrets.KEYSTORE_FILE }} + run: echo $KEYSTORE_FILE | base64 -d > my.keystore + + - name: Save google-services.json + env: + GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + run: echo "$GOOGLE_SERVICES" > google-services.json + + - name: Build Release APK + env: + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: ./gradlew assembleRegularRelease + -Pandroid.injected.signing.store.file=$(pwd)/my.keystore + -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD + -Pandroid.injected.signing.key.alias=$KEY_ALIAS + -Pandroid.injected.signing.key.password=$KEY_PASSWORD + + - name: Get base name + run: | + echo "base_name=`./gradlew properties -q | grep 'archivesBaseName:' | awk '{print $2}'`" >> $GITHUB_ENV + echo ${{ env.base_name }} + + - name: Upload Release APK + uses: actions/upload-artifact@v3 + with: + name: Ninja Chat Release APK + path: build/outputs/apk/conversationsFree/release/${{ env.base_name }}-conversations-free-arm64-v8a-release.apk + + - name: Build Release Bundle + env: + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: ./gradlew bundleConversationsFreeRelease + -Pandroid.injected.signing.store.file=$(pwd)/my.keystore + -Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD + -Pandroid.injected.signing.key.alias=$KEY_ALIAS + -Pandroid.injected.signing.key.password=$KEY_PASSWORD + + - name: Create a Release in GitHub + uses: ncipollo/release-action@v1 + with: + artifacts: "build/outputs/apk/conversationsFree/release/*arm64-v8a-release.apk" + token: ${{ secrets.GH_TOKEN }} + tag: ${{ steps.version.outputs.content }} + commit: ${{ github.sha }} + generateReleaseNotes: true + draft: true + + - name: Release app to internal track + uses: r0adkll/upload-google-play@v1 + with: + serviceAccountJsonPlainText: ${{ secrets.PLAYSTORE_ACCOUNT_KEY }} + packageName: com.ninja.chat + releaseFiles: build/outputs/bundle/conversationsFreeRelease/${{ env.base_name }}-conversations-free-release.aab + track: internal + status: completed