Merge branch 'develop' into inji-282-disabled-camera-permission-view

This commit is contained in:
Swati Goel
2023-12-11 23:32:20 +05:30
committed by GitHub
27 changed files with 535 additions and 929 deletions

View File

@@ -1,142 +0,0 @@
name: Android Beta Build
env:
mimotoBackendServiceDefaultUrl: https://api.sandbox.mosip.net
esignetBackendServiceDefaultUrl: https://api.sandbox.mosip.net
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to be published'
required: true
default: 'v1.2.3'
type: string
body:
description: 'Release body message'
required: true
default: 'Changes in this Release'
type: string
pre-release:
description: 'Pre-release? True/False'
required: true
default: False
type: string
mimotoBackendServiceUrl:
description: 'Mimoto backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
esignetBackendServiceUrl:
description: 'Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
buildDescription:
description: 'What to test'
required: true
default: 'QA-Triple environment'
type: string
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Create Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: ${{ github.event.inputs.tag }}
release_name: ${{ github.event.inputs.tag }}
body: ${{ github.event.inputs.body }}
draft: false
prerelease: ${{fromJSON(github.event.inputs.pre-release)}}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check for git tag
run: |
cd android/scripts
./git-tag.sh
- name: Install npm dependencies
run: |
npm ci
- name: Create .env.local file
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Generate keystore
run: |
echo "$ANDROID_KEYSTORE_FILE" > release.keystore.b64
base64 -d -i release.keystore.b64 > android/app/release.keystore
env:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
- name: Export variables for keystore
run: |
cd android/app
export RELEASE_KEYSTORE_ALIAS=androidreleasekey
export RELEASE_KEYSTORE_PASSWORD=$RELEASE_KEYSTORE_PASSWORD
env:
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
- name: Create Google Play Config file
run : |
cd android
echo "$INJI_ANDROID_PLAY_STORE_CONFIG_JSON" > play_config.json.b64
base64 -d -i play_config.json.b64 > play_config.json
env:
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
- name: Run Build
run: |
cd android/scripts
./beta-build.sh
env:
MIMOTO_HOST: ${{ github.event.inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ github.event.inputs.theme }}
RELEASE_KEYSTORE_ALIAS: androidreleasekey
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
SLACK_URL: '${{ secrets.SLACK_WEBHOOK_DEVOPS }}'
PLAY_CONSOLE_RELEASE_DESCRIPTION: ${{ github.event.inputs.buildDescription }}
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}

View File

@@ -1,148 +0,0 @@
name: PR - Android build verification
env:
backendServiceDefaultUrl: https://api.sandbox.mosip.net
DUMMY_INJI_ANDROID_DEBUG_STOREPASS: 'password'
DUMMY_GOOGLE_SERVICE_JSON: '{
"project_info": {
"project_number": "mockproject-1234",
"project_id": "123456789000",
"storage_bucket": "mock-project.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:123456789000:android:f1bf012572b04063",
"android_client_info": {
"package_name": "io.mosip.residentapp"
}
},
"oauth_client": [
{
"client_id": "123456789000-hjugbg6ud799v4c49dim8ce2usclthar.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzbSzCn1N6LWIe6wthYyrgUUSAlUsdqMb-wvTo"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "123456789000-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}'
on:
push:
branches:
- main
- develop
- demobranch
- qa-develop
- 0.9
tags:
- '*'
pull_request:
types: [ opened, synchronize ]
branches:
- develop
- 'release-**'
tags:
- '*'
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Cache local npm repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
path: ~/.npm
- name: Cache local gradle repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
path: |
~/.gradle/caches
~/.gradle/wrapper
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
echo "DUMMY_INJI_ANDROID_DEBUG_STOREPASS=$DUMMY_INJI_ANDROID_DEBUG_STOREPASS" >> $GITHUB_ENV
- name: Install npm dependencies
run: |
npm ci
- name: Create .env.local file
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Generate keystore
run: |
keytool \
-genkey -v \
-storetype PKCS12 \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-storepass $DEBUG_KEYSTORE_PASSWORD \
-keypass $DEBUG_KEYSTORE_PASSWORD \
-alias androiddebugkey \
-keystore android/app/debug.keystore \
-dname "CN=io.mosip.residentapp,OU=,O=,L=,S=,C=US"
env:
DEBUG_KEYSTORE_PASSWORD: ${{secrets.INJI_ANDROID_DEBUG_STOREPASS || env.DUMMY_INJI_ANDROID_DEBUG_STOREPASS }}
- name: Export variables for keystore
run: |
cd android/app
export DEBUG_KEYSTORE_ALIAS=androiddebugkey
export DEBUG_KEYSTORE_PASSWORD=$DEBUG_KEYSTORE_PASSWORD
env:
DEBUG_KEYSTORE_PASSWORD: ${{secrets.INJI_ANDROID_DEBUG_STOREPASS || env.DUMMY_INJI_ANDROID_DEBUG_STOREPASS }}
- name: Bump version code
uses: chkfung/android-version-actions@v1.2.1
with:
gradlePath: android/app/build.gradle
versionCode: ${{github.run_number}}
- name: Run Build using Fastlane
run: |
cd android/scripts
./verify-build.sh
env:
DEBUG_KEYSTORE_ALIAS: androiddebugkey
DEBUG_KEYSTORE_PASSWORD: ${{secrets.INJI_ANDROID_DEBUG_STOREPASS || env.DUMMY_INJI_ANDROID_DEBUG_STOREPASS }}

View File

@@ -1,211 +0,0 @@
name: Android Internal Build
run-name: ${{ github.event.inputs.buildname }}
env:
mimotoBackendServiceDefaultUrl: https://api.sandbox.mosip.net
esignetBackendServiceDefaultUrl: https://api.sandbox.mosip.net
on:
workflow_dispatch:
inputs:
buildname:
description: 'Build App For'
required: true
default: 'Sprint-x/Collab/release-x.x.x'
type: string
mimotoBackendServiceUrl:
description: 'Mimoto backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
esignetBackendServiceUrl:
description: 'Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
buildDescription:
description: 'What to test'
required: true
default: 'QA-Triple environment'
type: string
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
jobs:
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Cache local npm repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
path: ~/.npm
- name: Cache local gradle repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
path: |
~/.gradle/caches
~/.gradle/wrapper
- name: Install npm dependencies
run: |
npm ci
- name: Create .env.local file
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Generate keystore
run: |
echo "$ANDROID_KEYSTORE_FILE" > release.keystore.b64
base64 -d -i release.keystore.b64 > android/app/release.keystore
env:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
- name: Export variables for keystore
run: |
cd android/app
export RELEASE_KEYSTORE_ALIAS=androidreleasekey
export RELEASE_KEYSTORE_PASSWORD=$RELEASE_KEYSTORE_PASSWORD
env:
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
- name: Create Google Play Config file
run: |
cd android
echo "$INJI_ANDROID_PLAY_STORE_CONFIG_JSON" > play_config.json.b64
base64 -d -i play_config.json.b64 > play_config.json
env:
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
- name: Run Build
run: |
cd android/scripts
./internal-build.sh
env:
MIMOTO_HOST: ${{ github.event.inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ github.event.inputs.theme }}
RELEASE_KEYSTORE_ALIAS: androidreleasekey
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
SLACK_URL: '${{ secrets.SLACK_WEBHOOK_DEVOPS }}'
PLAY_CONSOLE_RELEASE_DESCRIPTION: ${{ github.event.inputs.buildDescription }}
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
upload-to-actions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Cache local npm repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
path: ~/.npm
- name: Cache local gradle repository
uses: actions/cache@v3.0.11
with:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
path: |
~/.gradle/caches
~/.gradle/wrapper
- name: Install npm dependencies
run: |
npm i
- name: Create .env.local file
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Generate keystore
run: |
echo "$ANDROID_KEYSTORE_FILE" > release.keystore.b64
base64 -d -i release.keystore.b64 > android/app/release.keystore
env:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
- name: Create Google Play Config file
run: |
cd android
echo "$INJI_ANDROID_PLAY_STORE_CONFIG_JSON" > play_config.json.b64
base64 -d -i play_config.json.b64 > play_config.json
env:
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
- name: Run Build for upload
run: |
npx jetify
cd android
./gradlew :app:assembleMosipRelease
env:
MIMOTO_HOST: ${{ github.event.inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ github.event.inputs.theme }}
RELEASE_KEYSTORE_ALIAS: androidreleasekey
RELEASE_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_RELEASE_STOREPASS}}'
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
with:
name: ${{ github.event.inputs.buildname }}
path: android/app/build/outputs/apk/mosip/release/
retention-days: 10

