Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
69 changes: 30 additions & 39 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
node-version-file: "./.tool-versions"
- run: make sdk-build
- run: make react-native-npm-ci
- run: make react-native-build-unsigned-apk
- run: make react-native-build-unsigned-aab

test_capacitor_ios:
runs-on: macos-14
Expand Down Expand Up @@ -108,7 +108,7 @@ jobs:
- run: make sdk-build
- run: make capacitor-npm-ci
- run: make capacitor-build-js
- run: make capacitor-build-unsigned-apk
- run: make capacitor-build-unsigned-aab

react_native_ios:
if: ${{ github.repository == 'authgear/authgear-sdk-js' }}
Expand Down Expand Up @@ -161,28 +161,24 @@ jobs:
bundler-cache: true
- run: make sdk-build
- run: make react-native-npm-ci
- run: make react-native-set-versionCode
- run: make react-native-build-unsigned-apk
- name: Install keystore
- name: Build aab
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.REACT_NATIVE_ANDROID_KEYSTORE_BASE64 }}
STORE_BASE64: ${{ secrets.REACT_NATIVE_ANDROID_KEYSTORE_BASE64 }}
STORE_PASSWORD: ${{ secrets.REACT_NATIVE_ANDROID_KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.REACT_NATIVE_ANDROID_KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.REACT_NATIVE_ANDROID_KEY_PASSWORD }}
run: |
KEYSTORE_PATH=$RUNNER_TEMP/keystore.jks
echo -n "$ANDROID_KEYSTORE_BASE64" | base64 --decode -o $KEYSTORE_PATH
- run: make react-native-zipalign
- name: Run apksigner
env:
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.REACT_NATIVE_ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.REACT_NATIVE_ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.REACT_NATIVE_ANDROID_KEY_PASSWORD }}
run: |
export ANDROID_KEYSTORE_PATH="$RUNNER_TEMP/keystore.jks"
make react-native-apksigner
- name: Distribute to App Center
export STORE_FILE="$RUNNER_TEMP/upload_key.jks"
echo -n "$STORE_BASE64" | base64 --decode -o "$STORE_FILE"
make react-native-build-aab
- name: Upload aab
if: ${{ github.ref == 'refs/heads/master' }}
env:
APPCENTER_ACCESS_TOKEN: ${{ secrets.REACT_NATIVE_ANDROID_APPCENTER_ACCESS_TOKEN }}
run: appcenter distribute release --debug --silent --file ./example/reactnative/android/app/build/outputs/apk/release/app-release-signed.apk --group "Collaborators" --app "Oursky/Authgear-demo-RN-Android" --release-notes "no release notes"
GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64 }}
run: |
export GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE="$RUNNER_TEMP/google_service_account_key.json"
echo -n "$GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64" | base64 --decode -o "$GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE"
make react-native-upload-aab

