Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Android release process #1779

Merged
merged 28 commits into from
Apr 14, 2023
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
3457c7e
release flow work in progress
Dmitry-Borodin Apr 11, 2023
741c380
fix current task description
Dmitry-Borodin Apr 11, 2023
826062e
release flow updated to what it probably should be
Dmitry-Borodin Apr 12, 2023
b26afa3
keys passed
Dmitry-Borodin Apr 12, 2023
fd4d19a
yaml error fix
Dmitry-Borodin Apr 12, 2023
bebee05
yaml error fix 2
Dmitry-Borodin Apr 12, 2023
1452725
yaml error fix 3
Dmitry-Borodin Apr 12, 2023
f0e3ae2
yaml error fix 4 not relevant
Dmitry-Borodin Apr 12, 2023
a1736ea
test workflow changes
Dmitry-Borodin Apr 12, 2023
081598f
test workflow changes 2
Dmitry-Borodin Apr 12, 2023
5c24975
workflow descriptions update
Dmitry-Borodin Apr 12, 2023
d973340
renamed jobs
Dmitry-Borodin Apr 12, 2023
2226f16
unblock push to store step for test
Dmitry-Borodin Apr 12, 2023
38d5a39
added cache back and jobs renamed
Dmitry-Borodin Apr 12, 2023
0d0a7f7
publish to fix testing
Dmitry-Borodin Apr 12, 2023
1f958f4
publish to fix 2
Dmitry-Borodin Apr 12, 2023
644a965
publish to fix 3
Dmitry-Borodin Apr 12, 2023
f5b2df7
publish to fix 4
Dmitry-Borodin Apr 13, 2023
28359d5
publish to fix 5
Dmitry-Borodin Apr 13, 2023
7da8aeb
version update to see if we can upload to play store
Dmitry-Borodin Apr 13, 2023
6eef65a
cleanup release flow after testing of release flow
Dmitry-Borodin Apr 13, 2023
ae107fa
readme updated about release
Dmitry-Borodin Apr 13, 2023
5d32930
Merge branch 'master' of github.com:paritytech/parity-signer into and…
Dmitry-Borodin Apr 13, 2023
06f507c
review changes
Dmitry-Borodin Apr 13, 2023
9cc4481
readme updated
Dmitry-Borodin Apr 13, 2023
8a59e41
Merge branch 'master' into android-release-process
Dmitry-Borodin Apr 13, 2023
ca2a4c6
updated checkout action version as in other flows
Dmitry-Borodin Apr 13, 2023
96f8e21
chore: update android existing CI flow
krodak Apr 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/android-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ on:
- master
- stable
jobs:
#this it tests jobs, called build as it's required name for PR
build:
name: Build
name: Build android unit tests
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to revert to Build for name as this is required check for PR merge

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done. Thank you.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Judging by PR status I think it’s still outstanding @Dmitry-Borodin

runs-on: ubuntu-22.04
steps:
- name: Cancel Previous Runs
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This repository seems abandoned. Could we use another one?
https://github.com/r0adkll/sign-android-release

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's ok as signing didn't change - it is very small task and this usually not changed. I've tested it already and current signing working fine. Most probably we will not need to change it.

Copy link
Contributor

@prybalko prybalko Apr 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

# 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