Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Iterable/iterable-android-sdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 3.4.0
Choose a base ref
...
head repository: Iterable/iterable-android-sdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 10,128 additions and 2,208 deletions.
  1. +6 −0 .editorconfig
  2. +34 −0 .github/ISSUE_TEMPLATE/bug_report.md
  3. +1 −0 .github/ISSUE_TEMPLATE/config.yml
  4. +79 −73 .github/workflows/build.yml
  5. +27 −0 .github/workflows/jira.yml
  6. +122 −0 .github/workflows/prepare-release.yml
  7. +44 −0 .github/workflows/publish.yml
  8. +3 −1 .gitignore
  9. +326 −4 CHANGELOG.md
  10. +14 −9 README.md
  11. +54 −40 app/build.gradle
  12. +2 −3 app/src/androidTest/AndroidManifest.xml
  13. +5 −0 app/src/androidTest/java/com/iterable/iterableapi/MainActivityTest.java
  14. +133 −135 app/src/androidTest/java/com/iterable/iterableapi/tests/InboxCustomizationTest.kt
  15. +6 −4 app/src/main/AndroidManifest.xml
  16. +3 −3 build.gradle
  17. +5 −1 gradle.properties
  18. +2 −2 gradle/wrapper/gradle-wrapper.properties
  19. +40 −34 iterableapi-ui/build.gradle
  20. +2 −1 iterableapi-ui/src/main/AndroidManifest.xml
  21. +191 −0 iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/embedded/IterableEmbeddedView.kt
  22. +16 −0 iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/embedded/IterableEmbeddedViewConfig.kt
  23. +7 −0 iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/embedded/IterableEmbeddedViewType.kt
  24. +32 −2 iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/inbox/IterableInboxFragment.java
  25. +13 −0 iterableapi-ui/src/main/res/drawable/banner_card_border.xml
  26. +12 −0 iterableapi-ui/src/main/res/drawable/card_image_shape.xml
  27. +13 −0 iterableapi-ui/src/main/res/drawable/notification_view_border.xml
  28. +9 −0 iterableapi-ui/src/main/res/drawable/primary_banner_button_background.xml
  29. +13 −0 iterableapi-ui/src/main/res/drawable/primary_card_button_background.xml
  30. +13 −0 iterableapi-ui/src/main/res/drawable/primary_notification_button_background.xml
  31. +13 −0 iterableapi-ui/src/main/res/drawable/secondary_banner_button_background.xml
  32. +13 −0 iterableapi-ui/src/main/res/drawable/secondary_card_button_background.xml
  33. +13 −0 iterableapi-ui/src/main/res/drawable/secondary_notification_button_background.xml
  34. +112 −0 iterableapi-ui/src/main/res/layout-v21/banner_view.xml
  35. +124 −0 iterableapi-ui/src/main/res/layout-v21/card_view.xml
  36. +99 −0 iterableapi-ui/src/main/res/layout-v21/notification_view.xml
  37. +112 −0 iterableapi-ui/src/main/res/layout/banner_view.xml
  38. +125 −0 iterableapi-ui/src/main/res/layout/card_view.xml
  39. +105 −0 iterableapi-ui/src/main/res/layout/notification_view.xml
  40. +35 −0 iterableapi-ui/src/main/res/values/colors.xml
  41. +4 −0 iterableapi-ui/src/main/res/values/dimens.xml
  42. +0 −2 iterableapi-ui/src/main/res/values/strings.xml
  43. +9 −0 iterableapi-ui/src/main/res/values/styles.xml
  44. +57 −50 iterableapi/build.gradle
  45. +6 −6 iterableapi/src/androidTest/AndroidManifest.xml
  46. +0 −213 iterableapi/src/androidTest/java/com/iterable/iterableapi/IterableApiRequestsTest.java
  47. +76 −8 iterableapi/src/androidTest/java/com/iterable/iterableapi/IterableApiResponseTest.java
  48. +0 −190 iterableapi/src/androidTest/java/com/iterable/iterableapi/IterableNotificationTest.java
  49. +2 −1 iterableapi/src/androidTest/java/com/iterable/iterableapi/IterableTestUtils.java
  50. +12 −2 iterableapi/src/main/AndroidManifest.xml
  51. +29 −0 iterableapi/src/main/java/com/iterable/iterableapi/AuthFailure.java
  52. +14 −0 iterableapi/src/main/java/com/iterable/iterableapi/AuthFailureReason.java
  53. +1 −1 iterableapi/src/main/java/com/iterable/iterableapi/CommerceItem.java
  54. +18 −0 iterableapi/src/main/java/com/iterable/iterableapi/EmbeddedImpressionData.kt
  55. +120 −0 iterableapi/src/main/java/com/iterable/iterableapi/EmbeddedSessionManager.kt
  56. +1 −0 iterableapi/src/main/java/com/iterable/iterableapi/ImpressionData.java
  57. +18 −3 iterableapi/src/main/java/com/iterable/iterableapi/InboxSessionManager.java
  58. +24 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableAPIMobileFrameworkInfo.java
  59. +17 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableAPIMobileFrameworkType.java
  60. +8 −2 iterableapi/src/main/java/com/iterable/iterableapi/IterableActionRunner.java
  61. +4 −1 iterableapi/src/main/java/com/iterable/iterableapi/IterableActionSource.java
  62. +8 −8 iterableapi/src/main/java/com/iterable/iterableapi/IterableActivityMonitor.java
  63. +868 −576 iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java
  64. +163 −20 iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java
  65. +2 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableAuthHandler.java
  66. +184 −32 iterableapi/src/main/java/com/iterable/iterableapi/IterableAuthManager.java
  67. +127 −2 iterableapi/src/main/java/com/iterable/iterableapi/IterableConfig.java
  68. +54 −4 iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java
  69. +253 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableDataEncryptor.kt
  70. +16 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableDataRegion.java
  71. +12 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableDecryptionFailureHandler.java
  72. +269 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableEmbeddedManager.kt
  73. +348 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableEmbeddedPlacement.kt
  74. +26 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableEmbeddedSession.kt
  75. +15 −7 iterableapi/src/main/java/com/iterable/iterableapi/IterableFirebaseMessagingService.java
  76. +5 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppDisplayer.java
  77. +57 −42 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFileStorage.java
  78. +63 −51 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppFragmentHTMLNotification.java
  79. +65 −12 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java
  80. +2 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppMemoryStorage.java
  81. +64 −38 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppMessage.java
  82. +5 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppStorage.java
  83. +156 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableKeychain.kt
  84. +188 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableKeychainEncryptedDataMigrator.kt
  85. +120 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableMobileFrameworkDetector.kt
  86. +52 −24 iterableapi/src/main/java/com/iterable/iterableapi/IterableNetworkConnectivityManager.java
  87. +28 −11 iterableapi/src/main/java/com/iterable/iterableapi/IterableNotificationBuilder.java
  88. +143 −30 iterableapi/src/main/java/com/iterable/iterableapi/IterableNotificationHelper.java
  89. +3 −133 iterableapi/src/main/java/com/iterable/iterableapi/IterablePushActionReceiver.java
  90. +145 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterablePushNotificationUtil.java
  91. +134 −35 iterableapi/src/main/java/com/iterable/iterableapi/IterableRequestTask.java
  92. +1 −1 iterableapi/src/main/java/com/iterable/iterableapi/IterableTaskRunner.java
  93. +2 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableTaskStorage.java
  94. +57 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableTrampolineActivity.java
  95. +6 −212 iterableapi/src/main/java/com/iterable/iterableapi/IterableUtil.java
  96. +196 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableUtilImpl.java
  97. +17 −0 iterableapi/src/main/java/com/iterable/iterableapi/IterableWebChromeClient.java
  98. +20 −22 iterableapi/src/main/java/com/iterable/iterableapi/IterableWebView.java
  99. +3 −24 iterableapi/src/main/java/com/iterable/iterableapi/IterableWebViewClient.java
  100. +7 −0 iterableapi/src/main/java/com/iterable/iterableapi/OfflineRequestProcessor.java
  101. +9 −2 iterableapi/src/main/java/com/iterable/iterableapi/OnlineRequestProcessor.java
  102. +3 −0 iterableapi/src/main/java/com/iterable/iterableapi/RequestProcessor.java
  103. +30 −0 iterableapi/src/main/java/com/iterable/iterableapi/RetryPolicy.java
  104. +46 −0 iterableapi/src/main/java/com/iterable/iterableapi/util/DeviceInfoUtils.java
  105. +12 −0 iterableapi/src/main/res/values/styles.xml
  106. +3 −2 iterableapi/src/test/AndroidManifest.xml
  107. +1 −1 iterableapi/src/test/java/com/iterable/iterableapi/BaseTest.java
  108. +17 −0 iterableapi/src/test/java/com/iterable/iterableapi/EmbeddedTestUtils.java
  109. +2 −1 iterableapi/src/test/java/com/iterable/iterableapi/InAppTestUtils.java
  110. +30 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableActivityMonitorTest.java
  111. +46 −1 iterableapi/src/test/java/com/iterable/iterableapi/IterableApiAuthTests.java
  112. +201 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableApiRequestTest.java
  113. +178 −7 iterableapi/src/test/java/com/iterable/iterableapi/IterableApiTest.java
  114. +38 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableConfigTest.kt
  115. +518 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableDataEncryptorTest.java
  116. +268 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableEmbeddedManagerTest.java
  117. +448 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableEmbeddedPlacementTest.kt
  118. +10 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableFirebaseMessagingServiceTest.java
  119. +425 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableInAppManagerTest.java
  120. +92 −1 iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java
  121. +233 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableKeychainEncryptedDataMigratorTest.java
  122. +373 −0 iterableapi/src/test/java/com/iterable/iterableapi/IterableKeychainTest.kt
  123. +184 −35 iterableapi/src/test/java/com/iterable/iterableapi/IterableNotificationTest.java
  124. +11 −8 iterableapi/src/test/java/com/iterable/iterableapi/IterablePushActionReceiverTest.java
  125. +2 −2 iterableapi/src/test/java/com/iterable/iterableapi/IterablePushRegistrationTaskTest.java
  126. +6 −5 iterableapi/src/test/java/com/iterable/iterableapi/IterableTestUtils.java
  127. +2 −3 iterableapi/src/test/java/com/iterable/iterableapi/IterableUtilRule.java
  128. +1 −1 iterableapi/src/test/java/com/iterable/iterableapi/OfflineRequestProcessorTest.java
  129. +8 −0 iterableapi/src/test/resources/embedded_payload_bad_api_key.json
  130. +3 −0 iterableapi/src/test/resources/embedded_payload_empty.json
  131. +80 −0 iterableapi/src/test/resources/embedded_payload_multiple_1.json
  132. +80 −0 iterableapi/src/test/resources/embedded_payload_multiple_2.json
  133. +113 −0 iterableapi/src/test/resources/embedded_payload_multiple_3.json
  134. +29 −0 iterableapi/src/test/resources/embedded_payload_no_buttons_no_text.json
  135. +39 −0 iterableapi/src/test/resources/embedded_payload_no_custom_payload.json
  136. +17 −0 iterableapi/src/test/resources/embedded_payload_no_elements_no_custom_payload.json
  137. +42 −0 iterableapi/src/test/resources/embedded_payload_optional_elements_and_custom_payload.json
  138. +42 −0 iterableapi/src/test/resources/embedded_payload_single_1.json
  139. +42 −0 iterableapi/src/test/resources/embedded_payload_single_2.json
  140. +42 −0 iterableapi/src/test/resources/embedded_payload_single_placement_id_0.json
  141. +42 −0 iterableapi/src/test/resources/embedded_payload_single_placement_id_2.json
  142. +7 −0 iterableapi/src/test/resources/push_payload_embedded_update.json
  143. +56 −51 maven-push.gradle
  144. +7 −7 sample-apps/inbox-customization/app/build.gradle
  145. +1 −1 sample-apps/inbox-customization/app/src/main/AndroidManifest.xml
  146. +6 −4 ...x-customization/app/src/main/java/com/iterable/inbox_customization/util/SingleFragmentActivity.kt
  147. +1 −1 sample-apps/inbox-customization/build.gradle
