Skip to content

Commit

Permalink
changed the way we release. Now:
Browse files Browse the repository at this point in the history
1- run Pre-Release for Smoke -> this step will run tests, it will publish to sonatype staging repo and it will close the repo. Now we are able to do some smoking testing
2- run Release -> once smoking test gets green light, we can release. This workflow performs the actual release to maven central. It will then set next version and push it remotely. It also generates documentation and pushes it to our docs repo.
  • Loading branch information
cesar roman committed Jan 23, 2024
1 parent d3ae019 commit 19f69bc
Show file tree
Hide file tree
Showing 2 changed files with 232 additions and 90 deletions.
149 changes: 149 additions & 0 deletions .github/workflows/pre-release-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Pre-Release for Smoke

env:
SONATYPE_USERNAME: embrace-io
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
MAVEN_QA_USER: github
MAVEN_QA_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
mavenSigningKeyId: ${{ secrets.MAVEN_ANDROID_SIGNING_KEY }}
mavenSigningKeyRingFileEncoded: ${{ secrets.MAVEN_ANDROID_GPG_KEY }}
mavenSigningKeyPassword: ${{ secrets.MAVEN_ANDROID_SIGNING_PASSWORD }}

on:
workflow_dispatch:
inputs:
current_version:
description: 'Version to release'
required: true

jobs:
release:
runs-on: ubuntu-latest
strategy:
matrix:
jdk-version: ["11"]
ndk-version: ["21.4.7075529"]
steps:
- name: Decode Keystore
run: |
mkdir "$RUNNER_TEMP"/keystore
echo $mavenSigningKeyRingFileEncoded | base64 -di > "$RUNNER_TEMP"/keystore/2DE631C1.gpg
echo "mavenSigningKeyRingFile=$RUNNER_TEMP/keystore/2DE631C1.gpg" >> $GITHUB_ENV
- name: Checkout Branch
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.CD_GITHUB_TOKEN }}

- uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.m2/repository
~/.sonar/cache
key: ${{ runner.os }}-gradle-jdk${{ matrix.jdk-version }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle
- name: Install JDK ${{ matrix.jdk-version }}
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: ${{ matrix.jdk-version }}

- name: Setup NDK ${{ matrix.ndk-version }}
run: |
export ANDROID_ROOT=/usr/local/lib/android
export ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
export ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk-bundle
ln -sfn $ANDROID_SDK_ROOT/ndk/${{ matrix.ndk-version }} $ANDROID_NDK_ROOT
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1

# Build the entire project, run the tests, and run all static analysis
- name: Gradle Build
run: ./gradlew assembleRelease check --stacktrace

- name: Archive Test Results
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: android-sdk-test-results
path: embrace-android-sdk/build/reports/tests/

- name: Configure git
run: |
git config --global user.name 'embrace-ci[bot]'
git config --global user.email '[email protected]'
git config --global url."https://${{ secrets.CD_GITHUB_USER }}:${{ secrets.CD_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com"

- name: Gradlew Pre-Release
run: |
# git config --global user.name 'embrace-ci[bot]'
# git config --global user.email '[email protected]'
# git config --global url."https://${{ secrets.CD_GITHUB_USER }}:${{ secrets.CD_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com"
sed -i -r "s#version = ([^\']+)#version = ${{ github.event.inputs.current_version }}#" gradle.properties
git add gradle.properties
git commit -m "CI/CD: change version to be released: ${{ github.event.inputs.current_version }}"
git push
./gradlew clean publishReleasePublicationToSonatype closeSonatypeStagingRepository -Dorg.gradle.parallel=false --stacktrace

# - name: Generate Documentation
# run: ./gradlew dokkaHtml
#
# - name: Publish gh-pages
# run: |
# mv docs .docs-newly-generated # new docs generated by previous step
# git checkout gh-pages
# git rm -rf docs # old docs on gh-pages branch
# mv .docs-newly-generated docs
# date > docs/version.txt
# echo ${{ github.sha }} >> docs/version.txt
# echo ${{ github.event.release.tag_name }} >> docs/version.txt
# git add -f docs
# git config --global user.name "embrace-ci"
# git config --global user.email "[email protected]"
# git commit --allow-empty --message 'CI/CD: Automatically generated documentation for ${{ github.event.release.tag_name }}' docs/
# git push --force origin gh-pages

# - name: Record SDK Version History (${{ github.event.inputs.current_version }})
# run: |
# curl -X POST ${{ vars.SDK_VERSION_URL }}/android/version/ -H 'X-Embrace-CI: ${{ secrets.SDK_VERSION_TOKEN }}' -H 'Content-Type: application/json' -d '{"version": "${{ github.event.inputs.current_version }}"}'

- name: Checkout Swazzler
uses: actions/checkout@v3
with:
repository: embrace-io/embrace-swazzler3
ref: master
path: ./embrace-swazzler3
token: ${{ secrets.CD_GITHUB_TOKEN }}

- name: Swazzler Release
run: |
cd ./embrace-swazzler3
./gradlew clean release -Dorg.gradle.parallel=false -Prelease.useAutomaticVersion=true -Prelease.releaseVersion=${{ github.event.inputs.current_version }} -Prelease.newVersion=${{ github.event.inputs.next_version }}-SNAPSHOT --stacktrace
- name: Cleanup Gradle Cache
# Based on https://docs.github.com/en/actions/guides/building-and-testing-java-with-gradle#caching-dependencies
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
# measure-sdk-size:
# uses: embrace-io/android-size-measure/.github/workflows/analyze-sdk-size.yml@main
# needs: release
# with:
# sdk_version: ${{ github.event.inputs.current_version }}
# token: ${{ secrets.CD_GITHUB_TOKEN }}
#
# measure-startup-time:
# uses: embrace-io/android-sdk-benchmark/.github/workflows/macrobenchmark.yml@main
# needs: release
# with:
# sdk_version: ${{ github.event.inputs.current_version }}
# token: ${{ secrets.CD_GITHUB_TOKEN }}
173 changes: 83 additions & 90 deletions .github/workflows/release-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,84 +12,91 @@ env:
on:
workflow_dispatch:
inputs:
current_version:
description: 'Version to release'
required: true
# NTH: show current version (read-only) with current version that was pre-released
# current_version:
# description: 'Version to release'
# required: true
next_version:
description: 'Next Version (Do NOT include -SNAPSHOT, will be added automatically)'
required: true

jobs:
release:
runs-on: ubuntu-latest
strategy:
matrix:
jdk-version: ["11"]
ndk-version: ["21.4.7075529"]
# strategy:
# matrix:
# jdk-version: ["11"]
# ndk-version: ["21.4.7075529"]
steps:
- name: Decode Keystore
run: |
mkdir "$RUNNER_TEMP"/keystore
echo $mavenSigningKeyRingFileEncoded | base64 -di > "$RUNNER_TEMP"/keystore/2DE631C1.gpg
echo "mavenSigningKeyRingFile=$RUNNER_TEMP/keystore/2DE631C1.gpg" >> $GITHUB_ENV
- name: Checkout Branch
uses: actions/checkout@v3
with:
fetch-depth: 0
token: ${{ secrets.CD_GITHUB_TOKEN }}

- uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.m2/repository
~/.sonar/cache
key: ${{ runner.os }}-gradle-jdk${{ matrix.jdk-version }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle
- name: Install JDK ${{ matrix.jdk-version }}
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: ${{ matrix.jdk-version }}
# - name: Decode Keystore
# run: |
# mkdir "$RUNNER_TEMP"/keystore
# echo $mavenSigningKeyRingFileEncoded | base64 -di > "$RUNNER_TEMP"/keystore/2DE631C1.gpg
# echo "mavenSigningKeyRingFile=$RUNNER_TEMP/keystore/2DE631C1.gpg" >> $GITHUB_ENV
#
# - name: Checkout Branch
# uses: actions/checkout@v3
# with:
# fetch-depth: 0
# token: ${{ secrets.CD_GITHUB_TOKEN }}
#
# - uses: actions/cache@v3
# with:
# path: |
# ~/.gradle/caches
# ~/.gradle/wrapper
# ~/.m2/repository
# ~/.sonar/cache
# key: ${{ runner.os }}-gradle-jdk${{ matrix.jdk-version }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
# restore-keys: |
# ${{ runner.os }}-gradle
#
# - name: Install JDK ${{ matrix.jdk-version }}
# uses: actions/setup-java@v3
# with:
# distribution: 'adopt'
# java-version: ${{ matrix.jdk-version }}
#
# - name: Setup NDK ${{ matrix.ndk-version }}
# run: |
# export ANDROID_ROOT=/usr/local/lib/android
# export ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
# export ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk-bundle
# ln -sfn $ANDROID_SDK_ROOT/ndk/${{ matrix.ndk-version }} $ANDROID_NDK_ROOT
#
# - name: Validate Gradle wrapper
# uses: gradle/wrapper-validation-action@v1
#
# # Build the entire project, run the tests, and run all static analysis
# - name: Gradle Build
# run: ./gradlew assembleRelease check --stacktrace
#
# - name: Archive Test Results
# if: ${{ always() }}
# uses: actions/upload-artifact@v3
# with:
# name: android-sdk-test-results
# path: embrace-android-sdk/build/reports/tests/

- name: Setup NDK ${{ matrix.ndk-version }}
- name: Gradlew Release
run: |
export ANDROID_ROOT=/usr/local/lib/android
export ANDROID_SDK_ROOT=${ANDROID_ROOT}/sdk
export ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk-bundle
ln -sfn $ANDROID_SDK_ROOT/ndk/${{ matrix.ndk-version }} $ANDROID_NDK_ROOT
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
# git config --global user.name 'embrace-ci[bot]'
# git config --global user.email '[email protected]'
# git config --global url."https://${{ secrets.CD_GITHUB_USER }}:${{ secrets.CD_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com"
# sed -i -r "s#version = ([^\']+)#version = ${{ github.event.inputs.current_version }}#" gradle.properties
# git add gradle.properties
# git commit -m "CI/CD: change version to be released: ${{ github.event.inputs.current_version }}"
# git push
./gradlew findSonatypeStagingRepository releaseSonatypeStagingRepository -Dorg.gradle.parallel=false --stacktrace

# Build the entire project, run the tests, and run all static analysis
- name: Gradle Build
run: ./gradlew assembleRelease check --stacktrace

- name: Archive Test Results
if: ${{ always() }}
uses: actions/upload-artifact@v3
with:
name: android-sdk-test-results
path: embrace-android-sdk/build/reports/tests/
- name: Generate Documentation
run: ./gradlew dokkaHtml

- name: Gradlew Release
run: |
- name: Configure git
run: |
git config --global user.name 'embrace-ci[bot]'
git config --global user.email '[email protected]'
git config --global url."https://${{ secrets.CD_GITHUB_USER }}:${{ secrets.CD_GITHUB_TOKEN }}@github.com".insteadOf "https://github.com"
sed -i -r "s#version = ([^\']+)#version = ${{ github.event.inputs.current_version }}#" gradle.properties
git add gradle.properties
git commit -m "CI/CD: change version to be released: ${{ github.event.inputs.current_version }}"
git push
./gradlew clean publishReleasePublicationToSonatypeRepository -Dorg.gradle.parallel=false --stacktrace
- name: Generate Documentation
run: ./gradlew dokkaHtml

- name: Publish gh-pages
run: |
Expand Down Expand Up @@ -118,37 +125,23 @@ jobs:
git commit -m "CI/CD: set next version: ${{ github.event.inputs.next_version }}"
git push
- name: Checkout Swazzler
uses: actions/checkout@v3
with:
repository: embrace-io/embrace-swazzler3
ref: master
path: ./embrace-swazzler3
token: ${{ secrets.CD_GITHUB_TOKEN }}

- name: Swazzler Release
run: |
cd ./embrace-swazzler3
./gradlew clean release -Dorg.gradle.parallel=false -Prelease.useAutomaticVersion=true -Prelease.releaseVersion=${{ github.event.inputs.current_version }} -Prelease.newVersion=${{ github.event.inputs.next_version }}-SNAPSHOT --stacktrace
# - name: Checkout Swazzler
# uses: actions/checkout@v3
# with:
# repository: embrace-io/embrace-swazzler3
# ref: master
# path: ./embrace-swazzler3
# token: ${{ secrets.CD_GITHUB_TOKEN }}
#
# - name: Swazzler Release
# run: |
# cd ./embrace-swazzler3
# ./gradlew clean release -Dorg.gradle.parallel=false -Prelease.useAutomaticVersion=true -Prelease.releaseVersion=${{ github.event.inputs.current_version }} -Prelease.newVersion=${{ github.event.inputs.next_version }}-SNAPSHOT --stacktrace

- name: Cleanup Gradle Cache
# Based on https://docs.github.com/en/actions/guides/building-and-testing-java-with-gradle#caching-dependencies
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
# measure-sdk-size:
# uses: embrace-io/android-size-measure/.github/workflows/analyze-sdk-size.yml@main
# needs: release
# with:
# sdk_version: ${{ github.event.inputs.current_version }}
# token: ${{ secrets.CD_GITHUB_TOKEN }}
#
# measure-startup-time:
# uses: embrace-io/android-sdk-benchmark/.github/workflows/macrobenchmark.yml@main
# needs: release
# with:
# sdk_version: ${{ github.event.inputs.current_version }}
# token: ${{ secrets.CD_GITHUB_TOKEN }}
rm -f ~/.gradle/caches/modules-2/gc.properties

0 comments on commit 19f69bc

Please sign in to comment.