capacitor_ios:
if: ${{ github.repository == 'authgear/authgear-sdk-js' }}
Expand Down Expand Up @@ -228,30 +224,25 @@ jobs:
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: npm install -g appcenter-cli
- run: make sdk-build
- run: make capacitor-npm-ci
- run: make capacitor-npm-audit
- run: make capacitor-build-js
- run: make capacitor-set-versionCode
- run: make capacitor-build-unsigned-apk
- name: Install keystore
- name: Build aab
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.CAPACITOR_ANDROID_KEYSTORE_BASE64 }}
STORE_BASE64: ${{ secrets.CAPACITOR_ANDROID_KEYSTORE_BASE64 }}
STORE_PASSWORD: ${{ secrets.CAPACITOR_ANDROID_KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.CAPACITOR_ANDROID_KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.CAPACITOR_ANDROID_KEY_PASSWORD }}
run: |
KEYSTORE_PATH=$RUNNER_TEMP/keystore.jks
echo -n "$ANDROID_KEYSTORE_BASE64" | base64 --decode -o $KEYSTORE_PATH
- run: make capacitor-zipalign
- name: Run apksigner
env:
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.CAPACITOR_ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.CAPACITOR_ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.CAPACITOR_ANDROID_KEY_PASSWORD }}
run: |
export ANDROID_KEYSTORE_PATH="$RUNNER_TEMP/keystore.jks"
make capacitor-apksigner
- name: Distribute to App Center
export STORE_FILE="$RUNNER_TEMP/upload_key.jks"
echo -n "$STORE_BASE64" | base64 --decode -o "$STORE_FILE"
make capacitor-build-aab
- name: Upload aab
if: ${{ github.ref == 'refs/heads/master' }}
env:
APPCENTER_ACCESS_TOKEN: ${{ secrets.CAPACITOR_ANDROID_APPCENTER_ACCESS_TOKEN }}
run: appcenter distribute release --debug --silent --file ./example/capacitor/android/app/build/outputs/apk/release/app-release-signed.apk --group "Collaborators" --app "Oursky/Authgear-Demo-Capacitor-Android" --release-notes "no release notes"
GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64 }}
run: |
export GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE="$RUNNER_TEMP/google_service_account_key.json"
echo -n "$GOOGLE_SERVICE_ACCOUNT_KEY_JSON_BASE64" | base64 --decode -o "$GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE"
make capacitor-upload-aab
86 changes: 39 additions & 47 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -81,40 +81,36 @@ react-native-npm-ci:
rm -rf node_modules; \
yarn install --frozen-lockfile

.PHONY: react-native-set-versionCode
react-native-set-versionCode:
/usr/bin/sed -I "" "s/versionCode 1/versionCode $(shell date +%s)/" ./example/reactnative/android/app/build.gradle

.PHONY: react-native-build-unsigned-apk
react-native-build-unsigned-apk:
.PHONY: react-native-build-unsigned-aab
react-native-build-unsigned-aab:
cd ./example/reactnative/android; \
./gradlew :app:assembleRelease

.PHONY: react-native-zipalign
react-native-zipalign:
"$(ANDROID_HOME)/build-tools/33.0.3/zipalign" -c -v 4 ./example/reactnative/android/app/build/outputs/apk/release/app-release-unsigned.apk

.PHONY: react-native-apksigner
react-native-apksigner:
"$(ANDROID_HOME)/build-tools/33.0.3/apksigner" sign \
--ks $(ANDROID_KEYSTORE_PATH) \
--ks-key-alias $(ANDROID_KEY_ALIAS) \
--ks-pass pass:$(ANDROID_KEYSTORE_PASSWORD) \
--key-pass pass:$(ANDROID_KEY_PASSWORD) \
--out ./example/reactnative/android/app/build/outputs/apk/release/app-release-signed.apk \
./example/reactnative/android/app/build/outputs/apk/release/app-release-unsigned.apk
./gradlew :app:bundleRelease

.PHONY: react-native-pod-install
react-native-pod-install:
cd ./example/reactnative/ios; bundle exec pod install

.PHONY: react-native-build-ios-app
react-native-build-ios-app:
bundle exec fastlane react_native_build_ios_app CURRENT_PROJECT_VERSION:$(shell date +%s)
bundle exec fastlane ios react_native_build_ios_app CURRENT_PROJECT_VERSION:$(shell date +%s)

.PHONY: react-native-upload-ios-app
react-native-upload-ios-app:
bundle exec fastlane upload_ios_app ipa:./build/Release/iOS/reactNativeExample/reactNativeExample.ipa
bundle exec fastlane ios upload_ios_app ipa:./build/Release/iOS/reactNativeExample/reactNativeExample.ipa

.PHONY: react-native-build-aab
react-native-build-aab:
bundle exec fastlane android react_native_build_aab \
VERSION_CODE:$(shell date +%s) \
STORE_FILE:$(STORE_FILE) \
STORE_PASSWORD:$(STORE_PASSWORD) \
KEY_ALIAS:$(KEY_ALIAS) \
KEY_PASSWORD:$(KEY_PASSWORD)