6 changes: 6 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
root = true

[*]
indent_style = space
indent_size = 4
tab_width = 4
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: Issue report
about: Create a report to help us improve
title: ''
labels: ''
assignees: 'joaodordio, sumeruchat, Ayyanchira, evantk91'

---

## ✍️ Issue Description

Please provide a clear and concise description of the issue you are experiencing.

## 📋 Steps to Reproduce
1.
2.
3.
(List all necessary steps to reliably reproduce the issue.)

---

#### 👤 Iterable `orgId`: _Enter your organization id_
#### 📦 Iterable SDK version: _Enter which version of Iterable SDK are you targeting_
#### 📲 Android OS version: _Enter which version of Android OS are you experiencing this issue_


---




### ⚠️ Beta Software Notice

**Important:** Our team does not provide support for issues encountered on beta or pre-release versions of operating systems, development tools, or other software. Please verify that the issue occurs on stable, officially released software before submitting this report. Thank you for your understanding.
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blank_issues_enabled: false
152 changes: 79 additions & 73 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -10,117 +10,123 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5 # v3.3.2

- name: Configure JDK
uses: actions/setup-java@v1
uses: actions/setup-java@d202f5dbf7256730fb690ec59f6381650114feb2 # v1.4.3
with:
java-version: 1.8
java-version: 17