10
.github/workflows/clear-artifacts.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
name: "Delete old artifacts"
on:
workflow_dispatch:
jobs:
delete-artifacts:
uses: mosip/kattu/.github/workflows/clear-artifacts.yml@master
secrets:
ACCESS_TOKEN: ${{ secrets.ACTION_PAT }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

View File

@@ -1,15 +0,0 @@
name: 'Delete old artifacts'
on:
workflow_dispatch:
name: 'Delete old artifacts'
on:
workflow_dispatch:
jobs:
delete-artifacts:
runs-on: ubuntu-latest
steps:
- uses: kolpav/purge-artifacts-action@v1
with:
token: ${{ secrets.ACTION_PAT }}
expire-in: 2days # Setting this to 0 will delete all artifacts

177
.github/workflows/internal-build.yml vendored Normal file
View File

@@ -0,0 +1,177 @@
name: Internal Build [Android & IOS]
run-name: ${{ inputs.buildname }}
on:
workflow_dispatch:
inputs:
release:
description: 'Internal/Beta'
required: true
default: 'internal'
type: choice
options:
- internal
- beta
buildFor:
description: 'Build'
required: true
default: 'Both[Android and IOS]'
type: choice
options:
- Both[Android and IOS]
- Android
- IOS
buildName:
description: 'Build App For'
required: true
default: 'Sprint-x/Collab/release-x.x.x'
type: string
mimotoBackendServiceUrl:
description: 'Mimoto backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
esignetBackendServiceUrl:
description: 'Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
injiFlavor:
description: 'Select Inji flavor'
required: true
default: 'Inji'
type: choice
options:
- residentapp
- inji
- collab
- synergy
- mec
internal-testers:
description: 'Internal Testers Group'
required: true
default: 'QA-Triple'
type: choice
options:
- Dev-testing
- MEC
- QA
- MOSIP-Collab
- MOSIP-Dev-testing
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
buildDescription:
description: 'What to test'
required: true
default: 'QA-Triple environment'
type: string
allow_env_edit:
description: 'Edit ENV'
required: true
default: 'true'
type: choice
options:
- false
- true
jobs:
build-android:
if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android'}}
uses: mosip/kattu/.github/workflows/android-publish.yml@master
with:
RELEASE: ${{ inputs.release }}
NODE_VERSION: '16.x'
RELEASE_KEYSTORE_ALIAS: androidreleasekey
MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ inputs.theme }}
BUILD_DESCRIPTION: ${{ inputs.buildDescription }}
ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
APP_FLAVOR: ${{ inputs.injiFlavor }}
SERVICE_LOCATION: '.'
ANDROID_SERVICE_LOCATION: 'android'
BUILD_SCRIPT_LOCATION: 'scripts'
SCRIPT_NAME: "./${{ inputs.release }}.sh"
ANDROID_ARTIFACT_NAME: ${{ inputs.buildname }}
ANDROID_ARTIFACT_PATH: "android/app/build/outputs/apk/${{ inputs.injiFlavor }}/release/Inji_universal.apk"
secrets:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK }}'
build-android-beta:
if: ${{ inputs.release == 'beta' && (inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'Android') }}
uses: mosip/kattu/.github/workflows/android-publish.yml@master
with:
RELEASE: ${{ inputs.release }}
NODE_VERSION: '16.x'
RELEASE_KEYSTORE_ALIAS: androidreleasekey
MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ inputs.theme }}
BUILD_DESCRIPTION: ${{ inputs.buildDescription }}
ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
APP_FLAVOR: ${{ inputs.injiFlavor }}
SERVICE_LOCATION: '.'
ANDROID_SERVICE_LOCATION: 'android'
BUILD_SCRIPT_LOCATION: 'scripts'
SCRIPT_NAME: "./${{ inputs.release }}.sh"
ANDROID_ARTIFACT_NAME: ${{ inputs.buildname }}
ANDROID_ARTIFACT_PATH: "android/app/build/outputs/apk/${{ inputs.injiFlavor }}/release/Inji_universal.apk"
secrets:
ANDROID_KEYSTORE_FILE: ${{ secrets.INJI_ANDROID_RELEASE_KEYSTORE }}
RELEASE_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_RELEASE_STOREPASS }}'
INJI_ANDROID_PLAY_STORE_CONFIG_JSON: ${{ secrets.INJI_ANDROID_PLAY_STORE_CONFIG_JSON }}
SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK }}'
build-ios:
if: ${{ inputs.buildFor == 'Both[Android and IOS]' || inputs.buildFor == 'IOS'}}
uses: mosip/kattu/.github/workflows/ios-publish.yml@master
with:
NODE_VERSION: '18.x'
MIMOTO_HOST: ${{ inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ inputs.esignetBackendServiceUrl }}
APPLICATION_THEME: ${{ inputs.theme }}
TESTFLIGHT_BETA_APP_DESCRIPTION: ${{ inputs.buildDescription }}
ALLOW_ENV_EDIT: ${{ inputs.allow_env_edit }}
TESTFLIGHT_INTERNAL_TESTERS_GROUP: ${{ inputs.internal-testers }}
APP_FLAVOR: ${{ inputs.injiFlavor }}
SERVICE_LOCATION: '.'
IOS_SERVICE_LOCATION: 'ios'
SCRIPT_NAME: "fastlane beta"
IOS_ARTIFACT_NAME: "Inji"
IOS_ARTIFACT_PATH: "ios/fastlane/Inji_app_file/Products/Applications/"
secrets:
APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'
SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK }}'
# sonar-check:
# uses: mosip/kattu/.github/workflows/gradlew-sonar-analysis.yml@master
# with:
# SERVICE_LOCATION: '.'
# ANDROID_LOCATION: 'android'
# SONAR_ARGS: -Dsonarqube
# secrets:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# SONAR_ORGANIZATION: ${{ secrets.ORG_KEY }}
# SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK }}'

