Release #58
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: /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_java | |
| - name: Decode Signing Key | |
| run: ./ci decode_signing_key | |
| env: | |
| SIGNING_KEY: ${{ secrets.SIGNING_KEY }} | |
| - name: Assemble | |
| run: ./ci build | |
| env: | |
| SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} | |
| # Run unit tests after a successful build | |
| unit_test_browser_switch: | |
| needs: [ validate_version ] | |
| name: Unit Test Browser Switch | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup_java | |
| - name: Run Unit Tests | |
| run: ./ci unit_tests | |
| # Publish after successful build and unit tests | |
| publish_browser_switch: | |
| needs: [ build_aar, unit_test_browser_switch ] | |
| name: Publish To Sonatype | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| - name: Setup Java | |
| uses: ./.github/actions/setup_java | |
| - name: Decode Signing Key | |
| run: ./ci decode_signing_key | |
| env: | |
| SIGNING_KEY: ${{ secrets.SIGNING_KEY }} | |
| - name: Update Version | |
| run: ./ci update_version ${{ github.event.inputs.version }} | |
| - name: Publish Browser Switch | |
| run: ./ci publish release | |
| env: | |
| SONATYPE_NEXUS_USERNAME: ${{ secrets.SONATYPE_NEXUS_USERNAME }} | |
| SONATYPE_NEXUS_PASSWORD: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} | |
| SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} | |
| SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }} | |
| release_finished: | |
| needs: [ publish_browser_switch ] | |
| name: Release Finished | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: echo "Release finished" | |
| bump_version: | |
| needs: [ release_finished ] | |
| name: Bump Version | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v2 | |
| with: | |
| token: ${{ secrets.RELEASE_PAT }} | |
| - name: Setup Java | |
| uses: ./.github/actions/setup_java | |
| - name: Set GitHub User | |
| run: ./ci set_github_user_to_braintreeps | |
| - name: Set release version | |
| run: echo "RELEASE_VERSION=${{ github.event.inputs.version }}" >> "$GITHUB_ENV" | |
| - name: Update Version | |
| run: | | |
| set -euo pipefail | |
| ./ci publish_dokka_docs | |
| ./ci update_version "${RELEASE_VERSION}" | |
| ./ci commit_and_tag_release "${RELEASE_VERSION}" | |
| ./ci increment_snapshot_version "${RELEASE_VERSION}" | |
| ./ci increment_demo_app_version_code | |
| git commit -am 'Prepare for development' | |
| git push origin main "${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_java | |
| - name: Save changelog entries to a file | |
| run: ./ci get_latest_changelog_entries > 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 |