- run: touch local.properties

- name: Lint Check
run: ./gradlew :iterableapi:lintDebug

- name: Checkstyle
run: ./gradlew :iterableapi:checkstyle :iterableapi-ui:assembleDebug

- name: Javadoc Check
run: ./gradlew :iterableapi:javadoc :iterableapi-ui:javadoc

unit-tests:
name: Unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5 # v3.3.2

- name: Configure JDK
uses: actions/setup-java@v1
uses: actions/setup-java@d202f5dbf7256730fb690ec59f6381650114feb2 # v1.4.3
with:
java-version: 1.8
java-version: 17

- run: touch local.properties

- name: Test
run: ./gradlew :iterableapi:jacocoTestDebugUnitTestReport :app:jacocoDebugTestReport

- name: Upload coverage data
uses: actions/upload-artifact@v2
with:
name: unit-tests
path: |
./**/build/**/jacoco*.xml
./**/build/**/report.xml
# run: ./gradlew :iterableapi:jacocoTestDebugUnitTestReport :app:jacocoDebugTestReport
run: ./gradlew :iterableapi:testDebugUnitTest :app:testDebugUnitTest

# Coverage reporting temporarily disabled
# - name: Upload coverage data
# uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
# with:
# name: unit-tests
# path: |
# ./**/build/**/jacoco*.xml
# ./**/build/**/report.xml