.PHONY: react-native-upload-aab
react-native-upload-aab:
bundle exec fastlane android react_native_upload_aab \
json_key:$(GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE)

.PHONY: capacitor-npm-ci
capacitor-npm-ci:
Expand All @@ -135,35 +131,31 @@ capacitor-build-js:

.PHONY: capacitor-build-ios-simulator
capacitor-build-ios-simulator:
bundle exec fastlane capacitor_build_ios_simulator
bundle exec fastlane ios capacitor_build_ios_simulator

.PHONY: capacitor-build-ios-app
capacitor-build-ios-app:
bundle exec fastlane capacitor_build_ios_app CURRENT_PROJECT_VERSION:$(shell date +%s)
bundle exec fastlane ios capacitor_build_ios_app CURRENT_PROJECT_VERSION:$(shell date +%s)

.PHONY: capacitor-upload-ios-app
capacitor-upload-ios-app:
bundle exec fastlane upload_ios_app ipa:./build/Release/iOS/capacitor/capacitor.ipa
bundle exec fastlane ios upload_ios_app ipa:./build/Release/iOS/capacitor/capacitor.ipa

.PHONY: capacitor-build-unsigned-apk
capacitor-build-unsigned-apk:
.PHONY: capacitor-build-unsigned-aab
capacitor-build-unsigned-aab:
cd ./example/capacitor/android; \
./gradlew :app:assembleRelease

.PHONY: capacitor-set-versionCode
capacitor-set-versionCode:
/usr/bin/sed -I "" "s/versionCode 1/versionCode $(shell date +%s)/" ./example/capacitor/android/app/build.gradle

.PHONY: capacitor-zipalign
capacitor-zipalign:
"$(ANDROID_HOME)/build-tools/35.0.1/zipalign" -c -v 4 ./example/capacitor/android/app/build/outputs/apk/release/app-release-unsigned.apk

.PHONY: capacitor-apksigner
capacitor-apksigner:
"$(ANDROID_HOME)/build-tools/35.0.1/apksigner" sign \
--ks $(ANDROID_KEYSTORE_PATH) \
--ks-key-alias $(ANDROID_KEY_ALIAS) \
--ks-pass pass:$(ANDROID_KEYSTORE_PASSWORD) \
--key-pass pass:$(ANDROID_KEY_PASSWORD) \
--out ./example/capacitor/android/app/build/outputs/apk/release/app-release-signed.apk \
./example/capacitor/android/app/build/outputs/apk/release/app-release-unsigned.apk
./gradlew :app:bundleRelease

.PHONY: capacitor-build-aab
capacitor-build-aab:
bundle exec fastlane android capacitor_build_aab \
VERSION_CODE:$(shell date +%s) \
STORE_FILE:$(STORE_FILE) \
STORE_PASSWORD:$(STORE_PASSWORD) \
KEY_ALIAS:$(KEY_ALIAS) \
KEY_PASSWORD:$(KEY_PASSWORD)

