diff --git a/.github/workflows/sdk-size-checks.yml b/.github/workflows/sdk-size-checks.yml index 37acae78b94..778093c6962 100644 --- a/.github/workflows/sdk-size-checks.yml +++ b/.github/workflows/sdk-size-checks.yml @@ -4,7 +4,7 @@ on: pull_request: env: - SDKS: "stream-chat-android-client stream-chat-android-offline stream-chat-android-ui-components stream-chat-android-compose" + MODULES: "stream-chat-android-client stream-chat-android-offline stream-chat-android-ui-components stream-chat-android-compose" MAX_TOLERANCE: 500 FINE_TOLERANCE: 250 @@ -20,6 +20,13 @@ jobs: with: key-prefix: gradle-build + - name: Assemble SDKs + run: | + for module in $MODULES; do + modules+=" :$module:assembleDebug" + done + ./gradlew $modules + - name: Get develop SDK sizes run: | # Reads the develop SDK sizes from JSON file @@ -28,22 +35,15 @@ jobs: DEVELOP_SDK_SIZES=$(jq -c .debug stream-chat-android.json) echo "DEVELOP_SDK_SIZES=$DEVELOP_SDK_SIZES" >> $GITHUB_ENV - - name: Assemble SDKs - run: | - for sdk in $SDKS; do - modules+=" :$sdk:assembleDebug" - done - ./gradlew $modules - - name: Calculate PR branch SDK sizes run: | echo '{}' > pr_sdk_sizes.json # Calculate sizes from the .aar files and save them into a temporary JSON file # so it can be exported for the next job step - for sdk in $SDKS; do - size=$(du -k $sdk/build/outputs/aar/*.aar | awk '{print $1}') - jq -c --arg sdk "$sdk" --arg size "$size" '. + {($sdk): ($size | tonumber)}' pr_sdk_sizes.json > temp.json && mv temp.json pr_sdk_sizes.json + for module in $MODULES; do + size=$(du -k $module/build/outputs/aar/*.aar | awk '{print $1}') + jq -c --arg sdk "$module" --arg size "$size" '. + {($sdk): ($size | tonumber)}' pr_sdk_sizes.json > temp.json && mv temp.json pr_sdk_sizes.json done echo "PR_SDK_SIZES=$(cat pr_sdk_sizes.json)" >> $GITHUB_ENV diff --git a/.github/workflows/update-sdk-sizes.yml b/.github/workflows/update-sdk-sizes.yml new file mode 100644 index 00000000000..764e31ae3e7 --- /dev/null +++ b/.github/workflows/update-sdk-sizes.yml @@ -0,0 +1,98 @@ +name: Update SDK sizes + +on: + pull_request: + + workflow_dispatch: + +env: + MODULES: "stream-chat-android-client stream-chat-android-offline stream-chat-android-ui-components stream-chat-android-compose" + VARIANTS: "debug release" + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + +jobs: + update-sdk-sizes: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + - uses: ./.github/actions/setup-java + - uses: ./.github/actions/gradle-cache + with: + key-prefix: gradle-build + + - name: Assemble SDKs + run: | + for module in $MODULES; do + modules+=" :$module:assemble" + done + ./gradlew $modules + + - name: Update SDK sizes + run: | + echo '{}' > stream-chat-android.json + + # Calculate sizes + for module in $MODULES; do + for variant in $VARIANTS; do + file="$module/build/outputs/aar/$module-$variant.aar" + + # Ensure file exists + if [ -f "$file" ]; then + size=$(du -k "$file" | awk '{print $1}') + else + echo "Warning: $file not found. Setting size to 0." + size=0 + fi + + # Update JSON + jq --arg module "$module" --arg variant "$variant" --argjson size "$size" \ + ".\"$variant\".\"$module\" = $size" stream-chat-android.json > temp.json && mv temp.json stream-chat-android.json + done + done + + - name: Validate Generated JSON + run: jq . stream-chat-android.json + + - name: Commit and Push JSON + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git fetch origin + git checkout $BRANCH_NAME + + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + + # Add and commit updated JSON file + git add stream-chat-android.json + + if git diff-index --quiet HEAD --; then + echo "No changes to commit" + else + git commit -m "Update SDK sizes JSON" + git push origin HEAD:$BRANCH_NAME + fi + + - name: Update size badges + run: | + # Update README.md + + for module in $MODULES; do + size=$(jq --arg module "$module" ".release.\"$module\"" stream-chat-android.json) + badgeUrl="https://img.shields.io/badge/${module//-/--}-$size%20KB-lightgreen" + sed -i "s|!\[$module\](.*)|![$module](${badgeUrl})|" README.md + done + + - name: Commit and Push README + run: | + # Add and commit updated README file + git add README.md + + if git diff-index --quiet HEAD --; then + echo "No changes to commit" + else + git commit -m "Update SDK size badges" + git push origin HEAD:$BRANCH_NAME + fi diff --git a/README.md b/README.md index 88ee120d48e..8445daaa185 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,15 @@
+