instrumentation-tests:
name: Instrumentation tests
runs-on: macos-latest
runs-on: macos-13
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5 # v3.3.2

- name: Configure JDK
uses: actions/setup-java@v1
uses: actions/setup-java@d202f5dbf7256730fb690ec59f6381650114feb2 # v1.4.3
with:
java-version: 1.8
java-version: 17

- run: touch local.properties

- name: Test
uses: reactivecircus/android-emulator-runner@v2
uses: reactivecircus/android-emulator-runner@6b0df4b0efb23bb0ec63d881db79aefbc976e4b2 # v2.30.1
with:
api-level: 28
script: ./gradlew :iterableapi:connectedCheck :app:jacocoDebugAndroidTestReport

- name: Upload coverage data
uses: actions/upload-artifact@v2
with:
name: instrumentation-tests
path: |
./**/build/**/jacoco*.xml
./**/build/**/report.xml
report-coverage:
name: Report coverage
runs-on: ubuntu-latest
needs: [unit-tests, instrumentation-tests]
env:
JACOCO_SOURCE_PATH: "iterableapi/src/main/java iterableapi-ui/src/main/java"
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Configure JDK
uses: actions/setup-java@v1
with:
java-version: 1.8

- run: curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
- run: chmod +x ./cc-test-reporter
- run: ./cc-test-reporter before-build