.PHONY: capacitor-upload-aab
capacitor-upload-aab:
bundle exec fastlane android capacitor_upload_aab \
json_key:$(GOOGLE_SERVICE_ACCOUNT_KEY_JSON_FILE)
19 changes: 18 additions & 1 deletion example/capacitor/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ android {
applicationId "com.authgear.sdk.exampleapp.capacitor"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
if (project.hasProperty("VERSION_CODE")) {
versionCode Integer.parseInt(project.findProperty("VERSION_CODE"))
} else {
versionCode 1
}
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
Expand All @@ -17,10 +21,23 @@ android {
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
}
}
signingConfigs {
if (project.hasProperty("STORE_FILE")) {
release {
storeFile file(project.findProperty("STORE_FILE"))
storePassword project.findProperty("STORE_PASSWORD")
keyAlias project.findProperty("KEY_ALIAS")
keyPassword project.findProperty("KEY_PASSWORD")
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (project.hasProperty("STORE_FILE")) {
signingConfig signingConfigs.release
}
}
}
}
Expand Down
19 changes: 17 additions & 2 deletions example/reactnative/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -100,10 +100,14 @@ android {

namespace "com.reactnativeexample"
defaultConfig {
applicationId "com.reactnativeexample"
applicationId "com.authgear.sdk.exampleapp.reactnative"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
if (project.hasProperty("VERSION_CODE")) {
versionCode Integer.parseInt(project.findProperty("VERSION_CODE"))
} else {
versionCode 1
}
versionName "1.0"
}

Expand All @@ -122,6 +126,14 @@ android {
keyAlias 'androiddebugkey'
keyPassword 'android'
}
if (project.hasProperty("STORE_FILE")) {
release {
storeFile file(project.findProperty("STORE_FILE"))
storePassword project.findProperty("STORE_PASSWORD")
keyAlias project.findProperty("KEY_ALIAS")
keyPassword project.findProperty("KEY_PASSWORD")
}
}
}
buildTypes {
debug {
Expand All @@ -134,6 +146,9 @@ android {
// signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
if (project.hasProperty("STORE_FILE")) {
signingConfig signingConfigs.release
}
}
}

Expand Down
10 changes: 4 additions & 6 deletions example/reactnative/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
buildscript {
ext {
// buildToolsVersion depends on the available build tools on the Github runner.
// See https://github.com/actions/runner-images/blob/main/images/macos/macos-14-arm64-Readme.md
buildToolsVersion = "33.0.3"
buildToolsVersion = "35.0.0"
minSdkVersion = 24
compileSdkVersion = 33
targetSdkVersion = 33
compileSdkVersion = 35
targetSdkVersion = 34
ndkVersion = "26.1.10909125"
kotlinVersion = "1.9.24"
kotlinVersion = "1.9.25"
}
repositories {
google()
Expand Down
50 changes: 48 additions & 2 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
default_platform(:ios)

platform :ios do
lane :react_native_build_ios_app do |options|
build_app(
Expand Down Expand Up @@ -46,3 +44,51 @@ platform :ios do
)
end
end

platform :android do
lane :react_native_build_aab do |options|
gradle(
project_dir: "./example/reactnative/android",
tasks: [":app:bundleRelease"],
properties: {
"VERSION_CODE" => options[:VERSION_CODE],
"STORE_FILE" => options[:STORE_FILE],
"STORE_PASSWORD" => options[:STORE_PASSWORD],
"KEY_ALIAS" => options[:KEY_ALIAS],
"KEY_PASSWORD" => options[:KEY_PASSWORD],
},
)
end

lane :react_native_upload_aab do |options|
upload_to_play_store(
json_key: options[:json_key],
package_name: "com.authgear.sdk.exampleapp.reactnative",
track: "internal",
aab: "./example/reactnative/android/app/build/outputs/bundle/release/app-release.aab",
)
end

lane :capacitor_build_aab do |options|
gradle(
project_dir: "./example/capacitor/android",
tasks: [":app:bundleRelease"],
properties: {
"VERSION_CODE" => options[:VERSION_CODE],
"STORE_FILE" => options[:STORE_FILE],
"STORE_PASSWORD" => options[:STORE_PASSWORD],
"KEY_ALIAS" => options[:KEY_ALIAS],
"KEY_PASSWORD" => options[:KEY_PASSWORD],
},
)
end

lane :capacitor_upload_aab do |options|
upload_to_play_store(
json_key: options[:json_key],
package_name: "com.authgear.sdk.exampleapp.capacitor",
track: "internal",
aab: "./example/capacitor/android/app/build/outputs/bundle/release/app-release.aab",
)
end
end