View File

@@ -1,72 +0,0 @@
name: Inji iOS Automation Build
on:
workflow_dispatch:
inputs:
mimotoBackendServiceUrl:
description: 'Mimoto backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
esignetBackendServiceUrl:
description: 'Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
jobs:
build_ios:
name: Uploading app to Actions
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Install npm dependencies
run: |
npm install
- name: Install Pod
run: |
cd ios
pod install
pod install
- name: Build iOS for automation on simulator
run: |
cd ios
fastlane build_app_for_automation_on_simulator
- name: Upload Inji.app artifact
uses: actions/upload-artifact@v3.1.1
with:
name: Inji
path: ios/fastlane/Inji_app_file/Products/Applications/
retention-days: 7
- name: Upload Runner Log on Failure
if: failure() # Only run this step if the previous steps failed
uses: actions/upload-artifact@v3.1.1
with:
name: runner-log
path: /Users/runner/Library/Logs/gym/
retention-days: 1

View File

@@ -1,59 +0,0 @@
name: PR - IOS build verification
on:
push:
branches:
- main
- develop
- demobranch
- qa-develop
- 0.9
tags:
- '*'
pull_request:
types: [ opened, synchronize ]
branches:
- develop
- 'release-**'
tags:
- '*'
jobs:
build_ios:
name: Building the IPA
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Install npm dependencies
run: |
npm install
- name: Install Pod
run: |
cd ios
pod install
- name: Building the IPA
run: |
cd ios
fastlane build_app_for_automation_on_simulator
env:
APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'

View File

@@ -1,103 +0,0 @@
name: Inji iOS build
on:
workflow_dispatch:
inputs:
mimotoBackendServiceUrl:
description: 'Mimoto backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
esignetBackendServiceUrl:
description: 'Esignet backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
internal-testers:
description: 'Internal Testers Group'
required: true
default: 'QA-Triple'
type: choice
options:
- Dev-testing
- MEC
- QA
- MOSIP-Collab
- MOSIP-Dev-testing
buildDescription:
description: 'What to test'
required: true
default: 'QA-Triple environment build'
type: string
jobs:
build_ios:
name: Deploying to Testflight
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '18.x'
- name: Install npm dependencies
run: |
npm install
- name: Install Pod
run: |
cd ios
pod install
pod install
- name: Deploy iOS Beta to TestFlight
run: |
cd ios
fastlane beta
env:
APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
SLACK_URL: '${{ secrets.SLACK_WEBHOOK_DEVOPS }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'
APPLICATION_THEME: ${{ github.event.inputs.theme }}
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
MIMOTO_HOST: ${{ github.event.inputs.mimotoBackendServiceUrl }}
ESIGNET_HOST: ${{ github.event.inputs.esignetBackendServiceUrl }}
TESTFLIGHT_INTERNAL_TESTERS_GROUP: ${{ github.event.inputs.internal-testers }}
TESTFLIGHT_BETA_APP_DESCRIPTION: ${{ github.event.inputs.buildDescription }}
- name: Upload Runner Log on Failure
if: failure() # Only run this step if the previous steps failed
uses: actions/upload-artifact@v3.1.1
with:
name: runner-log
path: /Users/runner/Library/Logs/gym/
retention-days: 1

