Skip to content

Merge pull request #388 from paypal/release/2.2.0 #130

Merge pull request #388 from paypal/release/2.2.0

Merge pull request #388 from paypal/release/2.2.0 #130

Workflow file for this run

name: Release On Merge To Main
on:
push:
branches:
- main
env:
SIGNING_KEY_FILE_PATH: /home/runner/secretKey.gpg
jobs:
# Extract version from build.gradle
extract_version:
name: Extract Version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.version }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Get version from build.gradle
id: get_version
run: |
# Extract version from build.gradle
VERSION=$(grep -o '"sdkVersionName"\s*:\s*"[^"]*"' build.gradle | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+[^"]*')
echo "Current version in build.gradle: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
#First we build
build_aar:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
#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 -x :Demo:assemble # we exclude Demo from 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_core:
name: CorePayments Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- name: Run Unit Tests
uses: ./.github/actions/unit_test_module
with:
module: CorePayments
unit_test_card:
name: CardPayments Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- name: Run Unit Tests
uses: ./.github/actions/unit_test_module
with:
module: CardPayments
unit_test_paypal_web:
name: PayPal Web Payments Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- name: Run Unit Tests
uses: ./.github/actions/unit_test_module
with:
module: PayPalWebPayments
unit_test_fraud_protection:
name: Fraud Protection Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- name: Run Unit Tests
uses: ./.github/actions/unit_test_module
with:
module: FraudProtection
unit_test_finished:
needs: [ unit_test_card, unit_test_core, unit_test_paypal_web, unit_test_fraud_protection ]
name: All Unit Test finished
runs-on: ubuntu-latest
steps:
- run: echo "Unit test 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, extract_version ]
name: Publish All Modules To Sonatype
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- 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: Log Version
run: |
# Use extracted version from build.gradle
echo "Using version from build.gradle: ${{ needs.extract_version.outputs.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 }}
# Once all releases are done, we bump version, tag it and prepare next
bump_version:
needs: [ publish_all_modules, extract_version ]
name: Bump Version
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'microsoft'
- name: Set github user
uses: ./.github/actions/set_github_user
- name: Tag and Release
run: |
# Use extracted version from build.gradle
VERSION="${{ needs.extract_version.outputs.version }}"
echo "Using current version from build.gradle: $VERSION"
# CHANGELOG is already updated by the release PR process
# Just create the tag without modifying files
git tag $VERSION -a -m "Release $VERSION, automated from main branch, , by ${{ github.actor }}"
git push origin $VERSION
- 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: ${{ needs.extract_version.outputs.version }}
release_name: ${{ needs.extract_version.outputs.version }}
body_path: changelog_entries.md
draft: false
prerelease: false
# Create PR to sync changes from main to develop after successful release
sync_to_develop:
needs: [ bump_version, extract_version ]
name: Sync Main to Develop
runs-on: ubuntu-latest
# Add permissions needed for PR creation and merge
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Full git history to ensure branch creation works
- name: Set github user
uses: ./.github/actions/set_github_user
- name: Setup GitHub CLI
uses: cli/cli-action@v2
- name: Create sync branch and PR
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ needs.extract_version.outputs.version }}"
BRANCH_NAME="sync-main-to-develop-$VERSION"
PR_TITLE="Sync: Main to Develop after release $VERSION"
PR_BODY ="This PR syncs changes from the main branch to the develop branch after release of $VERSION"
# Create new branch from main
git checkout main
git pull origin main
git checkout -b $BRANCH_NAME
git push origin $BRANCH_NAME
echo "Created branch $BRANCH_NAME from main"
# Create PR using GitHub CLI
PR_URL=$(gh pr create \
--base develop \
--head $BRANCH_NAME \
--title "$PR_TITLE" \
--body-file pr_body.md)
echo "Created PR: $PR_URL"
# Enable auto-merge for the PR
# Extract PR number from URL using GitHub CLI
echo "Enabling auto-merge for PR at $PR_URL"
gh pr merge $PR_URL --auto --merge --delete-branch
echo "Auto-merge enabled. PR will be merged automatically when all checks pass."