- name: Download unit tests coverage
uses: actions/download-artifact@v2
with:
name: unit-tests

- name: Download instrumentation tests coverage
uses: actions/download-artifact@v2
with:
name: instrumentation-tests

- run: bash <(curl -s https://codecov.io/bash)
- run: ./cc-test-reporter format-coverage app/build/reports/jacoco/jacocoDebugTestReport/jacocoDebugTestReport.xml --input-type jacoco -d
- run: ./cc-test-reporter format-coverage iterableapi/build/reports/coverage/debug/report.xml --input-type jacoco -d
- run: ./cc-test-reporter format-coverage iterableapi/build/jacoco/jacoco.xml --input-type jacoco -d
- run: ./cc-test-reporter format-coverage app/build/reports/jacoco/jacocoDebugAndroidTestReport/jacocoDebugAndroidTestReport.xml --input-type jacoco -d
- run: ./cc-test-reporter upload-coverage
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
script: ./gradlew :iterableapi:connectedCheck

# Coverage reporting temporarily disabled
# - name: Upload coverage data
# uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
# with:
# name: instrumentation-tests
# path: |
# ./**/build/**/jacoco*.xml
# ./**/build/**/report.xml

# Coverage reporting temporarily disabled
# report-coverage:
# name: Report coverage
# runs-on: ubuntu-latest
# needs: [unit-tests, instrumentation-tests]
# env:
# JACOCO_SOURCE_PATH: "iterableapi/src/main/java iterableapi-ui/src/main/java"
# steps:
# - name: Checkout
# uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# with:
# fetch-depth: 0
#
# - name: Configure JDK
# uses: actions/setup-java@d202f5dbf7256730fb690ec59f6381650114feb2 # v1.4.3
# with:
# java-version: 17
#
# - run: curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
# - run: chmod +x ./cc-test-reporter
# - run: ./cc-test-reporter before-build
#
# - name: Download unit tests coverage
# uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
# with:
# name: unit-tests
#
# - name: Download instrumentation tests coverage
# uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
# with:
# name: instrumentation-tests
#
# - run: bash <(curl -s https://codecov.io/bash)
# - run: ./cc-test-reporter format-coverage app/build/reports/jacoco/jacocoDebugTestReport/jacocoDebugTestReport.xml --input-type jacoco -d
# - run: ./cc-test-reporter format-coverage iterableapi/build/reports/coverage/androidTest/debug/connected/report.xml --input-type jacoco -d
# - run: ./cc-test-reporter format-coverage iterableapi/build/jacoco/jacoco.xml --input-type jacoco -d
# - run: ./cc-test-reporter format-coverage app/build/reports/jacoco/jacocoDebugAndroidTestReport/jacocoDebugAndroidTestReport.xml --input-type jacoco -d
# - run: ./cc-test-reporter upload-coverage
# env:
# CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
27 changes: 27 additions & 0 deletions .github/workflows/jira.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
on:
issues:
types: [opened]

name: Create Jira Issue

jobs:
build:
runs-on: ubuntu-latest
name: Create Jira Issue
steps:
- name: Login
uses: atlassian/gajira-login@ca13f8850ea309cf44a6e4e0c49d9aa48ac3ca4c # v3
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_ILYA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_ILYA_API_TOKEN }}

- name: Create
id: create
uses: atlassian/gajira-create@1ff0b6bd115a780592b47bfbb63fc4629132e6ec # v3
with:
project: MOB
issuetype: Bug
summary: "${{ github.repository }}: #${{ github.event.issue.number }} by ${{ github.event.issue.user.login }}: ${{ github.event.issue.title }}"
description: ${{ github.event.issue.body }}
fields: '{"customfield_11268": {"id": "10668"} }'
122 changes: 122 additions & 0 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Prepare Release

on:
workflow_dispatch:
inputs:
version:
description: 'Version number (e.g., 3.6.0 or 1.0.0-beta1)'
required: true
type: string

permissions:
contents: write
pull-requests: write