50
.github/workflows/push-triggers.yml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: Push-Triggers
on:
push:
branches:
- main
- develop
- qa-develop
- 'release-**'
release:
types: [published]
pull_request:
types: [opened, reopened, synchronize]
branches:
- main
- develop
- qa-develop
- 'release-**'
jobs:
build-android:
uses: mosip/kattu/.github/workflows/android-build.yml@master
with:
NODE_VERSION: "16.x"
DEBUG_KEYSTORE_ALIAS: androiddebugkey
SERVICE_LOCATION: '.'
ANDROID_SERVICE_LOCATION: 'android'
BUILD_SCRIPT_LOCATION: 'scripts'
SCRIPT_NAME: './android-build.sh'
secrets:
DEBUG_KEYSTORE_PASSWORD: '${{ secrets.INJI_ANDROID_DEBUG_STOREPASS }}'
build-ios:
uses: mosip/kattu/.github/workflows/ios-build.yml@master
with:
NODE_VERSION: "18.x"
SERVICE_LOCATION: '.'
IOS_SERVICE_LOCATION: 'ios'
SCRIPT_NAME: "fastlane ios_app_build"
# sonar-check:
# if: ${{ github.event_name != 'pull_request' }}
# uses: mosip/kattu/.github/workflows/gradlew-sonar-analysis.yml@master
# with:
# SERVICE_LOCATION: '.'
# ANDROID_LOCATION: 'android'
# secrets:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# SONAR_ORGANIZATION: ${{ secrets.ORG_KEY }}
# SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK }}'

View File

@@ -1,30 +0,0 @@
name: SonarQube checks
on:
push:
branches:
- develop
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
with:
fetch-depth: 0
- name: Install npm dependencies
run: |
npm ci
- uses: sonarsource/sonarqube-scan-action@master
with:
args:
-Dsonar.organization=${{ secrets.ORG_KEY }}
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: https://sonarcloud.io
SONAR_ORGANIZATION: ${{ secrets.ORG_KEY }}
# If you wish to fail your job when the Quality Gate is red, uncomment the
# following lines. This would typically be used to fail a deployment.
# - uses: sonarsource/sonarqube-quality-gate-action@master
# timeout-minutes: 5
# env:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

35
.github/workflows/tag.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Tagging of repos
on:
workflow_dispatch:
inputs:
TAG:
description: "Tag to be published"
required: true
type: string
BODY:
description: "Release body message"
required: true
default: "Changes in this Release"
type: string
PRE_RELEASE:
description: "Pre-release? True/False"
required: true
default: False
type: string
DRAFT:
description: "Draft? True/False"
required: false
default: False
type: string
jobs:
tag-branch:
uses: mosip/kattu/.github/workflows/tag.yml@master
with:
TAG: ${{ inputs.TAG }}
BODY: ${{ inputs.BODY }}
PRE_RELEASE: ${{ inputs.PRE_RELEASE }}
DRAFT: ${{ inputs.DRAFT }}
secrets:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

View File

@@ -1,8 +1,8 @@
fileignoreconfig:
- filename: package.json
checksum: a5a22604f2b9d917adaf3561fdcaeccd4e69b92e1240070480d7498e1eda5162
checksum: 984f91af6d696faf934f7e541801343e146aed1b58d7c950ba11ec02dbd60dda
- filename: package-lock.json
checksum: 7e8bc0fa27b4eca3b7a825bccdef88ef1c9e7932a5d9af0e5feca2d42d72703b
checksum: c16e22cf137c123d7f1b1b95758646fc839dc1fa16f7cf74dff3124174475e13
- filename: lib/jsonld-signatures/suites/ed255192018/ed25519.ts
checksum: 493b6e31144116cb612c24d98b97d8adcad5609c0a52c865a6847ced0a0ddc3a
- filename: components/PasscodeVerify.tsx
@@ -67,8 +67,6 @@ fileignoreconfig:
checksum: c5de3d912e2cbd55f6898e2f4a24413abbee8f084c99ea11ce6265504a520ce0
- filename: android/fastlane/Fastfile
checksum: 41d1409adf8df9c843fd2dba89142cd55c471f3060ced57d48ee96dc8793ffcd
- filename: package.json
checksum: b982af1813bb72625c63eb31b3d0a6c0d970cd669d57649cc0ac9358252e3cd3
- filename: machines/VCItemMachine/EsignetMosipVCItem/EsignetMosipVCItemMachine.typegen.ts
checksum: 15308987b1aab0c51c96bfc646ae55a3d7ae728a1f6e03ab31d5e1b786da03eb
- filename: machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine.typegen.ts
@@ -76,21 +74,16 @@ fileignoreconfig:
- filename: shared/telemetry/TelemetryUtils.js
checksum: a0686e9a5c006176fd720b84bc36ca947db1422caf65c90cd0c2d1102a9e96df
- filename: ios/fastlane/Fastfile
checksum: feea5a7f044ef6961d53e7d1e1ffb92a3e0f72761496424f6e64288e3718d605
checksum: 78edb7772ca7bf64fc0c603cb82771c793e03afff37ccbbfd1b9f578ec0e5369
- filename: machines/bleShare/scan/scanMachine.ts
checksum: a514c958ca3da3c5b22a1a95ad680af8f05fb22638fab79b3842aa8fcc1b4a17
version: ''
- filename: locales/spa.json
checksum: eac9685c6b205ece5759e414669d27ad7ce383453d7b5e7d9f5ce75d290cc860
version: ''
- filename: screens/PasscodeScreen.tsx
checksum: 5d3003027b245234f8c00bfc98836f1fb90a5d9525ffacf61c53f3d50954aa6a
version: ''
- filename: screens/PasscodeScreen.tsx
checksum: 3330b9db9cfce407782e82b4fe3c0b60a9ecb0f9327af2b69971e254f9e52921
version: ''
- filename: screens/Home/MyVcs/OtpVerificationModal.tsx
checksum: a99fe136d9d1348c541d413324d266e179ecad6a1fe6b6bd1e0b2856a5a6d6b5
- filename: screens/QrLogin/QrConsent.tsx
checksum: 8563a194a4d38814eff670f0652d1a7af77134cafb350462174b4f147dbd890d
version: ''

View File

