diff --git a/.github/workflows/hardReleaseParent.yml b/.github/workflows/hardReleaseParent.yml new file mode 100644 index 00000000..1f947496 --- /dev/null +++ b/.github/workflows/hardReleaseParent.yml @@ -0,0 +1,96 @@ +name: Hard release + +on: + workflow_dispatch: + inputs: + environment: + description: Choose build environment + required: true + type: choice + options: + - QA + - Prod + runnerType: + description: Choose runner type + required: true + type: choice + options: + - macos + - default + releaseType: + description: Choose release type + required: true + type: choice + options: + - TEST_BUILD + - SOFT_RELEASE + - HARD_RELEASE + type: + description: Choose build type + required: true + type: choice + options: + - release + version_code_tele: + description: Tele app version code (example, 292) + required: true + type: string + default: '292' + version_name_tele: + description: Tele app version name (example, 3.2.1) + required: true + type: string + default: '3.2.1' + version_code_field: + description: Field app version code (example, 292) + required: true + type: string + default: '292' + version_name_field: + description: Field app version name (example, 3.2.1) + required: true + type: string + default: '3.2.1' + +jobs: + field-app: + uses: ./.github/workflows/newBuild.yml + with: + environment: ${{ github.event.inputs.environment }} + runnerType: ${{ github.event.inputs.runnerType }} + releaseType: ${{ github.event.inputs.releaseType }} + flavor: fieldAgents + type: ${{ github.event.inputs.type }} + version_code: ${{ github.event.inputs.version_code_field }} + version_name: ${{ github.event.inputs.version_name_field }} + secrets: + MY_REPO_PAT: ${{ secrets.MY_REPO_PAT }} + CODEPUSH_QA_KEY: ${{ secrets.CODEPUSH_QA_KEY }} + CODEPUSH_PROD_KEY: ${{ secrets.CODEPUSH_PROD_KEY }} + PASSPHARASE: ${{ secrets.PASSPHARASE }} + KEY_STORE: ${{ secrets.KEY_STORE }} + LONGHORN_QA_BASE_URL: ${{ secrets.LONGHORN_QA_BASE_URL }} + LONGHORN_PROD_BASE_URL: ${{ secrets.LONGHORN_PROD_BASE_URL }} + LONGHORN_HEADER: ${{ secrets.LONGHORN_HEADER }} + CYBERTRON_BASE_URL: ${{ secrets.CYBERTRON_BASE_URL }} + CYBERTRON_PROJECT_ID: ${{ secrets.CYBERTRON_PROJECT_ID }} + + tele-app: + uses: ./.github/workflows/hardReleaseTele.yml + with: + environment: ${{ github.event.inputs.environment }} + releaseType: ${{ github.event.inputs.releaseType }} + runnerType: ${{ github.event.inputs.runnerType }} + flavor: callingAgents + type: ${{ github.event.inputs.type }} + version_code: ${{ github.event.inputs.version_code_tele }} + version_name: ${{ github.event.inputs.version_name_tele }} + secrets: + MY_REPO_PAT: ${{ secrets.MY_REPO_PAT }} + CODEPUSH_QA_KEY: ${{ secrets.CODEPUSH_QA_KEY }} + TELE_CODE_PUSH_PROD_KEY: ${{ secrets.TELE_CODE_PUSH_PROD_KEY }} + PASSPHARASE: ${{ secrets.PASSPHARASE }} + KEY_STORE: ${{ secrets.KEY_STORE }} + LONGHORN_QA_BASE_URL: ${{ secrets.LONGHORN_QA_BASE_URL }} + LONGHORN_PROD_BASE_URL: ${{ secrets.LONGHORN_PROD_BASE_URL }} + LONGHORN_HEADER: ${{ secrets.LONGHORN_HEADER }} diff --git a/.github/workflows/hardReleaseTele.yml b/.github/workflows/hardReleaseTele.yml index 8b93f054..c97d4af5 100644 --- a/.github/workflows/hardReleaseTele.yml +++ b/.github/workflows/hardReleaseTele.yml @@ -1,41 +1,49 @@ -name: generate-apk-tele +name: hard-release-tele on: - workflow_dispatch: + workflow_call: + secrets: + MY_REPO_PAT: + required: true + CODEPUSH_QA_KEY: + required: true + TELE_CODE_PUSH_PROD_KEY: + required: true + PASSPHARASE: + required: true + KEY_STORE: + required: true + LONGHORN_QA_BASE_URL: + required: true + LONGHORN_PROD_BASE_URL: + required: true + LONGHORN_HEADER: + required: true inputs: - environment: - description: Choose build environment - required: true - type: choice - options: - - QA - - Prod - releaseType: - description: Choose release type - required: true - type: choice - options: - - TEST_BUILD - - SOFT_RELEASE - - HARD_RELEASE - type: - description: Choose build type - required: true - type: choice - options: - - release - version_code: - description: Enter app version code (example, 292) - required: true - type: string - default: "292" - version_name: - description: Enter app version name (example, 3.2.1) - required: true - type: string - default: "3.2.1" + environment: + required: true + type: string + releaseType: + required: true + type: string + runnerType: + required: true + type: string + flavor: + required: true + type: string + type: + required: true + type: string + version_code: + required: true + type: string + version_name: + required: true + type: string + jobs: - generate: + generate_build: runs-on: [ default ] steps: - name: Checkout @@ -44,13 +52,25 @@ jobs: token: ${{ secrets.MY_REPO_PAT }} submodules: recursive - name: update codepush key QA - if: (github.event.inputs.environment == 'QA' || inputs.environment == 'QA') - run: sed -i "s/pastekeyhere/${{ secrets.CODEPUSH_QA_KEY }}/" android/app/src/main/res/values/strings.xml && cat android/app/src/main/res/values/strings.xml + if: inputs.environment == 'QA' + run: | + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" "s/pastekeyhere/${{ secrets.CODEPUSH_QA_KEY }}/" android/app/src/main/res/values/strings.xml + else + sed -i "s/pastekeyhere/${{ secrets.CODEPUSH_QA_KEY }}/" android/app/src/main/res/values/strings.xml + fi + cat android/app/src/main/res/values/strings.xml - name: update codepush key PROD - if: (github.event.inputs.environment == 'Prod' || inputs.environment == 'Prod') - run: sed -i "s/pastekeyhere/${{ secrets.TELE_CODE_PUSH_PROD_KEY }}/" android/app/src/main/res/values/strings.xml && cat android/app/src/main/res/values/strings.xml + if: inputs.environment == 'Prod' + run: | + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" "s/pastekeyhere/${{ secrets.TELE_CODE_PUSH_PROD_KEY }}/" android/app/src/main/res/values/strings.xml + else + sed -i "s/pastekeyhere/${{ secrets.TELE_CODE_PUSH_PROD_KEY }}/" android/app/src/main/res/values/strings.xml + fi + cat android/app/src/main/res/values/strings.xml - name: Generate keystore - if: (github.event.inputs.type == 'release' || inputs.type == 'release') + if: inputs.type == 'release' run: echo "${{ secrets.KEY_STORE }}" > keystore.asc && gpg -d --passphrase "${{ secrets.PASSPHARASE }}" --batch keystore.asc > android/app/my-upload-key.keystore - name: Set Node.js 16.x uses: actions/setup-node@v3 @@ -61,16 +81,26 @@ jobs: - name: Install dependency run: yarn - name: Override App Version Code - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version_code != '' - run: sed -i 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = ${{ github.event.inputs.version_code }}/g' android/app/build.gradle + if: github.event_name == 'workflow_dispatch' && inputs.version_code != '' + run: | + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ inputs.version_code }}'/g' android/app/build.gradle + else + sed -i 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ inputs.version_code }}'/g' android/app/build.gradle + fi - name: Override App Version Name - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version_name != '' - run: sed -i 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "${{ github.event.inputs.version_name }}"/g' android/app/build.gradle + if: github.event_name == 'workflow_dispatch' && inputs.version_name != '' + run: | + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ inputs.version_name }}'"/g' android/app/build.gradle + else + sed -i 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ inputs.version_name }}'"/g' android/app/build.gradle + fi - name: Log Build Metadata run: | echo "Commit SHA: ${{ github.sha }}" - echo "Build Environment: ${{ github.event.inputs.environment || inputs.environment }}" - echo "Build Type: ${{ github.event.inputs.type || inputs.type }}" + echo "Build Environment: ${{ inputs.environment }}" + echo "Build Type: ${{ inputs.type }}" echo "App Version Code: $(awk '/VERSION_CODE/ {print $4}' app/build.gradle)" echo "App Version Name: $(awk '/VERSION_NAME/ {print $4}' app/build.gradle | tr -d '"')" - name: Set up JDK 18 @@ -85,24 +115,24 @@ jobs: - name: Create local.properties run: cd android && touch local.properties && echo "sdk.dir = /home/USERNAME/Android/Sdk" > local.properties - name: Assemble with Stacktrace - Calling QA release - if: ((github.event.inputs.environment == 'QA' || inputs.environment == 'QA')) + if: inputs.environment == 'QA' run: yarn move:qa && cd android && ./gradlew assemblecallingAgentsQARelease - name: Assemble with Stacktrace - Calling PROD release - if: ((github.event.inputs.environment == 'Prod' || inputs.environment == 'Prod')) + if: inputs.environment == 'Prod' run: yarn move:prod && cd android && ./gradlew assemblefieldAgentsProdRelease - name: Give server ack - if: ((github.event.inputs.releaseType != 'TEST_BUILD' || inputs.releaseType != 'TEST_BUILD')) + if: inputs.releaseType != 'TEST_BUILD' run: | ls ls -asl pwd baseUrl=${{secrets.LONGHORN_QA_BASE_URL}} - if [ "${{ github.event.inputs.environment }}" == "Prod" ] || [ "${{ inputs.environment }}" == "Prod" ]; then + if [ "${{ inputs.environment }}" == "Prod" ]; then echo "Prod" baseUrl=${{secrets.LONGHORN_PROD_BASE_URL}} fi echo "$baseUrl" - getPreSignedURL="$baseUrl/app/upload-url?appType=callingAgents&buildNumber=${{github.event.inputs.version_code || inputs.version_code}}&appVersion=${{github.event.inputs.version_name || inputs.version_name}}&releaseType=${{github.event.inputs.releaseType || inputs.releaseType}}" + getPreSignedURL="$baseUrl/app/upload-url?appType=callingAgents&buildNumber=${{inputs.version_code}}&appVersion=${{inputs.version_name}}&releaseType=${{inputs.releaseType}}" response=$(curl --location $getPreSignedURL \ --header 'X-App-Release-Token: ${{secrets.LONGHORN_HEADER}}' ) @@ -117,7 +147,7 @@ jobs: ls - apk_path="./android/app/build/outputs/apk/callingAgentsProd/${{github.event.inputs.type || inputs.type}}/app-callingAgentsProd-release" + apk_path="./android/app/build/outputs/apk/callingAgentsProd/${{inputs.type}}/app-callingAgentsProd-release" echo "$apk_path" @@ -137,7 +167,7 @@ jobs: echo "ack url" - ack_url=("$baseUrl/app/upload-ack?referenceId=${id}&releaseType=${{github.event.inputs.releaseType || inputs.releaseType}}") + ack_url=("$baseUrl/app/upload-ack?referenceId=${id}&releaseType=${{inputs.releaseType}}") echo "$ack_url" @@ -146,14 +176,14 @@ jobs: - name: Upload APK as Artifact uses: actions/upload-artifact@v3 with: - name: app-${{ github.event.inputs.type || inputs.type }}-v${{ github.event.inputs.version_code || inputs.version_code }}-name-${{github.event.inputs.version_name || inputs.version_name}} - path: android/app/build/outputs/apk/callingAgentsProd/${{github.event.inputs.type || inputs.type}} + name: app-${{ inputs.type }}-v${{ inputs.version_code }}-name-${{inputs.version_name}} + path: android/app/build/outputs/apk/callingAgentsProd/${{inputs.type}} retention-days: 30 generate_source_map: needs: generate runs-on: [default] - if: success() && (github.event.inputs.environment == 'Prod') && (github.event.inputs.releaseType == 'HARD_RELEASE' || inputs.releaseType == 'HARD_RELEASE') # Only create source map for Prod releases and not for test builds + if: success() && inputs.environment == 'Prod' && inputs.releaseType == 'HARD_RELEASE' # Only create source map for Prod releases and not for test builds steps: - name: Checkout uses: actions/checkout@v2 @@ -183,39 +213,44 @@ jobs: - name: Compile Hermes Bytecode and Generate Source Maps run: | - node_modules/react-native/sdks/hermesc/linux64-bin/hermesc \ - -O -emit-binary \ - -output-source-map \ - -out=index.android.bundle.hbc \ - index.android.bundle + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + HERMESC_PATH="node_modules/react-native/sdks/hermesc/osx-bin/hermesc" + else + HERMESC_PATH="node_modules/react-native/sdks/hermesc/linux64-bin/hermesc" + fi + $HERMESC_PATH \ + -O -emit-binary \ + -output-source-map \ + -out=index.android.bundle.hbc \ + index.android.bundle - # Remove the original bundle to prevent duplication - rm -f index.android.bundle + # Remove the original bundle to prevent duplication + rm -f index.android.bundle - # Rename the Hermes bundle and source map - mv index.android.bundle.hbc index.android.bundle - mv index.android.bundle.map index.android.bundle.packager.map + # Rename the Hermes bundle and source map + mv index.android.bundle.hbc index.android.bundle + mv index.android.bundle.map index.android.bundle.packager.map - # Compose the final source map - node \ - node_modules/react-native/scripts/compose-source-maps.js \ - index.android.bundle.packager.map \ - index.android.bundle.hbc.map \ - -o index.android.bundle.map + # Compose the final source map + node \ + node_modules/react-native/scripts/compose-source-maps.js \ + index.android.bundle.packager.map \ + index.android.bundle.hbc.map \ + -o index.android.bundle.map - # Clean up the temporary files - rm -f index.android.bundle.packager.map + # Clean up the temporary files + rm -f index.android.bundle.packager.map - name: Upload Source Map uses: actions/upload-artifact@v3 with: - name: source-map + name: source-map-${{inputs.version_name}} path: index.android.bundle.map create_release_tag: needs: generate_source_map runs-on: [default] - if: success() && (github.event.inputs.environment == 'Prod') && (github.event.inputs.releaseType == 'HARD_RELEASE' || inputs.releaseType == 'HARD_RELEASE') # Only create source map for Prod releases and not for test builds + if: success() && inputs.environment == 'Prod' && inputs.releaseType == 'HARD_RELEASE' # Only create source map for Prod releases and not for test builds steps: - name: Checkout uses: actions/checkout@v2 @@ -226,7 +261,7 @@ jobs: - name: Check if tag exists id: check_tag run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" EXISTING_TAG=$(git ls-remote --tags origin refs/tags/$TAG_NAME) if [[ -z "$EXISTING_TAG" ]]; then echo "Tag $TAG_NAME does not exist." @@ -239,7 +274,7 @@ jobs: - name: Create and push tag if: env.tag_exists == 'false' run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" # git config --local user.email "${{ github.actor }}@github.com" git config --local user.name "${{ github.actor }}" git tag $TAG_NAME @@ -248,10 +283,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.MY_REPO_PAT }} - name: Create release tag run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" BUILD_NUMBER="${{ needs.generate.outputs.build_number }}" RELEASE_NAME="$TAG_NAME (build $BUILD_NUMBER) code push" - DESCRIPTION="${{ github.event.inputs.description }}" + DESCRIPTION="${{ inputs.description }}" REPO="navi-medici/address-verification-app" BRANCH_NAME="${GITHUB_REF#refs/heads/}" diff --git a/.github/workflows/newBuild.yml b/.github/workflows/newBuild.yml index 6dcb6c59..8a128340 100644 --- a/.github/workflows/newBuild.yml +++ b/.github/workflows/newBuild.yml @@ -1,59 +1,57 @@ -name: generate-apk +name: hard-release-field on: - workflow_dispatch: + workflow_call: + secrets: + MY_REPO_PAT: + required: true + CODEPUSH_QA_KEY: + required: true + CODEPUSH_PROD_KEY: + required: true + PASSPHARASE: + required: true + KEY_STORE: + required: true + LONGHORN_QA_BASE_URL: + required: true + LONGHORN_PROD_BASE_URL: + required: true + LONGHORN_HEADER: + required: true + CYBERTRON_BASE_URL: + required: true + CYBERTRON_PROJECT_ID: + required: true inputs: - environment: - description: Choose build environment - required: true - type: choice - options: - - QA - - Prod - runnerType: - description: Choose runner type - required: true - type: choice - options: - - default - - macos - flavor: - description: Choose build flavour - required: true - type: choice - options: - - fieldAgents - - callingAgents - releaseType: - description: Choose release type - required: true - type: choice - options: - - TEST_BUILD - - SOFT_RELEASE - - HARD_RELEASE - type: - description: Choose build type - required: true - type: choice - options: - - release - version_code: - description: Enter app version code (example, 292) - required: true - type: string - default: "292" - version_name: - description: Enter app version name (example, 3.2.1) - required: true - type: string - default: "3.2.1" + environment: + required: true + type: string + releaseType: + required: true + type: string + runnerType: + required: true + type: string + flavor: + required: true + type: string + type: + required: true + type: string + version_code: + required: true + type: string + version_name: + required: true + type: string + jobs: - generate: - runs-on: ${{ github.event.inputs.runnerType }} + generate_build: + runs-on: ${{ inputs.runnerType }} outputs: - package_version: ${{ github.event.inputs.version_name }} - build_number: ${{ github.event.inputs.version_code }} + package_version: ${{ inputs.version_name }} + build_number: ${{ inputs.version_code }} steps: - name: Checkout uses: actions/checkout@v2 @@ -61,25 +59,25 @@ jobs: token: ${{ secrets.MY_REPO_PAT }} submodules: recursive - name: Update CodePush key for QA - if: (github.event.inputs.environment == 'QA' || inputs.environment == 'QA') + if: inputs.environment == 'QA' run: | - if [[ "${{github.event.inputs.runnerType}}" == "macos" ]]; then + if [[ "${{inputs.runnerType}}" == "macos" ]]; then sed -i "" "s/pastekeyhere/${{ secrets.CODEPUSH_QA_KEY }}/" android/app/src/main/res/values/strings.xml else sed -i "s/pastekeyhere/${{ secrets.CODEPUSH_QA_KEY }}/" android/app/src/main/res/values/strings.xml fi cat android/app/src/main/res/values/strings.xml - name: Update CodePush key for PROD - if: (github.event.inputs.environment == 'Prod' || inputs.environment == 'Prod') + if: inputs.environment == 'Prod' run: | - if [[ "${{github.event.inputs.runnerType}}" == "macos" ]]; then + if [[ "${{inputs.runnerType}}" == "macos" ]]; then sed -i "" "s/pastekeyhere/${{ secrets.CODEPUSH_PROD_KEY }}/" android/app/src/main/res/values/strings.xml else sed -i "s/pastekeyhere/${{ secrets.CODEPUSH_PROD_KEY }}/" android/app/src/main/res/values/strings.xml fi cat android/app/src/main/res/values/strings.xml - name: Generate keystore - if: (github.event.inputs.type == 'release' || inputs.type == 'release') + if: inputs.type == 'release' run: echo "${{ secrets.KEY_STORE }}" > keystore.asc && gpg -d --passphrase "${{ secrets.PASSPHARASE }}" --batch keystore.asc > android/app/my-upload-key.keystore - name: Set Node.js 16.x uses: actions/setup-node@v3 @@ -90,26 +88,26 @@ jobs: - name: Install dependency run: yarn - name: Override App Version Code - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version_code != '' + if: github.event_name == 'workflow_dispatch' && inputs.version_code != '' run: | - if [[ "${{github.event.inputs.runnerType}}" == "macos" ]]; then - sed -i "" 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ github.event.inputs.version_code }}'/g' android/app/build.gradle + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ inputs.version_code }}'/g' android/app/build.gradle else - sed -i 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ github.event.inputs.version_code }}'/g' android/app/build.gradle + sed -i 's/def VERSION_CODE = [0-9].*/def VERSION_CODE = '${{ inputs.version_code }}'/g' android/app/build.gradle fi - name: Override App Version Name - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version_name != '' + if: github.event_name == 'workflow_dispatch' && inputs.version_name != '' run: | - if [[ "${{github.event.inputs.runnerType}}" == "macos" ]]; then - sed -i "" 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ github.event.inputs.version_name }}'"/g' android/app/build.gradle + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + sed -i "" 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ inputs.version_name }}'"/g' android/app/build.gradle else - sed -i 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ github.event.inputs.version_name }}'"/g' android/app/build.gradle + sed -i 's/def VERSION_NAME = "[0-9].*"/def VERSION_NAME = "'${{ inputs.version_name }}'"/g' android/app/build.gradle fi - name: Log Build Metadata run: | echo "Commit SHA: ${{ github.sha }}" - echo "Build Environment: ${{ github.event.inputs.environment || inputs.environment }}" - echo "Build Type: ${{ github.event.inputs.type || inputs.type }}" + echo "Build Environment: ${{ inputs.environment }}" + echo "Build Type: ${{ inputs.type }}" echo "App Version Code: $(awk '/VERSION_CODE/ {print $4}' app/build.gradle)" echo "App Version Name: $(awk '/VERSION_NAME/ {print $4}' app/build.gradle | tr -d '"')" - name: Set up JDK 18 @@ -124,158 +122,158 @@ jobs: - name: Create local.properties run: cd android && touch local.properties && echo "sdk.dir = /home/USERNAME/Android/Sdk" > local.properties - name: Assemble with Stacktrace - Field QA release - if: ((github.event.inputs.environment == 'QA' || inputs.environment == 'QA') && (github.event.flavor.type == 'fieldAgents' || inputs.flavor == 'fieldAgents')) + if: (inputs.environment == 'QA' && inputs.flavor == 'fieldAgents') run: yarn move:qa && cd android && ./gradlew assemblefieldAgentsQARelease - name: Assemble with Stacktrace - Field PROD release - if: ((github.event.inputs.environment == 'Prod' || inputs.environment == 'Prod') && (github.event.flavor.type == 'fieldAgents' || inputs.flavor == 'fieldAgents')) + if: (inputs.environment == 'Prod' && inputs.flavor == 'fieldAgents') run: yarn move:prod && cd android && ./gradlew assemblefieldAgentsProdRelease - name: Assemble with Stacktrace - Calling QA release - if: ((github.event.inputs.environment == 'QA' || inputs.environment == 'QA') && (github.event.flavor.type == 'callingAgents' || inputs.flavor == 'callingAgents')) + if: (inputs.environment == 'QA' && inputs.flavor == 'callingAgents') run: yarn move:qa && cd android && ./gradlew assemblecallingAgentsQARelease - name: Assemble with Stacktrace - Calling PROD release - if: ((github.event.inputs.environment == 'Prod' || inputs.environment == 'Prod') && (github.event.flavor.type == 'callingAgents' || inputs.flavor == 'callingAgents')) + if: (inputs.environment == 'Prod' && inputs.flavor == 'callingAgents') run: yarn move:prod && cd android && ./gradlew assemblefieldAgentsProdRelease - name: Give server ack - if: ((github.event.inputs.releaseType != 'TEST_BUILD' || inputs.releaseType != 'TEST_BUILD')) + if: (inputs.releaseType != 'TEST_BUILD') run: | - ls - ls -asl - pwd - baseUrl=${{secrets.LONGHORN_QA_BASE_URL}} - if [ "${{ github.event.inputs.environment }}" == "Prod" ] || [ "${{ inputs.environment }}" == "Prod" ]; then - echo "Prod" - baseUrl=${{secrets.LONGHORN_PROD_BASE_URL}} - fi - echo "$baseUrl" - getPreSignedURL="$baseUrl/app/upload-url?appType=${{github.event.inputs.flavor || inputs.flavor}}&buildNumber=${{github.event.inputs.version_code || inputs.version_code}}&appVersion=${{github.event.inputs.version_name || inputs.version_name}}&releaseType=${{github.event.inputs.releaseType || inputs.releaseType}}" - response=$(curl --location $getPreSignedURL \ + ls + ls -asl + pwd + baseUrl=${{secrets.LONGHORN_QA_BASE_URL}} + if [ "${{ inputs.environment }}" == "Prod" ]; then + echo "Prod" + baseUrl=${{secrets.LONGHORN_PROD_BASE_URL}} + fi + echo "$baseUrl" + getPreSignedURL="$baseUrl/app/upload-url?appType=${{inputs.flavor}}&buildNumber=${{inputs.version_code}}&appVersion=${{inputs.version_name}}&releaseType=${{inputs.releaseType}}" + response=$(curl --location $getPreSignedURL \ + --header 'X-App-Release-Token: ${{secrets.LONGHORN_HEADER}}' + ) + + echo "$response" + + upload_url=$(echo "$response" | awk -F'"' '/uploadPreSignedUrl/{print $4}') + id=$(echo "$response" | awk -F'"referenceId":' '{print $2}' | awk -F',' '{print $1}' | tr -d '[:space:]' | tr -d '"}') + + + echo "$id" + + ls + + apk_path="./android/app/build/outputs/apk/${{ inputs.flavor }}${{inputs.environment}}/${{inputs.type}}/app-${{ inputs.flavor }}${{inputs.environment}}-release.apk" + + echo "$apk_path" + + # Check if APK exists, exit if not + if [ ! -f "$apk_path" ]; then + echo "Error: APK file not found at $apk_path" + exit 1 + fi + + chmod +r "$apk_path" + + curl --location --request PUT "$upload_url" \ + --data-binary "@$apk_path" + + + echo "upload compleate" + + echo "ack url" + + ack_url=("$baseUrl/app/upload-ack?referenceId=${id}&releaseType=${{inputs.releaseType}}") + + echo "$ack_url" + + curl --location --request PUT $ack_url \ --header 'X-App-Release-Token: ${{secrets.LONGHORN_HEADER}}' - ) - - echo "$response" - - upload_url=$(echo "$response" | awk -F'"' '/uploadPreSignedUrl/{print $4}') - id=$(echo "$response" | awk -F'"referenceId":' '{print $2}' | awk -F',' '{print $1}' | tr -d '[:space:]' | tr -d '"}') - - - echo "$id" - - ls - - apk_path="./android/app/build/outputs/apk/${{ github.event.inputs.flavor || inputs.flavor }}${{github.event.inputs.environment || inputs.environment}}/${{github.event.inputs.type || inputs.type}}/app-${{ github.event.inputs.flavor || inputs.flavor }}${{github.event.inputs.environment || inputs.environment}}-release.apk" - - echo "$apk_path" - - # Check if APK exists, exit if not - if [ ! -f "$apk_path" ]; then - echo "Error: APK file not found at $apk_path" - exit 1 - fi - - chmod +r "$apk_path" - - curl --location --request PUT "$upload_url" \ - --data-binary "@$apk_path" - - - echo "upload compleate" - - echo "ack url" - - ack_url=("$baseUrl/app/upload-ack?referenceId=${id}&releaseType=${{github.event.inputs.releaseType || inputs.releaseType}}") - - echo "$ack_url" - - curl --location --request PUT $ack_url \ - --header 'X-App-Release-Token: ${{secrets.LONGHORN_HEADER}}' - name: Upload APK as Artifact uses: actions/upload-artifact@v4 with: - name: app-${{ github.event.inputs.type || inputs.type }}-v${{ github.event.inputs.version_code || inputs.version_code }}-name-${{github.event.inputs.version_name || inputs.version_name}} - path: android/app/build/outputs/apk/${{ github.event.inputs.flavor || inputs.flavor }}${{github.event.inputs.environment || inputs.environment}}/${{github.event.inputs.type || inputs.type}} + name: app-${{ inputs.type }}-v${{ inputs.version_code }}-name-${{inputs.version_name}} + path: android/app/build/outputs/apk/${{ inputs.flavor }}${{inputs.environment}}/${{inputs.type}} retention-days: 30 generate_source_map: needs: generate - runs-on: ${{ github.event.inputs.runnerType }} + runs-on: ${{ inputs.runnerType }} outputs: package_version: ${{ needs.generate.outputs.package_version }} build_number: ${{ needs.generate.outputs.build_number }} - if: success() && (github.event.inputs.environment == 'Prod') && (github.event.inputs.releaseType == 'HARD_RELEASE' || inputs.releaseType == 'HARD_RELEASE') # Only create source map for Prod releases and not for test builds + if: success() && inputs.environment == 'Prod' && inputs.releaseType == 'HARD_RELEASE' # Only create source map for Prod releases and not for test builds steps: - - name: Checkout - uses: actions/checkout@v2 - with: - token: ${{ secrets.MY_REPO_PAT }} - submodules: recursive + - name: Checkout + uses: actions/checkout@v2 + with: + token: ${{ secrets.MY_REPO_PAT }} + submodules: recursive - - name: Set Node.js 16.x - uses: actions/setup-node@v3 - with: - node-version: 16.x - - name: Install yarn - run: npm install --global yarn - - name: Install dependency - run: yarn + - name: Set Node.js 16.x + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: Install yarn + run: npm install --global yarn + - name: Install dependency + run: yarn - - name: Generate Android Bundle and Source Map - run: | - npx react-native bundle \ - --dev false \ - --minify false \ - --platform android \ - --entry-file index.js \ - --reset-cache \ - --bundle-output index.android.bundle \ - --sourcemap-output index.android.bundle.map + - name: Generate Android Bundle and Source Map + run: | + npx react-native bundle \ + --dev false \ + --minify false \ + --platform android \ + --entry-file index.js \ + --reset-cache \ + --bundle-output index.android.bundle \ + --sourcemap-output index.android.bundle.map - - name: Compile Hermes Bytecode and Generate Source Maps - run: | - if [[ "${{github.event.inputs.runnerType}}" == "macos" ]]; then - HERMESC_PATH="node_modules/react-native/sdks/hermesc/osx-bin/hermesc" - else - HERMESC_PATH="node_modules/react-native/sdks/hermesc/linux64-bin/hermesc" - fi - $HERMESC_PATH \ - -O -emit-binary \ - -output-source-map \ - -out=index.android.bundle.hbc \ - index.android.bundle + - name: Compile Hermes Bytecode and Generate Source Maps + run: | + if [[ "${{inputs.runnerType}}" == "macos" ]]; then + HERMESC_PATH="node_modules/react-native/sdks/hermesc/osx-bin/hermesc" + else + HERMESC_PATH="node_modules/react-native/sdks/hermesc/linux64-bin/hermesc" + fi + $HERMESC_PATH \ + -O -emit-binary \ + -output-source-map \ + -out=index.android.bundle.hbc \ + index.android.bundle - # Remove the original bundle to prevent duplication - rm -f index.android.bundle + # Remove the original bundle to prevent duplication + rm -f index.android.bundle - # Rename the Hermes bundle and source map - mv index.android.bundle.hbc index.android.bundle - mv index.android.bundle.map index.android.bundle.packager.map + # Rename the Hermes bundle and source map + mv index.android.bundle.hbc index.android.bundle + mv index.android.bundle.map index.android.bundle.packager.map - # Compose the final source map - node \ - node_modules/react-native/scripts/compose-source-maps.js \ - index.android.bundle.packager.map \ - index.android.bundle.hbc.map \ - -o index.android.bundle.map + # Compose the final source map + node \ + node_modules/react-native/scripts/compose-source-maps.js \ + index.android.bundle.packager.map \ + index.android.bundle.hbc.map \ + -o index.android.bundle.map - # Clean up the temporary files - rm -f index.android.bundle.packager.map + # Clean up the temporary files + rm -f index.android.bundle.packager.map - - name: Upload Source Map - uses: actions/upload-artifact@v4 - with: - name: source-map-${{github.event.inputs.target_versions}} - path: index.android.bundle.map + - name: Upload Source Map + uses: actions/upload-artifact@v4 + with: + name: source-map-${{inputs.version_name}} + path: index.android.bundle.map upload_sourcemap_cybertron: needs: generate_source_map - runs-on: ${{ github.event.inputs.runnerType }} - if: success() && (github.event.inputs.environment == 'Prod') + runs-on: ${{ inputs.runnerType }} + if: success() && inputs.environment == 'Prod' steps: - name: Download Source Map uses: actions/download-artifact@v4 with: - name: source-map-${{github.event.inputs.target_versions}} - path: ./artifacts # Specify the folder to store the downloaded artifact - + name: source-map-${{inputs.version_name}} + path: ./artifacts # Specify the folder to store the downloaded artifact + - name: 'create release' run: | cd artifacts @@ -288,21 +286,20 @@ jobs: "projectReferenceId": "${{ secrets.CYBERTRON_PROJECT_ID }}" }') echo $response - + - name: 'create presigned url' - run: | + run: | presigned_url_source_map='${{secrets.CYBERTRON_BASE_URL}}/api/v1/get-sourcemap-upload-url?project_id=${{secrets.CYBERTRON_PROJECT_ID}}&release_id=${{ needs.generate_source_map.outputs.package_version }}&file_name=index.android.bundle.map' response=$(curl --location $presigned_url_source_map) echo "$response" upload_url=$(echo "$response" | jq -r .url) echo $upload_url curl --location --request PUT --progress-bar --header "Content-Type: application/octet-stream" $upload_url --upload-file artifacts/index.android.bundle.map - create_release_tag: needs: generate_source_map - runs-on: ${{ github.event.inputs.runnerType }} - if: success() && (github.event.inputs.environment == 'Prod') && (github.event.inputs.releaseType == 'HARD_RELEASE' || inputs.releaseType == 'HARD_RELEASE') # Only create source map for Prod releases and not for test builds + runs-on: ${{ inputs.runnerType }} + if: success() && inputs.environment == 'Prod' && inputs.releaseType == 'HARD_RELEASE' # Only create source map for Prod releases and not for test builds steps: - name: Checkout uses: actions/checkout@v2 @@ -313,7 +310,7 @@ jobs: - name: Check if tag exists id: check_tag run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" EXISTING_TAG=$(git ls-remote --tags origin refs/tags/$TAG_NAME) if [[ -z "$EXISTING_TAG" ]]; then echo "Tag $TAG_NAME does not exist." @@ -326,7 +323,7 @@ jobs: - name: Create and push tag if: env.tag_exists == 'false' run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" # git config --local user.email "${{ github.actor }}@github.com" git config --local user.name "${{ github.actor }}" git tag $TAG_NAME @@ -335,10 +332,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.MY_REPO_PAT }} - name: Create release tag run: | - TAG_NAME="${{github.event.inputs.version_name || inputs.version_name}}" + TAG_NAME="${{inputs.version_name}}" BUILD_NUMBER="${{ needs.generate.outputs.build_number }}" RELEASE_NAME="$TAG_NAME (build $BUILD_NUMBER) code push" - DESCRIPTION="${{ github.event.inputs.description }}" + DESCRIPTION="${{ inputs.description }}" REPO="navi-medici/address-verification-app" BRANCH_NAME="${GITHUB_REF#refs/heads/}" @@ -355,4 +352,4 @@ jobs: \"generate_release_notes\": true }" \ "https://api.github.com/repos/$REPO/releases" - shell: bash \ No newline at end of file + shell: bash