jobs:
prepare-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Update Changelog
id: update_changelog
run: |
changelog_file="CHANGELOG.md"
# Function to extract content between two patterns, including the first pattern
extract_between() {
awk "/^## \[$1\]/{p=1;print;next} /^## \[/{p=0} p" "$3"
}
# Get the unreleased content
unreleased_content=$(extract_between "Unreleased" "[0-9]" "$changelog_file")
if [ -z "$unreleased_content" ]; then
echo "No unreleased changes found in $changelog_file"
exit 1
fi
# Get the current version
current_version=$(grep -oP "^## \[\K[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9]+)?(?=\])" "$changelog_file" | head -n1)
new_version="${{ github.event.inputs.version }}"
# Validate version format (now includes beta versions)
if ! [[ $new_version =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
echo "Invalid version format. Please use semantic versioning (e.g., 3.6.0 or 1.0.0-beta1)"
exit 1
fi
echo "new_version=${new_version}" >> $GITHUB_OUTPUT
# Create temporary file
temp_file=$(mktemp)
# Preserve header and write new content
{
# Preserve the header (first 4 lines)
head -n 4 "$changelog_file"
echo "## [Unreleased]"
echo ""
echo "## [$new_version]"
# Remove the "## [Unreleased]" line from unreleased_content if it exists
echo "$unreleased_content" | sed '1{/^## \[Unreleased\]/d}'
echo ""
# Get the rest of the file starting from the first version entry
sed -n '/^## \[[0-9]/,$p' "$changelog_file"
} > "$temp_file"
# Replace original file
mv "$temp_file" "$changelog_file"
- name: Update Version Files
run: |
# Create temp file for build.gradle updates
temp_gradle=$(mktemp)
# Update iterableapi/build.gradle - libraryVersion and versionName
sed -i "s/libraryVersion = '.*'/libraryVersion = '${{ github.event.inputs.version }}'/" iterableapi/build.gradle
sed -i "s/versionName=\".*\"/versionName=\"${{ github.event.inputs.version }}\"/" iterableapi/build.gradle
# Update buildConfigField version in defaultConfig section
awk -v version="${{ github.event.inputs.version }}" '
/defaultConfig {/,/}/ {
if ($0 ~ /buildConfigField.*ITERABLE_SDK_VERSION/) {
print " buildConfigField \"String\", \"ITERABLE_SDK_VERSION\", \"\\\"" version "\\\"\""
next
}
}
{ print }' iterableapi/build.gradle > "$temp_gradle" && cat "$temp_gradle" > iterableapi/build.gradle
rm "$temp_gradle"
# Update iterableapi-ui/build.gradle
sed -i "s/libraryVersion = '.*'/libraryVersion = '${{ github.event.inputs.version }}'/" iterableapi-ui/build.gradle
# Update sample app versions
sed -i "s/implementation 'com.iterable:iterableapi:[^']*'/implementation 'com.iterable:iterableapi:${{ github.event.inputs.version }}'/" sample-apps/inbox-customization/app/build.gradle
sed -i "s/implementation 'com.iterable:iterableapi-ui:[^']*'/implementation 'com.iterable:iterableapi-ui:${{ github.event.inputs.version }}'/" sample-apps/inbox-customization/app/build.gradle
- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: "Prepare for Release ${{ steps.update_changelog.outputs.new_version }}"
body: |
# Prepare for Release ${{ steps.update_changelog.outputs.new_version }}
## SDK Release Checklist
- [ ] CHANGELOG.md updated
- [ ] Version numbers updated in build.gradle files:
- [ ] iterableapi/build.gradle (libraryVersion, versionName, and ITERABLE_SDK_VERSION)
- [ ] iterableapi-ui/build.gradle (libraryVersion)
- [ ] sample-apps/inbox-customization/app/build.gradle (both dependencies)
- [ ] README.md reviewed (if needed)
- [ ] Sample apps verified
- [ ] All tests passing
- [ ] Documentation updated (if needed)
branch: "prepare-for-release-${{ steps.update_changelog.outputs.new_version }}"
commit-message: "Prepare for release ${{ steps.update_changelog.outputs.new_version }}"
labels: release
delete-branch: true
Loading