Release #122
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version to release' | |
| required: true | |
| env: | |
| SIGNING_KEY_FILE_PATH: /home/runner/secretKey.gpg | |
| jobs: | |
| validate_version: | |
| name: Validate Version Input | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Validate version input | |
| env: | |
| INPUT_VERSION: ${{ github.event.inputs.version }} | |
| run: | | |
| set -euo pipefail | |
| # Validate version format: x.x.x or x.x.x-betax (e.g., 4.0.0, 4.0.0-beta1) | |
| # Uses bash regex to avoid a grep subprocess and (0|[1-9][0-9]*) to prevent leading zeros. | |
| PATTERN='^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-beta[0-9]+)?$' | |
| if ! [[ "${INPUT_VERSION}" =~ $PATTERN ]]; then | |
| echo "::error::Invalid version format: ${INPUT_VERSION}" | |
| echo "::error::Version must be x.x.x or x.x.x-betax (e.g., 4.0.0 or 4.0.0-beta1)" | |
| exit 1 | |
| fi | |
| # Check length to prevent excessively long inputs | |
| if [ ${#INPUT_VERSION} -gt 50 ]; then | |
| echo "::error::Version string exceeds maximum length of 50 characters" | |
| exit 1 | |
| fi | |
| echo "Version validated: ${INPUT_VERSION}" | |
| build_aar: | |
| needs: [ validate_version ] | |
| name: Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| # After decoding the secret key, place the file in ~ /. Gradle/ secring.gpg | |
| - name: Decode Signing Key | |
| uses: ./.github/actions/decode_signing_key_action | |
| with: | |
| signing_key_file: ${{ secrets.SIGNING_KEY_FILE }} | |
| signing_file_path: ${{ env.SIGNING_KEY_FILE_PATH }} | |
| - name: Assemble | |
| run: ./gradlew --stacktrace assemble | |
| env: | |
| SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} | |
| SIGNING_KEY_FILE: ${{ env.SIGNING_KEY_FILE_PATH }} | |
| # Once building is finished, we unit test every module in parallel | |
| unit_test_american_express: | |
| needs: [ validate_version ] | |
| name: AmericanExpress Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: AmericanExpress | |
| unit_test_braintree_core: | |
| needs: [ validate_version ] | |
| name: BraintreeCore Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: BraintreeCore | |
| unit_test_data_collector: | |
| needs: [ validate_version ] | |
| name: DataCollector Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: DataCollector | |
| unit_test_card: | |
| needs: [ validate_version ] | |
| name: Card Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: Card | |
| unit_test_google_pay: | |
| needs: [ validate_version ] | |
| name: GooglePay Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: GooglePay | |
| unit_test_local_payment: | |
| needs: [ validate_version ] | |
| name: LocalPayment Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: LocalPayment | |
| unit_test_paypal: | |
| needs: [ validate_version ] | |
| name: PayPal Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: PayPal | |
| unit_test_paypal_messaging: | |
| needs: [ validate_version ] | |
| name: PayPal Messaging Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java 8 | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: PayPalMessaging | |
| unit_test_shopper_insights: | |
| needs: [ validate_version ] | |
| name: Shopper Insights Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java 8 | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: ShopperInsights | |
| unit_test_three_d_secure: | |
| needs: [ validate_version ] | |
| name: ThreeDSecure Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: ThreeDSecure | |
| unit_test_ui_components: | |
| needs: [ validate_version ] | |
| name: UIComponents Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: UIComponents | |
| unit_test_venmo: | |
| needs: [ validate_version ] | |
| name: Venmo Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: Venmo | |
| unit_test_visa_checkout: | |
| needs: [ validate_version ] | |
| name: VisaCheckout Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: VisaCheckout | |
| unit_test_sepa_direct_debit: | |
| needs: [ validate_version ] | |
| name: SEPA Direct Debit Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Run Unit Tests | |
| uses: ./.github/actions/unit_test_module | |
| with: | |
| module: SEPADirectDebit | |
| # Wait until all module unit tests are finished before continuing release process | |
| unit_test_finished: | |
| needs: [ | |
| unit_test_american_express, | |
| unit_test_braintree_core, | |
| unit_test_data_collector, | |
| unit_test_card, | |
| unit_test_google_pay, | |
| unit_test_local_payment, | |
| unit_test_paypal, | |
| unit_test_paypal_messaging, | |
| unit_test_shopper_insights, | |
| unit_test_three_d_secure, | |
| unit_test_ui_components, | |
| unit_test_venmo, | |
| unit_test_visa_checkout, | |
| unit_test_sepa_direct_debit | |
| ] | |
| name: All Unit Tests Finished | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: echo "Unit tests finished" | |
| # after build and unit tests are finished, publish all modules at once | |
| # to help reduce the probability of failure when interacting with sonatype servers | |
| publish_all_modules: | |
| needs: [ unit_test_finished, build_aar ] | |
| name: Publish All Modules To Sonatype | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Decode Signing Key | |
| uses: ./.github/actions/decode_signing_key_action | |
| with: | |
| signing_key_file: ${{ secrets.SIGNING_KEY_FILE }} | |
| signing_file_path: ${{ env.SIGNING_KEY_FILE_PATH }} | |
| - name: Update Versions | |
| uses: ./.github/actions/update_versions | |
| with: | |
| version: ${{ github.event.inputs.version }} | |
| - name: Publish All Modules | |
| uses: ./.github/actions/publish_all_modules | |
| with: | |
| sonatype_usr: ${{ secrets.SONATYPE_NEXUS_USERNAME }} | |
| sonatype_pwd: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} | |
| signing_key_id: ${{ secrets.SIGNING_KEY_ID }} | |
| signing_key_pwd: ${{ secrets.SIGNING_KEY_PASSWORD }} | |
| signing_key_file: ${{ env.SIGNING_KEY_FILE_PATH }} | |
| releasing_finished: | |
| needs: [ publish_all_modules ] | |
| name: Releases Finished | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: echo "Release finished" | |
| bump_version: | |
| needs: [ releasing_finished ] | |
| name: Bump Version | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Set GitHub User | |
| uses: ./.github/actions/set_github_user | |
| - name: Set release version | |
| run: echo "RELEASE_VERSION=${{ github.event.inputs.version }}" >> "$GITHUB_ENV" | |
| - name: Update Version | |
| run: | | |
| set -euo pipefail | |
| ./gradlew -PversionParam="${RELEASE_VERSION}" changeGradleReleaseVersion | |
| ./gradlew -PversionParam="${RELEASE_VERSION}" changeREADMEVersion | |
| ./gradlew -PversionParam="${RELEASE_VERSION}" changeMigrationGuideVersion | |
| ./gradlew -PversionParam="${RELEASE_VERSION}" updateCHANGELOGVersion | |
| ./gradlew dokkaHtmlMultiModule | |
| git add -A | |
| git commit -am "Release ${RELEASE_VERSION}" | |
| git tag "${RELEASE_VERSION}" -a -m "Release ${RELEASE_VERSION}" | |
| ./gradlew -PversionParam="${RELEASE_VERSION}" incrementSNAPSHOTVersion | |
| ./gradlew incrementVersionCode | |
| git commit -am 'Prepare for development' | |
| git push origin ${GITHUB_REF_NAME} "${RELEASE_VERSION}" | |
| create_github_release: | |
| needs: [ bump_version ] | |
| name: Create GitHub Release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup | |
| - name: Save changelog entries to a file | |
| run: | | |
| sed -e '1,/##/d' -e '/##/,$d' CHANGELOG.md > changelog_entries.md | |
| - name: Create GitHub release | |
| id: create_release | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ github.event.inputs.version }} | |
| release_name: ${{ github.event.inputs.version }} | |
| body_path: changelog_entries.md | |
| draft: false | |
| prerelease: false |