Skip to content

Commit

Permalink
feat: Android release process (#1779)
Browse files Browse the repository at this point in the history
* release flow work in progress

* fix current task description

* release flow updated to what it probably should be

* keys passed

* yaml error fix

* yaml error fix 2

* yaml error fix 3

* yaml error fix 4 not relevant

* test workflow changes

* test workflow changes 2

* workflow descriptions update

* renamed jobs

* unblock push to store step for test

* added cache back and jobs renamed

* publish to fix testing

* publish to fix 2

* publish to fix 3

* publish to fix 4

* publish to fix 5

* version update to see if we can upload to play store

* cleanup release flow after testing of release flow

* readme updated about release

* review changes

* readme updated

* updated checkout action version as in other flows

* chore: update android existing CI flow

---------

Co-authored-by: Krzysztof Rodak <[email protected]>
  • Loading branch information
Dmitry-Borodin and krodak committed Apr 14, 2023
1 parent ee7eea7 commit 3dc9504
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 2 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/android-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- master
- stable
jobs:
#this it tests jobs, called build as it's required name for PR
build:
name: Build
runs-on: ubuntu-22.04
Expand Down Expand Up @@ -72,7 +73,7 @@ jobs:
run: |
./gradlew :android:testDebugUnitTest
debug:
makeapk:
name: Build unsigned APKs
runs-on: ubuntu-22.04
# if: github.ref == ' refs/head/main'
Expand Down Expand Up @@ -135,7 +136,7 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Assemble GPlay unsigned apk
- name: Assemble unsigned debug apk
run: |
./gradlew clean assembleDebug --stacktrace
Expand Down
167 changes: 167 additions & 0 deletions .github/workflows/android-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
name: Release android app

on:
workflow_dispatch:
jobs:
#it's tests but build job is required in our branch policies
build:
name: Build android unit test
runs-on: ubuntu-22.04
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 # 0.11.0
with:
access_token: ${{ github.token }}

- name: Checkout Sources
uses: actions/[email protected]
with:
fetch-depth: 50
submodules: 'recursive'

- name: Install System Dependencies (Linux)
run: |
sudo apt-get update
sudo apt-get install -y clang libclang-dev libopencv-dev
- name: Install Rust stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true

- name: Install uniffi_bindgen
uses: actions-rs/[email protected]
with:
crate: uniffi_bindgen
version: 0.22.0 # Must be in sync with version in Cargo.toml
use-tool-cache: true

- name: Install additional rust targets
run: rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android

- name: Set up JDK environment
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: 11

- name: Install NDK
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;24.0.8215888" --sdk_root=${ANDROID_SDK_ROOT}

- name: Rust Cache
uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f # v2.2.1
with:
workspaces: rust -> rust/target

- name: Gradle Cache
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build
run: |
./gradlew :android:testDebugUnitTest
make:
name: Build signed APKs
runs-on: ubuntu-22.04
# if: github.ref == ' refs/head/main'
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@b173b6ec0100793626c2d9e6b90435061f4fc3e5 # 0.11.0
with:
access_token: ${{ github.token }}

- name: Checkout Sources
uses: actions/[email protected]
with:
fetch-depth: 50
submodules: 'recursive'

- name: Install System Dependencies (Linux)
run: |
sudo apt-get update
sudo apt-get install -y clang libclang-dev libopencv-dev
- name: Install Rust stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true

- name: Install uniffi_bindgen
uses: actions-rs/[email protected]
with:
crate: uniffi_bindgen
version: 0.22.0 # Must be in sync with version in Cargo.toml
use-tool-cache: true

- name: Install additional rust targets
run: rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android

- name: Set up JDK environment
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: 11

- name: Install NDK
run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;24.0.8215888" --sdk_root=${ANDROID_SDK_ROOT}

- name: Rust Cache
uses: Swatinem/rust-cache@6fd3edff6979b79f87531400ad694fb7f2c84b1f # v2.2.1
with:
workspaces: rust -> rust/target

- name: Gradle Cache
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Build and publish

- name: Assemble release unsigned apk
run: |
./gradlew clean assembleRelease --stacktrace
- name: Sign app APK
uses: r0adkll/sign-android-release@v1
# ID used to access action output
id: sign_app
with:
releaseDirectory: android/build/outputs/apk/release
signingKeyBase64: ${{ secrets.ANDROID_PLAY_STORE_KEYSTORE_BASE64 }}
alias: ${{ secrets.ANDROID_KEYSTORE_KEY_ALIAS }}
keyStorePassword: ${{ secrets.ANDROID_PLAY_STORE_KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.ANDROID_PLAY_STORE_KEYSTORE_PASSWORD }}

- name: Upload Gplay release APKs
uses: actions/upload-artifact@v3
with:
name: signer-release-signed
path: |
${{steps.sign_app.outputs.signedReleaseFile}}
- name: Publish to Google Play Store
uses: r0adkll/[email protected]
with:
serviceAccountJsonPlainText: ${{ secrets.ANDROID_PLAY_STORE_API_JSON }}
releaseFiles: ${{ steps.sign_app.outputs.signedReleaseFile }}
packageName: io.parity.signer
track: internal



7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,13 @@ Enable "Show package details" checkmark to select specific version.
**10.** Run the project (`Ctrl+R`). It should build the Rust core library automatically.
# Release Android
- Create PR with new app version updated and tag v* (example "v6.1.3")
- After merging to master - run release-android.yml flow. It will build and sign apk and upload it to internal track in play store
- Create github release with apk from release flow
- Go to play store, promote internal track to production and update changes in play store
# Tests
Core Rust code is fully covered by tests, and they run in CI on each commit. To run tests on your machine:
Expand Down

0 comments on commit 3dc9504

Please sign in to comment.