@@ -4,6 +4,7 @@ plugins {
apply plugin: "com.android.application"
apply plugin: "com.facebook.react"
apply plugin: "org.sonarqube"
react {
/* Folders */
@@ -95,12 +96,9 @@ android {
compileSdkVersion rootProject.ext.compileSdkVersion
ext {
APP_NAME_RELEASE = "@string/app_name"
APP_NAME_MOSIP = "@string/app_name_mosip"
APP_NAME_BETA = "@string/app_name_beta"
APP_NAME= "@string/app_name"
}
namespace 'io.mosip.residentapp'
defaultConfig {
@@ -110,14 +108,12 @@ android {
versionName androidGitVersion.name()
versionCode 1
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
manifestPlaceholders = [
APP_NAME: APP_NAME_RELEASE,
APP_NAME: APP_NAME,
appAuthRedirectScheme: 'io.mosip.residentapp.inji'
]
}
splits {
abi {
reset()
@@ -129,26 +125,53 @@ android {
signingConfigs {
release {
def keystore = file('release.keystore')
def keystoreAlias = System.getenv("RELEASE_KEYSTORE_ALIAS")
def keystorePass = System.getenv("RELEASE_KEYSTORE_PASSWORD")
// for sonarqube job we will generate dummy release keystore to sign the app as we are not doing it in workflow
def hasSonarqube = System.properties.containsKey("sonarqube")
def keystore = file('release.keystore').exists() ? file('release.keystore') : file('dummyrelease.keystore')
storeFile file("$keystore")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
keyPassword "$keystorePass"
if (hasSonarqube && !keystore.exists() ) {
exec {
commandLine 'keytool',
'-genkey',
'-v',
'-storetype', 'PKCS12',
'-keyalg', 'RSA',
'-keysize', '2048',
'-validity', '10000',
'-storepass', 'password',
'-keypass', 'password',
'-alias', 'androidreleasekey',
'-keystore', 'dummyrelease.keystore',
'-dname', 'CN=,OU=,O=,L=,S=,C=US'
}
storePassword "password"
keyAlias "androidreleasekey"
keyPassword "password"
}
else{
def keystoreAlias = System.getenv("RELEASE_KEYSTORE_ALIAS")
def keystorePass = System.getenv("RELEASE_KEYSTORE_PASSWORD")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
keyPassword "$keystorePass"
}
v2SigningEnabled true
v1SigningEnabled false
}
debug {
def keystore = file('debug.keystore')
def keystoreAlias = System.getenv("DEBUG_KEYSTORE_ALIAS")
def keystorePass = System.getenv("DEBUG_KEYSTORE_PASSWORD")
storeFile file("$keystore")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
keyPassword "$keystorePass"
v2SigningEnabled true
v1SigningEnabled false
if (keystore.exists()) {
def keystoreAlias = System.getenv("DEBUG_KEYSTORE_ALIAS")
def keystorePass = System.getenv("DEBUG_KEYSTORE_PASSWORD")
storeFile file("$keystore")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
keyPassword "$keystorePass"
v2SigningEnabled true
v1SigningEnabled false
}else {
android.buildTypes.debug.signingConfig = null
}
}
}
buildTypes {
@@ -171,19 +194,34 @@ android {
flavorDimensions "inji"
productFlavors {
mosip {
residentapp {
versionName defaultConfig.versionName
manifestPlaceholders = [
APP_NAME: APP_NAME_MOSIP
]
dimension "inji"
resValue "string", "app_name", "Inji"
}
beta {
inji {
applicationId "io.mosip.inji.wallet"
versionName defaultConfig.versionName
manifestPlaceholders = [
APP_NAME: APP_NAME_BETA
]
dimension "inji"
resValue "string", "app_name", "Inji Wallet"
}
collab {
applicationId "io.mosip.inji.collab"
versionName defaultConfig.versionName
dimension "inji"
resValue "string", "app_name", "Inji Wallet Collab"
}
synergy {
applicationId "io.mosip.inji.synergy"
versionName defaultConfig.versionName
dimension "inji"
resValue "string", "app_name", "Inji Wallet Synergy"
}
mec {
applicationId "io.mosip.inji.mec"
versionName defaultConfig.versionName
dimension "inji"
resValue "string", "app_name", "Inji Wallet Mec"
}
}
@@ -191,7 +229,17 @@ android {
variant.outputs.all { output ->
def datetime = new Date().format('yyyyMMdd_HHmm')
def architecture = output.getFilter(com.android.build.OutputFile.ABI) ?: "universal"
outputFileName = "Inji_${variant.versionName}_${datetime}_${architecture}.apk"
outputFileName = "Inji_${architecture}.apk"
}
}
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
if (variant.flavorName == "collab") {
sonarqube {
androidVariant variant.name
}
}
}
}
}
@@ -248,4 +296,4 @@ dependencies {
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
apply from: "./eas-build.gradle"
apply from: "./eas-build.gradle"

View File

@@ -1,8 +1,4 @@
<resources>
<string name="app_name">Inji</string>
<string name="app_name_mosip">MOSIP Resident App - Mosip/Inji</string>
<string name="app_name_newlogic">MOSIP Resident App - Newlogic</string>
<string name="app_name_ph">MOSIP Resident App - PH</string>
<string name="expo_splash_screen_resize_mode" translatable="false">cover</string>
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
<string name="ExpoLocalization_supportsRTL" translatable="false">undefined</string>

View File

@@ -18,6 +18,7 @@ buildscript {
dependencies {
classpath("com.android.tools.build:gradle:7.3.1")
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3")
}
}

View File

@@ -4,22 +4,56 @@ MIMOTO_HOST = ENV["MIMOTO_HOST"]
ESIGNET_HOST = ENV["ESIGNET_HOST"]
APPLICATION_THEME = ENV["APPLICATION_THEME"]
RELEASE_KEYSTORE_ALIAS = ENV["RELEASE_KEYSTORE_ALIAS"]
DEBUG_KEYSTORE_ALIAS = ENV["DEBUG_KEYSTORE_ALIAS"]
RELEASE_KEYSTORE_PASSWORD = ENV["RELEASE_KEYSTORE_PASSWORD"]
PLAY_CONSOLE_RELEASE_DESCRIPTION = ENV["PLAY_CONSOLE_RELEASE_DESCRIPTION"]
SLACK_URL = ENV["SLACK_URL"]
DEBUG_KEYSTORE_PASSWORD = ENV["DEBUG_KEYSTORE_PASSWORD"]
PLAY_CONSOLE_RELEASE_DESCRIPTION = ENV["BUILD_DESCRIPTION"]
SLACK_URL = ENV["SLACK_WEBHOOK_URL"]
CREDENTIAL_REGISTRY_EDIT = ENV["CREDENTIAL_REGISTRY_EDIT"]
APP_FLAVOR = ENV["APP_FLAVOR"]
def generate_app_bundle_id()
flavor = APP_FLAVOR
case flavor
when "residentapp"
return "io.mosip.residentapp"
when "inji"
return "io.mosip.inji.wallet"
when "collab"
return "io.mosip.inji.collab"
when "synergy"
return "io.mosip.inji.synergy"
when "mec"
return "io.mosip.inji.mec"
end
end
def generate_app_name()
flavor = APP_FLAVOR
case flavor
when "residentapp"
return "Inji"
when "inji"
return "Inji Wallet"
when "collab"
return "Inji Wallet Collab"
when "synergy"
return "Inji Wallet Synergy"
when "mec"
return "Inji Wallet Mec"
end
end
desc "Verify Build for Android"
lane :android_build_verify do
gradle(
task: "assembleMosipDebug",
)
lane :android_build do
gradle(task: "assemble#{APP_FLAVOR}Debug")
end
desc "Deploy an Internal testing version to the Google Play"
lane :android_build_internal do
previous_build_number = google_play_track_version_codes(
package_name: "io.mosip.residentapp",
package_name: generate_app_bundle_id,
track: "internal",
json_key: "play_config.json",
)[0]
@@ -36,15 +70,16 @@ lane :android_build_internal do
versionName = "#{git_commit}-#{git_branch}"
gradle(task: "clean bundleMosipRelease")
gradle(task: "clean bundle#{APP_FLAVOR}Release")
upload_to_play_store(
track: 'internal',
release_status: 'completed',
version_name: versionName,
package_name: generate_app_bundle_id,
)
slack(
message: "Inji - #{versionName} (#{current_build_number}) is uploaded to Play store. Description : #{PLAY_CONSOLE_RELEASE_DESCRIPTION}.",
message: "#{generate_app_name} #{versionName} (#{current_build_number}) is uploaded to Play store. Description : #{PLAY_CONSOLE_RELEASE_DESCRIPTION}.",
success: true,
slack_url: "#{SLACK_URL}",
default_payloads: [:git_branch, :last_git_commit]
@@ -69,17 +104,18 @@ lane :android_build_beta do
version_code: versionCode
)
versionName = "Inji #{git_tag}"
versionName = "#{generate_app_name} #{git_tag}"
gradle(task: "clean bundleBetaRelease")
gradle(task: "clean bundle#{APP_FLAVOR}Release")
upload_to_play_store(
track: 'alpha',
release_status: 'completed',
version_name: versionName,
package_name: generate_app_bundle_id,
)
slack(
message: "Inji [Beta]- #{versionName} is uploaded to Play store. Description : #{PLAY_CONSOLE_RELEASE_DESCRIPTION}.",
message: "#{generate_app_name} #{versionName} is uploaded to Play store. Description : #{PLAY_CONSOLE_RELEASE_DESCRIPTION}.",
success: true,
slack_url: "#{SLACK_URL}",
default_payloads: [:git_branch, :last_git_commit]

View File

@@ -10,7 +10,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
@@ -57,4 +57,5 @@ newArchEnabled=false
# If set to false, you will be using JSC instead.
hermesEnabled=true
expo.jsEngine=hermes
expo.jsEngine=hermes
org.gradle.jvmargs=-Xmx4096m

View File

@@ -7,4 +7,4 @@ yes | sudo gem install bundler
yes | sudo fastlane install_plugins
bundle exec fastlane android_build_verify
bundle exec fastlane android_build

View File

@@ -361,7 +361,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.9.1;
MARKETING_VERSION = 0.10.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -398,7 +398,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 0.9.1;
MARKETING_VERSION = 0.10.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -557,4 +557,4 @@
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}
}

View File

@@ -1,5 +1,5 @@
app_identifier(ENV["INJI_IOS_DEVELOPER_APP_IDENTIFIER"]) # The bundle identifier of your app
apple_id(ENV["IOS_FASTLANE_APPLE_ID"]) # Your Apple Developer Portal username
apple_id(ENV["INJI_IOS_FASTLANE_APPLE_ID"]) # Your Apple Developer Portal username
itc_team_id(ENV["APP_STORE_CONNECT_TEAM_ID"]) # App Store Connect Team ID
team_id(ENV["INJI_IOS_DEVELOPER_PORTAL_TEAM_ID"]) # Developer Portal Team ID
team_id(ENV["INJI_IOS_DEVELOPER_PORTAL_TEAM_ID"]) # Developer Portal Team ID

View File

@@ -5,7 +5,6 @@ APP_STORE_CONNECT_TEAM_ID = ENV["APP_STORE_CONNECT_TEAM_ID"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
DEVELOPER_APP_IDENTIFIER = ENV["INJI_IOS_DEVELOPER_APP_IDENTIFIER"]
TEAM_ID = ENV["INJI_IOS_DEVELOPER_PORTAL_TEAM_ID"]
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD = ENV["INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"]
FASTLANE_USER= ENV["IOS_FASTLANE_APPLE_ID"]
@@ -13,12 +12,62 @@ PROVISIONING_PROFILE_SPECIFIER = ENV["INJI_IOS_PROVISIONING_PROFILE_SPECIFIER"]
TEMP_KEYCHAIN_USER = ENV["INJI_IOS_TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["INJI_IOS_TEMP_KEYCHAIN_PASSWORD"]
GIT_AUTHORIZATION = ENV["GIT_AUTHORIZATION"]
SLACK_URL = ENV["SLACK_URL"]
SLACK_URL = ENV["SLACK_WEBHOOK_URL"]
APP_FLAVOR = ENV["APP_FLAVOR"]
MATCH_PASSWORD = ENV["MATCH_PASSWORD"]
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT = "120"
TESTFLIGHT_INTERNAL_TESTERS_GROUP = ENV["TESTFLIGHT_INTERNAL_TESTERS_GROUP"]
TESTFLIGHT_BETA_APP_DESCRIPTION = ENV["TESTFLIGHT_BETA_APP_DESCRIPTION"]
TESTFLIGHT_INTERNAL_TESTERS_GROUP = ENV["TESTFLIGHT_INTERNAL_TESTERS_GROUP"]
TESTFLIGHT_BETA_APP_DESCRIPTION = ENV["TESTFLIGHT_BETA_APP_DESCRIPTION"]
DEVELOPER_APP_ID = ENV["DEVELOPER_APP_ID"]
MIMOTO_HOST = ENV["MIMOTO_HOST"]
ESIGNET_HOST = ENV["ESIGNET_HOST"]
APPLICATION_THEME = ENV["APPLICATION_THEME"]
CREDENTIAL_REGISTRY_EDIT = ENV["CREDENTIAL_REGISTRY_EDIT"]
def generate_app_bundle_id()
flavor = APP_FLAVOR
case flavor
when "residentapp"
# the old app flavor
return "io.mosip.inji.mobileid"
when "inji"
# io.mosip.inji is not available in iOS
return "io.mosip.inji.wallet"
when "collab"
return "io.mosip.inji.collab"
when "synergy"
return "io.mosip.inji.synergy"
when "mec"
return "io.mosip.inji.mec"
end
end
def map_flavour_tosuffix()
flavor = APP_FLAVOR
case flavor
when "residentapp"
return "mobileid"
when "inji"
return "wallet"
end
return flavor
end
def generate_app_name()
flavor = APP_FLAVOR
case flavor
when "residentapp"
return "Inji"
when "inji"
return "Inji Wallet"
when "collab"
return "Inji Wallet Collab"
when "synergy"
return "Inji Wallet Synergy"
when "mec"
return "Inji Wallet Mec"
end
end
def delete_temp_keychain(name)
delete_keychain(
@@ -39,10 +88,9 @@ def ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
platform :ios do
lane :beta do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
@@ -51,8 +99,8 @@ platform :ios do
api_key = app_store_connect_api_key(
key_id: "#{APPLE_KEY_ID}",
issuer_id: "#{APPLE_ISSUER_ID}",
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
in_house: false,
is_key_content_base64: true
)
@@ -60,7 +108,7 @@ platform :ios do
version = get_version_number(xcodeproj: "Inji.xcodeproj")
previous_build_number = latest_testflight_build_number(
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
app_identifier: "#{generate_app_bundle_id}",
api_key: api_key,
version: version
)
@@ -68,13 +116,31 @@ platform :ios do
current_build_number = previous_build_number + 1
increment_build_number(
xcodeproj: "Inji.xcodeproj",
xcodeproj: "Inji.xcodeproj",
build_number: current_build_number
)
update_app_identifier(
app_identifier: "#{generate_app_bundle_id}",
plist_path: "Inji/Info.plist"
)
# replace bundle ID
s = "s/mobileid/#{map_flavour_tosuffix}/g"
sh("sed -i '' -e #{s} ../Inji.xcodeproj/project.pbxproj")
# replace Product name
p = "s|PRODUCT_NAME = Inji|PRODUCT_NAME = \"#{generate_app_name}\"|"
sh ("sed -i '' -e '#{p}' ../Inji.xcodeproj/project.pbxproj")
# update app display name
update_info_plist(
plist_path: 'Inji/Info.plist',
display_name: "#{generate_app_name}"
)
match(
type: 'appstore',
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
app_identifier: "#{generate_app_bundle_id}",
git_basic_authorization: Base64.strict_encode64("#{GIT_AUTHORIZATION}"),
readonly: false,
keychain_name: keychain_name,
@@ -83,7 +149,6 @@ platform :ios do
)
profile_mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
gym(
configuration: "Release",
workspace: "Inji.xcworkspace",
@@ -91,20 +156,20 @@ platform :ios do
export_method: "app-store",
export_options: {
provisioningProfiles: {
"#{DEVELOPER_APP_ID}" => "#{PROVISIONING_PROFILE_SPECIFIER}"
provisioningProfiles: {
"#{generate_app_bundle_id}" => "match AppStore #{generate_app_bundle_id}"
}
}
)
pilot(
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
app_identifier: "#{generate_app_bundle_id}",
api_key: api_key,
ipa: "./Inji.ipa",
ipa: "./#{generate_app_name}.ipa",
changelog: "#{TESTFLIGHT_BETA_APP_DESCRIPTION}",
localized_build_info: {
"default": {
whats_new: "#{TESTFLIGHT_BETA_APP_DESCRIPTION}",
whats_new: "#{TESTFLIGHT_BETA_APP_DESCRIPTION}",
}
},
skip_waiting_for_build_processing: false,
@@ -115,51 +180,6 @@ platform :ios do
delete_temp_keychain(keychain_name)
slack(
message: "Inji - #{version} (#{current_build_number}) is uploaded to testflight.",
success: true,
slack_url: "#{SLACK_URL}",
default_payloads: [:git_branch, :last_git_commit]
)
end
lane :build_verify do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: "#{APPLE_KEY_ID}",
issuer_id: "#{APPLE_ISSUER_ID}",
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
in_house: false,
is_key_content_base64: true
)
match(
type: 'appstore',
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
git_basic_authorization: Base64.strict_encode64("#{GIT_AUTHORIZATION}"),
readonly: false,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
gym(
configuration: "Release",
workspace: "Inji.xcworkspace",
scheme: "Inji",
export_method: "app-store",
)
delete_temp_keychain(keychain_name)
end
lane :build_app_for_automation_on_simulator do
custom_output_directory = "./Inji_app_file"
sh("mkdir -p '#{custom_output_directory}'")
@@ -170,8 +190,27 @@ platform :ios do
build_path: "./build",
)
find_command = "find '../build/' -type d -name 'Products'"
app_path = sh(find_command, log: false).strip
sh("cp -R '#{app_path}' '#{custom_output_directory}'")
slack(
message: "#{generate_app_name} #{version} (#{current_build_number}) is uploaded to testflight.",
success: true,
slack_url: "#{SLACK_URL}",
default_payloads: [:git_branch, :last_git_commit]
)
end
lane :ios_app_build do
archive_path = gym(
skip_package_ipa: true,
destination: "generic/platform=iOS Simulator",
configuration: "Release",
build_path: "./build",
)
end
end
end

27
package-lock.json generated
View File

@@ -72,11 +72,11 @@
"react-native-safe-area-context": "4.5.0",
"react-native-screens": "~3.20.0",
"react-native-secure-key-store": "^2.0.10",
"react-native-secure-keystore": "github:mosip/secure-keystore#v0.1.1",
"react-native-secure-keystore": "github:mosip/secure-keystore#v0.1.2",
"react-native-securerandom": "^1.0.1",
"react-native-spinkit": "^1.5.1",
"react-native-svg": "13.4.0",
"react-native-tuvali": "github:mosip/tuvali#v0.4.5",
"react-native-tuvali": "github:mosip/tuvali#0.4.6",
"react-native-vector-icons": "^10.0.0",
"short-unique-id": "^4.4.4",
"simple-pem2jwk": "^0.2.4",
@@ -24861,8 +24861,9 @@
"integrity": "sha512-K7aVlIGxyklnjhCidVexVgZF3LsgUD9GIxMy2NB/xkQsS9E2SJWkD/fJ56e25L2I6a9Mp1zuJrKnCtfBs1CvAw=="
},
"node_modules/react-native-secure-keystore": {
"version": "0.1.1",
"resolved": "git+ssh://git@github.com/mosip/secure-keystore.git#0d3a3d06e2ff49be698eb98fee4c5a5091be218f",
"name": "mosip-react-native-secure-keystore",
"version": "0.1.2",
"resolved": "git+ssh://git@github.com/mosip/secure-keystore.git#ce58f8f548f352960993cb9ded1015287c6361b6",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -24926,8 +24927,8 @@
}
},
"node_modules/react-native-tuvali": {
"version": "0.4.5",
"resolved": "git+ssh://git@github.com/mosip/tuvali.git#6a2c22e9c75734bdbc8260344fe15d9df98e1ff0",
"version": "0.4.6",
"resolved": "git+ssh://git@github.com/mosip/tuvali.git#9c5df99beffc43a8f5fbcf7bd12d0ff68ed2136f",
"license": "MIT",
"peerDependencies": {
"react": "*",
@@ -30995,7 +30996,7 @@
"bs58": "^4.0.1",
"crypto-ld": "^4.0.2",
"esm": "^3.2.25",
"node-forge": "^1.3.1",
"node-forge": "~0.9.1",
"semver": "^7.3.2",
"sodium-native": "^3.1.1"
},
@@ -31336,7 +31337,7 @@
"resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz",
"integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==",
"requires": {
"node-forge": "^1.3.1",
"node-forge": "^1.2.1",
"nullthrows": "^1.1.1"
}
},
@@ -45913,7 +45914,7 @@
"es6-promise": "^4.2.8",
"lodash": "^4.17.21",
"long": "^5.2.0",
"node-forge": "^1.3.1",
"node-forge": "^1.2.1",
"pako": "^2.0.4",
"process": "^0.11.10",
"uuid": "^9.0.0"
@@ -47635,8 +47636,8 @@
"integrity": "sha512-K7aVlIGxyklnjhCidVexVgZF3LsgUD9GIxMy2NB/xkQsS9E2SJWkD/fJ56e25L2I6a9Mp1zuJrKnCtfBs1CvAw=="
},
"react-native-secure-keystore": {
"version": "git+ssh://git@github.com/mosip/secure-keystore.git#0d3a3d06e2ff49be698eb98fee4c5a5091be218f",
"from": "react-native-secure-keystore@github:mosip/secure-keystore#v0.1.1",
"version": "git+ssh://git@github.com/mosip/secure-keystore.git#ce58f8f548f352960993cb9ded1015287c6361b6",
"from": "react-native-secure-keystore@github:mosip/secure-keystore#v0.1.2",
"requires": {}
},
"react-native-securerandom": {
@@ -47683,8 +47684,8 @@
}
},
"react-native-tuvali": {
"version": "git+ssh://git@github.com/mosip/tuvali.git#6a2c22e9c75734bdbc8260344fe15d9df98e1ff0",
"from": "react-native-tuvali@github:mosip/tuvali#v0.4.5",
"version": "git+ssh://git@github.com/mosip/tuvali.git#9c5df99beffc43a8f5fbcf7bd12d0ff68ed2136f",
"from": "react-native-tuvali@github:mosip/tuvali#0.4.6",
"requires": {}
},
"react-native-url-polyfill": {

View File

@@ -3,9 +3,9 @@
"prepare": "husky install",
"jetify": "jetify",
"start": "react-native start",
"android:mosip": "react-native run-android --variant=mosipDebug",
"android:mosip": "react-native run-android --variant=residentappDebug",
"ios": "react-native run-ios",
"build:android:mosip": "cd android && ./gradlew :app:assembleMosipRelease && cd ..",
"build:android:mosip": "cd android && ./gradlew :app:assembleResidentappRelease && cd ..",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"test": "jest",
"postinstall": "patch-package && npm run jetify && sh tools/talisman/talisman-precommit.sh"
@@ -74,11 +74,11 @@
"react-native-safe-area-context": "4.5.0",
"react-native-screens": "~3.20.0",
"react-native-secure-key-store": "^2.0.10",
"react-native-secure-keystore": "github:mosip/secure-keystore#v0.1.1",
"react-native-secure-keystore": "github:mosip/secure-keystore#v0.1.2",
"react-native-securerandom": "^1.0.1",
"react-native-spinkit": "^1.5.1",
"react-native-svg": "13.4.0",
"react-native-tuvali": "github:mosip/tuvali#v0.4.5",
"react-native-tuvali": "github:mosip/tuvali#0.4.6",
"react-native-vector-icons": "^10.0.0",
"short-unique-id": "^4.4.4",
"simple-pem2jwk": "^0.2.4",
@@ -130,4 +130,4 @@
"engines": {
"node": ">=16"
}
}
}

View File

@@ -1,4 +1,3 @@
sonar.projectKey=mosip_inji
sonar.organization=mosip
sonar.exclusions=.github/**, .vscode/**, android/**, assets/**, build/**, ios/**, node_modules/**, scripts/**
sonar.exclusions=.github/**, .vscode/**, android/**, assets/**, build/**, ios/**, node_modules/**, scripts/**, **/*.java