From 1ba05bf4997f6a4f57b01bead11c25e1e54aa301 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 11 Apr 2021 22:02:26 +0000 Subject: [PATCH 001/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 262d8b14..10444c0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.28.1' - versionCode 100 + versionName '0.28.2' + versionCode 101 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 9efaad06716b5f79f9dbaa08c33e68303d7d9acc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 10:43:39 +0200 Subject: [PATCH 002/621] Bump daggerVersion from 2.33 to 2.34 (#479) Bumps `daggerVersion` from 2.33 to 2.34. Updates `dagger-compiler` from 2.33 to 2.34 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.33...dagger-2.34) Updates `dagger` from 2.33 to 2.34 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.33...dagger-2.34) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index a761b263..be9f1c4e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion" - daggerVersion = '2.33' + daggerVersion = '2.34' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 7727bf6cde9e30bc23f8326c7618b6963cb87318 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:25:26 +0000 Subject: [PATCH 003/621] Bump firebase-bom from 26.8.0 to 27.0.0 (#480) Bumps firebase-bom from 26.8.0 to 27.0.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 10444c0c..715a883c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.2.1' - implementation platform('com.google.firebase:firebase-bom:26.8.0') + implementation platform('com.google.firebase:firebase-bom:27.0.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index f308fa26..2df0812b 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:26.8.0') + implementation platform('com.google.firebase:firebase-bom:27.0.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 90ef9afa42f6b96fbfe29bcf5f7dea13811b2ebb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 10:34:14 +0000 Subject: [PATCH 004/621] Bump media from 1.2.1 to 1.3.0 (#481) Bumps media from 1.2.1 to 1.3.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 715a883c..44cfcd34 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,7 +114,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.3.2' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.media:media:1.2.1' + implementation 'androidx.media:media:1.3.0' implementation platform('com.google.firebase:firebase-bom:27.0.0') implementation 'com.google.firebase:firebase-core' From ee44c7bb9526c4a135dee6202bf3077e906686e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Apr 2021 13:12:53 +0200 Subject: [PATCH 005/621] Bump recyclerview from 1.1.0 to 1.2.0 (#482) Bumps recyclerview from 1.1.0 to 1.2.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 5a60d0c6..1c7b1034 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.4.4' implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.google.android.material:material:1.3.0' testImplementation 'junit:junit:4.13.2' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 821bbf45..1bbb8791 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.airbnb.android:epoxy:4.4.4' testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index fe7ae1d6..a9f329a5 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.airbnb.android:epoxy:4.4.4' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index e11363ef..9be2c186 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation project(':navigation-api') implementation project(':feature:ui-common-api') - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'com.airbnb.android:epoxy:4.4.4' implementation 'com.jraska:console:1.1.0' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 5e97ac56..f44d3a93 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -19,6 +19,6 @@ android { dependencies { implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.airbnb.android:epoxy:4.4.4' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 838daf64..ea66bcc1 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.airbnb.android:epoxy:4.4.4' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' From b124023b75e53b3c17f728970c98b505cd66044c Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 12 Apr 2021 20:54:05 +0200 Subject: [PATCH 006/621] Upgrade to Gradle 7.0 (#484) --- .github/workflows/build.yml | 4 ++-- .github/workflows/reporting.yml | 4 ++-- .../java/com/jraska/github/client/users/ui/UsersActivity.kt | 2 -- gradle/wrapper/gradle-wrapper.properties | 2 +- .../main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt | 1 - .../java/com/jraska/gradle/buildtime/BuildTimeListener.kt | 1 - 6 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f9245981..8c5fb414 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} - name: Get Dependencies if: steps.cache-dependencies.outputs.cache-hit != 'true' run: ./gradlew androidDependencies --stacktrace @@ -38,6 +38,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} - name: Lint run: ./gradlew lint --stacktrace diff --git a/.github/workflows/reporting.yml b/.github/workflows/reporting.yml index c0d74a1a..018fdce3 100644 --- a/.github/workflows/reporting.yml +++ b/.github/workflows/reporting.yml @@ -17,7 +17,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }} + key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} - name: Run Module Statistics Report run: ./gradlew reportModuleStatistics --stacktrace --no-configure-on-demand lintReport: @@ -32,6 +32,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }} + key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} - name: Run Lint Report run: ./gradlew lintStatisticsReport --stacktrace diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt index d7f41126..7dd2f3cc 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt @@ -29,8 +29,6 @@ class UsersActivity : BaseActivity(), UserModel.UserListener { usersRecycler.layoutManager = LinearLayoutManager(this) usersRefreshSwipeLayout.setOnRefreshListener { usersViewModel.onRefresh() } - packageManager.getPackageInfo(packageName, 0) - showProgressIndicator() usersViewModel.users().observe(this, { this.setState(it) }) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8cf6eb5a..f371643e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt index 35a88677..8ab5e5bd 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt @@ -44,7 +44,6 @@ object BuildDataFactory { operatingSystem = System.getProperty("os.name").toLowerCase(Locale.getDefault()), parameters = mutableMapOf( "isConfigureOnDemand" to startParameter.isConfigureOnDemand, - "isWatchFileSystem" to startParameter.isWatchFileSystem, "isConfigurationCache" to startParameter.isConfigurationCache, "isBuildCacheEnabled" to startParameter.isBuildCacheEnabled, "maxWorkers" to startParameter.maxWorkerCount diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt index 63e9313d..5b0125eb 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt @@ -14,7 +14,6 @@ internal class BuildTimeListener( ) : BuildListener { private val taskExecutionStatisticsEventAdapter = TaskExecutionStatisticsEventAdapter() - override fun buildStarted(gradle: Gradle) = Unit override fun settingsEvaluated(gradle: Settings) = Unit override fun projectsLoaded(gradle: Gradle) = Unit override fun projectsEvaluated(gradle: Gradle) { From dac5de186631da12a51ba19e814ffe006b439c2b Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 12 Apr 2021 21:42:20 +0200 Subject: [PATCH 007/621] Cache key improvements (#485) * Update cache key * Update cache key * Update cache key * Change keys for better caching --- .github/workflows/build.yml | 4 ++-- .github/workflows/reporting.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8c5fb414..80ba7a77 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: build-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} - name: Get Dependencies if: steps.cache-dependencies.outputs.cache-hit != 'true' run: ./gradlew androidDependencies --stacktrace @@ -38,6 +38,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: lint-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} - name: Lint run: ./gradlew lint --stacktrace diff --git a/.github/workflows/reporting.yml b/.github/workflows/reporting.yml index 018fdce3..1ce44cfc 100644 --- a/.github/workflows/reporting.yml +++ b/.github/workflows/reporting.yml @@ -17,7 +17,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: build-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} - name: Run Module Statistics Report run: ./gradlew reportModuleStatistics --stacktrace --no-configure-on-demand lintReport: @@ -32,6 +32,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: key-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties"}} + key: lint-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} - name: Run Lint Report run: ./gradlew lintStatisticsReport --stacktrace From c770f59265bd5ac293bb8af062813048e7f3d6e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 Apr 2021 19:57:50 +0000 Subject: [PATCH 008/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 44cfcd34..95db5147 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.28.2' - versionCode 101 + versionName '0.28.3' + versionCode 102 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 08adc9437ebfbe7021981ccd5bdeac29bf0b02b9 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 13 Apr 2021 23:39:49 +0200 Subject: [PATCH 009/621] New hash keys :P (#486) --- .github/workflows/build.yml | 4 ++-- .github/workflows/reporting.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80ba7a77..3be7fb4e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: build-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} + key: build-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Get Dependencies if: steps.cache-dependencies.outputs.cache-hit != 'true' run: ./gradlew androidDependencies --stacktrace @@ -38,6 +38,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: lint-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} + key: lint-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Lint run: ./gradlew lint --stacktrace diff --git a/.github/workflows/reporting.yml b/.github/workflows/reporting.yml index 1ce44cfc..4ed85ad7 100644 --- a/.github/workflows/reporting.yml +++ b/.github/workflows/reporting.yml @@ -17,7 +17,7 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: build-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} + key: build-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Run Module Statistics Report run: ./gradlew reportModuleStatistics --stacktrace --no-configure-on-demand lintReport: @@ -32,6 +32,6 @@ jobs: path: | ~/.gradle/caches ~/.gradle/wrapper - key: lint-{{ checksum "build.gradle" }}-{{ checksum "dependencies.gradle" }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "app/build.gradle" }} + key: lint-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Run Lint Report run: ./gradlew lintStatisticsReport --stacktrace From f789c41dec34668b9afd8e5d2bea52e264e5d6c2 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 13 Apr 2021 23:55:58 +0200 Subject: [PATCH 010/621] Remove All-in-one Navigator interface (#487) * Make the launchOnWeb call explicit with separate dependency * Remove the navigator interface and deep link navigator module * Remove references to Navigator * Remove the Navigator README reference * Spelling corrections --- README.md | 1 - app-partial-users/build.gradle | 1 - .../github/client/users/UsersAppComponent.kt | 4 +- app/build.gradle | 1 - .../com/jraska/github/client/AppComponent.kt | 2 - .../jraska/github/client/WebLinkLauncher.kt | 2 +- .../com/jraska/github/client/FakeModules.kt | 6 +-- .../java/com/jraska/github/client/Fakes.kt | 6 +-- .../github/client/RecordingWebLinkLauncher.kt | 13 +++++ .../client/android/FakeCoreAndroidModule.kt | 15 ++++-- .../android/RecordingDeepLinkLauncher.kt | 12 +++++ .../client/android/RecordingNavigator.kt | 32 ------------- .../github/client/DeepLinkHandlerImpl.kt | 2 +- .../github/client/about/AboutViewModel.kt | 6 +-- .../client/chrome/ChromeCustomTabsLauncher.kt | 2 +- feature/navigation-deeplink/.gitignore | 1 - feature/navigation-deeplink/build.gradle | 17 ------- .../src/main/AndroidManifest.xml | 1 - .../deeplink/DeepLinkNavigationModule.kt | 17 ------- .../deeplink/internal/DeepLinkNavigator.kt | 48 ------------------- .../deeplink/DeepLinkNavigatorTest.kt | 22 --------- .../github/client/repo/RepoDetailViewModel.kt | 7 ++- .../client/settings/SettingsViewModel.kt | 7 +-- .../client/users/UserDetailViewModel.kt | 10 ++-- .../github/client/users/UsersViewModel.kt | 14 +++--- .../github/client/navigation/Navigator.kt | 17 ------- settings.gradle | 1 - 27 files changed, 70 insertions(+), 197 deletions(-) create mode 100644 core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt create mode 100644 core-testing/src/main/java/com/jraska/github/client/android/RecordingDeepLinkLauncher.kt delete mode 100644 core-testing/src/main/java/com/jraska/github/client/android/RecordingNavigator.kt delete mode 100644 feature/navigation-deeplink/.gitignore delete mode 100644 feature/navigation-deeplink/build.gradle delete mode 100644 feature/navigation-deeplink/src/main/AndroidManifest.xml delete mode 100644 feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigationModule.kt delete mode 100644 feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/internal/DeepLinkNavigator.kt delete mode 100644 feature/navigation-deeplink/src/test/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigatorTest.kt delete mode 100644 navigation-api/src/main/java/com/jraska/github/client/navigation/Navigator.kt diff --git a/README.md b/README.md index e0fc6ee0..c91d6d14 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,6 @@ Experimental architecture app with example usage intended to be a showcase, test - Dependency replacement in test is done by Dagger components in `TestUITestApp` - RxJava is used for threading everywhere, allowing proper idling of UI tests. Also `AppSchedulers` dependency makes all threading testable. - Push is implemented by using Firebase Cloud Messaging. See `PushActionCommand`. Thanks to deep link navigation app can be controlled remotely by executing deep links - `LaunchDeepLinkCommand : PushActionCommand` -- `Navigator` pattern to be able to easily navigate without `Context` - `TopActivityProvider` to avoid having `Context` dependencie everywhere and to be able to have cleaner pure Kotlin interfaces - Enforced ownership of remote configuration and analytics events - [Details on PR](https://github.com/jraska/github-client/pull/230). More on why these need to be explicitly owned on [this article](https://proandroiddev.com/remote-feature-flags-do-not-always-come-for-free-a372f1768a70). diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 1a3f934c..88df9a91 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -36,7 +36,6 @@ dependencies { implementation project(':core-android-api') implementation project(':core') implementation project(':navigation-api') - implementation project(':feature:navigation-deeplink') implementation project(':core-testing') implementation project(':feature:users') diff --git a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt index 223b4bb1..83f0f890 100644 --- a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt +++ b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt @@ -11,7 +11,6 @@ import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.core.android.CoreAndroidModule import com.jraska.github.client.core.android.OnAppCreate import com.jraska.github.client.http.HttpModule -import com.jraska.github.client.navigation.deeplink.DeepLinkNavigationModule import dagger.BindsInstance import dagger.Component import dagger.Module @@ -25,7 +24,6 @@ import javax.inject.Singleton modules = [ AppModule::class, CoreAndroidModule::class, - DeepLinkNavigationModule::class, FakeCoreModule::class, FakeConfigModule::class, HttpModule::class, @@ -47,7 +45,7 @@ object AppModule { @Provides fun provideLinkLauncher(): WebLinkLauncher { return object : WebLinkLauncher { - override fun launch(url: HttpUrl) { + override fun launchOnWeb(url: HttpUrl) { throw UnsupportedOperationException("Partial app tried to open $url") } } diff --git a/app/build.gradle b/app/build.gradle index 95db5147..f121e636 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,7 +93,6 @@ dependencies { implementation project(':core') implementation project(':core-android-api') implementation project(':navigation-api') - implementation project(':feature:navigation-deeplink') implementation project(':feature:identity') implementation project(':feature:identity-api') implementation project(':feature:network-status') diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index b98ebd23..473ab1ee 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -11,7 +11,6 @@ import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.HttpModule import com.jraska.github.client.identity.IdentityModule import com.jraska.github.client.inappupdate.InAppUpdateModule -import com.jraska.github.client.navigation.deeplink.DeepLinkNavigationModule import com.jraska.github.client.networkstatus.NetworkStatusModule import com.jraska.github.client.push.PushModule import com.jraska.github.client.repo.RepoModule @@ -47,7 +46,6 @@ interface AppComponent { ConfigDebugModule::class, CoreAndroidModule::class, ChromeCustomTabsModule::class, - DeepLinkNavigationModule::class, IdentityModule::class, NetworkStatusModule::class, InAppUpdateModule::class, diff --git a/core-api/src/main/java/com/jraska/github/client/WebLinkLauncher.kt b/core-api/src/main/java/com/jraska/github/client/WebLinkLauncher.kt index 0d7eb129..184d5616 100644 --- a/core-api/src/main/java/com/jraska/github/client/WebLinkLauncher.kt +++ b/core-api/src/main/java/com/jraska/github/client/WebLinkLauncher.kt @@ -3,5 +3,5 @@ package com.jraska.github.client import okhttp3.HttpUrl interface WebLinkLauncher { - fun launch(url: HttpUrl) + fun launchOnWeb(url: HttpUrl) } diff --git a/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt b/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt index 71e0f239..7bf7e739 100644 --- a/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt +++ b/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt @@ -5,11 +5,11 @@ import com.jraska.github.client.http.FakeHttpModule import dagger.Module @Module( - includes = arrayOf( + includes = [ FakeCoreModule::class, FakeCoreAndroidModule::class, FakeConfigModule::class, - FakeHttpModule::class, - ) + FakeHttpModule::class + ] ) object FakeModules diff --git a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt index d037060c..d5746d45 100644 --- a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt +++ b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt @@ -1,7 +1,7 @@ package com.jraska.github.client import com.jraska.github.client.analytics.EventAnalytics -import com.jraska.github.client.android.RecordingNavigator +import com.jraska.github.client.android.RecordingDeepLinkLauncher import com.jraska.github.client.rx.AppSchedulers import io.reactivex.schedulers.Schedulers @@ -30,7 +30,7 @@ object Fakes { return RecordingAnalyticsProperty() } - fun recordingNavigator() : RecordingNavigator { - return RecordingNavigator() + fun recordingDeepLinkLauncher() : RecordingDeepLinkLauncher { + return RecordingDeepLinkLauncher() } } diff --git a/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt b/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt new file mode 100644 index 00000000..28600128 --- /dev/null +++ b/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt @@ -0,0 +1,13 @@ +package com.jraska.github.client + +import okhttp3.HttpUrl + +class RecordingWebLinkLauncher : WebLinkLauncher { + private val linksLaunched = mutableListOf() + + fun linksLaunched(): List = linksLaunched + + override fun launchOnWeb(url: HttpUrl) { + linksLaunched.add(url) + } +} diff --git a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt index a37d947d..797d3f21 100644 --- a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt @@ -1,9 +1,10 @@ package com.jraska.github.client.android +import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Fakes -import com.jraska.github.client.navigation.Navigator +import com.jraska.github.client.RecordingWebLinkLauncher +import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.rx.AppSchedulers -import com.jraska.github.client.ui.SnackbarData import com.jraska.github.client.ui.SnackbarDisplay import dagger.Module import dagger.Provides @@ -22,8 +23,14 @@ object FakeCoreAndroidModule { @Provides @Singleton - fun provideNavigator(): Navigator { - return Fakes.recordingNavigator() + fun provideNavigator(): DeepLinkLauncher { + return Fakes.recordingDeepLinkLauncher() + } + + @Provides + @Singleton + fun webLinkLauncher(): WebLinkLauncher { + return RecordingWebLinkLauncher() } @Provides diff --git a/core-testing/src/main/java/com/jraska/github/client/android/RecordingDeepLinkLauncher.kt b/core-testing/src/main/java/com/jraska/github/client/android/RecordingDeepLinkLauncher.kt new file mode 100644 index 00000000..63378d02 --- /dev/null +++ b/core-testing/src/main/java/com/jraska/github/client/android/RecordingDeepLinkLauncher.kt @@ -0,0 +1,12 @@ +package com.jraska.github.client.android + +import com.jraska.github.client.DeepLinkLauncher +import okhttp3.HttpUrl + +class RecordingDeepLinkLauncher: DeepLinkLauncher { + val linksLaunched: MutableList = mutableListOf() + + override fun launch(deepLink: HttpUrl) { + linksLaunched.add(deepLink) + } +} diff --git a/core-testing/src/main/java/com/jraska/github/client/android/RecordingNavigator.kt b/core-testing/src/main/java/com/jraska/github/client/android/RecordingNavigator.kt deleted file mode 100644 index 2dd2d97b..00000000 --- a/core-testing/src/main/java/com/jraska/github/client/android/RecordingNavigator.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.jraska.github.client.android - -import com.jraska.github.client.navigation.Navigator -import okhttp3.HttpUrl - -class RecordingNavigator: Navigator { - val screensStarted: MutableList = mutableListOf() - - override fun launchOnWeb(httpUrl: HttpUrl) { - screensStarted.add(httpUrl) - } - - override fun startUserDetail(login: String) { - screensStarted.add(login) - } - - override fun startRepoDetail(fullPath: String) { - screensStarted.add(fullPath) - } - - override fun showSettings() { - screensStarted.add("settings") - } - - override fun showAbout() { - screensStarted.add("about") - } - - override fun startConsole() { - screensStarted.add("console") - } -} diff --git a/core/src/main/java/com/jraska/github/client/DeepLinkHandlerImpl.kt b/core/src/main/java/com/jraska/github/client/DeepLinkHandlerImpl.kt index 38ab88d7..6f5d6b9f 100644 --- a/core/src/main/java/com/jraska/github/client/DeepLinkHandlerImpl.kt +++ b/core/src/main/java/com/jraska/github/client/DeepLinkHandlerImpl.kt @@ -17,7 +17,7 @@ class DeepLinkHandlerImpl @Inject constructor( return BooleanResult.SUCCESS } catch (ex: IllegalArgumentException) { crashReporter.report(ex, "Invalid deep link $deepLink") - fallbackLauncher.launch(deepLink) + fallbackLauncher.launchOnWeb(deepLink) return BooleanResult.FAILURE } } diff --git a/feature/about/src/main/java/com/jraska/github/client/about/AboutViewModel.kt b/feature/about/src/main/java/com/jraska/github/client/about/AboutViewModel.kt index 5209715b..32d9e26d 100644 --- a/feature/about/src/main/java/com/jraska/github/client/about/AboutViewModel.kt +++ b/feature/about/src/main/java/com/jraska/github/client/about/AboutViewModel.kt @@ -2,17 +2,17 @@ package com.jraska.github.client.about import androidx.lifecycle.ViewModel import com.jraska.github.client.Owner +import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.analytics.toAnalyticsString import com.jraska.github.client.identity.IdentityProvider -import com.jraska.github.client.navigation.Navigator import okhttp3.HttpUrl.Companion.toHttpUrl import javax.inject.Inject internal class AboutViewModel @Inject constructor( private val analytics: EventAnalytics, - private val navigator: Navigator, + private val webLinkLauncher: WebLinkLauncher, private val identityProvider: IdentityProvider ) : ViewModel() { @@ -45,7 +45,7 @@ internal class AboutViewModel @Inject constructor( analytics.report(event) - navigator.launchOnWeb(url) + webLinkLauncher.launchOnWeb(url) } companion object { diff --git a/feature/chrome-custom-tabs/src/main/java/com/jraska/github/client/chrome/ChromeCustomTabsLauncher.kt b/feature/chrome-custom-tabs/src/main/java/com/jraska/github/client/chrome/ChromeCustomTabsLauncher.kt index 258778dd..02ee4c4f 100644 --- a/feature/chrome-custom-tabs/src/main/java/com/jraska/github/client/chrome/ChromeCustomTabsLauncher.kt +++ b/feature/chrome-custom-tabs/src/main/java/com/jraska/github/client/chrome/ChromeCustomTabsLauncher.kt @@ -13,7 +13,7 @@ internal class ChromeCustomTabsLauncher( private val provider: TopActivityProvider, private val packageManager: PackageManager ) : WebLinkLauncher { - override fun launch(url: HttpUrl) { + override fun launchOnWeb(url: HttpUrl) { val uri = Uri.parse(url.toString()) val customTabsIntent = prepareIntent(uri) diff --git a/feature/navigation-deeplink/.gitignore b/feature/navigation-deeplink/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/feature/navigation-deeplink/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/feature/navigation-deeplink/build.gradle b/feature/navigation-deeplink/build.gradle deleted file mode 100644 index bc064d19..00000000 --- a/feature/navigation-deeplink/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -apply plugin: 'java-library' -apply plugin: 'com.android.lint' -apply plugin: 'kotlin' -apply plugin: 'kotlin-kapt' - -dependencies { - implementation project(':navigation-api') - implementation project(':core-api') - - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger - - implementation rootProject.ext.okHttp - - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:3.8.0' -} diff --git a/feature/navigation-deeplink/src/main/AndroidManifest.xml b/feature/navigation-deeplink/src/main/AndroidManifest.xml deleted file mode 100644 index 1f8e18d8..00000000 --- a/feature/navigation-deeplink/src/main/AndroidManifest.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigationModule.kt b/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigationModule.kt deleted file mode 100644 index f5e4abf7..00000000 --- a/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigationModule.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.jraska.github.client.navigation.deeplink - -import com.jraska.github.client.DeepLinkLauncher -import com.jraska.github.client.WebLinkLauncher -import com.jraska.github.client.navigation.Navigator -import com.jraska.github.client.navigation.deeplink.internal.DeepLinkNavigator -import dagger.Module -import dagger.Provides - -@Module -object DeepLinkNavigationModule { - - @Provides - fun provideNavigator(webLinkLauncher: WebLinkLauncher, deepLinkLauncher: DeepLinkLauncher): Navigator { - return DeepLinkNavigator(deepLinkLauncher, webLinkLauncher) - } -} diff --git a/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/internal/DeepLinkNavigator.kt b/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/internal/DeepLinkNavigator.kt deleted file mode 100644 index 25285610..00000000 --- a/feature/navigation-deeplink/src/main/java/com/jraska/github/client/navigation/deeplink/internal/DeepLinkNavigator.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.jraska.github.client.navigation.deeplink.internal - -import com.jraska.github.client.DeepLinkLauncher -import com.jraska.github.client.WebLinkLauncher -import com.jraska.github.client.navigation.Navigator -import com.jraska.github.client.navigation.Urls -import okhttp3.HttpUrl - -/** - * All navigation will be done through deep links, - * even the internal one to avoid two different - * ways how to handle activity start. - */ -class DeepLinkNavigator( - private val deepLinkLauncher: DeepLinkLauncher, - private val webLinkLauncher: WebLinkLauncher -) : Navigator { - - private fun launch(url: HttpUrl) { - deepLinkLauncher.launch(url) - } - - override fun launchOnWeb(httpUrl: HttpUrl) { - webLinkLauncher.launch(httpUrl) - } - - override fun startUserDetail(login: String) { - val url = Urls.user(login) - launch(url) - } - - override fun startRepoDetail(fullPath: String) { - val url = Urls.repo(fullPath) - launch(url) - } - - override fun showSettings() { - launch(Urls.settings()) - } - - override fun showAbout() { - launch(Urls.about()) - } - - override fun startConsole() { - launch(Urls.console()) - } -} diff --git a/feature/navigation-deeplink/src/test/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigatorTest.kt b/feature/navigation-deeplink/src/test/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigatorTest.kt deleted file mode 100644 index 0a97fa53..00000000 --- a/feature/navigation-deeplink/src/test/java/com/jraska/github/client/navigation/deeplink/DeepLinkNavigatorTest.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.jraska.github.client.navigation.deeplink - -import com.jraska.github.client.DeepLinkLauncher -import com.jraska.github.client.WebLinkLauncher -import com.jraska.github.client.navigation.deeplink.internal.DeepLinkNavigator -import okhttp3.HttpUrl.Companion.toHttpUrl -import org.junit.Test -import org.mockito.Mockito.mock -import org.mockito.Mockito.verify - -class DeepLinkNavigatorTest { - @Test - fun whenStartUserDetailThenCorrectDeepLinkLaunched() { - val deepLinkLauncher = mock(DeepLinkLauncher::class.java) - val webLinkLauncher = mock(WebLinkLauncher::class.java) - val navigator = DeepLinkNavigator(deepLinkLauncher, webLinkLauncher) - - navigator.startUserDetail("johny") - - verify(deepLinkLauncher).launch("https://github.com/johny".toHttpUrl()) - } -} diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt index de6af6f4..402913d9 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt @@ -1,17 +1,16 @@ package com.jraska.github.client.repo -import android.view.View import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.toLiveData import com.google.android.material.snackbar.Snackbar import com.jraska.github.client.Owner +import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.common.lazyMap import com.jraska.github.client.ui.SnackbarData import com.jraska.github.client.ui.SnackbarDisplay -import com.jraska.github.client.navigation.Navigator import com.jraska.github.client.navigation.Urls import com.jraska.github.client.repo.model.RepoDetail import com.jraska.github.client.repo.model.RepoHeader @@ -23,7 +22,7 @@ import javax.inject.Inject internal class RepoDetailViewModel @Inject constructor( private val repoRepository: RepoRepository, private val appSchedulers: AppSchedulers, - private val navigator: Navigator, + private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics, private val snackbarDisplay: SnackbarDisplay ) : ViewModel() { @@ -58,7 +57,7 @@ internal class RepoDetailViewModel @Inject constructor( SnackbarData( R.string.repo_detail_open_web_text, Snackbar.LENGTH_INDEFINITE, - R.string.repo_detail_open_web_action to { navigator.launchOnWeb(Urls.repo(fullRepoName)) }) + R.string.repo_detail_open_web_action to { webLinkLauncher.launchOnWeb(Urls.repo(fullRepoName)) }) ) } diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt index a9312187..7f3a1073 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt @@ -1,16 +1,17 @@ package com.jraska.github.client.settings import androidx.lifecycle.ViewModel +import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Owner import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.config.debug.ui.ConfigRowModelProvider -import com.jraska.github.client.navigation.Navigator +import com.jraska.github.client.navigation.Urls import javax.inject.Inject internal class SettingsViewModel @Inject constructor( private val eventAnalytics: EventAnalytics, - private val navigator: Navigator, + private val deepLinkLauncher: DeepLinkLauncher, private val rowModelProvider: ConfigRowModelProvider ) : ViewModel() { fun onPurchaseSubmitted(value: String) { @@ -27,7 +28,7 @@ internal class SettingsViewModel @Inject constructor( fun configRows() = rowModelProvider.epoxyModels() fun onConsoleClick() { - navigator.startConsole() + deepLinkLauncher.launch(Urls.console()) } companion object { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt index 484b7fe6..79f7d313 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt @@ -3,12 +3,13 @@ package com.jraska.github.client.users import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import com.jraska.github.client.Config +import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Owner +import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.common.lazyMap import com.jraska.github.client.users.rx.toLiveData -import com.jraska.github.client.navigation.Navigator import com.jraska.github.client.navigation.Urls import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.RepoHeader @@ -19,7 +20,8 @@ import javax.inject.Inject internal class UserDetailViewModel @Inject constructor( private val usersRepository: UsersRepository, private val schedulers: AppSchedulers, - private val navigator: Navigator, + private val deepLinkLauncher: DeepLinkLauncher, + private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics, private val config: Config ) : ViewModel() { @@ -52,7 +54,7 @@ internal class UserDetailViewModel @Inject constructor( eventAnalytics.report(event) - navigator.launchOnWeb(Urls.user(login)) + webLinkLauncher.launchOnWeb(Urls.user(login)) } fun onRepoClicked(header: RepoHeader) { @@ -63,7 +65,7 @@ internal class UserDetailViewModel @Inject constructor( eventAnalytics.report(event) - navigator.startRepoDetail(header.fullName()) + deepLinkLauncher.launch(Urls.repo(header.fullName())) } sealed class ViewState { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt index ab9f70f9..ab07e52a 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt @@ -2,11 +2,12 @@ package com.jraska.github.client.users import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel +import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Owner +import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.users.rx.toLiveData -import com.jraska.github.client.navigation.Navigator import com.jraska.github.client.navigation.Urls import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.User @@ -17,7 +18,8 @@ import javax.inject.Inject internal class UsersViewModel @Inject constructor( usersRepository: UsersRepository, appSchedulers: AppSchedulers, - private val navigator: Navigator, + private val deepLinkLauncher: DeepLinkLauncher, + private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics ) : ViewModel() { @@ -52,7 +54,7 @@ internal class UsersViewModel @Inject constructor( eventAnalytics.report(event) - navigator.startUserDetail(user.login) + deepLinkLauncher.launch(Urls.user(user.login)) } fun onUserGitHubIconClicked(user: User) { @@ -62,19 +64,19 @@ internal class UsersViewModel @Inject constructor( eventAnalytics.report(event) - navigator.launchOnWeb(Urls.user(user.login)) + webLinkLauncher.launchOnWeb(Urls.user(user.login)) } fun onSettingsIconClicked() { eventAnalytics.report(AnalyticsEvent.create(ANALYTICS_OPEN_SETTINGS)) - navigator.showSettings() + deepLinkLauncher.launch(Urls.settings()) } fun onAboutIconClicked() { eventAnalytics.report(AnalyticsEvent.create(ANALYTICS_OPEN_ABOUT)) - navigator.showAbout() + deepLinkLauncher.launch(Urls.about()) } sealed class ViewState { diff --git a/navigation-api/src/main/java/com/jraska/github/client/navigation/Navigator.kt b/navigation-api/src/main/java/com/jraska/github/client/navigation/Navigator.kt deleted file mode 100644 index 54aa4f8a..00000000 --- a/navigation-api/src/main/java/com/jraska/github/client/navigation/Navigator.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.jraska.github.client.navigation - -import okhttp3.HttpUrl - -interface Navigator { - fun launchOnWeb(httpUrl: HttpUrl) - - fun startUserDetail(login: String) - - fun startRepoDetail(fullPath: String) - - fun showSettings() - - fun showAbout() - - fun startConsole() -} diff --git a/settings.gradle b/settings.gradle index 30941100..171da33a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,7 +14,6 @@ include ':app', ':feature:identity-api', ':feature:network-status', ':feature:in-app-update', - ':feature:navigation-deeplink', ':feature:config-debug-api', ':feature:config-debug', From b7036c125bd243dbe4c2a491378f1e5ba6a21290 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Apr 2021 00:08:20 +0200 Subject: [PATCH 011/621] Share basic themes (#488) --- .../src/main/res/values/colors.xml | 6 ------ app/src/main/res/values/colors.xml | 6 ------ app/src/main/res/values/styles.xml | 18 ------------------ .../src/main/res/values/colors.xml | 4 ++++ .../src/main/res/values/styles.xml | 0 5 files changed, 4 insertions(+), 30 deletions(-) delete mode 100644 app-partial-users/src/main/res/values/colors.xml delete mode 100644 app/src/main/res/values/colors.xml delete mode 100644 app/src/main/res/values/styles.xml rename {app-partial-users => feature/ui-common-api}/src/main/res/values/styles.xml (100%) diff --git a/app-partial-users/src/main/res/values/colors.xml b/app-partial-users/src/main/res/values/colors.xml deleted file mode 100644 index 5a077b3a..00000000 --- a/app-partial-users/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #3F51B5 - #303F9F - #FF4081 - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml deleted file mode 100644 index 5a077b3a..00000000 --- a/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - #3F51B5 - #303F9F - #FF4081 - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml deleted file mode 100644 index 1277085c..00000000 --- a/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - diff --git a/feature/ui-common-api/src/main/res/values/colors.xml b/feature/ui-common-api/src/main/res/values/colors.xml index f7194f74..1ed735c4 100644 --- a/feature/ui-common-api/src/main/res/values/colors.xml +++ b/feature/ui-common-api/src/main/res/values/colors.xml @@ -2,4 +2,8 @@ #202020 #767676 + + #3F51B5 + #303F9F + #FF4081 diff --git a/app-partial-users/src/main/res/values/styles.xml b/feature/ui-common-api/src/main/res/values/styles.xml similarity index 100% rename from app-partial-users/src/main/res/values/styles.xml rename to feature/ui-common-api/src/main/res/values/styles.xml From 4116c480406270ea02ce055f49f8624bf590bbe5 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:01:17 +0200 Subject: [PATCH 012/621] Add ReposSectionModelTest (#489) --- app/build.gradle | 5 ++- feature/users/build.gradle | 6 +++ .../client/users/ui/ReposSectionModelTest.kt | 38 +++++++++++++++++++ .../github/client/users/model/RepoHeader.kt | 2 +- .../client/users/ui/ReposSectionModel.kt | 2 +- 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 feature/users/src/androidTest/java/com/jraska/github/client/users/ui/ReposSectionModelTest.kt diff --git a/app/build.gradle b/app/build.gradle index f121e636..33a56bc3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,7 +82,10 @@ android { } if (gradle.startParameter.taskNames.any { it.contains("Firebase") }) { - sourceSets.androidTest.java.srcDirs += ["../feature/about/src/androidTest/java"] + sourceSets.androidTest.java { + srcDirs += ["../feature/about/src/androidTest/java"] + srcDirs += ["../feature/users/src/androidTest/java"] + } } } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index ea66bcc1..e47aba30 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -6,6 +6,8 @@ android { compileSdkVersion 30 defaultConfig { minSdkVersion 24 + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } compileOptions { @@ -50,4 +52,8 @@ dependencies { testImplementation okHttpMockWebServer testImplementation project(':core-testing') kaptTest rootProject.ext.daggerAnnotationProcessor + + androidTestImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'org.assertj:assertj-core:3.19.0' } diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/ui/ReposSectionModelTest.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/ui/ReposSectionModelTest.kt new file mode 100644 index 00000000..eda4c590 --- /dev/null +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/ui/ReposSectionModelTest.kt @@ -0,0 +1,38 @@ +package com.jraska.github.client.users.ui + +import android.view.LayoutInflater +import android.widget.FrameLayout +import android.widget.TextView +import androidx.test.espresso.util.TreeIterables +import androidx.test.platform.app.InstrumentationRegistry +import com.jraska.github.client.users.model.RepoHeader +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test + +class ReposSectionModelTest { + @Test + fun checkPopulatesViewsCorrectly() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val frameLayout = FrameLayout(context) + + val repos = listOf( + RepoHeader("owner", "some name", "repo description", 6, 10), + RepoHeader("owner2", "other name", "repo description2", 0, 3) + ) + + val reposSectionModel = ReposSectionModel("Test title", repos) {/* do nothing */ } + val view = LayoutInflater.from(context).inflate(reposSectionModel.layout, frameLayout) + reposSectionModel.bind(view) + + val views = TreeIterables.breadthFirstViewTraversal(view) + + assertThat(views).anyMatch { it is TextView && it.text == "some name" } + assertThat(views).anyMatch { it is TextView && it.text == "other name" } + assertThat(views).anyMatch { it is TextView && it.text == "repo description" } + assertThat(views).anyMatch { it is TextView && it.text == "repo description2" } + assertThat(views).anyMatch { it is TextView && it.text == "6" } + assertThat(views).anyMatch { it is TextView && it.text == "10" } + assertThat(views).anyMatch { it is TextView && it.text == "0" } + assertThat(views).anyMatch { it is TextView && it.text == "3" } + } +} diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/RepoHeader.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/RepoHeader.kt index a5d0bab5..fff60a6f 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/RepoHeader.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/RepoHeader.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.users.model -internal class RepoHeader( +class RepoHeader( val owner: String, val name: String, val description: String, diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/ReposSectionModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/ReposSectionModel.kt index ffe84724..2039f8e8 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/ReposSectionModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/ReposSectionModel.kt @@ -8,7 +8,7 @@ import com.jraska.github.client.users.R import com.jraska.github.client.users.model.RepoHeader import com.jraska.github.client.users.widget.RepeaterLayout -internal class ReposSectionModel( +class ReposSectionModel( private val title: String, private val repos: List, private val repoListener: (RepoHeader) -> Unit From 5edaf1ba2cd396e4f6ead79fb55c3cab6f56d4b1 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:40:16 +0200 Subject: [PATCH 013/621] Better fakes structure (#490) --- .../github/client/users/UsersAppComponent.kt | 15 ++---------- .../jraska/github/client/EnableConfigRule.kt | 2 +- .../com/jraska/github/client/TestUITestApp.kt | 4 +++- .../com/jraska/github/client/AppComponent.kt | 3 +-- .../github/client/FirebaseConfigModule.kt | 24 ------------------- .../github/client/FirebaseCoreModule.kt | 15 ++++++++++++ .../jraska/github/client/FakeConfigModule.kt | 10 -------- .../jraska/github/client/FakeCoreModule.kt | 20 +++++++++++++--- ...{FakeModules.kt => FakeUnitTestModules.kt} | 6 ++--- .../jraska/github/client/FakeWebLinkModule.kt | 17 +++++++++++++ .../github/client/RecordingWebLinkLauncher.kt | 2 ++ .../client/android/FakeCoreAndroidModule.kt | 6 ----- .../client/repo/di/TestRepoComponent.kt | 4 ++-- .../client/users/di/TestUsersComponent.kt | 4 ++-- 14 files changed, 65 insertions(+), 67 deletions(-) delete mode 100644 app/src/main/java/com/jraska/github/client/FirebaseConfigModule.kt delete mode 100644 core-testing/src/main/java/com/jraska/github/client/FakeConfigModule.kt rename core-testing/src/main/java/com/jraska/github/client/{FakeModules.kt => FakeUnitTestModules.kt} (75%) create mode 100644 core-testing/src/main/java/com/jraska/github/client/FakeWebLinkModule.kt diff --git a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt index 83f0f890..b03bcee0 100644 --- a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt +++ b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt @@ -5,9 +5,8 @@ import android.content.Context import androidx.lifecycle.ViewModelProvider import com.facebook.drawee.backends.pipeline.Fresco import com.jakewharton.threetenabp.AndroidThreeTen -import com.jraska.github.client.FakeConfigModule import com.jraska.github.client.FakeCoreModule -import com.jraska.github.client.WebLinkLauncher +import com.jraska.github.client.FakeWebLinkModule import com.jraska.github.client.core.android.CoreAndroidModule import com.jraska.github.client.core.android.OnAppCreate import com.jraska.github.client.http.HttpModule @@ -16,7 +15,6 @@ import dagger.Component import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet -import okhttp3.HttpUrl import javax.inject.Singleton @Singleton @@ -25,8 +23,8 @@ import javax.inject.Singleton AppModule::class, CoreAndroidModule::class, FakeCoreModule::class, - FakeConfigModule::class, HttpModule::class, + FakeWebLinkModule::class, UsersModule::class] ) interface UsersAppComponent { @@ -42,15 +40,6 @@ interface UsersAppComponent { @Module object AppModule { - @Provides - fun provideLinkLauncher(): WebLinkLauncher { - return object : WebLinkLauncher { - override fun launchOnWeb(url: HttpUrl) { - throw UnsupportedOperationException("Partial app tried to open $url") - } - } - } - @Provides @IntoSet fun setupFresco(): OnAppCreate { diff --git a/app/src/androidTest/java/com/jraska/github/client/EnableConfigRule.kt b/app/src/androidTest/java/com/jraska/github/client/EnableConfigRule.kt index d31aede3..7b80abc6 100644 --- a/app/src/androidTest/java/com/jraska/github/client/EnableConfigRule.kt +++ b/app/src/androidTest/java/com/jraska/github/client/EnableConfigRule.kt @@ -10,7 +10,7 @@ class EnableConfigRule( lateinit var revert: FakeConfig.RevertSet override fun before() { - revert = FakeCoreModule.config.set(key, value) + revert = TestUITestApp.get().appComponent.config.set(key, value) } override fun after() { diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index caf05f39..9dd3cc1e 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -15,7 +15,7 @@ class TestUITestApp : GitHubClientApp(), HasViewModelFactory, HasServiceModelFac DecoratedServiceModelFactory(super.serviceModelFactory()) } - private val appComponent: TestAppComponent by lazy { + val appComponent: TestAppComponent by lazy { DaggerTestAppComponent.factory().create(this) } @@ -35,6 +35,8 @@ class TestUITestApp : GitHubClientApp(), HasViewModelFactory, HasServiceModelFac @Singleton @Component(modules = [SharedModules::class, FakeCoreModule::class, ReplayHttpModule::class]) interface TestAppComponent : AppComponent { + val config: FakeConfig + @Component.Factory interface Factory { fun create(@BindsInstance context: Context): TestAppComponent diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index 473ab1ee..b4e9ec70 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -54,8 +54,7 @@ interface AppComponent { PushModule::class, SettingsModule::class, AboutModule::class, - ShortcutsModule::class, - FirebaseConfigModule::class] + ShortcutsModule::class] ) object SharedModules diff --git a/app/src/main/java/com/jraska/github/client/FirebaseConfigModule.kt b/app/src/main/java/com/jraska/github/client/FirebaseConfigModule.kt deleted file mode 100644 index f039f378..00000000 --- a/app/src/main/java/com/jraska/github/client/FirebaseConfigModule.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.jraska.github.client - -import com.google.firebase.remoteconfig.FirebaseRemoteConfig -import dagger.Module -import dagger.Provides -import javax.inject.Singleton - -@Module -object FirebaseConfigModule { - @Provides - @Singleton - internal fun config(decorations: Set<@JvmSuppressWildcards Config.Decoration>): Config { - val configProxy = FirebaseConfigProxy(FirebaseRemoteConfig.getInstance()) - - configProxy.setupDefaults().fetch() - - var config: Config = configProxy - decorations.forEach { - config = it.decorate(config) - } - - return config - } -} diff --git a/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt b/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt index 8415aec0..4d60f926 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt +++ b/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt @@ -45,4 +45,19 @@ object FirebaseCoreModule { internal fun firebaseCrash(): CrashReporter { return FirebaseCrashlyticsReporter() } + + @Provides + @Singleton + internal fun config(decorations: Set<@JvmSuppressWildcards Config.Decoration>): Config { + val configProxy = FirebaseConfigProxy(FirebaseRemoteConfig.getInstance()) + + configProxy.setupDefaults().fetch() + + var config: Config = configProxy + decorations.forEach { + config = it.decorate(config) + } + + return config + } } diff --git a/core-testing/src/main/java/com/jraska/github/client/FakeConfigModule.kt b/core-testing/src/main/java/com/jraska/github/client/FakeConfigModule.kt deleted file mode 100644 index fed77afc..00000000 --- a/core-testing/src/main/java/com/jraska/github/client/FakeConfigModule.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.jraska.github.client - -import dagger.Module -import dagger.Provides - -@Module -object FakeConfigModule { - @Provides - fun config(): Config = FakeCoreModule.config -} diff --git a/core-testing/src/main/java/com/jraska/github/client/FakeCoreModule.kt b/core-testing/src/main/java/com/jraska/github/client/FakeCoreModule.kt index d2e58cb0..ff47f547 100644 --- a/core-testing/src/main/java/com/jraska/github/client/FakeCoreModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/FakeCoreModule.kt @@ -6,11 +6,11 @@ import com.jraska.github.client.logging.CrashReporter import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet +import javax.inject.Singleton @Module object FakeCoreModule { val eventAnalytics = Fakes.recordingAnalytics() - val config = Fakes.config() val analyticProperty = Fakes.recordingAnalyticsProperty() @Provides @@ -18,6 +18,20 @@ object FakeCoreModule { return eventAnalytics } + @Provides + @Singleton + fun fakeConfig(): FakeConfig = Fakes.config() + + @Provides + fun config(fakeConfig: FakeConfig, decorations: Set<@JvmSuppressWildcards Config.Decoration>): Config { + var config: Config = fakeConfig + decorations.forEach { + config = it.decorate(config) + } + + return config + } + @Provides fun analyticsProperty(): AnalyticsProperty { return analyticProperty @@ -30,10 +44,10 @@ object FakeCoreModule { @Provides @IntoSet - fun config(): Config.Decoration { + fun configDecoration(): Config.Decoration { return object : Config.Decoration { override fun decorate(originalConfig: Config): Config { - return config + return originalConfig } } } diff --git a/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt b/core-testing/src/main/java/com/jraska/github/client/FakeUnitTestModules.kt similarity index 75% rename from core-testing/src/main/java/com/jraska/github/client/FakeModules.kt rename to core-testing/src/main/java/com/jraska/github/client/FakeUnitTestModules.kt index 7bf7e739..716de7c9 100644 --- a/core-testing/src/main/java/com/jraska/github/client/FakeModules.kt +++ b/core-testing/src/main/java/com/jraska/github/client/FakeUnitTestModules.kt @@ -8,8 +8,8 @@ import dagger.Module includes = [ FakeCoreModule::class, FakeCoreAndroidModule::class, - FakeConfigModule::class, - FakeHttpModule::class + FakeHttpModule::class, + FakeWebLinkModule::class ] ) -object FakeModules +object FakeUnitTestModules diff --git a/core-testing/src/main/java/com/jraska/github/client/FakeWebLinkModule.kt b/core-testing/src/main/java/com/jraska/github/client/FakeWebLinkModule.kt new file mode 100644 index 00000000..1376df7c --- /dev/null +++ b/core-testing/src/main/java/com/jraska/github/client/FakeWebLinkModule.kt @@ -0,0 +1,17 @@ +package com.jraska.github.client + +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +@Module +object FakeWebLinkModule { + @Provides + @Singleton + fun provideRecordingLinkLauncher(): RecordingWebLinkLauncher { + return Fakes.recordingWebLinkLauncher() + } + + @Provides + fun provideLinkLauncher(recordingLauncher: RecordingWebLinkLauncher): WebLinkLauncher = recordingLauncher +} diff --git a/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt b/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt index 28600128..5fd347bc 100644 --- a/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt +++ b/core-testing/src/main/java/com/jraska/github/client/RecordingWebLinkLauncher.kt @@ -11,3 +11,5 @@ class RecordingWebLinkLauncher : WebLinkLauncher { linksLaunched.add(url) } } + +fun Fakes.recordingWebLinkLauncher() = RecordingWebLinkLauncher() diff --git a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt index 797d3f21..73073d92 100644 --- a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt @@ -27,12 +27,6 @@ object FakeCoreAndroidModule { return Fakes.recordingDeepLinkLauncher() } - @Provides - @Singleton - fun webLinkLauncher(): WebLinkLauncher { - return RecordingWebLinkLauncher() - } - @Provides @Singleton internal fun provideFakeSnackbarDisplay(): FakeSnackbarDisplay { diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt index b0ae77b2..94ecd28e 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.repo.di -import com.jraska.github.client.FakeModules +import com.jraska.github.client.FakeUnitTestModules import com.jraska.github.client.android.FakeSnackbarDisplay import com.jraska.github.client.repo.RepoDetailViewModel import com.jraska.github.client.repo.RepoModule @@ -9,7 +9,7 @@ import okhttp3.mockwebserver.MockWebServer import javax.inject.Singleton @Singleton -@Component(modules = [RepoModule::class, FakeModules::class]) +@Component(modules = [RepoModule::class, FakeUnitTestModules::class]) internal interface TestRepoComponent { fun repoDetailViewModel(): RepoDetailViewModel diff --git a/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt b/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt index 51d7181b..c674c40f 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.users.di -import com.jraska.github.client.FakeModules +import com.jraska.github.client.FakeUnitTestModules import com.jraska.github.client.users.UserDetailViewModel import com.jraska.github.client.users.UsersModule import com.jraska.github.client.users.UsersViewModel @@ -10,7 +10,7 @@ import javax.inject.Singleton @Singleton @Component( - modules = [FakeModules::class, UsersModule::class] + modules = [FakeUnitTestModules::class, UsersModule::class] ) internal interface TestUsersComponent { fun usersViewModel(): UsersViewModel From e6dd3abc1a35db2eaeca49b0058cea5ccee42088 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:49:57 +0200 Subject: [PATCH 014/621] Share the fresco an three ten inits (#491) --- .../github/client/users/UsersAppComponent.kt | 26 ----------------- .../com/jraska/github/client/AppComponent.kt | 1 - .../com/jraska/github/client/AppModule.kt | 29 ------------------- core/build.gradle | 2 ++ .../client/core/android/CoreAndroidModule.kt | 18 ++++++++++++ 5 files changed, 20 insertions(+), 56 deletions(-) delete mode 100644 app/src/main/java/com/jraska/github/client/AppModule.kt diff --git a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt index b03bcee0..73fa93b4 100644 --- a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt +++ b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt @@ -1,10 +1,7 @@ package com.jraska.github.client.users -import android.app.Application import android.content.Context import androidx.lifecycle.ViewModelProvider -import com.facebook.drawee.backends.pipeline.Fresco -import com.jakewharton.threetenabp.AndroidThreeTen import com.jraska.github.client.FakeCoreModule import com.jraska.github.client.FakeWebLinkModule import com.jraska.github.client.core.android.CoreAndroidModule @@ -12,15 +9,11 @@ import com.jraska.github.client.core.android.OnAppCreate import com.jraska.github.client.http.HttpModule import dagger.BindsInstance import dagger.Component -import dagger.Module -import dagger.Provides -import dagger.multibindings.IntoSet import javax.inject.Singleton @Singleton @Component( modules = [ - AppModule::class, CoreAndroidModule::class, FakeCoreModule::class, HttpModule::class, @@ -37,22 +30,3 @@ interface UsersAppComponent { fun create(@BindsInstance context: Context): UsersAppComponent } } - -@Module -object AppModule { - @Provides - @IntoSet - fun setupFresco(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) = Fresco.initialize(app) - } - } - - @Provides - @IntoSet - fun setupThreeTen(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) = AndroidThreeTen.init(app) - } - } -} diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index b4e9ec70..5e9abf65 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -42,7 +42,6 @@ interface AppComponent { @Module( includes = [ - AppModule::class, ConfigDebugModule::class, CoreAndroidModule::class, ChromeCustomTabsModule::class, diff --git a/app/src/main/java/com/jraska/github/client/AppModule.kt b/app/src/main/java/com/jraska/github/client/AppModule.kt deleted file mode 100644 index c8058f79..00000000 --- a/app/src/main/java/com/jraska/github/client/AppModule.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.jraska.github.client - -import android.app.Application -import com.facebook.drawee.backends.pipeline.Fresco -import com.jakewharton.threetenabp.AndroidThreeTen -import com.jraska.github.client.core.android.OnAppCreate -import dagger.Module -import dagger.Provides -import dagger.multibindings.IntoSet - -@Module -object AppModule { - - @Provides - @IntoSet - fun setupFresco(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) = Fresco.initialize(app) - } - } - - @Provides - @IntoSet - fun setupThreeTen(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) = AndroidThreeTen.init(app) - } - } -} diff --git a/core/build.gradle b/core/build.gradle index 66578f50..fc6bc5ba 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,6 +27,8 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' + implementation rootProject.ext.fresco kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index b4c71997..02292976 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -3,6 +3,8 @@ package com.jraska.github.client.core.android import android.app.Application import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import com.facebook.drawee.backends.pipeline.Fresco +import com.jakewharton.threetenabp.AndroidThreeTen import com.jraska.github.client.DeepLinkHandler import com.jraska.github.client.DeepLinkHandlerImpl import com.jraska.github.client.DeepLinkLauncher @@ -114,4 +116,20 @@ object CoreAndroidModule { @Provides fun snackbarDisplay(display: TopSnackbarDisplay): SnackbarDisplay = display + + @Provides + @IntoSet + fun setupFresco(): OnAppCreate { + return object : OnAppCreate { + override fun onCreate(app: Application) = Fresco.initialize(app) + } + } + + @Provides + @IntoSet + fun setupThreeTen(): OnAppCreate { + return object : OnAppCreate { + override fun onCreate(app: Application) = AndroidThreeTen.init(app) + } + } } From 6e8b2a454c7d352f988f63310e9e90fbe5803008 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 16 Apr 2021 21:52:16 +0000 Subject: [PATCH 015/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 33a56bc3..9391562c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.28.3' - versionCode 102 + versionName '0.28.4' + versionCode 103 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From b0bbc08a49bbc0e4bc52cefdb39b6bbc6005939f Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 18 Apr 2021 01:30:13 +0200 Subject: [PATCH 016/621] `upaate to use RxJava3 (#492) --- app-partial-users/build.gradle | 2 +- app/build.gradle | 4 ++-- .../java/com/jraska/github/client/AppSetupTest.kt | 2 +- .../java/com/jraska/github/client/TestRunner.kt | 8 ++++---- .../com/jraska/github/client/http/ReplayHttpModule.kt | 4 ++-- .../jraska/github/client/xpush/PushServerClient.kt | 6 +++--- .../java/com/jraska/github/client/GitHubClientApp.kt | 11 ----------- core-api/build.gradle | 2 +- .../java/com/jraska/github/client/rx/AppSchedulers.kt | 2 +- core-testing/build.gradle | 2 +- .../src/main/java/com/jraska/github/client/Fakes.kt | 2 +- .../github/client/android/FakeCoreAndroidModule.kt | 4 +--- .../java/com/jraska/github/client/http/HttpTest.kt | 4 ++-- core/build.gradle | 2 +- .../github/client/core/android/CoreAndroidModule.kt | 4 ++-- .../java/com/jraska/github/client/http/HttpModule.kt | 5 +++-- dependencies.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- .../github/client/inappupdate/UpdateCheckScheduler.kt | 4 ++-- feature/network-status/build.gradle | 2 +- .../networkstatus/internal/NetworkObservable.kt | 4 ++-- .../networkstatus/internal/NetworkStatusDisplayer.kt | 2 +- .../jraska/github/client/repo/RepoDetailViewModel.kt | 5 +++-- .../client/repo/model/GitHubApiRepoRepository.kt | 2 +- .../jraska/github/client/repo/model/RepoGitHubApi.kt | 3 +-- .../jraska/github/client/repo/model/RepoRepository.kt | 4 ++-- .../jraska/github/client/users/UserDetailViewModel.kt | 3 ++- .../com/jraska/github/client/users/UsersViewModel.kt | 5 +++-- .../client/users/model/GitHubApiUsersRepository.kt | 5 ++--- .../github/client/users/model/GitHubUsersApi.kt | 2 +- .../github/client/users/model/UsersRepository.kt | 4 ++-- .../main/java/com/jraska/github/client/users/rx/Rx.kt | 4 ++-- .../github/client/users/UserDetailViewModelTest.kt | 7 +++++-- .../users/model/GitHubApiUsersRepositoryTest.kt | 4 ++++ 34 files changed, 62 insertions(+), 66 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 88df9a91..c0c3afb9 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -56,7 +56,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' implementation rootProject.ext.okHttpLoggingInterceptor diff --git a/app/build.gradle b/app/build.gradle index 9391562c..48b3ebda 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -136,7 +136,7 @@ dependencies { implementation rootProject.ext.dagger implementation rootProject.ext.retrofit - implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' implementation rootProject.ext.okHttpLoggingInterceptor @@ -155,7 +155,7 @@ dependencies { androidTestImplementation 'org.assertj:assertj-core:3.19.0' androidTestImplementation 'com.airbnb.okreplay:okreplay:1.6.0' androidTestImplementation 'com.airbnb.okreplay:espresso:1.6.0' - androidTestImplementation 'com.squareup.rx.idler:rx2-idler:0.11.0' + androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') androidTestImplementation rootProject.ext.retrofit diff --git a/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt b/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt index 406435c6..e9384d38 100644 --- a/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt @@ -1,6 +1,6 @@ package com.jraska.github.client -import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import org.assertj.core.api.Assertions.assertThat import org.junit.Test import timber.log.Timber diff --git a/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt b/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt index 07c9636e..8f0508f3 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt @@ -4,8 +4,8 @@ import android.app.Application import android.content.Context import android.os.Bundle import androidx.test.runner.AndroidJUnitRunner -import com.squareup.rx2.idler.Rx2Idler -import io.reactivex.plugins.RxJavaPlugins +import com.squareup.rx3.idler.Rx3Idler +import io.reactivex.rxjava3.plugins.RxJavaPlugins @Suppress("unused") // build.gradle class TestRunner : AndroidJUnitRunner() { @@ -17,10 +17,10 @@ class TestRunner : AndroidJUnitRunner() { super.onCreate(arguments) RxJavaPlugins.setInitComputationSchedulerHandler( - Rx2Idler.create("RxJava 2.x Computation Scheduler") + Rx3Idler.create("RxJava 3.x Computation Scheduler") ) RxJavaPlugins.setInitIoSchedulerHandler( - Rx2Idler.create("RxJava 2.x IO Scheduler") + Rx3Idler.create("RxJava 3.x IO Scheduler") ) } } diff --git a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt index 8587b811..7d59b37c 100644 --- a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt +++ b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt @@ -20,7 +20,7 @@ import org.junit.rules.ExternalResource import org.junit.rules.RuleChain import org.junit.rules.TestRule import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory @Module @@ -39,7 +39,7 @@ object ReplayHttpModule { private fun createRetrofit(): Retrofit { return Retrofit.Builder() .baseUrl("https://api.github.com") - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .addConverterFactory(GsonConverterFactory.create()) .client(okReplayClient()) .build() diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt index 68347ee1..d7c8002b 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt @@ -1,10 +1,10 @@ package com.jraska.github.client.xpush -import io.reactivex.Completable +import io.reactivex.rxjava3.core.Completable import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.Body import retrofit2.http.POST @@ -17,7 +17,7 @@ interface PushServerClient { companion object { fun create(authorizationToken: String): PushServerClient { return Retrofit.Builder().validateEagerly(true) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl("https://fcm.googleapis.com") .client( diff --git a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt index 5248fd78..e449a6b9 100644 --- a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt +++ b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt @@ -1,14 +1,11 @@ package com.jraska.github.client import android.app.Application -import android.os.Looper import androidx.lifecycle.ViewModelProvider import com.google.firebase.perf.metrics.AddTrace import com.jraska.github.client.core.android.HasServiceModelFactory import com.jraska.github.client.core.android.HasViewModelFactory import com.jraska.github.client.core.android.ServiceModel -import io.reactivex.android.plugins.RxAndroidPlugins -import io.reactivex.android.schedulers.AndroidSchedulers open class GitHubClientApp : Application(), HasViewModelFactory, HasServiceModelFactory { @@ -26,8 +23,6 @@ open class GitHubClientApp : Application(), HasViewModelFactory, HasServiceModel override fun onCreate() { super.onCreate() - initRxAndroidMainThread() // Must be here, otherwise is fragile due to class loading - appComponent.onAppCreateActions().forEach { it.onCreate(this) } @@ -36,10 +31,4 @@ open class GitHubClientApp : Application(), HasViewModelFactory, HasServiceModel open fun createAppComponent(): AppComponent { return DaggerAppComponent.factory().create(this) } - - private fun initRxAndroidMainThread() { - RxAndroidPlugins.setInitMainThreadSchedulerHandler { - AndroidSchedulers.from(Looper.getMainLooper(), true) - } - } } diff --git a/core-api/build.gradle b/core-api/build.gradle index 39c648a9..17201d79 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'io.reactivex.rxjava2:rxjava:2.2.21' + implementation 'io.reactivex.rxjava3:rxjava:3.0.12' implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt index e1e8834c..d0d006e4 100644 --- a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt +++ b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.rx -import io.reactivex.Scheduler +import io.reactivex.rxjava3.core.Scheduler class AppSchedulers( val mainThread: Scheduler, diff --git a/core-testing/build.gradle b/core-testing/build.gradle index aca0d5da..a6f57082 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -10,7 +10,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'io.reactivex.rxjava2:rxjava:2.2.21' + implementation 'io.reactivex.rxjava3:rxjava:3.0.12' implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt index d5746d45..b976d066 100644 --- a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt +++ b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt @@ -3,7 +3,7 @@ package com.jraska.github.client import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.android.RecordingDeepLinkLauncher import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.schedulers.Schedulers object Fakes { fun config(values: Map = emptyMap()): FakeConfig { diff --git a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt index 73073d92..964c5135 100644 --- a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt @@ -2,13 +2,11 @@ package com.jraska.github.client.android import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Fakes -import com.jraska.github.client.RecordingWebLinkLauncher -import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.ui.SnackbarDisplay import dagger.Module import dagger.Provides -import io.reactivex.plugins.RxJavaPlugins +import io.reactivex.rxjava3.plugins.RxJavaPlugins import javax.inject.Singleton @Module diff --git a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt index 870fc201..bb65a5b2 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt @@ -6,7 +6,7 @@ import okhttp3.logging.HttpLoggingInterceptor import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import java.io.File @@ -18,7 +18,7 @@ object HttpTest { level = HttpLoggingInterceptor.Level.BASIC }).build()) .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() } } diff --git a/core/build.gradle b/core/build.gradle index fc6bc5ba..4515f4a9 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -33,7 +33,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.timber:timber:4.7.1' implementation 'com.google.android.material:material:1.3.0' diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index 02292976..fb5b9fbd 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -24,8 +24,8 @@ import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.schedulers.Schedulers import javax.inject.Singleton @Module diff --git a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt index 0c1b31f1..4bc7de42 100644 --- a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt +++ b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt @@ -9,7 +9,8 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor.Level import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory + import retrofit2.converter.gson.GsonConverterFactory import timber.log.Timber import java.io.File @@ -25,7 +26,7 @@ class HttpModule { .validateEagerly(BuildConfig.DEBUG) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() } diff --git a/dependencies.gradle b/dependencies.gradle index be9f1c4e..d580ebb4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext { retrofitVersion = '2.9.0' retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion" + retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" daggerVersion = '2.34' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 67b9f864..0854207a 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.google.android.play:core:1.10.0' - implementation 'io.reactivex.rxjava2:rxjava:2.2.21' + implementation 'io.reactivex.rxjava3:rxjava:3.0.12' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt index 9214f597..17e92a4d 100644 --- a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt +++ b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt @@ -2,8 +2,8 @@ package com.jraska.github.client.inappupdate import android.annotation.SuppressLint import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.Completable -import io.reactivex.internal.functions.Functions +import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.internal.functions.Functions import timber.log.Timber import javax.inject.Inject diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index c8be8ba5..22fe6242 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'com.google.android.material:material:1.3.0' - implementation 'io.reactivex.rxjava2:rxjava:2.2.21' + implementation 'io.reactivex.rxjava3:rxjava:3.0.12' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt index 770952f7..ff986db1 100644 --- a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt +++ b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt @@ -4,8 +4,8 @@ import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest -import io.reactivex.Observable -import io.reactivex.subjects.BehaviorSubject +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.BehaviorSubject import javax.inject.Inject internal class NetworkObservable @Inject constructor( diff --git a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt index 86c7da7b..917263bd 100644 --- a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt +++ b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt @@ -8,7 +8,7 @@ import com.google.android.material.snackbar.Snackbar import com.jraska.github.client.core.android.DefaultActivityCallbacks import com.jraska.github.client.networkstatus.R import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.disposables.CompositeDisposable +import io.reactivex.rxjava3.disposables.CompositeDisposable import timber.log.Timber import javax.inject.Inject diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt index 402913d9..b0700cdc 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt @@ -16,7 +16,8 @@ import com.jraska.github.client.repo.model.RepoDetail import com.jraska.github.client.repo.model.RepoHeader import com.jraska.github.client.repo.model.RepoRepository import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.BackpressureStrategy +import io.reactivex.rxjava3.core.BackpressureStrategy +import io.reactivex.rxjava3.core.Single import javax.inject.Inject internal class RepoDetailViewModel @Inject constructor( @@ -40,7 +41,7 @@ internal class RepoDetailViewModel @Inject constructor( .observeOn(appSchedulers.mainThread) .map { detail -> ViewState.ShowRepo(detail) } .onErrorReturn { ViewState.Error(it) } - .startWith(ViewState.Loading) + .startWith(Single.just(ViewState.Loading)) .toFlowable(BackpressureStrategy.MISSING) .toLiveData() } diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt index c27f829d..a5ed1829 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.repo.model -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable internal class GitHubApiRepoRepository( private val gitHubRepoApi: RepoGitHubApi diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt index cb0433e6..667cf2c9 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt @@ -1,9 +1,8 @@ package com.jraska.github.client.repo.model -import io.reactivex.Single +import io.reactivex.rxjava3.core.Single import retrofit2.http.GET import retrofit2.http.Path -import retrofit2.http.Query internal interface RepoGitHubApi { @GET("/repos/{owner}/{name}") diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt index b5804b02..9dac2188 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt @@ -1,7 +1,7 @@ package com.jraska.github.client.repo.model -import io.reactivex.Observable -import io.reactivex.Single +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.core.Single internal interface RepoRepository { fun getRepoDetail(owner: String, repoName: String): Observable diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt index 79f7d313..f9fb320c 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt @@ -15,6 +15,7 @@ import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.RepoHeader import com.jraska.github.client.users.model.UserDetail import com.jraska.github.client.users.model.UsersRepository +import io.reactivex.rxjava3.core.Single import javax.inject.Inject internal class UserDetailViewModel @Inject constructor( @@ -43,7 +44,7 @@ internal class UserDetailViewModel @Inject constructor( .observeOn(schedulers.mainThread) .map { userDetail -> ViewState.DisplayUser(userDetail) } .onErrorReturn { ViewState.Error(it) } - .startWith(ViewState.Loading) + .startWith(Single.just(ViewState.Loading)) .toLiveData() } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt index ab07e52a..698a6094 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt @@ -12,7 +12,8 @@ import com.jraska.github.client.navigation.Urls import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.User import com.jraska.github.client.users.model.UsersRepository -import io.reactivex.subjects.PublishSubject +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.subjects.PublishSubject import javax.inject.Inject internal class UsersViewModel @Inject constructor( @@ -32,7 +33,7 @@ internal class UsersViewModel @Inject constructor( .onErrorReturn { ViewState.Error(it) } .toObservable() .subscribeOn(appSchedulers.io) - .startWith(ViewState.Loading) + .startWith(Single.just(ViewState.Loading)) .repeatWhen { refreshSignal } .cache() .observeOn(appSchedulers.mainThread) diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt index 7c467489..8c7b0480 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt @@ -1,9 +1,8 @@ package com.jraska.github.client.users.model import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.Observable -import io.reactivex.Single -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.core.Single import java.util.Collections internal class GitHubApiUsersRepository( diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt index 7effac32..c8b4d135 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt @@ -1,6 +1,6 @@ package com.jraska.github.client.users.model -import io.reactivex.Single +import io.reactivex.rxjava3.core.Single import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt index 07c6f5ef..d5f27d9c 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt @@ -1,7 +1,7 @@ package com.jraska.github.client.users.model -import io.reactivex.Observable -import io.reactivex.Single +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.core.Single internal interface UsersRepository { fun getUsers(since: Int): Single> diff --git a/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt b/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt index 95611655..9df060f0 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt @@ -2,8 +2,8 @@ package com.jraska.github.client.users.rx import androidx.lifecycle.LiveData import androidx.lifecycle.toLiveData -import io.reactivex.BackpressureStrategy -import io.reactivex.Observable +import io.reactivex.rxjava3.core.BackpressureStrategy +import io.reactivex.rxjava3.core.Observable fun Observable.toLiveData(): LiveData { return toFlowable(BackpressureStrategy.MISSING).toLiveData() diff --git a/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt index d5749302..f6b7b474 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt @@ -36,9 +36,12 @@ class UserDetailViewModelTest { mockWebServer.onUrlReturn(".*/users/jraska".toRegex(), "response/jraska.json") mockWebServer.onUrlPartReturn("users/jraska/repos", "response/jraska_repos.json") - val displayUser = viewModel.userDetail("jraska") + val observer = viewModel.userDetail("jraska") .test() - .value() as UserDetailViewModel.ViewState.DisplayUser + +// Thread.sleep(200) + + val displayUser = observer.value() as UserDetailViewModel.ViewState.DisplayUser assertThat(displayUser.user).usingRecursiveComparison().isEqualTo(testDetail()) } diff --git a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt index 370482ec..58ffd9d3 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt @@ -5,6 +5,8 @@ import com.jraska.github.client.http.HttpTest import com.jraska.github.client.http.enqueue import com.jraska.github.client.http.onUrlPartReturn import com.jraska.github.client.http.onUrlReturn +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.schedulers.Schedulers import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before @@ -24,6 +26,8 @@ class GitHubApiUsersRepositoryTest { fun getsUsersProperly() { mockWebServer.enqueue("response/users.json") + println(Thread.currentThread().id) + val users = repository.getUsers(0) .test() .values() From 91dc8a099efdb212216c9ff0466a77cdd0aea6bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 10:42:30 +0200 Subject: [PATCH 017/621] Bump daggerVersion from 2.34 to 2.34.1 (#493) Bumps `daggerVersion` from 2.34 to 2.34.1. Updates `dagger-compiler` from 2.34 to 2.34.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.34...dagger-2.34.1) Updates `dagger` from 2.34 to 2.34.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.34...dagger-2.34.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index d580ebb4..8d0710d7 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.34' + daggerVersion = '2.34.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From a8f74df84120d01813279dc993d9092d3b5e5fb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 10:42:40 +0200 Subject: [PATCH 018/621] Bump epoxy from 4.4.4 to 4.5.0 (#494) Bumps [epoxy](https://github.com/airbnb/epoxy) from 4.4.4 to 4.5.0. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.4.4...4.5.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index c0c3afb9..74497cf0 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/app/build.gradle b/app/build.gradle index 48b3ebda..e5eb64a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -130,7 +130,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 1c7b1034..490d01ce 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.0' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 1bbb8791..4cd7d32d 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index a9f329a5..76a172b5 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 9be2c186..27278084 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.google.android.material:material:1.3.0' - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' implementation 'com.jraska:console:1.1.0' implementation 'com.jraska:console-timber-tree:1.1.0' implementation rootProject.ext.okHttp diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index f44d3a93..ce4267f1 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -20,5 +20,5 @@ android { dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index e47aba30..c7e6f991 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.4.4' + implementation 'com.airbnb.android:epoxy:4.5.0' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' From ab236653d93f205b6daa7438d6161d7878aaca5b Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 19 Apr 2021 23:48:06 +0200 Subject: [PATCH 019/621] Add theme (#496) --- feature/users/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/users/src/main/AndroidManifest.xml b/feature/users/src/main/AndroidManifest.xml index ed03cff7..08cbf5f5 100644 --- a/feature/users/src/main/AndroidManifest.xml +++ b/feature/users/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ - + From 1b2928fd78761b66f2fd73d6d61ef92635a8e74d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 19 Apr 2021 23:53:23 +0200 Subject: [PATCH 020/621] Have a BaseApp to share the base component - should unify UI tests setup (#497) --- .../com/jraska/github/client/TestUITestApp.kt | 9 +++----- .../com/jraska/github/client/AppComponent.kt | 12 ++--------- .../jraska/github/client/GitHubClientApp.kt | 20 +++--------------- .../client/core/android/AppBaseComponent.kt | 11 ++++++++++ .../github/client/core/android/BaseApp.kt | 21 +++++++++++++++++++ 5 files changed, 40 insertions(+), 33 deletions(-) create mode 100644 core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt create mode 100644 core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index 9dd3cc1e..822258e7 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -2,25 +2,22 @@ package com.jraska.github.client import android.content.Context import androidx.test.platform.app.InstrumentationRegistry -import com.jraska.github.client.core.android.HasServiceModelFactory -import com.jraska.github.client.core.android.HasViewModelFactory +import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.ReplayHttpModule import dagger.BindsInstance import dagger.Component import javax.inject.Singleton -class TestUITestApp : GitHubClientApp(), HasViewModelFactory, HasServiceModelFactory { +class TestUITestApp : BaseApp() { private val decoratedServiceFactory by lazy { DecoratedServiceModelFactory(super.serviceModelFactory()) } - val appComponent: TestAppComponent by lazy { + override val appComponent: TestAppComponent by lazy { DaggerTestAppComponent.factory().create(this) } - override fun createAppComponent() = appComponent - override fun serviceModelFactory(): ServiceModel.Factory { return decoratedServiceFactory } diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index 5e9abf65..ae49cd08 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -1,13 +1,11 @@ package com.jraska.github.client import android.content.Context -import androidx.lifecycle.ViewModelProvider import com.jraska.github.client.about.AboutModule import com.jraska.github.client.chrome.ChromeCustomTabsModule import com.jraska.github.client.config.debug.ConfigDebugModule +import com.jraska.github.client.core.android.AppBaseComponent import com.jraska.github.client.core.android.CoreAndroidModule -import com.jraska.github.client.core.android.OnAppCreate -import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.HttpModule import com.jraska.github.client.identity.IdentityModule import com.jraska.github.client.inappupdate.InAppUpdateModule @@ -26,13 +24,7 @@ import javax.inject.Singleton @Component( modules = [SharedModules::class, ToExchange::class] ) -interface AppComponent { - - fun onAppCreateActions(): Set - - fun serviceModelFactory(): ServiceModel.Factory - - fun viewModelFactory(): ViewModelProvider.Factory +interface AppComponent : AppBaseComponent { @Component.Factory interface Factory { diff --git a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt index e449a6b9..484304f0 100644 --- a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt +++ b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt @@ -1,31 +1,17 @@ package com.jraska.github.client -import android.app.Application -import androidx.lifecycle.ViewModelProvider import com.google.firebase.perf.metrics.AddTrace +import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.HasServiceModelFactory import com.jraska.github.client.core.android.HasViewModelFactory -import com.jraska.github.client.core.android.ServiceModel -open class GitHubClientApp : Application(), HasViewModelFactory, HasServiceModelFactory { +open class GitHubClientApp : BaseApp(), HasViewModelFactory, HasServiceModelFactory { - private val appComponent: AppComponent by lazy { createAppComponent() } - - override fun factory(): ViewModelProvider.Factory { - return appComponent.viewModelFactory() - } - - override fun serviceModelFactory(): ServiceModel.Factory { - return appComponent.serviceModelFactory() - } + override val appComponent: AppComponent by lazy { createAppComponent() } @AddTrace(name = "App.onCreate") override fun onCreate() { super.onCreate() - - appComponent.onAppCreateActions().forEach { - it.onCreate(this) - } } open fun createAppComponent(): AppComponent { diff --git a/core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt b/core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt new file mode 100644 index 00000000..6730dc5e --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt @@ -0,0 +1,11 @@ +package com.jraska.github.client.core.android + +import androidx.lifecycle.ViewModelProvider + +interface AppBaseComponent { + fun onAppCreateActions(): Set + + fun serviceModelFactory(): ServiceModel.Factory + + fun viewModelFactory(): ViewModelProvider.Factory +} diff --git a/core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt b/core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt new file mode 100644 index 00000000..d9a3bfb7 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt @@ -0,0 +1,21 @@ +package com.jraska.github.client.core.android + +import android.app.Application +import androidx.lifecycle.ViewModelProvider + +abstract class BaseApp : Application(), HasViewModelFactory, HasServiceModelFactory { + abstract val appComponent: AppBaseComponent + + override fun factory(): ViewModelProvider.Factory { + return appComponent.viewModelFactory() + } + + override fun serviceModelFactory(): ServiceModel.Factory { + return appComponent.serviceModelFactory() + } + + override fun onCreate() { + super.onCreate() + appComponent.onAppCreateActions().forEach { it.onCreate(this) } + } +} From b9db7c817ca14744f56635ff05ac46b590af45ec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 20 Apr 2021 08:13:06 +0000 Subject: [PATCH 021/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e5eb64a5..3b55ff16 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.28.4' - versionCode 103 + versionName '0.28.5' + versionCode 104 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From a362dbf14b8f02adbfb686f6e3e5a2523bd4f7cb Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 21 Apr 2021 23:52:48 +0200 Subject: [PATCH 022/621] BaseApp and component to API module - kill me (#498) --- .../com/jraska/github/client/core/android/AppBaseComponent.kt | 0 .../main/java/com/jraska/github/client/core/android/BaseApp.kt | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {core => core-android-api}/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt (100%) rename {core => core-android-api}/src/main/java/com/jraska/github/client/core/android/BaseApp.kt (100%) diff --git a/core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt similarity index 100% rename from core/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt rename to core-android-api/src/main/java/com/jraska/github/client/core/android/AppBaseComponent.kt diff --git a/core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/BaseApp.kt similarity index 100% rename from core/src/main/java/com/jraska/github/client/core/android/BaseApp.kt rename to core-android-api/src/main/java/com/jraska/github/client/core/android/BaseApp.kt From e6025c567ce63911a6d43f27e39ba71ff2f9bdc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 10:03:38 +0200 Subject: [PATCH 023/621] Bump daggerVersion from 2.34.1 to 2.35 (#501) Bumps `daggerVersion` from 2.34.1 to 2.35. Updates `dagger-compiler` from 2.34.1 to 2.35 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.34.1...dagger-2.35) Updates `dagger` from 2.34.1 to 2.35 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.34.1...dagger-2.35) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 8d0710d7..f575e98c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.34.1' + daggerVersion = '2.35' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 0318fdfb3e6ea06186f06f0b3ef17b7ef2b05747 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 10:03:50 +0200 Subject: [PATCH 024/621] Bump firebase-bom from 27.0.0 to 27.1.0 (#500) Bumps firebase-bom from 27.0.0 to 27.1.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3b55ff16..414702d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.0' - implementation platform('com.google.firebase:firebase-bom:27.0.0') + implementation platform('com.google.firebase:firebase-bom:27.1.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 2df0812b..2b581acf 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:27.0.0') + implementation platform('com.google.firebase:firebase-bom:27.1.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From ee70560c31d4c83f9fde6a616e4eb3c71f6c23fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Apr 2021 10:04:00 +0200 Subject: [PATCH 025/621] Bump threetenbp from 1.5.0 to 1.5.1 (#499) Bumps [threetenbp](https://github.com/ThreeTen/threetenbp) from 1.5.0 to 1.5.1. - [Release notes](https://github.com/ThreeTen/threetenbp/releases) - [Changelog](https://github.com/ThreeTen/threetenbp/blob/master/RELEASE-NOTES.md) - [Commits](https://github.com/ThreeTen/threetenbp/compare/v1.5.0...v1.5.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 414702d0..8884915c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,7 +147,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'javax.inject:javax.inject:1' testImplementation 'org.mockito:mockito-core:3.8.0' - testImplementation 'org.threeten:threetenbp:1.5.0' // to fix failures with three ten db + testImplementation 'org.threeten:threetenbp:1.5.1' // to fix failures with three ten db androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test:runner:1.3.0' From acaa9523f12cd62b4e4447d49002496d8c845278 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Apr 2021 00:37:33 +0200 Subject: [PATCH 026/621] Bump kotlin_version from 1.4.32 to 1.5.0 (#502) Bumps `kotlin_version` from 1.4.32 to 1.5.0. Updates `kotlin-gradle-plugin` from 1.4.32 to 1.5.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Updates `kotlin-stdlib` from 1.4.32 to 1.5.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 82b902ae..e063c853 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.4.32' + ext.kotlin_version = '1.5.0' repositories { google() maven { url 'https://maven.fabric.io/public' } From ec5469b8c6d426fdd435b4a50b561150060743fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Apr 2021 00:37:42 +0200 Subject: [PATCH 027/621] Bump threetenabp from 1.3.0 to 1.3.1 (#503) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.3.0 to 1.3.1. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.3.0...1.3.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 74497cf0..658fc80a 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -57,7 +57,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.okHttpLoggingInterceptor } diff --git a/app/build.gradle b/app/build.gradle index 8884915c..a46475e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -137,7 +137,7 @@ dependencies { implementation rootProject.ext.retrofit implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:4.7.1' diff --git a/core/build.gradle b/core/build.gradle index 4515f4a9..cc0075c2 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,7 +27,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.fresco kapt rootProject.ext.daggerAnnotationProcessor From 0f28ebff8cb85478f5b0e89bba3796cad628ffee Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 30 Apr 2021 23:06:18 +0200 Subject: [PATCH 028/621] Working instrumented test with Activity (#504) * Working Android Test * Remove manual launching * Add assets as well * Remove accidental exclamation mark * Use assets * Use context only --- app/build.gradle | 6 +++ .../com/jraska/github/client/TestUITestApp.kt | 13 ++++- .../github/client/http/ReplayHttpModule.kt | 9 +--- app/src/debug/AndroidManifest.xml | 7 +-- .../debug/res/xml/network_security_config.xml | 6 +++ .../client/core/android/LinkLauncher.kt | 5 +- core-android-testing/.gitignore | 1 + core-android-testing/build.gradle | 35 +++++++++++++ .../src/main/AndroidManifest.xml | 1 + .../client/android/test/DeepLinksRecorder.kt | 32 ++++++++++++ .../android/test/FakeAndroidCoreModule.kt | 46 +++++++++++++++++ .../test/FakeDeepLinkRecordingModule.kt | 32 ++++++++++++ core-testing/build.gradle | 1 + .../github/client/http/FakeHttpModule.kt | 6 +-- .../com/jraska/github/client/http/HttpTest.kt | 39 +++++++++++++-- .../client/repo/RepoDetailViewModelTest.kt | 14 ++++-- .../client/repo/di/TestRepoComponent.kt | 2 - feature/users/build.gradle | 11 +++- .../androidTest/assets/users/two_users.json | 42 ++++++++++++++++ .../github/client/users/test/TestRunner.kt | 12 +++++ .../client/users/test/TestUsersComponent.kt | 42 ++++++++++++++++ .../client/users/test/TestUsersUITestApp.kt | 10 ++++ .../client/users/test/UsersActivityTest.kt | 50 +++++++++++++++++++ feature/users/src/main/AndroidManifest.xml | 10 ++-- .../client/users/UserDetailViewModelTest.kt | 9 ++-- .../github/client/users/UsersViewModelTest.kt | 11 +++- .../client/users/di/TestUsersComponent.kt | 2 - .../model/GitHubApiUsersRepositoryTest.kt | 5 +- settings.gradle | 1 + 29 files changed, 416 insertions(+), 44 deletions(-) create mode 100644 app/src/debug/res/xml/network_security_config.xml create mode 100644 core-android-testing/.gitignore create mode 100644 core-android-testing/build.gradle create mode 100644 core-android-testing/src/main/AndroidManifest.xml create mode 100644 core-android-testing/src/main/java/com/jraska/github/client/android/test/DeepLinksRecorder.kt create mode 100644 core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt create mode 100644 core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt create mode 100644 feature/users/src/androidTest/assets/users/two_users.json create mode 100644 feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestRunner.kt create mode 100644 feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt create mode 100644 feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersUITestApp.kt create mode 100644 feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt diff --git a/app/build.gradle b/app/build.gradle index a46475e8..f825a76c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,10 @@ android { srcDirs += ["../feature/about/src/androidTest/java"] srcDirs += ["../feature/users/src/androidTest/java"] } + sourceSets.androidTest.assets { + srcDirs += ["../feature/about/src/androidTest/assets"] + srcDirs += ["../feature/users/src/androidTest/assets"] + } } } @@ -157,10 +161,12 @@ dependencies { androidTestImplementation 'com.airbnb.okreplay:espresso:1.6.0' androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') + androidTestImplementation project(':core-android-testing') androidTestImplementation rootProject.ext.retrofit androidTestImplementation rootProject.ext.retrofitGsonConverter androidTestImplementation rootProject.ext.retrofitRxJavaAdapter + androidTestImplementation okHttpMockWebServer kaptAndroidTest rootProject.ext.daggerAnnotationProcessor } diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index 822258e7..923151fa 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -5,6 +5,8 @@ import androidx.test.platform.app.InstrumentationRegistry import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.ReplayHttpModule +import com.jraska.github.client.users.test.DeepLinkRecordingComponent +import com.jraska.github.client.users.test.FakeDeepLinkRecordingModule import dagger.BindsInstance import dagger.Component import javax.inject.Singleton @@ -30,8 +32,15 @@ class TestUITestApp : BaseApp() { } @Singleton -@Component(modules = [SharedModules::class, FakeCoreModule::class, ReplayHttpModule::class]) -interface TestAppComponent : AppComponent { +@Component( + modules = [ + SharedModules::class, + FakeCoreModule::class, + ReplayHttpModule::class, + FakeDeepLinkRecordingModule::class + ] +) +interface TestAppComponent : AppComponent, DeepLinkRecordingComponent { val config: FakeConfig @Component.Factory diff --git a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt index 7d59b37c..3d4d10ec 100644 --- a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt +++ b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt @@ -10,7 +10,6 @@ import dagger.Module import dagger.Provides import okhttp3.Interceptor import okhttp3.OkHttpClient -import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import okreplay.AndroidTapeRoot import okreplay.OkReplayConfig @@ -34,7 +33,6 @@ object ReplayHttpModule { } private val REPLAY_MEDIATOR = OkReplayMediator() - private const val NETWORK_ERROR_MESSAGE = "You are trying to do network requests in tests you naughty developer!" private fun createRetrofit(): Retrofit { return Retrofit.Builder() @@ -85,12 +83,7 @@ object ReplayHttpModule { REPLAY_MEDIATOR.configure(builder) - val noNetworkInterceptor = object : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { - throw UnsupportedOperationException(NETWORK_ERROR_MESSAGE) - } - } - builder.addNetworkInterceptor(noNetworkInterceptor) + builder.addInterceptor(MockWebServerInterceptor) return builder.build() } diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index b1dbf6cd..c104b5f4 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -1,7 +1,8 @@ - + - + diff --git a/app/src/debug/res/xml/network_security_config.xml b/app/src/debug/res/xml/network_security_config.xml new file mode 100644 index 00000000..d4950ca4 --- /dev/null +++ b/app/src/debug/res/xml/network_security_config.xml @@ -0,0 +1,6 @@ + + + + localhost + + diff --git a/core-android-api/src/main/java/com/jraska/github/client/core/android/LinkLauncher.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/LinkLauncher.kt index c9903093..a238c579 100644 --- a/core-android-api/src/main/java/com/jraska/github/client/core/android/LinkLauncher.kt +++ b/core-android-api/src/main/java/com/jraska/github/client/core/android/LinkLauncher.kt @@ -14,7 +14,8 @@ interface LinkLauncher { } enum class Priority(val value: Int) { - EXACT_MATCH(0), - PATH_LENGTH(1) + TESTING(0), + EXACT_MATCH(1), + PATH_LENGTH(2) } } diff --git a/core-android-testing/.gitignore b/core-android-testing/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/core-android-testing/.gitignore @@ -0,0 +1 @@ +/build diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle new file mode 100644 index 00000000..e447a8ae --- /dev/null +++ b/core-android-testing/build.gradle @@ -0,0 +1,35 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion 30 + defaultConfig { + minSdkVersion 24 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } +} + +dependencies { + implementation project(':core-api') + implementation project(':core-android-api') + + kapt rootProject.ext.daggerAnnotationProcessor + implementation rootProject.ext.dagger + + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + + implementation okHttpMockWebServer + implementation rootProject.ext.okHttp + implementation 'com.squareup.okio:okio:2.10.0' + + implementation 'com.squareup.rx.idler:rx3-idler:0.11.0' +} diff --git a/core-android-testing/src/main/AndroidManifest.xml b/core-android-testing/src/main/AndroidManifest.xml new file mode 100644 index 00000000..a9624e89 --- /dev/null +++ b/core-android-testing/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/DeepLinksRecorder.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/DeepLinksRecorder.kt new file mode 100644 index 00000000..9d4c2a84 --- /dev/null +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/DeepLinksRecorder.kt @@ -0,0 +1,32 @@ +package com.jraska.github.client.android.test + +import android.app.Activity +import com.jraska.github.client.core.android.LinkLauncher +import okhttp3.HttpUrl + +class DeepLinksRecorder : LinkLauncher { + val linksLaunched = mutableListOf() + private var swallowLinks = false + + override fun priority() = LinkLauncher.Priority.TESTING + + override fun launch(inActivity: Activity, deepLink: HttpUrl): LinkLauncher.Result { + linksLaunched.add(deepLink) + + return if (swallowLinks) { + LinkLauncher.Result.LAUNCHED // swallows link only as recorded + } else { + LinkLauncher.Result.NOT_LAUNCHED + } + } + + fun usingLinkRecording(block: (DeepLinksRecorder) -> Unit) { + try { + swallowLinks = true + block(this) + } finally { + swallowLinks = false + linksLaunched.clear() + } + } +} diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt new file mode 100644 index 00000000..f192a0e0 --- /dev/null +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt @@ -0,0 +1,46 @@ +package com.jraska.github.client.android.test + +import android.app.Application +import androidx.lifecycle.ViewModel +import com.jraska.github.client.core.android.OnAppCreate +import com.jraska.github.client.core.android.ServiceModel +import com.squareup.rx3.idler.Rx3Idler +import dagger.Module +import dagger.Provides +import dagger.multibindings.ClassKey +import dagger.multibindings.IntoMap +import dagger.multibindings.IntoSet +import io.reactivex.rxjava3.plugins.RxJavaPlugins + +@Module +object FakeAndroidCoreModule { + + @Provides + @IntoMap + @ClassKey(ServiceModel::class) + internal fun provideServiceModel(): ServiceModel { + return object : ServiceModel {} // Make sure the collection is not empty + } + + @Provides + @IntoMap + @ClassKey(ViewModel::class) + internal fun provideViewModel(): ViewModel { + return object : ViewModel() {} // Make sure the collection is not empty + } + + @Provides + @IntoSet + fun startupRxIdlers() : OnAppCreate { + return object : OnAppCreate { + override fun onCreate(app: Application) { + RxJavaPlugins.setInitComputationSchedulerHandler( + Rx3Idler.create("RxJava 3.x Computation Scheduler") + ) + RxJavaPlugins.setInitIoSchedulerHandler( + Rx3Idler.create("RxJava 3.x IO Scheduler") + ) + } + } + } +} diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt new file mode 100644 index 00000000..2b17be4b --- /dev/null +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt @@ -0,0 +1,32 @@ +package com.jraska.github.client.users.test + +import androidx.test.platform.app.InstrumentationRegistry +import com.jraska.github.client.android.test.DeepLinksRecorder +import com.jraska.github.client.core.android.BaseApp +import com.jraska.github.client.core.android.LinkLauncher +import dagger.Module +import dagger.Provides +import dagger.multibindings.IntoSet +import javax.inject.Singleton + +@Module +object FakeDeepLinkRecordingModule { + + @Provides + @Singleton + fun recordingLauncher() = DeepLinksRecorder() + + @Provides + @IntoSet + fun linkLauncher(launcher: DeepLinksRecorder): LinkLauncher = launcher +} + +interface DeepLinkRecordingComponent { + val deepLinksRecorder: DeepLinksRecorder +} + +fun usingLinkRecording(block: (DeepLinksRecorder) -> Unit) { + val appComponent = (InstrumentationRegistry.getInstrumentation().targetContext.applicationContext as BaseApp).appComponent + + (appComponent as DeepLinkRecordingComponent).deepLinksRecorder.usingLinkRecording(block) +} diff --git a/core-testing/build.gradle b/core-testing/build.gradle index a6f57082..b00c0494 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -10,6 +10,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger + implementation 'junit:junit:4.13.2' implementation 'io.reactivex.rxjava3:rxjava:3.0.12' implementation rootProject.ext.retrofit diff --git a/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt b/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt index bf5758b5..d332ddc0 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt @@ -7,12 +7,8 @@ import javax.inject.Singleton @Module class FakeHttpModule { - val mockWebServer = MockWebServer() - - @Provides // will be singleton anyway as we have field - fun mockWebServer() = mockWebServer @Provides @Singleton - fun provideRetrofit() = HttpTest.retrofit(mockWebServer.url("/")) + fun provideRetrofit() = HttpTest.retrofit() } diff --git a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt index bb65a5b2..01592786 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt @@ -1,22 +1,32 @@ package com.jraska.github.client.http import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Interceptor import okhttp3.OkHttpClient +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer +import org.junit.rules.ExternalResource import retrofit2.Retrofit import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import java.io.File object HttpTest { - fun retrofit(baseUrl: HttpUrl): Retrofit { + private val DEFAULT_BASE_URL = "https://api.github.com".toHttpUrl() + + fun retrofit(baseUrl: HttpUrl = DEFAULT_BASE_URL): Retrofit { return Retrofit.Builder() .baseUrl(baseUrl) - .client(OkHttpClient.Builder().addInterceptor(HttpLoggingInterceptor { println(it) }.apply { - level = HttpLoggingInterceptor.Level.BASIC - }).build()) + .client( + OkHttpClient.Builder() + .also { if (baseUrl == DEFAULT_BASE_URL) it.addInterceptor(MockWebServerInterceptor) } // TODO: 30/4/21 Hack - unification of network mocking needed + .addInterceptor(HttpLoggingInterceptor { println(it) }.apply { + level = HttpLoggingInterceptor.Level.BASIC + }).build() + ) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() @@ -51,3 +61,24 @@ internal fun json(path: String): String { return String(file.readBytes()) } +object MockWebServerInterceptor : Interceptor { + var mockWebServer: MockWebServer? = null + + override fun intercept(chain: Interceptor.Chain): Response { + val webServer = mockWebServer ?: throw UnsupportedOperationException("You are trying to do network requests in tests you naughty developer!") + + val newRequest = chain.request().newBuilder().url(webServer.url(chain.request().url.encodedPath)).build() + return chain.proceed(newRequest) + } +} + +class MockWebServerInterceptorRule(private val mockWebServer: MockWebServer) : ExternalResource() { + override fun before() { + MockWebServerInterceptor.mockWebServer = mockWebServer + } + + override fun after() { + MockWebServerInterceptor.mockWebServer = null + } +} + diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt index 5fbbed7f..c9e0ff72 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt @@ -1,11 +1,13 @@ package com.jraska.github.client.repo import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.http.enqueue import com.jraska.github.client.repo.di.DaggerTestRepoComponent import com.jraska.github.client.repo.di.TestRepoComponent import com.jraska.github.client.repo.model.GitHubApiRepoRepositoryTest import com.jraska.livedata.test +import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Rule @@ -16,6 +18,10 @@ internal class RepoDetailViewModelTest { @get:Rule val testRule = InstantTaskExecutorRule() + @get:Rule val mockWebServer = MockWebServer() + + @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + lateinit var component: TestRepoComponent lateinit var repoDetailViewModel: RepoDetailViewModel @@ -27,8 +33,8 @@ internal class RepoDetailViewModelTest { @Test fun whenLoadThenLoadsProperRepoDetail() { - component.mockWebServer.enqueue("response/repo_detail.json") - component.mockWebServer.enqueue("response/repo_pulls.json") + mockWebServer.enqueue("response/repo_detail.json") + mockWebServer.enqueue("response/repo_pulls.json") val showRepo = repoDetailViewModel.repoDetail("jraska/github-client") .test() @@ -46,8 +52,8 @@ internal class RepoDetailViewModelTest { @Test fun whenErrorThenLoadsErrorState() { - component.mockWebServer.enqueue("response/error.json") - component.mockWebServer.enqueue("response/error.json") + mockWebServer.enqueue("response/error.json") + mockWebServer.enqueue("response/error.json") val state = repoDetailViewModel.repoDetail("jraska/github-client") .test() diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt index 94ecd28e..d9c541b2 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/di/TestRepoComponent.kt @@ -13,7 +13,5 @@ import javax.inject.Singleton internal interface TestRepoComponent { fun repoDetailViewModel(): RepoDetailViewModel - val mockWebServer: MockWebServer - val fakeSnackbarDisplay: FakeSnackbarDisplay } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index c7e6f991..2b2f1b44 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { minSdkVersion 24 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "com.jraska.github.client.users.test.TestRunner" } compileOptions { @@ -56,4 +56,13 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:rules:1.3.0' + + kaptAndroidTest rootProject.ext.daggerAnnotationProcessor + androidTestImplementation project(':core-testing') + androidTestImplementation project(':core-android-testing') + androidTestImplementation project(':core') + androidTestImplementation okHttpMockWebServer + androidTestImplementation 'com.jakewharton.timber:timber:4.7.1' } diff --git a/feature/users/src/androidTest/assets/users/two_users.json b/feature/users/src/androidTest/assets/users/two_users.json new file mode 100644 index 00000000..ba219835 --- /dev/null +++ b/feature/users/src/androidTest/assets/users/two_users.json @@ -0,0 +1,42 @@ +[ + { + "login": "mojombo", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://avatars0.githubusercontent.com/u/1?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars0.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + } +] diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestRunner.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestRunner.kt new file mode 100644 index 00000000..c4f89f04 --- /dev/null +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestRunner.kt @@ -0,0 +1,12 @@ +package com.jraska.github.client.users.test + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner + +@Suppress("unused") // build.gradle +class TestRunner : AndroidJUnitRunner() { + override fun newApplication(cl: ClassLoader, className: String, context: Context): Application { + return super.newApplication(cl, TestUsersUITestApp::class.java.name, context) + } +} diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt new file mode 100644 index 00000000..f55f40a1 --- /dev/null +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt @@ -0,0 +1,42 @@ +package com.jraska.github.client.users.test + +import android.content.Context +import com.jraska.github.client.FakeCoreModule +import com.jraska.github.client.FakeWebLinkModule +import com.jraska.github.client.android.test.FakeAndroidCoreModule +import com.jraska.github.client.core.android.AppBaseComponent +import com.jraska.github.client.core.android.CoreAndroidModule +import com.jraska.github.client.http.HttpTest +import com.jraska.github.client.users.UsersModule +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +@Singleton +@Component( + modules = [ + FakeCoreModule::class, + FakeAndroidCoreModule::class, + FakeHttpModule::class, + FakeWebLinkModule::class, + FakeDeepLinkRecordingModule::class, + UsersModule::class, + CoreAndroidModule::class + ] +) +interface TestUsersComponent : AppBaseComponent, DeepLinkRecordingComponent { + @Component.Factory + interface Factory { + fun create(@BindsInstance context: Context): TestUsersComponent + } +} + +// TODO: 21/04/2021 Unify the network mocking with app to have only one fake http module +@Module +class FakeHttpModule { + @Provides + @Singleton + fun provideRetrofit() = HttpTest.retrofit() +} diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersUITestApp.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersUITestApp.kt new file mode 100644 index 00000000..2652fcfe --- /dev/null +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersUITestApp.kt @@ -0,0 +1,10 @@ +package com.jraska.github.client.users.test + +import com.jraska.github.client.core.android.BaseApp + +class TestUsersUITestApp : BaseApp() { + override val appComponent + get() = testUsersComponent + + val testUsersComponent by lazy { DaggerTestUsersComponent.factory().create(this) } +} diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt new file mode 100644 index 00000000..c9f9921d --- /dev/null +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt @@ -0,0 +1,50 @@ +package com.jraska.github.client.users.test + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.rule.ActivityTestRule +import com.jraska.github.client.http.MockWebServerInterceptorRule +import com.jraska.github.client.users.ui.UsersActivity +import okhttp3.mockwebserver.MockResponse +import okhttp3.mockwebserver.MockWebServer +import org.assertj.core.api.Assertions.assertThat +import org.junit.Rule +import org.junit.Test + +class UsersActivityTest { + + @get:Rule + val mockWebServer = MockWebServer() + + @get:Rule + val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + + @get:Rule + val rule = ActivityTestRule(UsersActivity::class.java) + + @Test + fun testLaunches() { + mockWebServer.enqueue(twoUsersResponse()) + + usingLinkRecording { + onView(withText("defunkt")).perform(click()) + + val lastScreen = it.linksLaunched.last() + assertThat(lastScreen.toString()).isEqualTo("https://github.com/defunkt") + + onView(withText("mojombo")).perform(click()) + val nextScreen = it.linksLaunched.last() + assertThat(nextScreen.toString()).isEqualTo("https://github.com/mojombo") + } + } + + private fun twoUsersResponse(): MockResponse { + val assetsStream = InstrumentationRegistry.getInstrumentation().context.assets.open("users/two_users.json") + + val json = assetsStream.bufferedReader().readText() + + return MockResponse().setResponseCode(200).setBody(json) + } +} diff --git a/feature/users/src/main/AndroidManifest.xml b/feature/users/src/main/AndroidManifest.xml index 08cbf5f5..dd567df4 100644 --- a/feature/users/src/main/AndroidManifest.xml +++ b/feature/users/src/main/AndroidManifest.xml @@ -1,8 +1,12 @@ - + + + - - + + diff --git a/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt index f6b7b474..7bbf27af 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/UserDetailViewModelTest.kt @@ -1,6 +1,7 @@ package com.jraska.github.client.users import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.http.enqueue import com.jraska.github.client.http.onUrlPartReturn import com.jraska.github.client.http.onUrlReturn @@ -21,14 +22,16 @@ class UserDetailViewModelTest { @get:Rule val testRule = InstantTaskExecutorRule() + @get:Rule val mockWebServer = MockWebServer() + + @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + private lateinit var viewModel: UserDetailViewModel - private lateinit var mockWebServer: MockWebServer @Before fun before() { val component = DaggerTestUsersComponent.create() viewModel = component.userDetailViewModel() - mockWebServer = component.mockWebServer } @Test @@ -39,8 +42,6 @@ class UserDetailViewModelTest { val observer = viewModel.userDetail("jraska") .test() -// Thread.sleep(200) - val displayUser = observer.value() as UserDetailViewModel.ViewState.DisplayUser assertThat(displayUser.user).usingRecursiveComparison().isEqualTo(testDetail()) diff --git a/feature/users/src/test/java/com/jraska/github/client/users/UsersViewModelTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/UsersViewModelTest.kt index 73fa80f2..ed7efb75 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/UsersViewModelTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/UsersViewModelTest.kt @@ -1,9 +1,12 @@ package com.jraska.github.client.users import androidx.arch.core.executor.testing.InstantTaskExecutorRule +import com.jraska.github.client.http.MockWebServerInterceptor +import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.http.enqueue import com.jraska.github.client.users.di.DaggerTestUsersComponent import com.jraska.livedata.test +import okhttp3.mockwebserver.MockWebServer import org.junit.Before import org.junit.Rule import org.junit.Test @@ -11,6 +14,10 @@ import org.junit.Test class UsersViewModelTest { @get:Rule val testRule = InstantTaskExecutorRule() + @get:Rule val mockWebServer = MockWebServer() + + @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + private lateinit var viewModel: UsersViewModel @Before @@ -18,8 +25,8 @@ class UsersViewModelTest { val component = DaggerTestUsersComponent.create() viewModel = component.usersViewModel() - component.mockWebServer.enqueue("response/users.json") - component.mockWebServer.enqueue("response/users_with_extra.json") + mockWebServer.enqueue("response/users.json") + mockWebServer.enqueue("response/users_with_extra.json") } @Test diff --git a/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt b/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt index c674c40f..f174d322 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/di/TestUsersComponent.kt @@ -16,6 +16,4 @@ internal interface TestUsersComponent { fun usersViewModel(): UsersViewModel fun userDetailViewModel(): UserDetailViewModel - - val mockWebServer: MockWebServer } diff --git a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt index 58ffd9d3..07865217 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt @@ -10,11 +10,14 @@ import io.reactivex.rxjava3.schedulers.Schedulers import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before +import org.junit.Rule import org.junit.Test class GitHubApiUsersRepositoryTest { + @get:Rule val mockWebServer = MockWebServer() + internal lateinit var repository: GitHubApiUsersRepository @Before @@ -26,8 +29,6 @@ class GitHubApiUsersRepositoryTest { fun getsUsersProperly() { mockWebServer.enqueue("response/users.json") - println(Thread.currentThread().id) - val users = repository.getUsers(0) .test() .values() diff --git a/settings.gradle b/settings.gradle index 171da33a..4a3bab6f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,6 +6,7 @@ include ':app', ':core', ':core-api', ':core-testing', + ':core-android-testing', ':core-android-api', ':navigation-api', ':feature:ui-common-api', From eb51f66c367cbc7f411e9a34b7c26e8851c353aa Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 1 May 2021 01:11:20 +0200 Subject: [PATCH 029/621] Remove ok replay and use direct mocking (#505) * Remove OkReplay from deeplink tests * Completely replace OkReplay --- app/build.gradle | 6 - .../androidTest/assets/response/defunkt.json | 34 + .../assets/response/defunkt_repos.json | 496 ++++++++ .../androidTest/assets/response/mojombo.json | 34 + .../assets/response/mojombo_repos.json | 496 ++++++++ .../assets/response/repo_detail.json | 103 ++ .../assets/response/repo_hurl.json | 103 ++ .../assets/response/repo_pulls.json | 1016 +++++++++++++++++ .../androidTest/assets/response/users.json | 602 ++++++++++ .../assets/response/users_no_defunkt.json | 582 ++++++++++ ...k_then_user_detail_activity_displayed.yaml | 143 --- ...epo_link_then_repo_activity_displayed.yaml | 67 -- ...rs_link_then_users_activity_displayed.yaml | 65 -- .../when_about_then_opens_about.yaml | 33 - ...n_refreshes_then_displays_other_users.yaml | 65 -- .../when_settings_then_reports_event.yaml | 34 - .../when_starts_then_displays_users.yaml | 159 --- .../github/client/DeepLinkLaunchTest.kt | 28 +- .../github/client/http/OkReplayMediator.kt | 76 -- .../github/client/http/ReplayHttpModule.kt | 86 +- .../client/users/UsersActivityFlowTest.kt | 45 +- .../client/android/test/http/MockWebServer.kt | 11 + .../com/jraska/github/client/http/HttpTest.kt | 16 +- .../github/client/http/MapDispatcher.kt | 14 +- .../client/users/test/UsersActivityTest.kt | 7 +- .../client/users/model/GitHubUsersApi.kt | 2 +- 26 files changed, 3547 insertions(+), 776 deletions(-) create mode 100644 app/src/androidTest/assets/response/defunkt.json create mode 100644 app/src/androidTest/assets/response/defunkt_repos.json create mode 100644 app/src/androidTest/assets/response/mojombo.json create mode 100644 app/src/androidTest/assets/response/mojombo_repos.json create mode 100644 app/src/androidTest/assets/response/repo_detail.json create mode 100644 app/src/androidTest/assets/response/repo_hurl.json create mode 100644 app/src/androidTest/assets/response/repo_pulls.json create mode 100644 app/src/androidTest/assets/response/users.json create mode 100644 app/src/androidTest/assets/response/users_no_defunkt.json delete mode 100644 app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_detail_link_then_user_detail_activity_displayed.yaml delete mode 100644 app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_repo_link_then_repo_activity_displayed.yaml delete mode 100644 app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_users_link_then_users_activity_displayed.yaml delete mode 100644 app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_about_then_opens_about.yaml delete mode 100644 app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_refreshes_then_displays_other_users.yaml delete mode 100644 app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_settings_then_reports_event.yaml delete mode 100644 app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_starts_then_displays_users.yaml delete mode 100644 app/src/androidTest/java/com/jraska/github/client/http/OkReplayMediator.kt create mode 100644 core-android-testing/src/main/java/com/jraska/github/client/android/test/http/MockWebServer.kt diff --git a/app/build.gradle b/app/build.gradle index f825a76c..a8154743 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,10 +31,6 @@ android { testInstrumentationRunner "com.jraska.github.client.TestRunner" } - adbOptions { - installOptions "-g" - } - compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 @@ -157,8 +153,6 @@ dependencies { androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' - androidTestImplementation 'com.airbnb.okreplay:okreplay:1.6.0' - androidTestImplementation 'com.airbnb.okreplay:espresso:1.6.0' androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') diff --git a/app/src/androidTest/assets/response/defunkt.json b/app/src/androidTest/assets/response/defunkt.json new file mode 100644 index 00000000..2bb37dd7 --- /dev/null +++ b/app/src/androidTest/assets/response/defunkt.json @@ -0,0 +1,34 @@ +{ + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false, + "name": "Chris Wanstrath", + "company": null, + "blog": "http://chriswanstrath.com/", + "location": null, + "email": null, + "hireable": null, + "bio": "🍔", + "twitter_username": null, + "public_repos": 107, + "public_gists": 273, + "followers": 21194, + "following": 210, + "created_at": "2007-10-20T05:24:19Z", + "updated_at": "2019-11-01T21:56:00Z" +} diff --git a/app/src/androidTest/assets/response/defunkt_repos.json b/app/src/androidTest/assets/response/defunkt_repos.json new file mode 100644 index 00000000..e31c09e1 --- /dev/null +++ b/app/src/androidTest/assets/response/defunkt_repos.json @@ -0,0 +1,496 @@ +[ + { + "id": 21462973, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTQ2Mjk3Mw==", + "name": "wang-iterm-zsh", + "full_name": "0532/wang-iterm-zsh", + "private": false, + "owner": { + "login": "0532", + "id": 5317048, + "node_id": "MDQ6VXNlcjUzMTcwNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/5317048?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/0532", + "html_url": "https://github.com/0532", + "followers_url": "https://api.github.com/users/0532/followers", + "following_url": "https://api.github.com/users/0532/following{/other_user}", + "gists_url": "https://api.github.com/users/0532/gists{/gist_id}", + "starred_url": "https://api.github.com/users/0532/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/0532/subscriptions", + "organizations_url": "https://api.github.com/users/0532/orgs", + "repos_url": "https://api.github.com/users/0532/repos", + "events_url": "https://api.github.com/users/0532/events{/privacy}", + "received_events_url": "https://api.github.com/users/0532/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/0532/wang-iterm-zsh", + "description": "The theme and colors for Oh My ZSH and iTerm", + "fork": false, + "url": "https://api.github.com/repos/0532/wang-iterm-zsh", + "forks_url": "https://api.github.com/repos/0532/wang-iterm-zsh/forks", + "keys_url": "https://api.github.com/repos/0532/wang-iterm-zsh/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/0532/wang-iterm-zsh/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/0532/wang-iterm-zsh/teams", + "hooks_url": "https://api.github.com/repos/0532/wang-iterm-zsh/hooks", + "issue_events_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues/events{/number}", + "events_url": "https://api.github.com/repos/0532/wang-iterm-zsh/events", + "assignees_url": "https://api.github.com/repos/0532/wang-iterm-zsh/assignees{/user}", + "branches_url": "https://api.github.com/repos/0532/wang-iterm-zsh/branches{/branch}", + "tags_url": "https://api.github.com/repos/0532/wang-iterm-zsh/tags", + "blobs_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/0532/wang-iterm-zsh/statuses/{sha}", + "languages_url": "https://api.github.com/repos/0532/wang-iterm-zsh/languages", + "stargazers_url": "https://api.github.com/repos/0532/wang-iterm-zsh/stargazers", + "contributors_url": "https://api.github.com/repos/0532/wang-iterm-zsh/contributors", + "subscribers_url": "https://api.github.com/repos/0532/wang-iterm-zsh/subscribers", + "subscription_url": "https://api.github.com/repos/0532/wang-iterm-zsh/subscription", + "commits_url": "https://api.github.com/repos/0532/wang-iterm-zsh/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/0532/wang-iterm-zsh/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/0532/wang-iterm-zsh/contents/{+path}", + "compare_url": "https://api.github.com/repos/0532/wang-iterm-zsh/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/0532/wang-iterm-zsh/merges", + "archive_url": "https://api.github.com/repos/0532/wang-iterm-zsh/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/0532/wang-iterm-zsh/downloads", + "issues_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues{/number}", + "pulls_url": "https://api.github.com/repos/0532/wang-iterm-zsh/pulls{/number}", + "milestones_url": "https://api.github.com/repos/0532/wang-iterm-zsh/milestones{/number}", + "notifications_url": "https://api.github.com/repos/0532/wang-iterm-zsh/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/0532/wang-iterm-zsh/labels{/name}", + "releases_url": "https://api.github.com/repos/0532/wang-iterm-zsh/releases{/id}", + "deployments_url": "https://api.github.com/repos/0532/wang-iterm-zsh/deployments", + "created_at": "2014-07-03T13:13:14Z", + "updated_at": "2019-08-13T15:45:13Z", + "pushed_at": "2016-08-08T08:34:46Z", + "git_url": "git://github.com/0532/wang-iterm-zsh.git", + "ssh_url": "git@github.com:0532/wang-iterm-zsh.git", + "clone_url": "https://github.com/0532/wang-iterm-zsh.git", + "svn_url": "https://github.com/0532/wang-iterm-zsh", + "homepage": "", + "size": 22306, + "stargazers_count": 5, + "watchers_count": 5, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "forks": 0, + "open_issues": 0, + "watchers": 5, + "default_branch": "master" + }, + { + "id": 2258398, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjU4Mzk4", + "name": "charlock_holmes", + "full_name": "brianmario/charlock_holmes", + "private": false, + "owner": { + "login": "brianmario", + "id": 11571, + "node_id": "MDQ6VXNlcjExNTcx", + "avatar_url": "https://avatars.githubusercontent.com/u/11571?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/brianmario", + "html_url": "https://github.com/brianmario", + "followers_url": "https://api.github.com/users/brianmario/followers", + "following_url": "https://api.github.com/users/brianmario/following{/other_user}", + "gists_url": "https://api.github.com/users/brianmario/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brianmario/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brianmario/subscriptions", + "organizations_url": "https://api.github.com/users/brianmario/orgs", + "repos_url": "https://api.github.com/users/brianmario/repos", + "events_url": "https://api.github.com/users/brianmario/events{/privacy}", + "received_events_url": "https://api.github.com/users/brianmario/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/brianmario/charlock_holmes", + "description": "Character encoding detection, brought to you by ICU", + "fork": false, + "url": "https://api.github.com/repos/brianmario/charlock_holmes", + "forks_url": "https://api.github.com/repos/brianmario/charlock_holmes/forks", + "keys_url": "https://api.github.com/repos/brianmario/charlock_holmes/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/brianmario/charlock_holmes/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/brianmario/charlock_holmes/teams", + "hooks_url": "https://api.github.com/repos/brianmario/charlock_holmes/hooks", + "issue_events_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues/events{/number}", + "events_url": "https://api.github.com/repos/brianmario/charlock_holmes/events", + "assignees_url": "https://api.github.com/repos/brianmario/charlock_holmes/assignees{/user}", + "branches_url": "https://api.github.com/repos/brianmario/charlock_holmes/branches{/branch}", + "tags_url": "https://api.github.com/repos/brianmario/charlock_holmes/tags", + "blobs_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/brianmario/charlock_holmes/statuses/{sha}", + "languages_url": "https://api.github.com/repos/brianmario/charlock_holmes/languages", + "stargazers_url": "https://api.github.com/repos/brianmario/charlock_holmes/stargazers", + "contributors_url": "https://api.github.com/repos/brianmario/charlock_holmes/contributors", + "subscribers_url": "https://api.github.com/repos/brianmario/charlock_holmes/subscribers", + "subscription_url": "https://api.github.com/repos/brianmario/charlock_holmes/subscription", + "commits_url": "https://api.github.com/repos/brianmario/charlock_holmes/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/brianmario/charlock_holmes/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/brianmario/charlock_holmes/contents/{+path}", + "compare_url": "https://api.github.com/repos/brianmario/charlock_holmes/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/brianmario/charlock_holmes/merges", + "archive_url": "https://api.github.com/repos/brianmario/charlock_holmes/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/brianmario/charlock_holmes/downloads", + "issues_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues{/number}", + "pulls_url": "https://api.github.com/repos/brianmario/charlock_holmes/pulls{/number}", + "milestones_url": "https://api.github.com/repos/brianmario/charlock_holmes/milestones{/number}", + "notifications_url": "https://api.github.com/repos/brianmario/charlock_holmes/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/brianmario/charlock_holmes/labels{/name}", + "releases_url": "https://api.github.com/repos/brianmario/charlock_holmes/releases{/id}", + "deployments_url": "https://api.github.com/repos/brianmario/charlock_holmes/deployments", + "created_at": "2011-08-23T22:53:03Z", + "updated_at": "2021-04-03T09:35:12Z", + "pushed_at": "2020-12-12T18:56:34Z", + "git_url": "git://github.com/brianmario/charlock_holmes.git", + "ssh_url": "git@github.com:brianmario/charlock_holmes.git", + "clone_url": "https://github.com/brianmario/charlock_holmes.git", + "svn_url": "https://github.com/brianmario/charlock_holmes", + "homepage": "", + "size": 85207, + "stargazers_count": 923, + "watchers_count": 923, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 118, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 52, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 118, + "open_issues": 52, + "watchers": 923, + "default_branch": "master" + }, + { + "id": 1653, + "node_id": "MDEwOlJlcG9zaXRvcnkxNjUz", + "name": "github-gem", + "full_name": "defunkt/github-gem", + "private": false, + "owner": { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/defunkt/github-gem", + "description": "`github` command line helper for simplifying your GitHub experience.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/github-gem", + "forks_url": "https://api.github.com/repos/defunkt/github-gem/forks", + "keys_url": "https://api.github.com/repos/defunkt/github-gem/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/github-gem/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/github-gem/teams", + "hooks_url": "https://api.github.com/repos/defunkt/github-gem/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/github-gem/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/github-gem/events", + "assignees_url": "https://api.github.com/repos/defunkt/github-gem/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/github-gem/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/github-gem/tags", + "blobs_url": "https://api.github.com/repos/defunkt/github-gem/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/github-gem/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/github-gem/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/github-gem/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/github-gem/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/github-gem/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/github-gem/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/github-gem/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/github-gem/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/github-gem/subscription", + "commits_url": "https://api.github.com/repos/defunkt/github-gem/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/github-gem/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/github-gem/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/github-gem/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/github-gem/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/github-gem/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/github-gem/merges", + "archive_url": "https://api.github.com/repos/defunkt/github-gem/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/github-gem/downloads", + "issues_url": "https://api.github.com/repos/defunkt/github-gem/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/github-gem/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/github-gem/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/github-gem/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/github-gem/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/github-gem/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/github-gem/deployments", + "created_at": "2008-02-28T09:35:34Z", + "updated_at": "2021-03-29T13:41:05Z", + "pushed_at": "2015-09-30T08:29:14Z", + "git_url": "git://github.com/defunkt/github-gem.git", + "ssh_url": "git@github.com:defunkt/github-gem.git", + "clone_url": "https://github.com/defunkt/github-gem.git", + "svn_url": "https://github.com/defunkt/github-gem", + "homepage": "http://github.com", + "size": 673, + "stargazers_count": 1108, + "watchers_count": 1108, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": false, + "forks_count": 201, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 60, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 201, + "open_issues": 60, + "watchers": 1108, + "default_branch": "master" + }, + { + "id": 305244, + "node_id": "MDEwOlJlcG9zaXRvcnkzMDUyNDQ=", + "name": "hurl", + "full_name": "defunkt/hurl", + "private": false, + "owner": { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/defunkt/hurl", + "description": "Hurl makes HTTP requests.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/hurl", + "forks_url": "https://api.github.com/repos/defunkt/hurl/forks", + "keys_url": "https://api.github.com/repos/defunkt/hurl/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/hurl/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/hurl/teams", + "hooks_url": "https://api.github.com/repos/defunkt/hurl/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/hurl/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/hurl/events", + "assignees_url": "https://api.github.com/repos/defunkt/hurl/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/hurl/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/hurl/tags", + "blobs_url": "https://api.github.com/repos/defunkt/hurl/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/hurl/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/hurl/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/hurl/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/hurl/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/hurl/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/hurl/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/hurl/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/hurl/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/hurl/subscription", + "commits_url": "https://api.github.com/repos/defunkt/hurl/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/hurl/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/hurl/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/hurl/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/hurl/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/hurl/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/hurl/merges", + "archive_url": "https://api.github.com/repos/defunkt/hurl/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/hurl/downloads", + "issues_url": "https://api.github.com/repos/defunkt/hurl/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/hurl/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/hurl/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/hurl/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/hurl/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/hurl/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/hurl/deployments", + "created_at": "2009-09-12T19:40:26Z", + "updated_at": "2021-01-13T19:27:08Z", + "pushed_at": "2019-12-19T17:52:19Z", + "git_url": "git://github.com/defunkt/hurl.git", + "ssh_url": "git@github.com:defunkt/hurl.git", + "clone_url": "https://github.com/defunkt/hurl.git", + "svn_url": "https://github.com/defunkt/hurl", + "homepage": "http://hurl.it", + "size": 4239, + "stargazers_count": 523, + "watchers_count": 523, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": true, + "forks_count": 86, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 86, + "open_issues": 17, + "watchers": 523, + "default_branch": "master" + }, + { + "id": 33744138, + "node_id": "MDEwOlJlcG9zaXRvcnkzMzc0NDEzOA==", + "name": "hackclub", + "full_name": "hackclub/hackclub", + "private": false, + "owner": { + "login": "hackclub", + "id": 5633654, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjU2MzM2NTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/5633654?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hackclub", + "html_url": "https://github.com/hackclub", + "followers_url": "https://api.github.com/users/hackclub/followers", + "following_url": "https://api.github.com/users/hackclub/following{/other_user}", + "gists_url": "https://api.github.com/users/hackclub/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hackclub/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hackclub/subscriptions", + "organizations_url": "https://api.github.com/users/hackclub/orgs", + "repos_url": "https://api.github.com/users/hackclub/repos", + "events_url": "https://api.github.com/users/hackclub/events{/privacy}", + "received_events_url": "https://api.github.com/users/hackclub/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/hackclub/hackclub", + "description": "🎓🏫 Hack Club is a nonprofit network of computer science clubs where members learn to code through tinkering and building projects", + "fork": false, + "url": "https://api.github.com/repos/hackclub/hackclub", + "forks_url": "https://api.github.com/repos/hackclub/hackclub/forks", + "keys_url": "https://api.github.com/repos/hackclub/hackclub/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hackclub/hackclub/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hackclub/hackclub/teams", + "hooks_url": "https://api.github.com/repos/hackclub/hackclub/hooks", + "issue_events_url": "https://api.github.com/repos/hackclub/hackclub/issues/events{/number}", + "events_url": "https://api.github.com/repos/hackclub/hackclub/events", + "assignees_url": "https://api.github.com/repos/hackclub/hackclub/assignees{/user}", + "branches_url": "https://api.github.com/repos/hackclub/hackclub/branches{/branch}", + "tags_url": "https://api.github.com/repos/hackclub/hackclub/tags", + "blobs_url": "https://api.github.com/repos/hackclub/hackclub/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hackclub/hackclub/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hackclub/hackclub/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hackclub/hackclub/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hackclub/hackclub/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hackclub/hackclub/languages", + "stargazers_url": "https://api.github.com/repos/hackclub/hackclub/stargazers", + "contributors_url": "https://api.github.com/repos/hackclub/hackclub/contributors", + "subscribers_url": "https://api.github.com/repos/hackclub/hackclub/subscribers", + "subscription_url": "https://api.github.com/repos/hackclub/hackclub/subscription", + "commits_url": "https://api.github.com/repos/hackclub/hackclub/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hackclub/hackclub/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hackclub/hackclub/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hackclub/hackclub/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hackclub/hackclub/contents/{+path}", + "compare_url": "https://api.github.com/repos/hackclub/hackclub/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hackclub/hackclub/merges", + "archive_url": "https://api.github.com/repos/hackclub/hackclub/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hackclub/hackclub/downloads", + "issues_url": "https://api.github.com/repos/hackclub/hackclub/issues{/number}", + "pulls_url": "https://api.github.com/repos/hackclub/hackclub/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hackclub/hackclub/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hackclub/hackclub/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hackclub/hackclub/labels{/name}", + "releases_url": "https://api.github.com/repos/hackclub/hackclub/releases{/id}", + "deployments_url": "https://api.github.com/repos/hackclub/hackclub/deployments", + "created_at": "2015-04-10T18:28:39Z", + "updated_at": "2021-04-04T12:03:52Z", + "pushed_at": "2021-04-01T02:34:57Z", + "git_url": "git://github.com/hackclub/hackclub.git", + "ssh_url": "git@github.com:hackclub/hackclub.git", + "clone_url": "https://github.com/hackclub/hackclub.git", + "svn_url": "https://github.com/hackclub/hackclub", + "homepage": "https://hackclub.com/", + "size": 646809, + "stargazers_count": 2012, + "watchers_count": 2012, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 426, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "forks": 426, + "open_issues": 5, + "watchers": 2012, + "default_branch": "main" + } +] diff --git a/app/src/androidTest/assets/response/mojombo.json b/app/src/androidTest/assets/response/mojombo.json new file mode 100644 index 00000000..d9e1c28e --- /dev/null +++ b/app/src/androidTest/assets/response/mojombo.json @@ -0,0 +1,34 @@ +{ + "login": "mojombo", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false, + "name": "Tom Preston-Werner", + "company": "@chatterbugapp, @redwoodjs, @preston-werner-ventures ", + "blog": "http://tom.preston-werner.com", + "location": "San Francisco", + "email": null, + "hireable": null, + "bio": null, + "twitter_username": "mojombo", + "public_repos": 62, + "public_gists": 62, + "followers": 22407, + "following": 11, + "created_at": "2007-10-20T05:24:19Z", + "updated_at": "2021-03-18T22:50:53Z" +} diff --git a/app/src/androidTest/assets/response/mojombo_repos.json b/app/src/androidTest/assets/response/mojombo_repos.json new file mode 100644 index 00000000..e31c09e1 --- /dev/null +++ b/app/src/androidTest/assets/response/mojombo_repos.json @@ -0,0 +1,496 @@ +[ + { + "id": 21462973, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTQ2Mjk3Mw==", + "name": "wang-iterm-zsh", + "full_name": "0532/wang-iterm-zsh", + "private": false, + "owner": { + "login": "0532", + "id": 5317048, + "node_id": "MDQ6VXNlcjUzMTcwNDg=", + "avatar_url": "https://avatars.githubusercontent.com/u/5317048?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/0532", + "html_url": "https://github.com/0532", + "followers_url": "https://api.github.com/users/0532/followers", + "following_url": "https://api.github.com/users/0532/following{/other_user}", + "gists_url": "https://api.github.com/users/0532/gists{/gist_id}", + "starred_url": "https://api.github.com/users/0532/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/0532/subscriptions", + "organizations_url": "https://api.github.com/users/0532/orgs", + "repos_url": "https://api.github.com/users/0532/repos", + "events_url": "https://api.github.com/users/0532/events{/privacy}", + "received_events_url": "https://api.github.com/users/0532/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/0532/wang-iterm-zsh", + "description": "The theme and colors for Oh My ZSH and iTerm", + "fork": false, + "url": "https://api.github.com/repos/0532/wang-iterm-zsh", + "forks_url": "https://api.github.com/repos/0532/wang-iterm-zsh/forks", + "keys_url": "https://api.github.com/repos/0532/wang-iterm-zsh/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/0532/wang-iterm-zsh/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/0532/wang-iterm-zsh/teams", + "hooks_url": "https://api.github.com/repos/0532/wang-iterm-zsh/hooks", + "issue_events_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues/events{/number}", + "events_url": "https://api.github.com/repos/0532/wang-iterm-zsh/events", + "assignees_url": "https://api.github.com/repos/0532/wang-iterm-zsh/assignees{/user}", + "branches_url": "https://api.github.com/repos/0532/wang-iterm-zsh/branches{/branch}", + "tags_url": "https://api.github.com/repos/0532/wang-iterm-zsh/tags", + "blobs_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/0532/wang-iterm-zsh/statuses/{sha}", + "languages_url": "https://api.github.com/repos/0532/wang-iterm-zsh/languages", + "stargazers_url": "https://api.github.com/repos/0532/wang-iterm-zsh/stargazers", + "contributors_url": "https://api.github.com/repos/0532/wang-iterm-zsh/contributors", + "subscribers_url": "https://api.github.com/repos/0532/wang-iterm-zsh/subscribers", + "subscription_url": "https://api.github.com/repos/0532/wang-iterm-zsh/subscription", + "commits_url": "https://api.github.com/repos/0532/wang-iterm-zsh/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/0532/wang-iterm-zsh/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/0532/wang-iterm-zsh/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/0532/wang-iterm-zsh/contents/{+path}", + "compare_url": "https://api.github.com/repos/0532/wang-iterm-zsh/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/0532/wang-iterm-zsh/merges", + "archive_url": "https://api.github.com/repos/0532/wang-iterm-zsh/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/0532/wang-iterm-zsh/downloads", + "issues_url": "https://api.github.com/repos/0532/wang-iterm-zsh/issues{/number}", + "pulls_url": "https://api.github.com/repos/0532/wang-iterm-zsh/pulls{/number}", + "milestones_url": "https://api.github.com/repos/0532/wang-iterm-zsh/milestones{/number}", + "notifications_url": "https://api.github.com/repos/0532/wang-iterm-zsh/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/0532/wang-iterm-zsh/labels{/name}", + "releases_url": "https://api.github.com/repos/0532/wang-iterm-zsh/releases{/id}", + "deployments_url": "https://api.github.com/repos/0532/wang-iterm-zsh/deployments", + "created_at": "2014-07-03T13:13:14Z", + "updated_at": "2019-08-13T15:45:13Z", + "pushed_at": "2016-08-08T08:34:46Z", + "git_url": "git://github.com/0532/wang-iterm-zsh.git", + "ssh_url": "git@github.com:0532/wang-iterm-zsh.git", + "clone_url": "https://github.com/0532/wang-iterm-zsh.git", + "svn_url": "https://github.com/0532/wang-iterm-zsh", + "homepage": "", + "size": 22306, + "stargazers_count": 5, + "watchers_count": 5, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "forks": 0, + "open_issues": 0, + "watchers": 5, + "default_branch": "master" + }, + { + "id": 2258398, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjU4Mzk4", + "name": "charlock_holmes", + "full_name": "brianmario/charlock_holmes", + "private": false, + "owner": { + "login": "brianmario", + "id": 11571, + "node_id": "MDQ6VXNlcjExNTcx", + "avatar_url": "https://avatars.githubusercontent.com/u/11571?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/brianmario", + "html_url": "https://github.com/brianmario", + "followers_url": "https://api.github.com/users/brianmario/followers", + "following_url": "https://api.github.com/users/brianmario/following{/other_user}", + "gists_url": "https://api.github.com/users/brianmario/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brianmario/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brianmario/subscriptions", + "organizations_url": "https://api.github.com/users/brianmario/orgs", + "repos_url": "https://api.github.com/users/brianmario/repos", + "events_url": "https://api.github.com/users/brianmario/events{/privacy}", + "received_events_url": "https://api.github.com/users/brianmario/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/brianmario/charlock_holmes", + "description": "Character encoding detection, brought to you by ICU", + "fork": false, + "url": "https://api.github.com/repos/brianmario/charlock_holmes", + "forks_url": "https://api.github.com/repos/brianmario/charlock_holmes/forks", + "keys_url": "https://api.github.com/repos/brianmario/charlock_holmes/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/brianmario/charlock_holmes/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/brianmario/charlock_holmes/teams", + "hooks_url": "https://api.github.com/repos/brianmario/charlock_holmes/hooks", + "issue_events_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues/events{/number}", + "events_url": "https://api.github.com/repos/brianmario/charlock_holmes/events", + "assignees_url": "https://api.github.com/repos/brianmario/charlock_holmes/assignees{/user}", + "branches_url": "https://api.github.com/repos/brianmario/charlock_holmes/branches{/branch}", + "tags_url": "https://api.github.com/repos/brianmario/charlock_holmes/tags", + "blobs_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/brianmario/charlock_holmes/statuses/{sha}", + "languages_url": "https://api.github.com/repos/brianmario/charlock_holmes/languages", + "stargazers_url": "https://api.github.com/repos/brianmario/charlock_holmes/stargazers", + "contributors_url": "https://api.github.com/repos/brianmario/charlock_holmes/contributors", + "subscribers_url": "https://api.github.com/repos/brianmario/charlock_holmes/subscribers", + "subscription_url": "https://api.github.com/repos/brianmario/charlock_holmes/subscription", + "commits_url": "https://api.github.com/repos/brianmario/charlock_holmes/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/brianmario/charlock_holmes/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/brianmario/charlock_holmes/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/brianmario/charlock_holmes/contents/{+path}", + "compare_url": "https://api.github.com/repos/brianmario/charlock_holmes/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/brianmario/charlock_holmes/merges", + "archive_url": "https://api.github.com/repos/brianmario/charlock_holmes/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/brianmario/charlock_holmes/downloads", + "issues_url": "https://api.github.com/repos/brianmario/charlock_holmes/issues{/number}", + "pulls_url": "https://api.github.com/repos/brianmario/charlock_holmes/pulls{/number}", + "milestones_url": "https://api.github.com/repos/brianmario/charlock_holmes/milestones{/number}", + "notifications_url": "https://api.github.com/repos/brianmario/charlock_holmes/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/brianmario/charlock_holmes/labels{/name}", + "releases_url": "https://api.github.com/repos/brianmario/charlock_holmes/releases{/id}", + "deployments_url": "https://api.github.com/repos/brianmario/charlock_holmes/deployments", + "created_at": "2011-08-23T22:53:03Z", + "updated_at": "2021-04-03T09:35:12Z", + "pushed_at": "2020-12-12T18:56:34Z", + "git_url": "git://github.com/brianmario/charlock_holmes.git", + "ssh_url": "git@github.com:brianmario/charlock_holmes.git", + "clone_url": "https://github.com/brianmario/charlock_holmes.git", + "svn_url": "https://github.com/brianmario/charlock_holmes", + "homepage": "", + "size": 85207, + "stargazers_count": 923, + "watchers_count": 923, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 118, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 52, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 118, + "open_issues": 52, + "watchers": 923, + "default_branch": "master" + }, + { + "id": 1653, + "node_id": "MDEwOlJlcG9zaXRvcnkxNjUz", + "name": "github-gem", + "full_name": "defunkt/github-gem", + "private": false, + "owner": { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/defunkt/github-gem", + "description": "`github` command line helper for simplifying your GitHub experience.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/github-gem", + "forks_url": "https://api.github.com/repos/defunkt/github-gem/forks", + "keys_url": "https://api.github.com/repos/defunkt/github-gem/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/github-gem/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/github-gem/teams", + "hooks_url": "https://api.github.com/repos/defunkt/github-gem/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/github-gem/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/github-gem/events", + "assignees_url": "https://api.github.com/repos/defunkt/github-gem/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/github-gem/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/github-gem/tags", + "blobs_url": "https://api.github.com/repos/defunkt/github-gem/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/github-gem/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/github-gem/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/github-gem/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/github-gem/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/github-gem/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/github-gem/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/github-gem/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/github-gem/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/github-gem/subscription", + "commits_url": "https://api.github.com/repos/defunkt/github-gem/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/github-gem/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/github-gem/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/github-gem/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/github-gem/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/github-gem/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/github-gem/merges", + "archive_url": "https://api.github.com/repos/defunkt/github-gem/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/github-gem/downloads", + "issues_url": "https://api.github.com/repos/defunkt/github-gem/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/github-gem/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/github-gem/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/github-gem/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/github-gem/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/github-gem/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/github-gem/deployments", + "created_at": "2008-02-28T09:35:34Z", + "updated_at": "2021-03-29T13:41:05Z", + "pushed_at": "2015-09-30T08:29:14Z", + "git_url": "git://github.com/defunkt/github-gem.git", + "ssh_url": "git@github.com:defunkt/github-gem.git", + "clone_url": "https://github.com/defunkt/github-gem.git", + "svn_url": "https://github.com/defunkt/github-gem", + "homepage": "http://github.com", + "size": 673, + "stargazers_count": 1108, + "watchers_count": 1108, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": false, + "forks_count": 201, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 60, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 201, + "open_issues": 60, + "watchers": 1108, + "default_branch": "master" + }, + { + "id": 305244, + "node_id": "MDEwOlJlcG9zaXRvcnkzMDUyNDQ=", + "name": "hurl", + "full_name": "defunkt/hurl", + "private": false, + "owner": { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/defunkt/hurl", + "description": "Hurl makes HTTP requests.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/hurl", + "forks_url": "https://api.github.com/repos/defunkt/hurl/forks", + "keys_url": "https://api.github.com/repos/defunkt/hurl/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/hurl/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/hurl/teams", + "hooks_url": "https://api.github.com/repos/defunkt/hurl/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/hurl/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/hurl/events", + "assignees_url": "https://api.github.com/repos/defunkt/hurl/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/hurl/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/hurl/tags", + "blobs_url": "https://api.github.com/repos/defunkt/hurl/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/hurl/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/hurl/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/hurl/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/hurl/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/hurl/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/hurl/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/hurl/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/hurl/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/hurl/subscription", + "commits_url": "https://api.github.com/repos/defunkt/hurl/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/hurl/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/hurl/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/hurl/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/hurl/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/hurl/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/hurl/merges", + "archive_url": "https://api.github.com/repos/defunkt/hurl/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/hurl/downloads", + "issues_url": "https://api.github.com/repos/defunkt/hurl/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/hurl/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/hurl/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/hurl/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/hurl/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/hurl/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/hurl/deployments", + "created_at": "2009-09-12T19:40:26Z", + "updated_at": "2021-01-13T19:27:08Z", + "pushed_at": "2019-12-19T17:52:19Z", + "git_url": "git://github.com/defunkt/hurl.git", + "ssh_url": "git@github.com:defunkt/hurl.git", + "clone_url": "https://github.com/defunkt/hurl.git", + "svn_url": "https://github.com/defunkt/hurl", + "homepage": "http://hurl.it", + "size": 4239, + "stargazers_count": 523, + "watchers_count": 523, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": true, + "forks_count": 86, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 86, + "open_issues": 17, + "watchers": 523, + "default_branch": "master" + }, + { + "id": 33744138, + "node_id": "MDEwOlJlcG9zaXRvcnkzMzc0NDEzOA==", + "name": "hackclub", + "full_name": "hackclub/hackclub", + "private": false, + "owner": { + "login": "hackclub", + "id": 5633654, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjU2MzM2NTQ=", + "avatar_url": "https://avatars.githubusercontent.com/u/5633654?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hackclub", + "html_url": "https://github.com/hackclub", + "followers_url": "https://api.github.com/users/hackclub/followers", + "following_url": "https://api.github.com/users/hackclub/following{/other_user}", + "gists_url": "https://api.github.com/users/hackclub/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hackclub/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hackclub/subscriptions", + "organizations_url": "https://api.github.com/users/hackclub/orgs", + "repos_url": "https://api.github.com/users/hackclub/repos", + "events_url": "https://api.github.com/users/hackclub/events{/privacy}", + "received_events_url": "https://api.github.com/users/hackclub/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/hackclub/hackclub", + "description": "🎓🏫 Hack Club is a nonprofit network of computer science clubs where members learn to code through tinkering and building projects", + "fork": false, + "url": "https://api.github.com/repos/hackclub/hackclub", + "forks_url": "https://api.github.com/repos/hackclub/hackclub/forks", + "keys_url": "https://api.github.com/repos/hackclub/hackclub/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hackclub/hackclub/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hackclub/hackclub/teams", + "hooks_url": "https://api.github.com/repos/hackclub/hackclub/hooks", + "issue_events_url": "https://api.github.com/repos/hackclub/hackclub/issues/events{/number}", + "events_url": "https://api.github.com/repos/hackclub/hackclub/events", + "assignees_url": "https://api.github.com/repos/hackclub/hackclub/assignees{/user}", + "branches_url": "https://api.github.com/repos/hackclub/hackclub/branches{/branch}", + "tags_url": "https://api.github.com/repos/hackclub/hackclub/tags", + "blobs_url": "https://api.github.com/repos/hackclub/hackclub/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hackclub/hackclub/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hackclub/hackclub/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hackclub/hackclub/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hackclub/hackclub/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hackclub/hackclub/languages", + "stargazers_url": "https://api.github.com/repos/hackclub/hackclub/stargazers", + "contributors_url": "https://api.github.com/repos/hackclub/hackclub/contributors", + "subscribers_url": "https://api.github.com/repos/hackclub/hackclub/subscribers", + "subscription_url": "https://api.github.com/repos/hackclub/hackclub/subscription", + "commits_url": "https://api.github.com/repos/hackclub/hackclub/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hackclub/hackclub/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hackclub/hackclub/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hackclub/hackclub/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hackclub/hackclub/contents/{+path}", + "compare_url": "https://api.github.com/repos/hackclub/hackclub/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hackclub/hackclub/merges", + "archive_url": "https://api.github.com/repos/hackclub/hackclub/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hackclub/hackclub/downloads", + "issues_url": "https://api.github.com/repos/hackclub/hackclub/issues{/number}", + "pulls_url": "https://api.github.com/repos/hackclub/hackclub/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hackclub/hackclub/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hackclub/hackclub/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hackclub/hackclub/labels{/name}", + "releases_url": "https://api.github.com/repos/hackclub/hackclub/releases{/id}", + "deployments_url": "https://api.github.com/repos/hackclub/hackclub/deployments", + "created_at": "2015-04-10T18:28:39Z", + "updated_at": "2021-04-04T12:03:52Z", + "pushed_at": "2021-04-01T02:34:57Z", + "git_url": "git://github.com/hackclub/hackclub.git", + "ssh_url": "git@github.com:hackclub/hackclub.git", + "clone_url": "https://github.com/hackclub/hackclub.git", + "svn_url": "https://github.com/hackclub/hackclub", + "homepage": "https://hackclub.com/", + "size": 646809, + "stargazers_count": 2012, + "watchers_count": 2012, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 426, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 5, + "license": { + "key": "other", + "name": "Other", + "spdx_id": "NOASSERTION", + "url": null, + "node_id": "MDc6TGljZW5zZTA=" + }, + "forks": 426, + "open_issues": 5, + "watchers": 2012, + "default_branch": "main" + } +] diff --git a/app/src/androidTest/assets/response/repo_detail.json b/app/src/androidTest/assets/response/repo_detail.json new file mode 100644 index 00000000..5ec3b8fe --- /dev/null +++ b/app/src/androidTest/assets/response/repo_detail.json @@ -0,0 +1,103 @@ +{ + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master", + "temp_clone_token": null, + "network_count": 41, + "subscribers_count": 16 +} diff --git a/app/src/androidTest/assets/response/repo_hurl.json b/app/src/androidTest/assets/response/repo_hurl.json new file mode 100644 index 00000000..35c7589a --- /dev/null +++ b/app/src/androidTest/assets/response/repo_hurl.json @@ -0,0 +1,103 @@ +{ + "id": 305244, + "node_id": "MDEwOlJlcG9zaXRvcnkzMDUyNDQ=", + "name": "hurl", + "full_name": "defunkt/hurl", + "private": false, + "owner": { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/defunkt/hurl", + "description": "Hurl makes HTTP requests.", + "fork": false, + "url": "https://api.github.com/repos/defunkt/hurl", + "forks_url": "https://api.github.com/repos/defunkt/hurl/forks", + "keys_url": "https://api.github.com/repos/defunkt/hurl/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/defunkt/hurl/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/defunkt/hurl/teams", + "hooks_url": "https://api.github.com/repos/defunkt/hurl/hooks", + "issue_events_url": "https://api.github.com/repos/defunkt/hurl/issues/events{/number}", + "events_url": "https://api.github.com/repos/defunkt/hurl/events", + "assignees_url": "https://api.github.com/repos/defunkt/hurl/assignees{/user}", + "branches_url": "https://api.github.com/repos/defunkt/hurl/branches{/branch}", + "tags_url": "https://api.github.com/repos/defunkt/hurl/tags", + "blobs_url": "https://api.github.com/repos/defunkt/hurl/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/defunkt/hurl/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/defunkt/hurl/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/defunkt/hurl/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/defunkt/hurl/statuses/{sha}", + "languages_url": "https://api.github.com/repos/defunkt/hurl/languages", + "stargazers_url": "https://api.github.com/repos/defunkt/hurl/stargazers", + "contributors_url": "https://api.github.com/repos/defunkt/hurl/contributors", + "subscribers_url": "https://api.github.com/repos/defunkt/hurl/subscribers", + "subscription_url": "https://api.github.com/repos/defunkt/hurl/subscription", + "commits_url": "https://api.github.com/repos/defunkt/hurl/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/defunkt/hurl/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/defunkt/hurl/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/defunkt/hurl/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/defunkt/hurl/contents/{+path}", + "compare_url": "https://api.github.com/repos/defunkt/hurl/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/defunkt/hurl/merges", + "archive_url": "https://api.github.com/repos/defunkt/hurl/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/defunkt/hurl/downloads", + "issues_url": "https://api.github.com/repos/defunkt/hurl/issues{/number}", + "pulls_url": "https://api.github.com/repos/defunkt/hurl/pulls{/number}", + "milestones_url": "https://api.github.com/repos/defunkt/hurl/milestones{/number}", + "notifications_url": "https://api.github.com/repos/defunkt/hurl/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/defunkt/hurl/labels{/name}", + "releases_url": "https://api.github.com/repos/defunkt/hurl/releases{/id}", + "deployments_url": "https://api.github.com/repos/defunkt/hurl/deployments", + "created_at": "2009-09-12T19:40:26Z", + "updated_at": "2021-01-13T19:27:08Z", + "pushed_at": "2019-12-19T17:52:19Z", + "git_url": "git://github.com/defunkt/hurl.git", + "ssh_url": "git@github.com:defunkt/hurl.git", + "clone_url": "https://github.com/defunkt/hurl.git", + "svn_url": "https://github.com/defunkt/hurl", + "homepage": "http://hurl.it", + "size": 4239, + "stargazers_count": 523, + "watchers_count": 523, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": true, + "forks_count": 85, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 17, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "forks": 85, + "open_issues": 17, + "watchers": 523, + "default_branch": "master", + "temp_clone_token": null, + "network_count": 85, + "subscribers_count": 13 +} diff --git a/app/src/androidTest/assets/response/repo_pulls.json b/app/src/androidTest/assets/response/repo_pulls.json new file mode 100644 index 00000000..629a7069 --- /dev/null +++ b/app/src/androidTest/assets/response/repo_pulls.json @@ -0,0 +1,1016 @@ +[ + { + "url": "https://api.github.com/repos/jraska/Falcon/pulls/53", + "id": 580400854, + "node_id": "MDExOlB1bGxSZXF1ZXN0NTgwNDAwODU0", + "html_url": "https://github.com/jraska/Falcon/pull/53", + "diff_url": "https://github.com/jraska/Falcon/pull/53.diff", + "patch_url": "https://github.com/jraska/Falcon/pull/53.patch", + "issue_url": "https://api.github.com/repos/jraska/Falcon/issues/53", + "number": 53, + "state": "closed", + "locked": false, + "title": "Add JCenter update to Readme", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "body": "", + "created_at": "2021-02-25T20:55:57Z", + "updated_at": "2021-02-25T20:56:44Z", + "closed_at": "2021-02-25T20:56:44Z", + "merged_at": "2021-02-25T20:56:44Z", + "merge_commit_sha": "71e2c117e549d0e1607938880a223123b2db151a", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + + ], + "milestone": null, + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/Falcon/pulls/53/commits", + "review_comments_url": "https://api.github.com/repos/jraska/Falcon/pulls/53/comments", + "review_comment_url": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/issues/53/comments", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/d095403620a2a587dc1543bdf9a082f124f3d344", + "head": { + "label": "jraska:jraska-patch-2", + "ref": "jraska-patch-2", + "sha": "d095403620a2a587dc1543bdf9a082f124f3d344", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "bf8100136eee32cc64e7e93746eb7fd9aa2c9cdf", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/53" + }, + "html": { + "href": "https://github.com/jraska/Falcon/pull/53" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/53" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/53/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/53/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/53/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/Falcon/statuses/d095403620a2a587dc1543bdf9a082f124f3d344" + } + }, + "author_association": "OWNER", + "auto_merge": null, + "active_lock_reason": null + }, + { + "url": "https://api.github.com/repos/jraska/Falcon/pulls/49", + "id": 432719583, + "node_id": "MDExOlB1bGxSZXF1ZXN0NDMyNzE5NTgz", + "html_url": "https://github.com/jraska/Falcon/pull/49", + "diff_url": "https://github.com/jraska/Falcon/pull/49.diff", + "patch_url": "https://github.com/jraska/Falcon/pull/49.patch", + "issue_url": "https://api.github.com/repos/jraska/Falcon/issues/49", + "number": 49, + "state": "closed", + "locked": false, + "title": "Use implementation instead of long time deprecated compile", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "body": "", + "created_at": "2020-06-10T21:45:47Z", + "updated_at": "2020-06-10T21:46:29Z", + "closed_at": "2020-06-10T21:46:29Z", + "merged_at": "2020-06-10T21:46:29Z", + "merge_commit_sha": "bf8100136eee32cc64e7e93746eb7fd9aa2c9cdf", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + + ], + "milestone": null, + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/Falcon/pulls/49/commits", + "review_comments_url": "https://api.github.com/repos/jraska/Falcon/pulls/49/comments", + "review_comment_url": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/issues/49/comments", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/eee3c71fb0fb9f702d507826b074519b3ecb2028", + "head": { + "label": "jraska:jraska-patch-1", + "ref": "jraska-patch-1", + "sha": "eee3c71fb0fb9f702d507826b074519b3ecb2028", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "5bb9722bf9fd9dc3a3901b702c63143f915683c0", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/49" + }, + "html": { + "href": "https://github.com/jraska/Falcon/pull/49" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/49" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/49/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/49/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/49/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/Falcon/statuses/eee3c71fb0fb9f702d507826b074519b3ecb2028" + } + }, + "author_association": "OWNER", + "auto_merge": null, + "active_lock_reason": null + }, + { + "url": "https://api.github.com/repos/jraska/Falcon/pulls/7", + "id": 70105771, + "node_id": "MDExOlB1bGxSZXF1ZXN0NzAxMDU3NzE=", + "html_url": "https://github.com/jraska/Falcon/pull/7", + "diff_url": "https://github.com/jraska/Falcon/pull/7.diff", + "patch_url": "https://github.com/jraska/Falcon/pull/7.patch", + "issue_url": "https://api.github.com/repos/jraska/Falcon/issues/7", + "number": 7, + "state": "closed", + "locked": false, + "title": "Make UI tests pass on Travis", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "body": "", + "created_at": "2016-05-14T22:30:34Z", + "updated_at": "2016-05-14T22:31:12Z", + "closed_at": "2016-05-14T22:30:58Z", + "merged_at": "2016-05-14T22:30:58Z", + "merge_commit_sha": "e637a1c4a55683ea7ce6188d0b6ddf5dcc13dc1e", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + + ], + "milestone": null, + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/Falcon/pulls/7/commits", + "review_comments_url": "https://api.github.com/repos/jraska/Falcon/pulls/7/comments", + "review_comment_url": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/issues/7/comments", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/a99802cfeb0e36e84014337427a720319451039c", + "head": { + "label": "jraska:ui-tests-fix", + "ref": "ui-tests-fix", + "sha": "a99802cfeb0e36e84014337427a720319451039c", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "42926bd2bfcf9b3cad8b3757509c5a2bdabda6a4", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 42816069, + "node_id": "MDEwOlJlcG9zaXRvcnk0MjgxNjA2OQ==", + "name": "Falcon", + "full_name": "jraska/Falcon", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/Falcon", + "description": "Take Android screenshots with Falcons bright eye!", + "fork": false, + "url": "https://api.github.com/repos/jraska/Falcon", + "forks_url": "https://api.github.com/repos/jraska/Falcon/forks", + "keys_url": "https://api.github.com/repos/jraska/Falcon/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/Falcon/teams", + "hooks_url": "https://api.github.com/repos/jraska/Falcon/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/Falcon/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/Falcon/events", + "assignees_url": "https://api.github.com/repos/jraska/Falcon/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/Falcon/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/Falcon/tags", + "blobs_url": "https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/Falcon/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/Falcon/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/Falcon/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/Falcon/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/Falcon/languages", + "stargazers_url": "https://api.github.com/repos/jraska/Falcon/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/Falcon/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/Falcon/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/Falcon/subscription", + "commits_url": "https://api.github.com/repos/jraska/Falcon/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/Falcon/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/Falcon/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/Falcon/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/Falcon/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/Falcon/merges", + "archive_url": "https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/Falcon/downloads", + "issues_url": "https://api.github.com/repos/jraska/Falcon/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/Falcon/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/Falcon/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/Falcon/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/Falcon/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/Falcon/deployments", + "created_at": "2015-09-20T14:31:21Z", + "updated_at": "2021-04-14T17:20:54Z", + "pushed_at": "2021-02-25T20:56:44Z", + "git_url": "git://github.com/jraska/Falcon.git", + "ssh_url": "git@github.com:jraska/Falcon.git", + "clone_url": "https://github.com/jraska/Falcon.git", + "svn_url": "https://github.com/jraska/Falcon", + "homepage": "", + "size": 312, + "stargazers_count": 364, + "watchers_count": 364, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 41, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 41, + "open_issues": 2, + "watchers": 364, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/7" + }, + "html": { + "href": "https://github.com/jraska/Falcon/pull/7" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/7" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/Falcon/issues/7/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/7/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/Falcon/pulls/7/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/Falcon/statuses/a99802cfeb0e36e84014337427a720319451039c" + } + }, + "author_association": "OWNER", + "auto_merge": null, + "active_lock_reason": null + } +] diff --git a/app/src/androidTest/assets/response/users.json b/app/src/androidTest/assets/response/users.json new file mode 100644 index 00000000..71581c12 --- /dev/null +++ b/app/src/androidTest/assets/response/users.json @@ -0,0 +1,602 @@ +[ + { + "login": "mojombo", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://avatars0.githubusercontent.com/u/1?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "defunkt", + "id": 2, + "node_id": "MDQ6VXNlcjI=", + "avatar_url": "https://avatars0.githubusercontent.com/u/2?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/defunkt", + "html_url": "https://github.com/defunkt", + "followers_url": "https://api.github.com/users/defunkt/followers", + "following_url": "https://api.github.com/users/defunkt/following{/other_user}", + "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions", + "organizations_url": "https://api.github.com/users/defunkt/orgs", + "repos_url": "https://api.github.com/users/defunkt/repos", + "events_url": "https://api.github.com/users/defunkt/events{/privacy}", + "received_events_url": "https://api.github.com/users/defunkt/received_events", + "type": "User", + "site_admin": true + }, + { + "login": "pjhyett", + "id": 3, + "node_id": "MDQ6VXNlcjM=", + "avatar_url": "https://avatars0.githubusercontent.com/u/3?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pjhyett", + "html_url": "https://github.com/pjhyett", + "followers_url": "https://api.github.com/users/pjhyett/followers", + "following_url": "https://api.github.com/users/pjhyett/following{/other_user}", + "gists_url": "https://api.github.com/users/pjhyett/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pjhyett/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pjhyett/subscriptions", + "organizations_url": "https://api.github.com/users/pjhyett/orgs", + "repos_url": "https://api.github.com/users/pjhyett/repos", + "events_url": "https://api.github.com/users/pjhyett/events{/privacy}", + "received_events_url": "https://api.github.com/users/pjhyett/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "wycats", + "id": 4, + "node_id": "MDQ6VXNlcjQ=", + "avatar_url": "https://avatars0.githubusercontent.com/u/4?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "ezmobius", + "id": 5, + "node_id": "MDQ6VXNlcjU=", + "avatar_url": "https://avatars0.githubusercontent.com/u/5?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezmobius", + "html_url": "https://github.com/ezmobius", + "followers_url": "https://api.github.com/users/ezmobius/followers", + "following_url": "https://api.github.com/users/ezmobius/following{/other_user}", + "gists_url": "https://api.github.com/users/ezmobius/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezmobius/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezmobius/subscriptions", + "organizations_url": "https://api.github.com/users/ezmobius/orgs", + "repos_url": "https://api.github.com/users/ezmobius/repos", + "events_url": "https://api.github.com/users/ezmobius/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezmobius/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "ivey", + "id": 6, + "node_id": "MDQ6VXNlcjY=", + "avatar_url": "https://avatars0.githubusercontent.com/u/6?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ivey", + "html_url": "https://github.com/ivey", + "followers_url": "https://api.github.com/users/ivey/followers", + "following_url": "https://api.github.com/users/ivey/following{/other_user}", + "gists_url": "https://api.github.com/users/ivey/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ivey/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ivey/subscriptions", + "organizations_url": "https://api.github.com/users/ivey/orgs", + "repos_url": "https://api.github.com/users/ivey/repos", + "events_url": "https://api.github.com/users/ivey/events{/privacy}", + "received_events_url": "https://api.github.com/users/ivey/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "evanphx", + "id": 7, + "node_id": "MDQ6VXNlcjc=", + "avatar_url": "https://avatars0.githubusercontent.com/u/7?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/evanphx", + "html_url": "https://github.com/evanphx", + "followers_url": "https://api.github.com/users/evanphx/followers", + "following_url": "https://api.github.com/users/evanphx/following{/other_user}", + "gists_url": "https://api.github.com/users/evanphx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/evanphx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/evanphx/subscriptions", + "organizations_url": "https://api.github.com/users/evanphx/orgs", + "repos_url": "https://api.github.com/users/evanphx/repos", + "events_url": "https://api.github.com/users/evanphx/events{/privacy}", + "received_events_url": "https://api.github.com/users/evanphx/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "vanpelt", + "id": 17, + "node_id": "MDQ6VXNlcjE3", + "avatar_url": "https://avatars1.githubusercontent.com/u/17?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vanpelt", + "html_url": "https://github.com/vanpelt", + "followers_url": "https://api.github.com/users/vanpelt/followers", + "following_url": "https://api.github.com/users/vanpelt/following{/other_user}", + "gists_url": "https://api.github.com/users/vanpelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vanpelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vanpelt/subscriptions", + "organizations_url": "https://api.github.com/users/vanpelt/orgs", + "repos_url": "https://api.github.com/users/vanpelt/repos", + "events_url": "https://api.github.com/users/vanpelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vanpelt/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "wayneeseguin", + "id": 18, + "node_id": "MDQ6VXNlcjE4", + "avatar_url": "https://avatars0.githubusercontent.com/u/18?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "brynary", + "id": 19, + "node_id": "MDQ6VXNlcjE5", + "avatar_url": "https://avatars0.githubusercontent.com/u/19?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/brynary", + "html_url": "https://github.com/brynary", + "followers_url": "https://api.github.com/users/brynary/followers", + "following_url": "https://api.github.com/users/brynary/following{/other_user}", + "gists_url": "https://api.github.com/users/brynary/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brynary/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brynary/subscriptions", + "organizations_url": "https://api.github.com/users/brynary/orgs", + "repos_url": "https://api.github.com/users/brynary/repos", + "events_url": "https://api.github.com/users/brynary/events{/privacy}", + "received_events_url": "https://api.github.com/users/brynary/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "kevinclark", + "id": 20, + "node_id": "MDQ6VXNlcjIw", + "avatar_url": "https://avatars3.githubusercontent.com/u/20?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevinclark", + "html_url": "https://github.com/kevinclark", + "followers_url": "https://api.github.com/users/kevinclark/followers", + "following_url": "https://api.github.com/users/kevinclark/following{/other_user}", + "gists_url": "https://api.github.com/users/kevinclark/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevinclark/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevinclark/subscriptions", + "organizations_url": "https://api.github.com/users/kevinclark/orgs", + "repos_url": "https://api.github.com/users/kevinclark/repos", + "events_url": "https://api.github.com/users/kevinclark/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevinclark/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "technoweenie", + "id": 21, + "node_id": "MDQ6VXNlcjIx", + "avatar_url": "https://avatars3.githubusercontent.com/u/21?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/technoweenie", + "html_url": "https://github.com/technoweenie", + "followers_url": "https://api.github.com/users/technoweenie/followers", + "following_url": "https://api.github.com/users/technoweenie/following{/other_user}", + "gists_url": "https://api.github.com/users/technoweenie/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technoweenie/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technoweenie/subscriptions", + "organizations_url": "https://api.github.com/users/technoweenie/orgs", + "repos_url": "https://api.github.com/users/technoweenie/repos", + "events_url": "https://api.github.com/users/technoweenie/events{/privacy}", + "received_events_url": "https://api.github.com/users/technoweenie/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "macournoyer", + "id": 22, + "node_id": "MDQ6VXNlcjIy", + "avatar_url": "https://avatars3.githubusercontent.com/u/22?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/macournoyer", + "html_url": "https://github.com/macournoyer", + "followers_url": "https://api.github.com/users/macournoyer/followers", + "following_url": "https://api.github.com/users/macournoyer/following{/other_user}", + "gists_url": "https://api.github.com/users/macournoyer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/macournoyer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/macournoyer/subscriptions", + "organizations_url": "https://api.github.com/users/macournoyer/orgs", + "repos_url": "https://api.github.com/users/macournoyer/repos", + "events_url": "https://api.github.com/users/macournoyer/events{/privacy}", + "received_events_url": "https://api.github.com/users/macournoyer/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "takeo", + "id": 23, + "node_id": "MDQ6VXNlcjIz", + "avatar_url": "https://avatars3.githubusercontent.com/u/23?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/takeo", + "html_url": "https://github.com/takeo", + "followers_url": "https://api.github.com/users/takeo/followers", + "following_url": "https://api.github.com/users/takeo/following{/other_user}", + "gists_url": "https://api.github.com/users/takeo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/takeo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/takeo/subscriptions", + "organizations_url": "https://api.github.com/users/takeo/orgs", + "repos_url": "https://api.github.com/users/takeo/repos", + "events_url": "https://api.github.com/users/takeo/events{/privacy}", + "received_events_url": "https://api.github.com/users/takeo/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "Caged", + "id": 25, + "node_id": "MDQ6VXNlcjI1", + "avatar_url": "https://avatars3.githubusercontent.com/u/25?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Caged", + "html_url": "https://github.com/Caged", + "followers_url": "https://api.github.com/users/Caged/followers", + "following_url": "https://api.github.com/users/Caged/following{/other_user}", + "gists_url": "https://api.github.com/users/Caged/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Caged/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Caged/subscriptions", + "organizations_url": "https://api.github.com/users/Caged/orgs", + "repos_url": "https://api.github.com/users/Caged/repos", + "events_url": "https://api.github.com/users/Caged/events{/privacy}", + "received_events_url": "https://api.github.com/users/Caged/received_events", + "type": "User", + "site_admin": true + }, + { + "login": "topfunky", + "id": 26, + "node_id": "MDQ6VXNlcjI2", + "avatar_url": "https://avatars3.githubusercontent.com/u/26?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/topfunky", + "html_url": "https://github.com/topfunky", + "followers_url": "https://api.github.com/users/topfunky/followers", + "following_url": "https://api.github.com/users/topfunky/following{/other_user}", + "gists_url": "https://api.github.com/users/topfunky/gists{/gist_id}", + "starred_url": "https://api.github.com/users/topfunky/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/topfunky/subscriptions", + "organizations_url": "https://api.github.com/users/topfunky/orgs", + "repos_url": "https://api.github.com/users/topfunky/repos", + "events_url": "https://api.github.com/users/topfunky/events{/privacy}", + "received_events_url": "https://api.github.com/users/topfunky/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "anotherjesse", + "id": 27, + "node_id": "MDQ6VXNlcjI3", + "avatar_url": "https://avatars3.githubusercontent.com/u/27?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "roland", + "id": 28, + "node_id": "MDQ6VXNlcjI4", + "avatar_url": "https://avatars2.githubusercontent.com/u/28?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/roland", + "html_url": "https://github.com/roland", + "followers_url": "https://api.github.com/users/roland/followers", + "following_url": "https://api.github.com/users/roland/following{/other_user}", + "gists_url": "https://api.github.com/users/roland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/roland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/roland/subscriptions", + "organizations_url": "https://api.github.com/users/roland/orgs", + "repos_url": "https://api.github.com/users/roland/repos", + "events_url": "https://api.github.com/users/roland/events{/privacy}", + "received_events_url": "https://api.github.com/users/roland/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "lukas", + "id": 29, + "node_id": "MDQ6VXNlcjI5", + "avatar_url": "https://avatars2.githubusercontent.com/u/29?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/lukas", + "html_url": "https://github.com/lukas", + "followers_url": "https://api.github.com/users/lukas/followers", + "following_url": "https://api.github.com/users/lukas/following{/other_user}", + "gists_url": "https://api.github.com/users/lukas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lukas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lukas/subscriptions", + "organizations_url": "https://api.github.com/users/lukas/orgs", + "repos_url": "https://api.github.com/users/lukas/repos", + "events_url": "https://api.github.com/users/lukas/events{/privacy}", + "received_events_url": "https://api.github.com/users/lukas/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "fanvsfan", + "id": 30, + "node_id": "MDQ6VXNlcjMw", + "avatar_url": "https://avatars2.githubusercontent.com/u/30?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fanvsfan", + "html_url": "https://github.com/fanvsfan", + "followers_url": "https://api.github.com/users/fanvsfan/followers", + "following_url": "https://api.github.com/users/fanvsfan/following{/other_user}", + "gists_url": "https://api.github.com/users/fanvsfan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fanvsfan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fanvsfan/subscriptions", + "organizations_url": "https://api.github.com/users/fanvsfan/orgs", + "repos_url": "https://api.github.com/users/fanvsfan/repos", + "events_url": "https://api.github.com/users/fanvsfan/events{/privacy}", + "received_events_url": "https://api.github.com/users/fanvsfan/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "tomtt", + "id": 31, + "node_id": "MDQ6VXNlcjMx", + "avatar_url": "https://avatars2.githubusercontent.com/u/31?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tomtt", + "html_url": "https://github.com/tomtt", + "followers_url": "https://api.github.com/users/tomtt/followers", + "following_url": "https://api.github.com/users/tomtt/following{/other_user}", + "gists_url": "https://api.github.com/users/tomtt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tomtt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tomtt/subscriptions", + "organizations_url": "https://api.github.com/users/tomtt/orgs", + "repos_url": "https://api.github.com/users/tomtt/repos", + "events_url": "https://api.github.com/users/tomtt/events{/privacy}", + "received_events_url": "https://api.github.com/users/tomtt/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "railsjitsu", + "id": 32, + "node_id": "MDQ6VXNlcjMy", + "avatar_url": "https://avatars2.githubusercontent.com/u/32?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/railsjitsu", + "html_url": "https://github.com/railsjitsu", + "followers_url": "https://api.github.com/users/railsjitsu/followers", + "following_url": "https://api.github.com/users/railsjitsu/following{/other_user}", + "gists_url": "https://api.github.com/users/railsjitsu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/railsjitsu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/railsjitsu/subscriptions", + "organizations_url": "https://api.github.com/users/railsjitsu/orgs", + "repos_url": "https://api.github.com/users/railsjitsu/repos", + "events_url": "https://api.github.com/users/railsjitsu/events{/privacy}", + "received_events_url": "https://api.github.com/users/railsjitsu/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "nitay", + "id": 34, + "node_id": "MDQ6VXNlcjM0", + "avatar_url": "https://avatars2.githubusercontent.com/u/34?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nitay", + "html_url": "https://github.com/nitay", + "followers_url": "https://api.github.com/users/nitay/followers", + "following_url": "https://api.github.com/users/nitay/following{/other_user}", + "gists_url": "https://api.github.com/users/nitay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nitay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nitay/subscriptions", + "organizations_url": "https://api.github.com/users/nitay/orgs", + "repos_url": "https://api.github.com/users/nitay/repos", + "events_url": "https://api.github.com/users/nitay/events{/privacy}", + "received_events_url": "https://api.github.com/users/nitay/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "kevwil", + "id": 35, + "node_id": "MDQ6VXNlcjM1", + "avatar_url": "https://avatars2.githubusercontent.com/u/35?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevwil", + "html_url": "https://github.com/kevwil", + "followers_url": "https://api.github.com/users/kevwil/followers", + "following_url": "https://api.github.com/users/kevwil/following{/other_user}", + "gists_url": "https://api.github.com/users/kevwil/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevwil/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevwil/subscriptions", + "organizations_url": "https://api.github.com/users/kevwil/orgs", + "repos_url": "https://api.github.com/users/kevwil/repos", + "events_url": "https://api.github.com/users/kevwil/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevwil/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "KirinDave", + "id": 36, + "node_id": "MDQ6VXNlcjM2", + "avatar_url": "https://avatars2.githubusercontent.com/u/36?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/KirinDave", + "html_url": "https://github.com/KirinDave", + "followers_url": "https://api.github.com/users/KirinDave/followers", + "following_url": "https://api.github.com/users/KirinDave/following{/other_user}", + "gists_url": "https://api.github.com/users/KirinDave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KirinDave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KirinDave/subscriptions", + "organizations_url": "https://api.github.com/users/KirinDave/orgs", + "repos_url": "https://api.github.com/users/KirinDave/repos", + "events_url": "https://api.github.com/users/KirinDave/events{/privacy}", + "received_events_url": "https://api.github.com/users/KirinDave/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "jamesgolick", + "id": 37, + "node_id": "MDQ6VXNlcjM3", + "avatar_url": "https://avatars2.githubusercontent.com/u/37?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesgolick", + "html_url": "https://github.com/jamesgolick", + "followers_url": "https://api.github.com/users/jamesgolick/followers", + "following_url": "https://api.github.com/users/jamesgolick/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesgolick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesgolick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesgolick/subscriptions", + "organizations_url": "https://api.github.com/users/jamesgolick/orgs", + "repos_url": "https://api.github.com/users/jamesgolick/repos", + "events_url": "https://api.github.com/users/jamesgolick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesgolick/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "atmos", + "id": 38, + "node_id": "MDQ6VXNlcjM4", + "avatar_url": "https://avatars3.githubusercontent.com/u/38?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/atmos", + "html_url": "https://github.com/atmos", + "followers_url": "https://api.github.com/users/atmos/followers", + "following_url": "https://api.github.com/users/atmos/following{/other_user}", + "gists_url": "https://api.github.com/users/atmos/gists{/gist_id}", + "starred_url": "https://api.github.com/users/atmos/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/atmos/subscriptions", + "organizations_url": "https://api.github.com/users/atmos/orgs", + "repos_url": "https://api.github.com/users/atmos/repos", + "events_url": "https://api.github.com/users/atmos/events{/privacy}", + "received_events_url": "https://api.github.com/users/atmos/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "errfree", + "id": 44, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjQ0", + "avatar_url": "https://avatars2.githubusercontent.com/u/44?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/errfree", + "html_url": "https://github.com/errfree", + "followers_url": "https://api.github.com/users/errfree/followers", + "following_url": "https://api.github.com/users/errfree/following{/other_user}", + "gists_url": "https://api.github.com/users/errfree/gists{/gist_id}", + "starred_url": "https://api.github.com/users/errfree/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/errfree/subscriptions", + "organizations_url": "https://api.github.com/users/errfree/orgs", + "repos_url": "https://api.github.com/users/errfree/repos", + "events_url": "https://api.github.com/users/errfree/events{/privacy}", + "received_events_url": "https://api.github.com/users/errfree/received_events", + "type": "Organization", + "site_admin": false + }, + { + "login": "mojodna", + "id": 45, + "node_id": "MDQ6VXNlcjQ1", + "avatar_url": "https://avatars2.githubusercontent.com/u/45?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojodna", + "html_url": "https://github.com/mojodna", + "followers_url": "https://api.github.com/users/mojodna/followers", + "following_url": "https://api.github.com/users/mojodna/following{/other_user}", + "gists_url": "https://api.github.com/users/mojodna/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojodna/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojodna/subscriptions", + "organizations_url": "https://api.github.com/users/mojodna/orgs", + "repos_url": "https://api.github.com/users/mojodna/repos", + "events_url": "https://api.github.com/users/mojodna/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojodna/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "bmizerany", + "id": 46, + "node_id": "MDQ6VXNlcjQ2", + "avatar_url": "https://avatars2.githubusercontent.com/u/46?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bmizerany", + "html_url": "https://github.com/bmizerany", + "followers_url": "https://api.github.com/users/bmizerany/followers", + "following_url": "https://api.github.com/users/bmizerany/following{/other_user}", + "gists_url": "https://api.github.com/users/bmizerany/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bmizerany/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bmizerany/subscriptions", + "organizations_url": "https://api.github.com/users/bmizerany/orgs", + "repos_url": "https://api.github.com/users/bmizerany/repos", + "events_url": "https://api.github.com/users/bmizerany/events{/privacy}", + "received_events_url": "https://api.github.com/users/bmizerany/received_events", + "type": "User", + "site_admin": false + } +] diff --git a/app/src/androidTest/assets/response/users_no_defunkt.json b/app/src/androidTest/assets/response/users_no_defunkt.json new file mode 100644 index 00000000..02671959 --- /dev/null +++ b/app/src/androidTest/assets/response/users_no_defunkt.json @@ -0,0 +1,582 @@ +[ + { + "login": "mojombo", + "id": 1, + "node_id": "MDQ6VXNlcjE=", + "avatar_url": "https://avatars0.githubusercontent.com/u/1?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "pjhyett", + "id": 3, + "node_id": "MDQ6VXNlcjM=", + "avatar_url": "https://avatars0.githubusercontent.com/u/3?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/pjhyett", + "html_url": "https://github.com/pjhyett", + "followers_url": "https://api.github.com/users/pjhyett/followers", + "following_url": "https://api.github.com/users/pjhyett/following{/other_user}", + "gists_url": "https://api.github.com/users/pjhyett/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pjhyett/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pjhyett/subscriptions", + "organizations_url": "https://api.github.com/users/pjhyett/orgs", + "repos_url": "https://api.github.com/users/pjhyett/repos", + "events_url": "https://api.github.com/users/pjhyett/events{/privacy}", + "received_events_url": "https://api.github.com/users/pjhyett/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "wycats", + "id": 4, + "node_id": "MDQ6VXNlcjQ=", + "avatar_url": "https://avatars0.githubusercontent.com/u/4?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wycats", + "html_url": "https://github.com/wycats", + "followers_url": "https://api.github.com/users/wycats/followers", + "following_url": "https://api.github.com/users/wycats/following{/other_user}", + "gists_url": "https://api.github.com/users/wycats/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wycats/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wycats/subscriptions", + "organizations_url": "https://api.github.com/users/wycats/orgs", + "repos_url": "https://api.github.com/users/wycats/repos", + "events_url": "https://api.github.com/users/wycats/events{/privacy}", + "received_events_url": "https://api.github.com/users/wycats/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "ezmobius", + "id": 5, + "node_id": "MDQ6VXNlcjU=", + "avatar_url": "https://avatars0.githubusercontent.com/u/5?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ezmobius", + "html_url": "https://github.com/ezmobius", + "followers_url": "https://api.github.com/users/ezmobius/followers", + "following_url": "https://api.github.com/users/ezmobius/following{/other_user}", + "gists_url": "https://api.github.com/users/ezmobius/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ezmobius/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ezmobius/subscriptions", + "organizations_url": "https://api.github.com/users/ezmobius/orgs", + "repos_url": "https://api.github.com/users/ezmobius/repos", + "events_url": "https://api.github.com/users/ezmobius/events{/privacy}", + "received_events_url": "https://api.github.com/users/ezmobius/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "ivey", + "id": 6, + "node_id": "MDQ6VXNlcjY=", + "avatar_url": "https://avatars0.githubusercontent.com/u/6?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ivey", + "html_url": "https://github.com/ivey", + "followers_url": "https://api.github.com/users/ivey/followers", + "following_url": "https://api.github.com/users/ivey/following{/other_user}", + "gists_url": "https://api.github.com/users/ivey/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ivey/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ivey/subscriptions", + "organizations_url": "https://api.github.com/users/ivey/orgs", + "repos_url": "https://api.github.com/users/ivey/repos", + "events_url": "https://api.github.com/users/ivey/events{/privacy}", + "received_events_url": "https://api.github.com/users/ivey/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "evanphx", + "id": 7, + "node_id": "MDQ6VXNlcjc=", + "avatar_url": "https://avatars0.githubusercontent.com/u/7?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/evanphx", + "html_url": "https://github.com/evanphx", + "followers_url": "https://api.github.com/users/evanphx/followers", + "following_url": "https://api.github.com/users/evanphx/following{/other_user}", + "gists_url": "https://api.github.com/users/evanphx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/evanphx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/evanphx/subscriptions", + "organizations_url": "https://api.github.com/users/evanphx/orgs", + "repos_url": "https://api.github.com/users/evanphx/repos", + "events_url": "https://api.github.com/users/evanphx/events{/privacy}", + "received_events_url": "https://api.github.com/users/evanphx/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "vanpelt", + "id": 17, + "node_id": "MDQ6VXNlcjE3", + "avatar_url": "https://avatars1.githubusercontent.com/u/17?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/vanpelt", + "html_url": "https://github.com/vanpelt", + "followers_url": "https://api.github.com/users/vanpelt/followers", + "following_url": "https://api.github.com/users/vanpelt/following{/other_user}", + "gists_url": "https://api.github.com/users/vanpelt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vanpelt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vanpelt/subscriptions", + "organizations_url": "https://api.github.com/users/vanpelt/orgs", + "repos_url": "https://api.github.com/users/vanpelt/repos", + "events_url": "https://api.github.com/users/vanpelt/events{/privacy}", + "received_events_url": "https://api.github.com/users/vanpelt/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "wayneeseguin", + "id": 18, + "node_id": "MDQ6VXNlcjE4", + "avatar_url": "https://avatars0.githubusercontent.com/u/18?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wayneeseguin", + "html_url": "https://github.com/wayneeseguin", + "followers_url": "https://api.github.com/users/wayneeseguin/followers", + "following_url": "https://api.github.com/users/wayneeseguin/following{/other_user}", + "gists_url": "https://api.github.com/users/wayneeseguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wayneeseguin/subscriptions", + "organizations_url": "https://api.github.com/users/wayneeseguin/orgs", + "repos_url": "https://api.github.com/users/wayneeseguin/repos", + "events_url": "https://api.github.com/users/wayneeseguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wayneeseguin/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "brynary", + "id": 19, + "node_id": "MDQ6VXNlcjE5", + "avatar_url": "https://avatars0.githubusercontent.com/u/19?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/brynary", + "html_url": "https://github.com/brynary", + "followers_url": "https://api.github.com/users/brynary/followers", + "following_url": "https://api.github.com/users/brynary/following{/other_user}", + "gists_url": "https://api.github.com/users/brynary/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brynary/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brynary/subscriptions", + "organizations_url": "https://api.github.com/users/brynary/orgs", + "repos_url": "https://api.github.com/users/brynary/repos", + "events_url": "https://api.github.com/users/brynary/events{/privacy}", + "received_events_url": "https://api.github.com/users/brynary/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "kevinclark", + "id": 20, + "node_id": "MDQ6VXNlcjIw", + "avatar_url": "https://avatars3.githubusercontent.com/u/20?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevinclark", + "html_url": "https://github.com/kevinclark", + "followers_url": "https://api.github.com/users/kevinclark/followers", + "following_url": "https://api.github.com/users/kevinclark/following{/other_user}", + "gists_url": "https://api.github.com/users/kevinclark/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevinclark/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevinclark/subscriptions", + "organizations_url": "https://api.github.com/users/kevinclark/orgs", + "repos_url": "https://api.github.com/users/kevinclark/repos", + "events_url": "https://api.github.com/users/kevinclark/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevinclark/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "technoweenie", + "id": 21, + "node_id": "MDQ6VXNlcjIx", + "avatar_url": "https://avatars3.githubusercontent.com/u/21?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/technoweenie", + "html_url": "https://github.com/technoweenie", + "followers_url": "https://api.github.com/users/technoweenie/followers", + "following_url": "https://api.github.com/users/technoweenie/following{/other_user}", + "gists_url": "https://api.github.com/users/technoweenie/gists{/gist_id}", + "starred_url": "https://api.github.com/users/technoweenie/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/technoweenie/subscriptions", + "organizations_url": "https://api.github.com/users/technoweenie/orgs", + "repos_url": "https://api.github.com/users/technoweenie/repos", + "events_url": "https://api.github.com/users/technoweenie/events{/privacy}", + "received_events_url": "https://api.github.com/users/technoweenie/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "macournoyer", + "id": 22, + "node_id": "MDQ6VXNlcjIy", + "avatar_url": "https://avatars3.githubusercontent.com/u/22?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/macournoyer", + "html_url": "https://github.com/macournoyer", + "followers_url": "https://api.github.com/users/macournoyer/followers", + "following_url": "https://api.github.com/users/macournoyer/following{/other_user}", + "gists_url": "https://api.github.com/users/macournoyer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/macournoyer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/macournoyer/subscriptions", + "organizations_url": "https://api.github.com/users/macournoyer/orgs", + "repos_url": "https://api.github.com/users/macournoyer/repos", + "events_url": "https://api.github.com/users/macournoyer/events{/privacy}", + "received_events_url": "https://api.github.com/users/macournoyer/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "takeo", + "id": 23, + "node_id": "MDQ6VXNlcjIz", + "avatar_url": "https://avatars3.githubusercontent.com/u/23?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/takeo", + "html_url": "https://github.com/takeo", + "followers_url": "https://api.github.com/users/takeo/followers", + "following_url": "https://api.github.com/users/takeo/following{/other_user}", + "gists_url": "https://api.github.com/users/takeo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/takeo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/takeo/subscriptions", + "organizations_url": "https://api.github.com/users/takeo/orgs", + "repos_url": "https://api.github.com/users/takeo/repos", + "events_url": "https://api.github.com/users/takeo/events{/privacy}", + "received_events_url": "https://api.github.com/users/takeo/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "Caged", + "id": 25, + "node_id": "MDQ6VXNlcjI1", + "avatar_url": "https://avatars3.githubusercontent.com/u/25?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Caged", + "html_url": "https://github.com/Caged", + "followers_url": "https://api.github.com/users/Caged/followers", + "following_url": "https://api.github.com/users/Caged/following{/other_user}", + "gists_url": "https://api.github.com/users/Caged/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Caged/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Caged/subscriptions", + "organizations_url": "https://api.github.com/users/Caged/orgs", + "repos_url": "https://api.github.com/users/Caged/repos", + "events_url": "https://api.github.com/users/Caged/events{/privacy}", + "received_events_url": "https://api.github.com/users/Caged/received_events", + "type": "User", + "site_admin": true + }, + { + "login": "topfunky", + "id": 26, + "node_id": "MDQ6VXNlcjI2", + "avatar_url": "https://avatars3.githubusercontent.com/u/26?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/topfunky", + "html_url": "https://github.com/topfunky", + "followers_url": "https://api.github.com/users/topfunky/followers", + "following_url": "https://api.github.com/users/topfunky/following{/other_user}", + "gists_url": "https://api.github.com/users/topfunky/gists{/gist_id}", + "starred_url": "https://api.github.com/users/topfunky/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/topfunky/subscriptions", + "organizations_url": "https://api.github.com/users/topfunky/orgs", + "repos_url": "https://api.github.com/users/topfunky/repos", + "events_url": "https://api.github.com/users/topfunky/events{/privacy}", + "received_events_url": "https://api.github.com/users/topfunky/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "anotherjesse", + "id": 27, + "node_id": "MDQ6VXNlcjI3", + "avatar_url": "https://avatars3.githubusercontent.com/u/27?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/anotherjesse", + "html_url": "https://github.com/anotherjesse", + "followers_url": "https://api.github.com/users/anotherjesse/followers", + "following_url": "https://api.github.com/users/anotherjesse/following{/other_user}", + "gists_url": "https://api.github.com/users/anotherjesse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anotherjesse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anotherjesse/subscriptions", + "organizations_url": "https://api.github.com/users/anotherjesse/orgs", + "repos_url": "https://api.github.com/users/anotherjesse/repos", + "events_url": "https://api.github.com/users/anotherjesse/events{/privacy}", + "received_events_url": "https://api.github.com/users/anotherjesse/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "roland", + "id": 28, + "node_id": "MDQ6VXNlcjI4", + "avatar_url": "https://avatars2.githubusercontent.com/u/28?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/roland", + "html_url": "https://github.com/roland", + "followers_url": "https://api.github.com/users/roland/followers", + "following_url": "https://api.github.com/users/roland/following{/other_user}", + "gists_url": "https://api.github.com/users/roland/gists{/gist_id}", + "starred_url": "https://api.github.com/users/roland/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/roland/subscriptions", + "organizations_url": "https://api.github.com/users/roland/orgs", + "repos_url": "https://api.github.com/users/roland/repos", + "events_url": "https://api.github.com/users/roland/events{/privacy}", + "received_events_url": "https://api.github.com/users/roland/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "lukas", + "id": 29, + "node_id": "MDQ6VXNlcjI5", + "avatar_url": "https://avatars2.githubusercontent.com/u/29?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/lukas", + "html_url": "https://github.com/lukas", + "followers_url": "https://api.github.com/users/lukas/followers", + "following_url": "https://api.github.com/users/lukas/following{/other_user}", + "gists_url": "https://api.github.com/users/lukas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lukas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lukas/subscriptions", + "organizations_url": "https://api.github.com/users/lukas/orgs", + "repos_url": "https://api.github.com/users/lukas/repos", + "events_url": "https://api.github.com/users/lukas/events{/privacy}", + "received_events_url": "https://api.github.com/users/lukas/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "fanvsfan", + "id": 30, + "node_id": "MDQ6VXNlcjMw", + "avatar_url": "https://avatars2.githubusercontent.com/u/30?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fanvsfan", + "html_url": "https://github.com/fanvsfan", + "followers_url": "https://api.github.com/users/fanvsfan/followers", + "following_url": "https://api.github.com/users/fanvsfan/following{/other_user}", + "gists_url": "https://api.github.com/users/fanvsfan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fanvsfan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fanvsfan/subscriptions", + "organizations_url": "https://api.github.com/users/fanvsfan/orgs", + "repos_url": "https://api.github.com/users/fanvsfan/repos", + "events_url": "https://api.github.com/users/fanvsfan/events{/privacy}", + "received_events_url": "https://api.github.com/users/fanvsfan/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "tomtt", + "id": 31, + "node_id": "MDQ6VXNlcjMx", + "avatar_url": "https://avatars2.githubusercontent.com/u/31?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tomtt", + "html_url": "https://github.com/tomtt", + "followers_url": "https://api.github.com/users/tomtt/followers", + "following_url": "https://api.github.com/users/tomtt/following{/other_user}", + "gists_url": "https://api.github.com/users/tomtt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tomtt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tomtt/subscriptions", + "organizations_url": "https://api.github.com/users/tomtt/orgs", + "repos_url": "https://api.github.com/users/tomtt/repos", + "events_url": "https://api.github.com/users/tomtt/events{/privacy}", + "received_events_url": "https://api.github.com/users/tomtt/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "railsjitsu", + "id": 32, + "node_id": "MDQ6VXNlcjMy", + "avatar_url": "https://avatars2.githubusercontent.com/u/32?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/railsjitsu", + "html_url": "https://github.com/railsjitsu", + "followers_url": "https://api.github.com/users/railsjitsu/followers", + "following_url": "https://api.github.com/users/railsjitsu/following{/other_user}", + "gists_url": "https://api.github.com/users/railsjitsu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/railsjitsu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/railsjitsu/subscriptions", + "organizations_url": "https://api.github.com/users/railsjitsu/orgs", + "repos_url": "https://api.github.com/users/railsjitsu/repos", + "events_url": "https://api.github.com/users/railsjitsu/events{/privacy}", + "received_events_url": "https://api.github.com/users/railsjitsu/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "nitay", + "id": 34, + "node_id": "MDQ6VXNlcjM0", + "avatar_url": "https://avatars2.githubusercontent.com/u/34?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/nitay", + "html_url": "https://github.com/nitay", + "followers_url": "https://api.github.com/users/nitay/followers", + "following_url": "https://api.github.com/users/nitay/following{/other_user}", + "gists_url": "https://api.github.com/users/nitay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nitay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nitay/subscriptions", + "organizations_url": "https://api.github.com/users/nitay/orgs", + "repos_url": "https://api.github.com/users/nitay/repos", + "events_url": "https://api.github.com/users/nitay/events{/privacy}", + "received_events_url": "https://api.github.com/users/nitay/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "kevwil", + "id": 35, + "node_id": "MDQ6VXNlcjM1", + "avatar_url": "https://avatars2.githubusercontent.com/u/35?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kevwil", + "html_url": "https://github.com/kevwil", + "followers_url": "https://api.github.com/users/kevwil/followers", + "following_url": "https://api.github.com/users/kevwil/following{/other_user}", + "gists_url": "https://api.github.com/users/kevwil/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevwil/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevwil/subscriptions", + "organizations_url": "https://api.github.com/users/kevwil/orgs", + "repos_url": "https://api.github.com/users/kevwil/repos", + "events_url": "https://api.github.com/users/kevwil/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevwil/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "KirinDave", + "id": 36, + "node_id": "MDQ6VXNlcjM2", + "avatar_url": "https://avatars2.githubusercontent.com/u/36?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/KirinDave", + "html_url": "https://github.com/KirinDave", + "followers_url": "https://api.github.com/users/KirinDave/followers", + "following_url": "https://api.github.com/users/KirinDave/following{/other_user}", + "gists_url": "https://api.github.com/users/KirinDave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KirinDave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KirinDave/subscriptions", + "organizations_url": "https://api.github.com/users/KirinDave/orgs", + "repos_url": "https://api.github.com/users/KirinDave/repos", + "events_url": "https://api.github.com/users/KirinDave/events{/privacy}", + "received_events_url": "https://api.github.com/users/KirinDave/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "jamesgolick", + "id": 37, + "node_id": "MDQ6VXNlcjM3", + "avatar_url": "https://avatars2.githubusercontent.com/u/37?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesgolick", + "html_url": "https://github.com/jamesgolick", + "followers_url": "https://api.github.com/users/jamesgolick/followers", + "following_url": "https://api.github.com/users/jamesgolick/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesgolick/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesgolick/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesgolick/subscriptions", + "organizations_url": "https://api.github.com/users/jamesgolick/orgs", + "repos_url": "https://api.github.com/users/jamesgolick/repos", + "events_url": "https://api.github.com/users/jamesgolick/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesgolick/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "atmos", + "id": 38, + "node_id": "MDQ6VXNlcjM4", + "avatar_url": "https://avatars3.githubusercontent.com/u/38?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/atmos", + "html_url": "https://github.com/atmos", + "followers_url": "https://api.github.com/users/atmos/followers", + "following_url": "https://api.github.com/users/atmos/following{/other_user}", + "gists_url": "https://api.github.com/users/atmos/gists{/gist_id}", + "starred_url": "https://api.github.com/users/atmos/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/atmos/subscriptions", + "organizations_url": "https://api.github.com/users/atmos/orgs", + "repos_url": "https://api.github.com/users/atmos/repos", + "events_url": "https://api.github.com/users/atmos/events{/privacy}", + "received_events_url": "https://api.github.com/users/atmos/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "errfree", + "id": 44, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjQ0", + "avatar_url": "https://avatars2.githubusercontent.com/u/44?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/errfree", + "html_url": "https://github.com/errfree", + "followers_url": "https://api.github.com/users/errfree/followers", + "following_url": "https://api.github.com/users/errfree/following{/other_user}", + "gists_url": "https://api.github.com/users/errfree/gists{/gist_id}", + "starred_url": "https://api.github.com/users/errfree/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/errfree/subscriptions", + "organizations_url": "https://api.github.com/users/errfree/orgs", + "repos_url": "https://api.github.com/users/errfree/repos", + "events_url": "https://api.github.com/users/errfree/events{/privacy}", + "received_events_url": "https://api.github.com/users/errfree/received_events", + "type": "Organization", + "site_admin": false + }, + { + "login": "mojodna", + "id": 45, + "node_id": "MDQ6VXNlcjQ1", + "avatar_url": "https://avatars2.githubusercontent.com/u/45?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/mojodna", + "html_url": "https://github.com/mojodna", + "followers_url": "https://api.github.com/users/mojodna/followers", + "following_url": "https://api.github.com/users/mojodna/following{/other_user}", + "gists_url": "https://api.github.com/users/mojodna/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojodna/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojodna/subscriptions", + "organizations_url": "https://api.github.com/users/mojodna/orgs", + "repos_url": "https://api.github.com/users/mojodna/repos", + "events_url": "https://api.github.com/users/mojodna/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojodna/received_events", + "type": "User", + "site_admin": false + }, + { + "login": "bmizerany", + "id": 46, + "node_id": "MDQ6VXNlcjQ2", + "avatar_url": "https://avatars2.githubusercontent.com/u/46?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/bmizerany", + "html_url": "https://github.com/bmizerany", + "followers_url": "https://api.github.com/users/bmizerany/followers", + "following_url": "https://api.github.com/users/bmizerany/following{/other_user}", + "gists_url": "https://api.github.com/users/bmizerany/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bmizerany/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bmizerany/subscriptions", + "organizations_url": "https://api.github.com/users/bmizerany/orgs", + "repos_url": "https://api.github.com/users/bmizerany/repos", + "events_url": "https://api.github.com/users/bmizerany/events{/privacy}", + "received_events_url": "https://api.github.com/users/bmizerany/received_events", + "type": "User", + "site_admin": false + } +] diff --git a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_detail_link_then_user_detail_activity_displayed.yaml b/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_detail_link_then_user_detail_activity_displayed.yaml deleted file mode 100644 index bc4b9f73..00000000 --- a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_detail_link_then_user_detail_activity_displayed.yaml +++ /dev/null @@ -1,143 +0,0 @@ -!tape -name: when detail link then user detail activity displayed -interactions: -- recorded: 2018-04-14T11:43:29.785Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 11:43:29 GMT - ETag: W/"532e7d94d6daa2621b276d2a82af5d60" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 99C5:1062:4A306F1:8F98583:5AD1E961 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '57' - X-RateLimit-Reset: '1523709311' - X-Runtime-rack: '0.086307' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' -- recorded: 2018-04-14T11:43:30.387Z - request: - method: GET - uri: https://api.github.com/users/defunkt - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 11:43:30 GMT - ETag: W/"0fc973dcc07fdde79179553b2a0cfe68" - Last-Modified: Wed, 21 Mar 2018 18:41:18 GMT - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 6157:1061:39AFF89:7A0C614:5AD1E962 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '56' - X-RateLimit-Reset: '1523709311' - X-Runtime-rack: '0.025937' - X-XSS-Protection: 1; mode=block - body: !!binary |- - eyJsb2dpbiI6ImRlZnVua3QiLCJpZCI6MiwiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFyczAuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMj92PTQiLCJncmF2YXRhcl9pZCI6IiIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdCIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2RlZnVua3QiLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L2ZvbGxvd2VycyIsImZvbGxvd2luZ191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3QvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdC9naXN0c3svZ2lzdF9pZH0iLCJzdGFycmVkX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdC9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3Qvc3Vic2NyaXB0aW9ucyIsIm9yZ2FuaXphdGlvbnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L29yZ3MiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3QvcmVwb3MiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L2V2ZW50c3svcHJpdmFjeX0iLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L3JlY2VpdmVkX2V2ZW50cyIsInR5cGUiOiJVc2VyIiwic2l0ZV9hZG1pbiI6dHJ1ZSwibmFtZSI6IkNocmlzIFdhbnN0cmF0aCIsImNvbXBhbnkiOiJAZ2l0aHViICIsImJsb2ciOiJodHRwOi8vY2hyaXN3YW5zdHJhdGguY29tLyIsImxvY2F0aW9uIjoiU2FuIEZyYW5jaXNjbyIsImVtYWlsIjpudWxsLCJoaXJlYWJsZSI6dHJ1ZSwiYmlvIjoi8J+NlCAiLCJwdWJsaWNfcmVwb3MiOjEwNywicHVibGljX2dpc3RzIjoyNzMsImZvbGxvd2VycyI6MTY4MDksImZvbGxvd2luZyI6MjA4LCJjcmVhdGVkX2F0IjoiMjAwNy0xMC0yMFQwNToyNDoxOVoiLCJ1cGRhdGVkX2F0IjoiMjAxOC0wMy0yMVQxODo0MToxOFoifQ== -- recorded: 2018-04-14T11:43:30.632Z - request: - method: GET - uri: https://api.github.com/users/defunkt/repos?type=all - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 11:43:30 GMT - ETag: W/"dbfdf58b741e272f1d159e97b8a6ffb4" - Link: ; rel="next", ; rel="last" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 5C0F:105E:20DC2EF:49EEA33:5AD1E962 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '55' - X-RateLimit-Reset: '1523709311' - X-Runtime-rack: '0.181177' - X-XSS-Protection: 1; mode=block - body: '[{"id":348555,"name":"resque","full_name":"bpo/resque","owner":{"login":"bpo","id":3795,"avatar_url":"https://avatars0.githubusercontent.com/u/3795?v=4","gravatar_id":"","url":"https://api.github.com/users/bpo","html_url":"https://github.com/bpo","followers_url":"https://api.github.com/users/bpo/followers","following_url":"https://api.github.com/users/bpo/following{/other_user}","gists_url":"https://api.github.com/users/bpo/gists{/gist_id}","starred_url":"https://api.github.com/users/bpo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bpo/subscriptions","organizations_url":"https://api.github.com/users/bpo/orgs","repos_url":"https://api.github.com/users/bpo/repos","events_url":"https://api.github.com/users/bpo/events{/privacy}","received_events_url":"https://api.github.com/users/bpo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bpo/resque","description":"A - simple Redis-based queue.","fork":true,"url":"https://api.github.com/repos/bpo/resque","forks_url":"https://api.github.com/repos/bpo/resque/forks","keys_url":"https://api.github.com/repos/bpo/resque/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bpo/resque/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bpo/resque/teams","hooks_url":"https://api.github.com/repos/bpo/resque/hooks","issue_events_url":"https://api.github.com/repos/bpo/resque/issues/events{/number}","events_url":"https://api.github.com/repos/bpo/resque/events","assignees_url":"https://api.github.com/repos/bpo/resque/assignees{/user}","branches_url":"https://api.github.com/repos/bpo/resque/branches{/branch}","tags_url":"https://api.github.com/repos/bpo/resque/tags","blobs_url":"https://api.github.com/repos/bpo/resque/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bpo/resque/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bpo/resque/git/refs{/sha}","trees_url":"https://api.github.com/repos/bpo/resque/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bpo/resque/statuses/{sha}","languages_url":"https://api.github.com/repos/bpo/resque/languages","stargazers_url":"https://api.github.com/repos/bpo/resque/stargazers","contributors_url":"https://api.github.com/repos/bpo/resque/contributors","subscribers_url":"https://api.github.com/repos/bpo/resque/subscribers","subscription_url":"https://api.github.com/repos/bpo/resque/subscription","commits_url":"https://api.github.com/repos/bpo/resque/commits{/sha}","git_commits_url":"https://api.github.com/repos/bpo/resque/git/commits{/sha}","comments_url":"https://api.github.com/repos/bpo/resque/comments{/number}","issue_comment_url":"https://api.github.com/repos/bpo/resque/issues/comments{/number}","contents_url":"https://api.github.com/repos/bpo/resque/contents/{+path}","compare_url":"https://api.github.com/repos/bpo/resque/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bpo/resque/merges","archive_url":"https://api.github.com/repos/bpo/resque/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bpo/resque/downloads","issues_url":"https://api.github.com/repos/bpo/resque/issues{/number}","pulls_url":"https://api.github.com/repos/bpo/resque/pulls{/number}","milestones_url":"https://api.github.com/repos/bpo/resque/milestones{/number}","notifications_url":"https://api.github.com/repos/bpo/resque/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bpo/resque/labels{/name}","releases_url":"https://api.github.com/repos/bpo/resque/releases{/id}","deployments_url":"https://api.github.com/repos/bpo/resque/deployments","created_at":"2009-10-24T19:53:11Z","updated_at":"2017-06-29T22:21:54Z","pushed_at":"2012-03-08T02:21:58Z","git_url":"git://github.com/bpo/resque.git","ssh_url":"git@github.com:bpo/resque.git","clone_url":"https://github.com/bpo/resque.git","svn_url":"https://github.com/bpo/resque","homepage":"","size":1369,"stargazers_count":10,"watchers_count":10,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":0,"watchers":10,"default_branch":"master"},{"id":1861402,"name":"ace","full_name":"defunkt/ace","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ace","description":"Ajax.org - Cloud9 Editor","fork":true,"url":"https://api.github.com/repos/defunkt/ace","forks_url":"https://api.github.com/repos/defunkt/ace/forks","keys_url":"https://api.github.com/repos/defunkt/ace/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ace/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ace/teams","hooks_url":"https://api.github.com/repos/defunkt/ace/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ace/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ace/events","assignees_url":"https://api.github.com/repos/defunkt/ace/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ace/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ace/tags","blobs_url":"https://api.github.com/repos/defunkt/ace/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ace/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ace/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ace/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ace/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ace/languages","stargazers_url":"https://api.github.com/repos/defunkt/ace/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ace/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ace/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ace/subscription","commits_url":"https://api.github.com/repos/defunkt/ace/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ace/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ace/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ace/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ace/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ace/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ace/merges","archive_url":"https://api.github.com/repos/defunkt/ace/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ace/downloads","issues_url":"https://api.github.com/repos/defunkt/ace/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ace/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ace/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ace/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ace/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ace/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ace/deployments","created_at":"2011-06-07T18:41:40Z","updated_at":"2018-03-13T08:37:33Z","pushed_at":"2011-11-16T18:37:42Z","git_url":"git://github.com/defunkt/ace.git","ssh_url":"git@github.com:defunkt/ace.git","clone_url":"https://github.com/defunkt/ace.git","svn_url":"https://github.com/defunkt/ace","homepage":"http://ace.ajax.org","size":4405,"stargazers_count":11,"watchers_count":11,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":5,"open_issues":0,"watchers":11,"default_branch":"master"},{"id":3594,"name":"acts_as_textiled","full_name":"defunkt/acts_as_textiled","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/acts_as_textiled","description":"Makes - your models act as textiled.","fork":false,"url":"https://api.github.com/repos/defunkt/acts_as_textiled","forks_url":"https://api.github.com/repos/defunkt/acts_as_textiled/forks","keys_url":"https://api.github.com/repos/defunkt/acts_as_textiled/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/acts_as_textiled/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/acts_as_textiled/teams","hooks_url":"https://api.github.com/repos/defunkt/acts_as_textiled/hooks","issue_events_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/acts_as_textiled/events","assignees_url":"https://api.github.com/repos/defunkt/acts_as_textiled/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/acts_as_textiled/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/acts_as_textiled/tags","blobs_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/acts_as_textiled/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/acts_as_textiled/languages","stargazers_url":"https://api.github.com/repos/defunkt/acts_as_textiled/stargazers","contributors_url":"https://api.github.com/repos/defunkt/acts_as_textiled/contributors","subscribers_url":"https://api.github.com/repos/defunkt/acts_as_textiled/subscribers","subscription_url":"https://api.github.com/repos/defunkt/acts_as_textiled/subscription","commits_url":"https://api.github.com/repos/defunkt/acts_as_textiled/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/acts_as_textiled/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/acts_as_textiled/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/acts_as_textiled/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/acts_as_textiled/merges","archive_url":"https://api.github.com/repos/defunkt/acts_as_textiled/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/acts_as_textiled/downloads","issues_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/acts_as_textiled/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/acts_as_textiled/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/acts_as_textiled/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/acts_as_textiled/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/acts_as_textiled/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/acts_as_textiled/deployments","created_at":"2008-03-12T06:20:18Z","updated_at":"2018-03-13T08:37:31Z","pushed_at":"2011-07-21T21:38:47Z","git_url":"git://github.com/defunkt/acts_as_textiled.git","ssh_url":"git@github.com:defunkt/acts_as_textiled.git","clone_url":"https://github.com/defunkt/acts_as_textiled.git","svn_url":"https://github.com/defunkt/acts_as_textiled","homepage":"http://errtheblog.com/posts/12-actsastextiled","size":333,"stargazers_count":114,"watchers_count":114,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":34,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":34,"open_issues":4,"watchers":114,"default_branch":"master"},{"id":36,"name":"ambition","full_name":"defunkt/ambition","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambition","description":"include - Enumerable — Unmaintained","fork":false,"url":"https://api.github.com/repos/defunkt/ambition","forks_url":"https://api.github.com/repos/defunkt/ambition/forks","keys_url":"https://api.github.com/repos/defunkt/ambition/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambition/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambition/teams","hooks_url":"https://api.github.com/repos/defunkt/ambition/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambition/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambition/events","assignees_url":"https://api.github.com/repos/defunkt/ambition/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambition/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambition/tags","blobs_url":"https://api.github.com/repos/defunkt/ambition/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambition/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambition/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambition/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambition/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambition/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambition/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambition/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambition/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambition/subscription","commits_url":"https://api.github.com/repos/defunkt/ambition/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambition/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambition/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambition/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambition/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambition/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambition/merges","archive_url":"https://api.github.com/repos/defunkt/ambition/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambition/downloads","issues_url":"https://api.github.com/repos/defunkt/ambition/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambition/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambition/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambition/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambition/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambition/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambition/deployments","created_at":"2008-01-14T06:28:56Z","updated_at":"2018-03-13T08:37:29Z","pushed_at":"2015-04-24T00:18:24Z","git_url":"git://github.com/defunkt/ambition.git","ssh_url":"git@github.com:defunkt/ambition.git","clone_url":"https://github.com/defunkt/ambition.git","svn_url":"https://github.com/defunkt/ambition","homepage":"","size":473,"stargazers_count":147,"watchers_count":147,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":17,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":17,"open_issues":1,"watchers":147,"default_branch":"master"},{"id":230,"name":"ambitious_activeldap","full_name":"defunkt/ambitious_activeldap","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambitious_activeldap","description":"Ambition - adapter for ActiveLdap","fork":false,"url":"https://api.github.com/repos/defunkt/ambitious_activeldap","forks_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/forks","keys_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/teams","hooks_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/events","assignees_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/tags","blobs_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/subscription","commits_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/merges","archive_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/downloads","issues_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/deployments","created_at":"2008-01-30T19:20:08Z","updated_at":"2018-03-13T08:37:28Z","pushed_at":"2008-03-26T19:10:57Z","git_url":"git://github.com/defunkt/ambitious_activeldap.git","ssh_url":"git@github.com:defunkt/ambitious_activeldap.git","clone_url":"https://github.com/defunkt/ambitious_activeldap.git","svn_url":"https://github.com/defunkt/ambitious_activeldap","homepage":"","size":96,"stargazers_count":6,"watchers_count":6,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":3,"open_issues":0,"watchers":6,"default_branch":"master"},{"id":12641,"name":"ambitious_activerecord","full_name":"defunkt/ambitious_activerecord","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambitious_activerecord","description":"Unmaintained - Ambitious ActiveRecord adapter, for Ambition.","fork":false,"url":"https://api.github.com/repos/defunkt/ambitious_activerecord","forks_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/forks","keys_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/teams","hooks_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/events","assignees_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/tags","blobs_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/subscription","commits_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/merges","archive_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/downloads","issues_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/deployments","created_at":"2008-04-26T09:10:20Z","updated_at":"2018-03-13T08:37:27Z","pushed_at":"2008-04-26T10:14:04Z","git_url":"git://github.com/defunkt/ambitious_activerecord.git","ssh_url":"git@github.com:defunkt/ambitious_activerecord.git","clone_url":"https://github.com/defunkt/ambitious_activerecord.git","svn_url":"https://github.com/defunkt/ambitious_activerecord","homepage":"","size":95,"stargazers_count":12,"watchers_count":12,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":3,"open_issues":1,"watchers":12,"default_branch":"master"},{"id":4180,"name":"barefootexamples","full_name":"defunkt/barefootexamples","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/barefootexamples","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/barefootexamples","forks_url":"https://api.github.com/repos/defunkt/barefootexamples/forks","keys_url":"https://api.github.com/repos/defunkt/barefootexamples/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/barefootexamples/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/barefootexamples/teams","hooks_url":"https://api.github.com/repos/defunkt/barefootexamples/hooks","issue_events_url":"https://api.github.com/repos/defunkt/barefootexamples/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/barefootexamples/events","assignees_url":"https://api.github.com/repos/defunkt/barefootexamples/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/barefootexamples/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/barefootexamples/tags","blobs_url":"https://api.github.com/repos/defunkt/barefootexamples/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/barefootexamples/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/barefootexamples/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/barefootexamples/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/barefootexamples/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/barefootexamples/languages","stargazers_url":"https://api.github.com/repos/defunkt/barefootexamples/stargazers","contributors_url":"https://api.github.com/repos/defunkt/barefootexamples/contributors","subscribers_url":"https://api.github.com/repos/defunkt/barefootexamples/subscribers","subscription_url":"https://api.github.com/repos/defunkt/barefootexamples/subscription","commits_url":"https://api.github.com/repos/defunkt/barefootexamples/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/barefootexamples/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/barefootexamples/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/barefootexamples/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/barefootexamples/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/barefootexamples/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/barefootexamples/merges","archive_url":"https://api.github.com/repos/defunkt/barefootexamples/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/barefootexamples/downloads","issues_url":"https://api.github.com/repos/defunkt/barefootexamples/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/barefootexamples/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/barefootexamples/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/barefootexamples/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/barefootexamples/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/barefootexamples/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/barefootexamples/deployments","created_at":"2008-03-17T06:29:50Z","updated_at":"2018-03-13T08:37:26Z","pushed_at":"2008-03-26T20:57:13Z","git_url":"git://github.com/defunkt/barefootexamples.git","ssh_url":"git@github.com:defunkt/barefootexamples.git","clone_url":"https://github.com/defunkt/barefootexamples.git","svn_url":"https://github.com/defunkt/barefootexamples","homepage":"","size":83,"stargazers_count":5,"watchers_count":5,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":15939,"name":"body_matcher","full_name":"defunkt/body_matcher","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/body_matcher","description":"Simplify - your view testing. Forget assert_select.","fork":true,"url":"https://api.github.com/repos/defunkt/body_matcher","forks_url":"https://api.github.com/repos/defunkt/body_matcher/forks","keys_url":"https://api.github.com/repos/defunkt/body_matcher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/body_matcher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/body_matcher/teams","hooks_url":"https://api.github.com/repos/defunkt/body_matcher/hooks","issue_events_url":"https://api.github.com/repos/defunkt/body_matcher/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/body_matcher/events","assignees_url":"https://api.github.com/repos/defunkt/body_matcher/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/body_matcher/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/body_matcher/tags","blobs_url":"https://api.github.com/repos/defunkt/body_matcher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/body_matcher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/body_matcher/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/body_matcher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/body_matcher/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/body_matcher/languages","stargazers_url":"https://api.github.com/repos/defunkt/body_matcher/stargazers","contributors_url":"https://api.github.com/repos/defunkt/body_matcher/contributors","subscribers_url":"https://api.github.com/repos/defunkt/body_matcher/subscribers","subscription_url":"https://api.github.com/repos/defunkt/body_matcher/subscription","commits_url":"https://api.github.com/repos/defunkt/body_matcher/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/body_matcher/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/body_matcher/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/body_matcher/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/body_matcher/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/body_matcher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/body_matcher/merges","archive_url":"https://api.github.com/repos/defunkt/body_matcher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/body_matcher/downloads","issues_url":"https://api.github.com/repos/defunkt/body_matcher/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/body_matcher/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/body_matcher/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/body_matcher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/body_matcher/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/body_matcher/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/body_matcher/deployments","created_at":"2008-05-11T04:54:44Z","updated_at":"2018-03-13T08:37:24Z","pushed_at":"2008-05-11T04:54:46Z","git_url":"git://github.com/defunkt/body_matcher.git","ssh_url":"git@github.com:defunkt/body_matcher.git","clone_url":"https://github.com/defunkt/body_matcher.git","svn_url":"https://github.com/defunkt/body_matcher","homepage":"http://ozmm.org/posts/some_ruby_code.html","size":85,"stargazers_count":8,"watchers_count":8,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":2,"open_issues":0,"watchers":8,"default_branch":"master"},{"id":288271,"name":"burn","full_name":"defunkt/burn","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/burn","description":"Sinatra - => Campfire","fork":false,"url":"https://api.github.com/repos/defunkt/burn","forks_url":"https://api.github.com/repos/defunkt/burn/forks","keys_url":"https://api.github.com/repos/defunkt/burn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/burn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/burn/teams","hooks_url":"https://api.github.com/repos/defunkt/burn/hooks","issue_events_url":"https://api.github.com/repos/defunkt/burn/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/burn/events","assignees_url":"https://api.github.com/repos/defunkt/burn/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/burn/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/burn/tags","blobs_url":"https://api.github.com/repos/defunkt/burn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/burn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/burn/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/burn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/burn/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/burn/languages","stargazers_url":"https://api.github.com/repos/defunkt/burn/stargazers","contributors_url":"https://api.github.com/repos/defunkt/burn/contributors","subscribers_url":"https://api.github.com/repos/defunkt/burn/subscribers","subscription_url":"https://api.github.com/repos/defunkt/burn/subscription","commits_url":"https://api.github.com/repos/defunkt/burn/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/burn/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/burn/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/burn/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/burn/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/burn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/burn/merges","archive_url":"https://api.github.com/repos/defunkt/burn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/burn/downloads","issues_url":"https://api.github.com/repos/defunkt/burn/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/burn/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/burn/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/burn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/burn/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/burn/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/burn/deployments","created_at":"2009-08-26T01:31:54Z","updated_at":"2018-03-13T08:37:23Z","pushed_at":"2009-08-26T02:13:06Z","git_url":"git://github.com/defunkt/burn.git","ssh_url":"git@github.com:defunkt/burn.git","clone_url":"https://github.com/defunkt/burn.git","svn_url":"https://github.com/defunkt/burn","homepage":"","size":82,"stargazers_count":5,"watchers_count":5,"language":null,"has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":93,"name":"cache_fu","full_name":"defunkt/cache_fu","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cache_fu","description":"Ghost - from Christmas past. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/cache_fu","forks_url":"https://api.github.com/repos/defunkt/cache_fu/forks","keys_url":"https://api.github.com/repos/defunkt/cache_fu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cache_fu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cache_fu/teams","hooks_url":"https://api.github.com/repos/defunkt/cache_fu/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cache_fu/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cache_fu/events","assignees_url":"https://api.github.com/repos/defunkt/cache_fu/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cache_fu/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cache_fu/tags","blobs_url":"https://api.github.com/repos/defunkt/cache_fu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cache_fu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cache_fu/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cache_fu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cache_fu/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cache_fu/languages","stargazers_url":"https://api.github.com/repos/defunkt/cache_fu/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cache_fu/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cache_fu/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cache_fu/subscription","commits_url":"https://api.github.com/repos/defunkt/cache_fu/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cache_fu/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cache_fu/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cache_fu/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cache_fu/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cache_fu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cache_fu/merges","archive_url":"https://api.github.com/repos/defunkt/cache_fu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cache_fu/downloads","issues_url":"https://api.github.com/repos/defunkt/cache_fu/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cache_fu/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cache_fu/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cache_fu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cache_fu/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cache_fu/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cache_fu/deployments","created_at":"2008-01-23T00:28:10Z","updated_at":"2018-03-13T08:37:22Z","pushed_at":"2009-10-04T01:54:43Z","git_url":"git://github.com/defunkt/cache_fu.git","ssh_url":"git@github.com:defunkt/cache_fu.git","clone_url":"https://github.com/defunkt/cache_fu.git","svn_url":"https://github.com/defunkt/cache_fu","homepage":"http://errtheblog.com","size":105,"stargazers_count":255,"watchers_count":255,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":69,"mirror_url":null,"archived":false,"open_issues_count":6,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":69,"open_issues":6,"watchers":255,"default_branch":"master"},{"id":3591,"name":"cheat","full_name":"defunkt/cheat","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cheat","description":"Cheating - is fun!","fork":false,"url":"https://api.github.com/repos/defunkt/cheat","forks_url":"https://api.github.com/repos/defunkt/cheat/forks","keys_url":"https://api.github.com/repos/defunkt/cheat/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cheat/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cheat/teams","hooks_url":"https://api.github.com/repos/defunkt/cheat/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cheat/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cheat/events","assignees_url":"https://api.github.com/repos/defunkt/cheat/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cheat/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cheat/tags","blobs_url":"https://api.github.com/repos/defunkt/cheat/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cheat/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cheat/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cheat/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cheat/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cheat/languages","stargazers_url":"https://api.github.com/repos/defunkt/cheat/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cheat/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cheat/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cheat/subscription","commits_url":"https://api.github.com/repos/defunkt/cheat/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cheat/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cheat/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cheat/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cheat/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cheat/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cheat/merges","archive_url":"https://api.github.com/repos/defunkt/cheat/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cheat/downloads","issues_url":"https://api.github.com/repos/defunkt/cheat/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cheat/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cheat/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cheat/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cheat/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cheat/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cheat/deployments","created_at":"2008-03-12T06:09:09Z","updated_at":"2018-04-12T05:27:50Z","pushed_at":"2015-11-17T19:31:56Z","git_url":"git://github.com/defunkt/cheat.git","ssh_url":"git@github.com:defunkt/cheat.git","clone_url":"https://github.com/defunkt/cheat.git","svn_url":"https://github.com/defunkt/cheat","homepage":"http://cheat.errtheblog.com","size":235,"stargazers_count":231,"watchers_count":231,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":41,"mirror_url":null,"archived":false,"open_issues_count":3,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":41,"open_issues":3,"watchers":231,"default_branch":"master"},{"id":45193,"name":"cheat.el","full_name":"defunkt/cheat.el","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cheat.el","description":"Cheat - Emacs mode","fork":false,"url":"https://api.github.com/repos/defunkt/cheat.el","forks_url":"https://api.github.com/repos/defunkt/cheat.el/forks","keys_url":"https://api.github.com/repos/defunkt/cheat.el/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cheat.el/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cheat.el/teams","hooks_url":"https://api.github.com/repos/defunkt/cheat.el/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cheat.el/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cheat.el/events","assignees_url":"https://api.github.com/repos/defunkt/cheat.el/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cheat.el/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cheat.el/tags","blobs_url":"https://api.github.com/repos/defunkt/cheat.el/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cheat.el/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cheat.el/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cheat.el/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cheat.el/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cheat.el/languages","stargazers_url":"https://api.github.com/repos/defunkt/cheat.el/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cheat.el/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cheat.el/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cheat.el/subscription","commits_url":"https://api.github.com/repos/defunkt/cheat.el/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cheat.el/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cheat.el/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cheat.el/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cheat.el/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cheat.el/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cheat.el/merges","archive_url":"https://api.github.com/repos/defunkt/cheat.el/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cheat.el/downloads","issues_url":"https://api.github.com/repos/defunkt/cheat.el/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cheat.el/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cheat.el/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cheat.el/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cheat.el/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cheat.el/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cheat.el/deployments","created_at":"2008-08-23T06:01:37Z","updated_at":"2018-03-13T08:37:19Z","pushed_at":"2008-12-03T23:55:16Z","git_url":"git://github.com/defunkt/cheat.el.git","ssh_url":"git@github.com:defunkt/cheat.el.git","clone_url":"https://github.com/defunkt/cheat.el.git","svn_url":"https://github.com/defunkt/cheat.el","homepage":"","size":120,"stargazers_count":13,"watchers_count":13,"language":"Emacs - Lisp","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":4,"open_issues":0,"watchers":13,"default_branch":"master"},{"id":12527,"name":"choice","full_name":"defunkt/choice","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/choice","description":"Choice - is a gem for defining and parsing command line options with a friendly DSL.","fork":false,"url":"https://api.github.com/repos/defunkt/choice","forks_url":"https://api.github.com/repos/defunkt/choice/forks","keys_url":"https://api.github.com/repos/defunkt/choice/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/choice/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/choice/teams","hooks_url":"https://api.github.com/repos/defunkt/choice/hooks","issue_events_url":"https://api.github.com/repos/defunkt/choice/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/choice/events","assignees_url":"https://api.github.com/repos/defunkt/choice/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/choice/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/choice/tags","blobs_url":"https://api.github.com/repos/defunkt/choice/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/choice/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/choice/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/choice/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/choice/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/choice/languages","stargazers_url":"https://api.github.com/repos/defunkt/choice/stargazers","contributors_url":"https://api.github.com/repos/defunkt/choice/contributors","subscribers_url":"https://api.github.com/repos/defunkt/choice/subscribers","subscription_url":"https://api.github.com/repos/defunkt/choice/subscription","commits_url":"https://api.github.com/repos/defunkt/choice/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/choice/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/choice/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/choice/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/choice/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/choice/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/choice/merges","archive_url":"https://api.github.com/repos/defunkt/choice/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/choice/downloads","issues_url":"https://api.github.com/repos/defunkt/choice/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/choice/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/choice/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/choice/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/choice/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/choice/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/choice/deployments","created_at":"2008-04-25T18:30:30Z","updated_at":"2018-03-16T08:00:10Z","pushed_at":"2016-12-14T05:29:58Z","git_url":"git://github.com/defunkt/choice.git","ssh_url":"git@github.com:defunkt/choice.git","clone_url":"https://github.com/defunkt/choice.git","svn_url":"https://github.com/defunkt/choice","homepage":"","size":145,"stargazers_count":169,"watchers_count":169,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":22,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":22,"open_issues":2,"watchers":169,"default_branch":"master"},{"id":270226,"name":"cijoe","full_name":"defunkt/cijoe","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cijoe","description":"CI - Joe is a fun Continuous Integration server. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/cijoe","forks_url":"https://api.github.com/repos/defunkt/cijoe/forks","keys_url":"https://api.github.com/repos/defunkt/cijoe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cijoe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cijoe/teams","hooks_url":"https://api.github.com/repos/defunkt/cijoe/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cijoe/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cijoe/events","assignees_url":"https://api.github.com/repos/defunkt/cijoe/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cijoe/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cijoe/tags","blobs_url":"https://api.github.com/repos/defunkt/cijoe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cijoe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cijoe/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cijoe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cijoe/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cijoe/languages","stargazers_url":"https://api.github.com/repos/defunkt/cijoe/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cijoe/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cijoe/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cijoe/subscription","commits_url":"https://api.github.com/repos/defunkt/cijoe/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cijoe/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cijoe/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cijoe/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cijoe/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cijoe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cijoe/merges","archive_url":"https://api.github.com/repos/defunkt/cijoe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cijoe/downloads","issues_url":"https://api.github.com/repos/defunkt/cijoe/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cijoe/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cijoe/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cijoe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cijoe/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cijoe/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cijoe/deployments","created_at":"2009-08-06T00:20:39Z","updated_at":"2018-03-28T16:16:31Z","pushed_at":"2011-10-01T22:56:55Z","git_url":"git://github.com/defunkt/cijoe.git","ssh_url":"git@github.com:defunkt/cijoe.git","clone_url":"https://github.com/defunkt/cijoe.git","svn_url":"https://github.com/defunkt/cijoe","homepage":"","size":425,"stargazers_count":1062,"watchers_count":1062,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":136,"mirror_url":null,"archived":false,"open_issues_count":18,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":136,"open_issues":18,"watchers":1062,"default_branch":"master"},{"id":550681,"name":"coffee-mode","full_name":"defunkt/coffee-mode","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/coffee-mode","description":"Emacs - Major Mode for CoffeeScript","fork":false,"url":"https://api.github.com/repos/defunkt/coffee-mode","forks_url":"https://api.github.com/repos/defunkt/coffee-mode/forks","keys_url":"https://api.github.com/repos/defunkt/coffee-mode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/coffee-mode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/coffee-mode/teams","hooks_url":"https://api.github.com/repos/defunkt/coffee-mode/hooks","issue_events_url":"https://api.github.com/repos/defunkt/coffee-mode/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/coffee-mode/events","assignees_url":"https://api.github.com/repos/defunkt/coffee-mode/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/coffee-mode/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/coffee-mode/tags","blobs_url":"https://api.github.com/repos/defunkt/coffee-mode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/coffee-mode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/coffee-mode/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/coffee-mode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/coffee-mode/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/coffee-mode/languages","stargazers_url":"https://api.github.com/repos/defunkt/coffee-mode/stargazers","contributors_url":"https://api.github.com/repos/defunkt/coffee-mode/contributors","subscribers_url":"https://api.github.com/repos/defunkt/coffee-mode/subscribers","subscription_url":"https://api.github.com/repos/defunkt/coffee-mode/subscription","commits_url":"https://api.github.com/repos/defunkt/coffee-mode/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/coffee-mode/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/coffee-mode/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/coffee-mode/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/coffee-mode/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/coffee-mode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/coffee-mode/merges","archive_url":"https://api.github.com/repos/defunkt/coffee-mode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/coffee-mode/downloads","issues_url":"https://api.github.com/repos/defunkt/coffee-mode/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/coffee-mode/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/coffee-mode/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/coffee-mode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/coffee-mode/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/coffee-mode/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/coffee-mode/deployments","created_at":"2010-03-07T08:30:40Z","updated_at":"2018-04-03T12:50:10Z","pushed_at":"2018-03-28T04:46:20Z","git_url":"git://github.com/defunkt/coffee-mode.git","ssh_url":"git@github.com:defunkt/coffee-mode.git","clone_url":"https://github.com/defunkt/coffee-mode.git","svn_url":"https://github.com/defunkt/coffee-mode","homepage":"http://ozmm.org/posts/coffee_mode.html","size":662,"stargazers_count":561,"watchers_count":561,"language":"Emacs - Lisp","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":157,"mirror_url":null,"archived":false,"open_issues_count":16,"license":null,"forks":157,"open_issues":16,"watchers":561,"default_branch":"master"},{"id":388149,"name":"colored","full_name":"defunkt/colored","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/colored","description":"Colors - in your terminal. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/colored","forks_url":"https://api.github.com/repos/defunkt/colored/forks","keys_url":"https://api.github.com/repos/defunkt/colored/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/colored/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/colored/teams","hooks_url":"https://api.github.com/repos/defunkt/colored/hooks","issue_events_url":"https://api.github.com/repos/defunkt/colored/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/colored/events","assignees_url":"https://api.github.com/repos/defunkt/colored/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/colored/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/colored/tags","blobs_url":"https://api.github.com/repos/defunkt/colored/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/colored/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/colored/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/colored/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/colored/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/colored/languages","stargazers_url":"https://api.github.com/repos/defunkt/colored/stargazers","contributors_url":"https://api.github.com/repos/defunkt/colored/contributors","subscribers_url":"https://api.github.com/repos/defunkt/colored/subscribers","subscription_url":"https://api.github.com/repos/defunkt/colored/subscription","commits_url":"https://api.github.com/repos/defunkt/colored/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/colored/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/colored/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/colored/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/colored/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/colored/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/colored/merges","archive_url":"https://api.github.com/repos/defunkt/colored/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/colored/downloads","issues_url":"https://api.github.com/repos/defunkt/colored/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/colored/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/colored/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/colored/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/colored/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/colored/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/colored/deployments","created_at":"2009-11-28T06:16:20Z","updated_at":"2018-04-04T03:57:32Z","pushed_at":"2017-07-07T17:51:14Z","git_url":"git://github.com/defunkt/colored.git","ssh_url":"git@github.com:defunkt/colored.git","clone_url":"https://github.com/defunkt/colored.git","svn_url":"https://github.com/defunkt/colored","homepage":"","size":120,"stargazers_count":253,"watchers_count":253,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":41,"mirror_url":null,"archived":false,"open_issues_count":8,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":41,"open_issues":8,"watchers":253,"default_branch":"master"},{"id":12220,"name":"currency_converter","full_name":"defunkt/currency_converter","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/currency_converter","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/currency_converter","forks_url":"https://api.github.com/repos/defunkt/currency_converter/forks","keys_url":"https://api.github.com/repos/defunkt/currency_converter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/currency_converter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/currency_converter/teams","hooks_url":"https://api.github.com/repos/defunkt/currency_converter/hooks","issue_events_url":"https://api.github.com/repos/defunkt/currency_converter/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/currency_converter/events","assignees_url":"https://api.github.com/repos/defunkt/currency_converter/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/currency_converter/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/currency_converter/tags","blobs_url":"https://api.github.com/repos/defunkt/currency_converter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/currency_converter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/currency_converter/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/currency_converter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/currency_converter/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/currency_converter/languages","stargazers_url":"https://api.github.com/repos/defunkt/currency_converter/stargazers","contributors_url":"https://api.github.com/repos/defunkt/currency_converter/contributors","subscribers_url":"https://api.github.com/repos/defunkt/currency_converter/subscribers","subscription_url":"https://api.github.com/repos/defunkt/currency_converter/subscription","commits_url":"https://api.github.com/repos/defunkt/currency_converter/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/currency_converter/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/currency_converter/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/currency_converter/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/currency_converter/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/currency_converter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/currency_converter/merges","archive_url":"https://api.github.com/repos/defunkt/currency_converter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/currency_converter/downloads","issues_url":"https://api.github.com/repos/defunkt/currency_converter/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/currency_converter/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/currency_converter/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/currency_converter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/currency_converter/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/currency_converter/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/currency_converter/deployments","created_at":"2008-04-24T09:34:31Z","updated_at":"2018-03-13T08:37:12Z","pushed_at":"2008-04-24T09:36:14Z","git_url":"git://github.com/defunkt/currency_converter.git","ssh_url":"git@github.com:defunkt/currency_converter.git","clone_url":"https://github.com/defunkt/currency_converter.git","svn_url":"https://github.com/defunkt/currency_converter","homepage":"","size":374,"stargazers_count":7,"watchers_count":7,"language":"Objective-C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":4,"open_issues":0,"watchers":7,"default_branch":"master"},{"id":18570642,"name":"d3","full_name":"defunkt/d3","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/d3","description":"A - JavaScript visualization library for HTML and SVG.","fork":true,"url":"https://api.github.com/repos/defunkt/d3","forks_url":"https://api.github.com/repos/defunkt/d3/forks","keys_url":"https://api.github.com/repos/defunkt/d3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/d3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/d3/teams","hooks_url":"https://api.github.com/repos/defunkt/d3/hooks","issue_events_url":"https://api.github.com/repos/defunkt/d3/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/d3/events","assignees_url":"https://api.github.com/repos/defunkt/d3/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/d3/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/d3/tags","blobs_url":"https://api.github.com/repos/defunkt/d3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/d3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/d3/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/d3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/d3/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/d3/languages","stargazers_url":"https://api.github.com/repos/defunkt/d3/stargazers","contributors_url":"https://api.github.com/repos/defunkt/d3/contributors","subscribers_url":"https://api.github.com/repos/defunkt/d3/subscribers","subscription_url":"https://api.github.com/repos/defunkt/d3/subscription","commits_url":"https://api.github.com/repos/defunkt/d3/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/d3/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/d3/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/d3/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/d3/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/d3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/d3/merges","archive_url":"https://api.github.com/repos/defunkt/d3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/d3/downloads","issues_url":"https://api.github.com/repos/defunkt/d3/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/d3/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/d3/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/d3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/d3/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/d3/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/d3/deployments","created_at":"2014-04-08T18:45:26Z","updated_at":"2018-03-13T08:37:11Z","pushed_at":"2014-04-08T18:46:26Z","git_url":"git://github.com/defunkt/d3.git","ssh_url":"git@github.com:defunkt/d3.git","clone_url":"https://github.com/defunkt/d3.git","svn_url":"https://github.com/defunkt/d3","homepage":"http://d3js.org","size":34521,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":1,"open_issues":0,"watchers":3,"default_branch":"master"},{"id":91988,"name":"defunkt.github.com","full_name":"defunkt/defunkt.github.com","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/defunkt.github.com","description":"My - GitHub Page","fork":false,"url":"https://api.github.com/repos/defunkt/defunkt.github.com","forks_url":"https://api.github.com/repos/defunkt/defunkt.github.com/forks","keys_url":"https://api.github.com/repos/defunkt/defunkt.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/defunkt.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/defunkt.github.com/teams","hooks_url":"https://api.github.com/repos/defunkt/defunkt.github.com/hooks","issue_events_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/defunkt.github.com/events","assignees_url":"https://api.github.com/repos/defunkt/defunkt.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/defunkt.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/defunkt.github.com/tags","blobs_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/defunkt.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/defunkt.github.com/languages","stargazers_url":"https://api.github.com/repos/defunkt/defunkt.github.com/stargazers","contributors_url":"https://api.github.com/repos/defunkt/defunkt.github.com/contributors","subscribers_url":"https://api.github.com/repos/defunkt/defunkt.github.com/subscribers","subscription_url":"https://api.github.com/repos/defunkt/defunkt.github.com/subscription","commits_url":"https://api.github.com/repos/defunkt/defunkt.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/defunkt.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/defunkt.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/defunkt.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/defunkt.github.com/merges","archive_url":"https://api.github.com/repos/defunkt/defunkt.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/defunkt.github.com/downloads","issues_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/defunkt.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/defunkt.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/defunkt.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/defunkt.github.com/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/defunkt.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/defunkt.github.com/deployments","created_at":"2008-12-17T07:53:14Z","updated_at":"2018-03-13T08:37:10Z","pushed_at":"2014-08-05T00:38:47Z","git_url":"git://github.com/defunkt/defunkt.github.com.git","ssh_url":"git@github.com:defunkt/defunkt.github.com.git","clone_url":"https://github.com/defunkt/defunkt.github.com.git","svn_url":"https://github.com/defunkt/defunkt.github.com","homepage":"http://defunkt.io","size":3011,"stargazers_count":69,"watchers_count":69,"language":null,"has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":51,"mirror_url":null,"archived":false,"open_issues_count":3,"license":null,"forks":51,"open_issues":3,"watchers":69,"default_branch":"master"},{"id":628288,"name":"djangode","full_name":"defunkt/djangode","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/djangode","description":"Utilities - functions for node.js that borrow some useful concepts from Django","fork":true,"url":"https://api.github.com/repos/defunkt/djangode","forks_url":"https://api.github.com/repos/defunkt/djangode/forks","keys_url":"https://api.github.com/repos/defunkt/djangode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/djangode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/djangode/teams","hooks_url":"https://api.github.com/repos/defunkt/djangode/hooks","issue_events_url":"https://api.github.com/repos/defunkt/djangode/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/djangode/events","assignees_url":"https://api.github.com/repos/defunkt/djangode/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/djangode/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/djangode/tags","blobs_url":"https://api.github.com/repos/defunkt/djangode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/djangode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/djangode/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/djangode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/djangode/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/djangode/languages","stargazers_url":"https://api.github.com/repos/defunkt/djangode/stargazers","contributors_url":"https://api.github.com/repos/defunkt/djangode/contributors","subscribers_url":"https://api.github.com/repos/defunkt/djangode/subscribers","subscription_url":"https://api.github.com/repos/defunkt/djangode/subscription","commits_url":"https://api.github.com/repos/defunkt/djangode/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/djangode/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/djangode/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/djangode/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/djangode/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/djangode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/djangode/merges","archive_url":"https://api.github.com/repos/defunkt/djangode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/djangode/downloads","issues_url":"https://api.github.com/repos/defunkt/djangode/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/djangode/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/djangode/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/djangode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/djangode/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/djangode/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/djangode/deployments","created_at":"2010-04-25T16:41:30Z","updated_at":"2018-03-13T08:37:09Z","pushed_at":"2010-04-25T16:42:56Z","git_url":"git://github.com/defunkt/djangode.git","ssh_url":"git@github.com:defunkt/djangode.git","clone_url":"https://github.com/defunkt/djangode.git","svn_url":"https://github.com/defunkt/djangode","homepage":"","size":191,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"bsd-2-clause","name":"BSD - 2-Clause \"Simplified\" License","spdx_id":"BSD-2-Clause","url":"https://api.github.com/licenses/bsd-2-clause"},"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":2448060,"name":"dodgeball.github.com","full_name":"defunkt/dodgeball.github.com","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dodgeball.github.com","description":"yes","fork":false,"url":"https://api.github.com/repos/defunkt/dodgeball.github.com","forks_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/forks","keys_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/teams","hooks_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/events","assignees_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/tags","blobs_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/languages","stargazers_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/subscription","commits_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/merges","archive_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/downloads","issues_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/deployments","created_at":"2011-09-24T03:01:09Z","updated_at":"2018-03-13T08:37:07Z","pushed_at":"2011-09-24T03:01:22Z","git_url":"git://github.com/defunkt/dodgeball.github.com.git","ssh_url":"git@github.com:defunkt/dodgeball.github.com.git","clone_url":"https://github.com/defunkt/dodgeball.github.com.git","svn_url":"https://github.com/defunkt/dodgeball.github.com","homepage":"","size":534,"stargazers_count":6,"watchers_count":6,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":6,"open_issues":0,"watchers":6,"default_branch":"master"},{"id":5171653,"name":"dotenv","full_name":"defunkt/dotenv","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dotenv","description":"Loads - environment variables from `.env`. ","fork":true,"url":"https://api.github.com/repos/defunkt/dotenv","forks_url":"https://api.github.com/repos/defunkt/dotenv/forks","keys_url":"https://api.github.com/repos/defunkt/dotenv/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dotenv/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dotenv/teams","hooks_url":"https://api.github.com/repos/defunkt/dotenv/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dotenv/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dotenv/events","assignees_url":"https://api.github.com/repos/defunkt/dotenv/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dotenv/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dotenv/tags","blobs_url":"https://api.github.com/repos/defunkt/dotenv/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dotenv/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dotenv/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dotenv/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dotenv/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dotenv/languages","stargazers_url":"https://api.github.com/repos/defunkt/dotenv/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dotenv/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dotenv/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dotenv/subscription","commits_url":"https://api.github.com/repos/defunkt/dotenv/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dotenv/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dotenv/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dotenv/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dotenv/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dotenv/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dotenv/merges","archive_url":"https://api.github.com/repos/defunkt/dotenv/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dotenv/downloads","issues_url":"https://api.github.com/repos/defunkt/dotenv/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dotenv/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dotenv/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dotenv/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dotenv/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dotenv/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dotenv/deployments","created_at":"2012-07-24T21:43:19Z","updated_at":"2018-03-27T14:21:28Z","pushed_at":"2012-07-24T04:30:34Z","git_url":"git://github.com/defunkt/dotenv.git","ssh_url":"git@github.com:defunkt/dotenv.git","clone_url":"https://github.com/defunkt/dotenv.git","svn_url":"https://github.com/defunkt/dotenv","homepage":null,"size":75,"stargazers_count":5,"watchers_count":5,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":1336779,"name":"dotjs","full_name":"defunkt/dotjs","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dotjs","description":"~/.js - — No longer maintained, sorry.","fork":false,"url":"https://api.github.com/repos/defunkt/dotjs","forks_url":"https://api.github.com/repos/defunkt/dotjs/forks","keys_url":"https://api.github.com/repos/defunkt/dotjs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dotjs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dotjs/teams","hooks_url":"https://api.github.com/repos/defunkt/dotjs/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dotjs/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dotjs/events","assignees_url":"https://api.github.com/repos/defunkt/dotjs/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dotjs/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dotjs/tags","blobs_url":"https://api.github.com/repos/defunkt/dotjs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dotjs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dotjs/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dotjs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dotjs/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dotjs/languages","stargazers_url":"https://api.github.com/repos/defunkt/dotjs/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dotjs/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dotjs/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dotjs/subscription","commits_url":"https://api.github.com/repos/defunkt/dotjs/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dotjs/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dotjs/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dotjs/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dotjs/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dotjs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dotjs/merges","archive_url":"https://api.github.com/repos/defunkt/dotjs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dotjs/downloads","issues_url":"https://api.github.com/repos/defunkt/dotjs/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dotjs/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dotjs/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dotjs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dotjs/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dotjs/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dotjs/deployments","created_at":"2011-02-07T07:01:33Z","updated_at":"2018-04-11T19:12:50Z","pushed_at":"2017-08-04T04:12:15Z","git_url":"git://github.com/defunkt/dotjs.git","ssh_url":"git@github.com:defunkt/dotjs.git","clone_url":"https://github.com/defunkt/dotjs.git","svn_url":"https://github.com/defunkt/dotjs","homepage":"http://bit.ly/dotjs","size":1316,"stargazers_count":3182,"watchers_count":3182,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":382,"mirror_url":null,"archived":false,"open_issues_count":23,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":382,"open_issues":23,"watchers":3182,"default_branch":"master"},{"id":69384,"name":"electron-wordwrap","full_name":"defunkt/electron-wordwrap","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/electron-wordwrap","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/electron-wordwrap","forks_url":"https://api.github.com/repos/defunkt/electron-wordwrap/forks","keys_url":"https://api.github.com/repos/defunkt/electron-wordwrap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/electron-wordwrap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/electron-wordwrap/teams","hooks_url":"https://api.github.com/repos/defunkt/electron-wordwrap/hooks","issue_events_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/electron-wordwrap/events","assignees_url":"https://api.github.com/repos/defunkt/electron-wordwrap/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/electron-wordwrap/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/electron-wordwrap/tags","blobs_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/electron-wordwrap/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/electron-wordwrap/languages","stargazers_url":"https://api.github.com/repos/defunkt/electron-wordwrap/stargazers","contributors_url":"https://api.github.com/repos/defunkt/electron-wordwrap/contributors","subscribers_url":"https://api.github.com/repos/defunkt/electron-wordwrap/subscribers","subscription_url":"https://api.github.com/repos/defunkt/electron-wordwrap/subscription","commits_url":"https://api.github.com/repos/defunkt/electron-wordwrap/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/electron-wordwrap/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/electron-wordwrap/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/electron-wordwrap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/electron-wordwrap/merges","archive_url":"https://api.github.com/repos/defunkt/electron-wordwrap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/electron-wordwrap/downloads","issues_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/electron-wordwrap/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/electron-wordwrap/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/electron-wordwrap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/electron-wordwrap/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/electron-wordwrap/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/electron-wordwrap/deployments","created_at":"2008-10-29T20:03:17Z","updated_at":"2018-03-13T08:37:03Z","pushed_at":"2008-10-29T20:28:21Z","git_url":"git://github.com/defunkt/electron-wordwrap.git","ssh_url":"git@github.com:defunkt/electron-wordwrap.git","clone_url":"https://github.com/defunkt/electron-wordwrap.git","svn_url":"https://github.com/defunkt/electron-wordwrap","homepage":"","size":76,"stargazers_count":4,"watchers_count":4,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":4,"open_issues":0,"watchers":4,"default_branch":"master"},{"id":43903,"name":"emacs","full_name":"defunkt/emacs","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/emacs","description":"My - Emacs config","fork":false,"url":"https://api.github.com/repos/defunkt/emacs","forks_url":"https://api.github.com/repos/defunkt/emacs/forks","keys_url":"https://api.github.com/repos/defunkt/emacs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/emacs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/emacs/teams","hooks_url":"https://api.github.com/repos/defunkt/emacs/hooks","issue_events_url":"https://api.github.com/repos/defunkt/emacs/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/emacs/events","assignees_url":"https://api.github.com/repos/defunkt/emacs/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/emacs/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/emacs/tags","blobs_url":"https://api.github.com/repos/defunkt/emacs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/emacs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/emacs/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/emacs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/emacs/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/emacs/languages","stargazers_url":"https://api.github.com/repos/defunkt/emacs/stargazers","contributors_url":"https://api.github.com/repos/defunkt/emacs/contributors","subscribers_url":"https://api.github.com/repos/defunkt/emacs/subscribers","subscription_url":"https://api.github.com/repos/defunkt/emacs/subscription","commits_url":"https://api.github.com/repos/defunkt/emacs/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/emacs/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/emacs/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/emacs/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/emacs/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/emacs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/emacs/merges","archive_url":"https://api.github.com/repos/defunkt/emacs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/emacs/downloads","issues_url":"https://api.github.com/repos/defunkt/emacs/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/emacs/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/emacs/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/emacs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/emacs/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/emacs/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/emacs/deployments","created_at":"2008-08-19T10:50:19Z","updated_at":"2018-03-22T20:05:07Z","pushed_at":"2011-10-25T21:53:46Z","git_url":"git://github.com/defunkt/emacs.git","ssh_url":"git@github.com:defunkt/emacs.git","clone_url":"https://github.com/defunkt/emacs.git","svn_url":"https://github.com/defunkt/emacs","homepage":"","size":1705,"stargazers_count":188,"watchers_count":188,"language":"Emacs - Lisp","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":46,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":46,"open_issues":0,"watchers":188,"default_branch":"master"},{"id":2998404,"name":"email_reply_parser","full_name":"defunkt/email_reply_parser","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/email_reply_parser","description":null,"fork":true,"url":"https://api.github.com/repos/defunkt/email_reply_parser","forks_url":"https://api.github.com/repos/defunkt/email_reply_parser/forks","keys_url":"https://api.github.com/repos/defunkt/email_reply_parser/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/email_reply_parser/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/email_reply_parser/teams","hooks_url":"https://api.github.com/repos/defunkt/email_reply_parser/hooks","issue_events_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/email_reply_parser/events","assignees_url":"https://api.github.com/repos/defunkt/email_reply_parser/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/email_reply_parser/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/email_reply_parser/tags","blobs_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/email_reply_parser/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/email_reply_parser/languages","stargazers_url":"https://api.github.com/repos/defunkt/email_reply_parser/stargazers","contributors_url":"https://api.github.com/repos/defunkt/email_reply_parser/contributors","subscribers_url":"https://api.github.com/repos/defunkt/email_reply_parser/subscribers","subscription_url":"https://api.github.com/repos/defunkt/email_reply_parser/subscription","commits_url":"https://api.github.com/repos/defunkt/email_reply_parser/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/email_reply_parser/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/email_reply_parser/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/email_reply_parser/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/email_reply_parser/merges","archive_url":"https://api.github.com/repos/defunkt/email_reply_parser/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/email_reply_parser/downloads","issues_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/email_reply_parser/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/email_reply_parser/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/email_reply_parser/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/email_reply_parser/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/email_reply_parser/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/email_reply_parser/deployments","created_at":"2011-12-16T23:13:05Z","updated_at":"2018-04-04T01:20:34Z","pushed_at":"2011-12-16T23:13:24Z","git_url":"git://github.com/defunkt/email_reply_parser.git","ssh_url":"git@github.com:defunkt/email_reply_parser.git","clone_url":"https://github.com/defunkt/email_reply_parser.git","svn_url":"https://github.com/defunkt/email_reply_parser","homepage":"","size":137,"stargazers_count":3,"watchers_count":3,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":5,"open_issues":0,"watchers":3,"default_branch":"master"},{"id":1167457,"name":"evilbot","full_name":"defunkt/evilbot","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/evilbot","description":"an - evil bot that''s definitely not for convore","fork":false,"url":"https://api.github.com/repos/defunkt/evilbot","forks_url":"https://api.github.com/repos/defunkt/evilbot/forks","keys_url":"https://api.github.com/repos/defunkt/evilbot/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/evilbot/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/evilbot/teams","hooks_url":"https://api.github.com/repos/defunkt/evilbot/hooks","issue_events_url":"https://api.github.com/repos/defunkt/evilbot/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/evilbot/events","assignees_url":"https://api.github.com/repos/defunkt/evilbot/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/evilbot/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/evilbot/tags","blobs_url":"https://api.github.com/repos/defunkt/evilbot/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/evilbot/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/evilbot/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/evilbot/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/evilbot/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/evilbot/languages","stargazers_url":"https://api.github.com/repos/defunkt/evilbot/stargazers","contributors_url":"https://api.github.com/repos/defunkt/evilbot/contributors","subscribers_url":"https://api.github.com/repos/defunkt/evilbot/subscribers","subscription_url":"https://api.github.com/repos/defunkt/evilbot/subscription","commits_url":"https://api.github.com/repos/defunkt/evilbot/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/evilbot/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/evilbot/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/evilbot/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/evilbot/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/evilbot/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/evilbot/merges","archive_url":"https://api.github.com/repos/defunkt/evilbot/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/evilbot/downloads","issues_url":"https://api.github.com/repos/defunkt/evilbot/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/evilbot/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/evilbot/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/evilbot/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/evilbot/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/evilbot/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/evilbot/deployments","created_at":"2010-12-14T08:09:11Z","updated_at":"2018-03-13T08:36:59Z","pushed_at":"2011-02-16T07:34:00Z","git_url":"git://github.com/defunkt/evilbot.git","ssh_url":"git@github.com:defunkt/evilbot.git","clone_url":"https://github.com/defunkt/evilbot.git","svn_url":"https://github.com/defunkt/evilbot","homepage":"http://convore.com/","size":156,"stargazers_count":45,"watchers_count":45,"language":"CoffeeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":15,"open_issues":1,"watchers":45,"default_branch":"master"},{"id":35,"name":"exception_logger","full_name":"defunkt/exception_logger","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/exception_logger","description":"Unmaintained. - Sorry.","fork":false,"url":"https://api.github.com/repos/defunkt/exception_logger","forks_url":"https://api.github.com/repos/defunkt/exception_logger/forks","keys_url":"https://api.github.com/repos/defunkt/exception_logger/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/exception_logger/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/exception_logger/teams","hooks_url":"https://api.github.com/repos/defunkt/exception_logger/hooks","issue_events_url":"https://api.github.com/repos/defunkt/exception_logger/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/exception_logger/events","assignees_url":"https://api.github.com/repos/defunkt/exception_logger/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/exception_logger/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/exception_logger/tags","blobs_url":"https://api.github.com/repos/defunkt/exception_logger/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/exception_logger/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/exception_logger/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/exception_logger/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/exception_logger/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/exception_logger/languages","stargazers_url":"https://api.github.com/repos/defunkt/exception_logger/stargazers","contributors_url":"https://api.github.com/repos/defunkt/exception_logger/contributors","subscribers_url":"https://api.github.com/repos/defunkt/exception_logger/subscribers","subscription_url":"https://api.github.com/repos/defunkt/exception_logger/subscription","commits_url":"https://api.github.com/repos/defunkt/exception_logger/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/exception_logger/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/exception_logger/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/exception_logger/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/exception_logger/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/exception_logger/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/exception_logger/merges","archive_url":"https://api.github.com/repos/defunkt/exception_logger/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/exception_logger/downloads","issues_url":"https://api.github.com/repos/defunkt/exception_logger/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/exception_logger/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/exception_logger/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/exception_logger/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/exception_logger/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/exception_logger/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/exception_logger/deployments","created_at":"2008-01-14T03:32:19Z","updated_at":"2018-03-13T08:36:57Z","pushed_at":"2016-01-01T04:57:28Z","git_url":"git://github.com/defunkt/exception_logger.git","ssh_url":"git@github.com:defunkt/exception_logger.git","clone_url":"https://github.com/defunkt/exception_logger.git","svn_url":"https://github.com/defunkt/exception_logger","homepage":"","size":232,"stargazers_count":235,"watchers_count":235,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":87,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":87,"open_issues":2,"watchers":235,"default_branch":"master"},{"id":425,"name":"facebox","full_name":"defunkt/facebox","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/facebox","description":"Facebook-style - lightbox, built in jQuery","fork":false,"url":"https://api.github.com/repos/defunkt/facebox","forks_url":"https://api.github.com/repos/defunkt/facebox/forks","keys_url":"https://api.github.com/repos/defunkt/facebox/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/facebox/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/facebox/teams","hooks_url":"https://api.github.com/repos/defunkt/facebox/hooks","issue_events_url":"https://api.github.com/repos/defunkt/facebox/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/facebox/events","assignees_url":"https://api.github.com/repos/defunkt/facebox/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/facebox/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/facebox/tags","blobs_url":"https://api.github.com/repos/defunkt/facebox/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/facebox/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/facebox/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/facebox/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/facebox/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/facebox/languages","stargazers_url":"https://api.github.com/repos/defunkt/facebox/stargazers","contributors_url":"https://api.github.com/repos/defunkt/facebox/contributors","subscribers_url":"https://api.github.com/repos/defunkt/facebox/subscribers","subscription_url":"https://api.github.com/repos/defunkt/facebox/subscription","commits_url":"https://api.github.com/repos/defunkt/facebox/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/facebox/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/facebox/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/facebox/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/facebox/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/facebox/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/facebox/merges","archive_url":"https://api.github.com/repos/defunkt/facebox/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/facebox/downloads","issues_url":"https://api.github.com/repos/defunkt/facebox/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/facebox/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/facebox/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/facebox/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/facebox/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/facebox/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/facebox/deployments","created_at":"2008-02-11T22:49:27Z","updated_at":"2018-04-12T05:43:21Z","pushed_at":"2013-07-15T19:55:04Z","git_url":"git://github.com/defunkt/facebox.git","ssh_url":"git@github.com:defunkt/facebox.git","clone_url":"https://github.com/defunkt/facebox.git","svn_url":"https://github.com/defunkt/facebox","homepage":"http://defunkt.io/facebox/","size":1174,"stargazers_count":1941,"watchers_count":1941,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":419,"mirror_url":null,"archived":false,"open_issues_count":31,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":419,"open_issues":31,"watchers":1941,"default_branch":"master"},{"id":5211331,"name":"faceup","full_name":"defunkt/faceup","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/faceup","description":"More - than just mustaches.","fork":true,"url":"https://api.github.com/repos/defunkt/faceup","forks_url":"https://api.github.com/repos/defunkt/faceup/forks","keys_url":"https://api.github.com/repos/defunkt/faceup/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/faceup/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/faceup/teams","hooks_url":"https://api.github.com/repos/defunkt/faceup/hooks","issue_events_url":"https://api.github.com/repos/defunkt/faceup/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/faceup/events","assignees_url":"https://api.github.com/repos/defunkt/faceup/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/faceup/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/faceup/tags","blobs_url":"https://api.github.com/repos/defunkt/faceup/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/faceup/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/faceup/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/faceup/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/faceup/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/faceup/languages","stargazers_url":"https://api.github.com/repos/defunkt/faceup/stargazers","contributors_url":"https://api.github.com/repos/defunkt/faceup/contributors","subscribers_url":"https://api.github.com/repos/defunkt/faceup/subscribers","subscription_url":"https://api.github.com/repos/defunkt/faceup/subscription","commits_url":"https://api.github.com/repos/defunkt/faceup/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/faceup/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/faceup/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/faceup/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/faceup/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/faceup/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/faceup/merges","archive_url":"https://api.github.com/repos/defunkt/faceup/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/faceup/downloads","issues_url":"https://api.github.com/repos/defunkt/faceup/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/faceup/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/faceup/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/faceup/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/faceup/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/faceup/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/faceup/deployments","created_at":"2012-07-28T02:11:56Z","updated_at":"2018-03-27T14:21:28Z","pushed_at":"2012-07-28T02:40:26Z","git_url":"git://github.com/defunkt/faceup.git","ssh_url":"git@github.com:defunkt/faceup.git","clone_url":"https://github.com/defunkt/faceup.git","svn_url":"https://github.com/defunkt/faceup","homepage":"http://faceup.me/","size":1994,"stargazers_count":6,"watchers_count":6,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":6,"open_issues":1,"watchers":6,"default_branch":"master"}]' diff --git a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_repo_link_then_repo_activity_displayed.yaml b/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_repo_link_then_repo_activity_displayed.yaml deleted file mode 100644 index 374b28f9..00000000 --- a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_repo_link_then_repo_activity_displayed.yaml +++ /dev/null @@ -1,67 +0,0 @@ -!tape -name: when repo link then repo activity displayed -interactions: -- recorded: 2018-04-14T11:43:32.216Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 11:43:32 GMT - ETag: W/"532e7d94d6daa2621b276d2a82af5d60" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 99C5:1062:4A30981:8F98603:5AD1E961 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '54' - X-RateLimit-Reset: '1523709311' - X-Runtime-rack: '0.115377' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' -- recorded: 2018-04-14T11:43:32.797Z - request: - method: GET - uri: https://api.github.com/repos/jraska/Falcon - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 11:43:32 GMT - ETag: W/"32a9b699b2d58db53b7257bf7aa3ff01" - Last-Modified: Thu, 05 Apr 2018 02:53:35 GMT - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 99C5:1062:4A30A47:8F98A8C:5AD1E964 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '53' - X-RateLimit-Reset: '1523709311' - X-Runtime-rack: '0.042222' - X-XSS-Protection: 1; mode=block - body: '{"id":42816069,"name":"Falcon","full_name":"jraska/Falcon","owner":{"login":"jraska","id":6277721,"avatar_url":"https://avatars0.githubusercontent.com/u/6277721?v=4","gravatar_id":"","url":"https://api.github.com/users/jraska","html_url":"https://github.com/jraska","followers_url":"https://api.github.com/users/jraska/followers","following_url":"https://api.github.com/users/jraska/following{/other_user}","gists_url":"https://api.github.com/users/jraska/gists{/gist_id}","starred_url":"https://api.github.com/users/jraska/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jraska/subscriptions","organizations_url":"https://api.github.com/users/jraska/orgs","repos_url":"https://api.github.com/users/jraska/repos","events_url":"https://api.github.com/users/jraska/events{/privacy}","received_events_url":"https://api.github.com/users/jraska/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jraska/Falcon","description":"Take - Android screenshots with Falcons bright eye!","fork":false,"url":"https://api.github.com/repos/jraska/Falcon","forks_url":"https://api.github.com/repos/jraska/Falcon/forks","keys_url":"https://api.github.com/repos/jraska/Falcon/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jraska/Falcon/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jraska/Falcon/teams","hooks_url":"https://api.github.com/repos/jraska/Falcon/hooks","issue_events_url":"https://api.github.com/repos/jraska/Falcon/issues/events{/number}","events_url":"https://api.github.com/repos/jraska/Falcon/events","assignees_url":"https://api.github.com/repos/jraska/Falcon/assignees{/user}","branches_url":"https://api.github.com/repos/jraska/Falcon/branches{/branch}","tags_url":"https://api.github.com/repos/jraska/Falcon/tags","blobs_url":"https://api.github.com/repos/jraska/Falcon/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jraska/Falcon/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jraska/Falcon/git/refs{/sha}","trees_url":"https://api.github.com/repos/jraska/Falcon/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jraska/Falcon/statuses/{sha}","languages_url":"https://api.github.com/repos/jraska/Falcon/languages","stargazers_url":"https://api.github.com/repos/jraska/Falcon/stargazers","contributors_url":"https://api.github.com/repos/jraska/Falcon/contributors","subscribers_url":"https://api.github.com/repos/jraska/Falcon/subscribers","subscription_url":"https://api.github.com/repos/jraska/Falcon/subscription","commits_url":"https://api.github.com/repos/jraska/Falcon/commits{/sha}","git_commits_url":"https://api.github.com/repos/jraska/Falcon/git/commits{/sha}","comments_url":"https://api.github.com/repos/jraska/Falcon/comments{/number}","issue_comment_url":"https://api.github.com/repos/jraska/Falcon/issues/comments{/number}","contents_url":"https://api.github.com/repos/jraska/Falcon/contents/{+path}","compare_url":"https://api.github.com/repos/jraska/Falcon/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jraska/Falcon/merges","archive_url":"https://api.github.com/repos/jraska/Falcon/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jraska/Falcon/downloads","issues_url":"https://api.github.com/repos/jraska/Falcon/issues{/number}","pulls_url":"https://api.github.com/repos/jraska/Falcon/pulls{/number}","milestones_url":"https://api.github.com/repos/jraska/Falcon/milestones{/number}","notifications_url":"https://api.github.com/repos/jraska/Falcon/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jraska/Falcon/labels{/name}","releases_url":"https://api.github.com/repos/jraska/Falcon/releases{/id}","deployments_url":"https://api.github.com/repos/jraska/Falcon/deployments","created_at":"2015-09-20T14:31:21Z","updated_at":"2018-04-05T02:53:35Z","pushed_at":"2018-02-12T20:52:32Z","git_url":"git://github.com/jraska/Falcon.git","ssh_url":"git@github.com:jraska/Falcon.git","clone_url":"https://github.com/jraska/Falcon.git","svn_url":"https://github.com/jraska/Falcon","homepage":"","size":303,"stargazers_count":235,"watchers_count":235,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache - License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":30,"open_issues":0,"watchers":235,"default_branch":"master","network_count":30,"subscribers_count":13}' diff --git a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_users_link_then_users_activity_displayed.yaml b/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_users_link_then_users_activity_displayed.yaml deleted file mode 100644 index 3f308b99..00000000 --- a/app/src/androidTest/assets/tapes/DeepLinkLaunchTest/when_users_link_then_users_activity_displayed.yaml +++ /dev/null @@ -1,65 +0,0 @@ -!tape -name: when users link then users activity displayed -interactions: -- recorded: 2018-08-12T17:23:01.377Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sun, 12 Aug 2018 17:23:01 GMT - ETag: W/"66d0292f0f3ce40c2cb682c4a39a6a44" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: C888:38B5:1E42EE:3CE483:5B706CF4 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '46' - X-RateLimit-Reset: '1534096824' - X-Runtime-rack: '0.104981' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"node_id":"MDQ6VXNlcjM=","avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"node_id":"MDQ6VXNlcjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"node_id":"MDQ6VXNlcjU=","avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"node_id":"MDQ6VXNlcjY=","avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"node_id":"MDQ6VXNlcjc=","avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"node_id":"MDQ6VXNlcjE3","avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"node_id":"MDQ6VXNlcjE4","avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"node_id":"MDQ6VXNlcjE5","avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"node_id":"MDQ6VXNlcjIw","avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"node_id":"MDQ6VXNlcjIx","avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"node_id":"MDQ6VXNlcjIy","avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"node_id":"MDQ6VXNlcjIz","avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"node_id":"MDQ6VXNlcjI1","avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"node_id":"MDQ6VXNlcjI2","avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"node_id":"MDQ6VXNlcjI3","avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"node_id":"MDQ6VXNlcjI4","avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"node_id":"MDQ6VXNlcjI5","avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"node_id":"MDQ6VXNlcjMw","avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"node_id":"MDQ6VXNlcjMx","avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"node_id":"MDQ6VXNlcjMy","avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"node_id":"MDQ6VXNlcjM0","avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"node_id":"MDQ6VXNlcjM1","avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"node_id":"MDQ6VXNlcjM2","avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"node_id":"MDQ6VXNlcjM3","avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"node_id":"MDQ6VXNlcjM4","avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0","avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"node_id":"MDQ6VXNlcjQ1","avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"node_id":"MDQ6VXNlcjQ2","avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' -- recorded: 2018-08-12T17:23:02.215Z - request: - method: GET - uri: https://api.github.com/users?since=0&syntheticOkReplayOrdinal=2 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sun, 12 Aug 2018 17:23:02 GMT - ETag: W/"66d0292f0f3ce40c2cb682c4a39a6a44" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: CB2C:38B4:15F243:31AB78:5B706CF5 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '45' - X-RateLimit-Reset: '1534096824' - X-Runtime-rack: '0.085250' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"node_id":"MDQ6VXNlcjM=","avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"node_id":"MDQ6VXNlcjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"node_id":"MDQ6VXNlcjU=","avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"node_id":"MDQ6VXNlcjY=","avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"node_id":"MDQ6VXNlcjc=","avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"node_id":"MDQ6VXNlcjE3","avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"node_id":"MDQ6VXNlcjE4","avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"node_id":"MDQ6VXNlcjE5","avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"node_id":"MDQ6VXNlcjIw","avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"node_id":"MDQ6VXNlcjIx","avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"node_id":"MDQ6VXNlcjIy","avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"node_id":"MDQ6VXNlcjIz","avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"node_id":"MDQ6VXNlcjI1","avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"node_id":"MDQ6VXNlcjI2","avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"node_id":"MDQ6VXNlcjI3","avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"node_id":"MDQ6VXNlcjI4","avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"node_id":"MDQ6VXNlcjI5","avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"node_id":"MDQ6VXNlcjMw","avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"node_id":"MDQ6VXNlcjMx","avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"node_id":"MDQ6VXNlcjMy","avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"node_id":"MDQ6VXNlcjM0","avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"node_id":"MDQ6VXNlcjM1","avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"node_id":"MDQ6VXNlcjM2","avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"node_id":"MDQ6VXNlcjM3","avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"node_id":"MDQ6VXNlcjM4","avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0","avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"node_id":"MDQ6VXNlcjQ1","avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"node_id":"MDQ6VXNlcjQ2","avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' diff --git a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_about_then_opens_about.yaml b/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_about_then_opens_about.yaml deleted file mode 100644 index 377344c1..00000000 --- a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_about_then_opens_about.yaml +++ /dev/null @@ -1,33 +0,0 @@ -!tape -name: when about then opens about -interactions: -- recorded: 2019-05-30T13:54:22.825Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Thu, 30 May 2019 13:54:23 GMT - ETag: W/"0001aad0767752977be7cb60e70ecd33" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: 3748:3A4A:335048:6D17F8:5CEFE08F - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '52' - X-RateLimit-Reset: '1559228063' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":false},{"login":"pjhyett","id":3,"node_id":"MDQ6VXNlcjM=","avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"node_id":"MDQ6VXNlcjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"node_id":"MDQ6VXNlcjU=","avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"node_id":"MDQ6VXNlcjY=","avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"node_id":"MDQ6VXNlcjc=","avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"node_id":"MDQ6VXNlcjE3","avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"node_id":"MDQ6VXNlcjE4","avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"node_id":"MDQ6VXNlcjE5","avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"node_id":"MDQ6VXNlcjIw","avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"node_id":"MDQ6VXNlcjIx","avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"node_id":"MDQ6VXNlcjIy","avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"node_id":"MDQ6VXNlcjIz","avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"node_id":"MDQ6VXNlcjI1","avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":false},{"login":"topfunky","id":26,"node_id":"MDQ6VXNlcjI2","avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"node_id":"MDQ6VXNlcjI3","avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"node_id":"MDQ6VXNlcjI4","avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"node_id":"MDQ6VXNlcjI5","avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"node_id":"MDQ6VXNlcjMw","avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"node_id":"MDQ6VXNlcjMx","avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"node_id":"MDQ6VXNlcjMy","avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"node_id":"MDQ6VXNlcjM0","avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"node_id":"MDQ6VXNlcjM1","avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"node_id":"MDQ6VXNlcjM2","avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"node_id":"MDQ6VXNlcjM3","avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"node_id":"MDQ6VXNlcjM4","avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0","avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"node_id":"MDQ6VXNlcjQ1","avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"node_id":"MDQ6VXNlcjQ2","avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' diff --git a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_refreshes_then_displays_other_users.yaml b/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_refreshes_then_displays_other_users.yaml deleted file mode 100644 index a1cbac9f..00000000 --- a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_refreshes_then_displays_other_users.yaml +++ /dev/null @@ -1,65 +0,0 @@ -!tape -name: when refreshes then displays other users -interactions: -- recorded: 2018-08-12T17:00:24.421Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sun, 12 Aug 2018 17:00:24 GMT - ETag: W/"66d0292f0f3ce40c2cb682c4a39a6a44" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: CBCF:38B3:A961B:1BA203:5B7067A7 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '59' - X-RateLimit-Reset: '1534096824' - X-Runtime-rack: '0.085771' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"node_id":"MDQ6VXNlcjI=","avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"node_id":"MDQ6VXNlcjM=","avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"node_id":"MDQ6VXNlcjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"node_id":"MDQ6VXNlcjU=","avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"node_id":"MDQ6VXNlcjY=","avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"node_id":"MDQ6VXNlcjc=","avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"node_id":"MDQ6VXNlcjE3","avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"node_id":"MDQ6VXNlcjE4","avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"node_id":"MDQ6VXNlcjE5","avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"node_id":"MDQ6VXNlcjIw","avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"node_id":"MDQ6VXNlcjIx","avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"node_id":"MDQ6VXNlcjIy","avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"node_id":"MDQ6VXNlcjIz","avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"node_id":"MDQ6VXNlcjI1","avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"node_id":"MDQ6VXNlcjI2","avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"node_id":"MDQ6VXNlcjI3","avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"node_id":"MDQ6VXNlcjI4","avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"node_id":"MDQ6VXNlcjI5","avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"node_id":"MDQ6VXNlcjMw","avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"node_id":"MDQ6VXNlcjMx","avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"node_id":"MDQ6VXNlcjMy","avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"node_id":"MDQ6VXNlcjM0","avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"node_id":"MDQ6VXNlcjM1","avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"node_id":"MDQ6VXNlcjM2","avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"node_id":"MDQ6VXNlcjM3","avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"node_id":"MDQ6VXNlcjM4","avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0","avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"node_id":"MDQ6VXNlcjQ1","avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"node_id":"MDQ6VXNlcjQ2","avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' -- recorded: 2018-08-12T17:00:26.483Z - request: - method: GET - uri: https://api.github.com/users?since=0&syntheticOkReplayOrdinal=2 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sun, 12 Aug 2018 17:00:26 GMT - ETag: W/"66d0292f0f3ce40c2cb682c4a39a6a44" - Link: ; rel="next", ; rel="first" - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: CBCF:38B3:A9687:1BA21D:5B7067A8 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '58' - X-RateLimit-Reset: '1534096824' - X-Runtime-rack: '0.105470' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE=","avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"pjhyett","id":3,"node_id":"MDQ6VXNlcjM=","avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"node_id":"MDQ6VXNlcjQ=","avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"node_id":"MDQ6VXNlcjU=","avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"node_id":"MDQ6VXNlcjY=","avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"node_id":"MDQ6VXNlcjc=","avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"node_id":"MDQ6VXNlcjE3","avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"node_id":"MDQ6VXNlcjE4","avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"node_id":"MDQ6VXNlcjE5","avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"node_id":"MDQ6VXNlcjIw","avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"node_id":"MDQ6VXNlcjIx","avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":false},{"login":"macournoyer","id":22,"node_id":"MDQ6VXNlcjIy","avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"node_id":"MDQ6VXNlcjIz","avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"node_id":"MDQ6VXNlcjI1","avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"node_id":"MDQ6VXNlcjI2","avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"node_id":"MDQ6VXNlcjI3","avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"node_id":"MDQ6VXNlcjI4","avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"node_id":"MDQ6VXNlcjI5","avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"node_id":"MDQ6VXNlcjMw","avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"node_id":"MDQ6VXNlcjMx","avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"node_id":"MDQ6VXNlcjMy","avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"node_id":"MDQ6VXNlcjM0","avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"node_id":"MDQ6VXNlcjM1","avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"node_id":"MDQ6VXNlcjM2","avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"node_id":"MDQ6VXNlcjM3","avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"node_id":"MDQ6VXNlcjM4","avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ0","avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"node_id":"MDQ6VXNlcjQ1","avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"node_id":"MDQ6VXNlcjQ2","avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' diff --git a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_settings_then_reports_event.yaml b/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_settings_then_reports_event.yaml deleted file mode 100644 index 5b7a0c61..00000000 --- a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_settings_then_reports_event.yaml +++ /dev/null @@ -1,34 +0,0 @@ -!tape -name: when starts then displays users -interactions: -- recorded: 2017-10-30T21:01:47.012Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Mon, 30 Oct 2017 21:02:20 GMT - ETag: W/"7efe7f7e277aab0ad67cf922bb8dd26e" - Expect-CT: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors" - Link: ; rel="next", ; rel="first" - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: C097:5931:2432245:59D8DB4:59F7935A - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '18' - X-RateLimit-Reset: '1509400193' - X-Runtime-rack: '0.096378' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":true},{"login":"macournoyer","id":22,"avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' diff --git a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_starts_then_displays_users.yaml b/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_starts_then_displays_users.yaml deleted file mode 100644 index 509529f5..00000000 --- a/app/src/androidTest/assets/tapes/UsersActivityFlowTest/when_starts_then_displays_users.yaml +++ /dev/null @@ -1,159 +0,0 @@ -!tape -name: when starts then displays users -interactions: -- recorded: 2017-10-30T21:01:47.012Z - request: - method: GET - uri: https://api.github.com/users?since=0 - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Mon, 30 Oct 2017 21:02:20 GMT - ETag: W/"7efe7f7e277aab0ad67cf922bb8dd26e" - Expect-CT: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors" - Link: ; rel="next", ; rel="first" - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: C097:5931:2432245:59D8DB4:59F7935A - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '18' - X-RateLimit-Reset: '1509400193' - X-Runtime-rack: '0.096378' - X-XSS-Protection: 1; mode=block - body: '[{"login":"mojombo","id":1,"avatar_url":"https://avatars0.githubusercontent.com/u/1?v=4","gravatar_id":"","url":"https://api.github.com/users/mojombo","html_url":"https://github.com/mojombo","followers_url":"https://api.github.com/users/mojombo/followers","following_url":"https://api.github.com/users/mojombo/following{/other_user}","gists_url":"https://api.github.com/users/mojombo/gists{/gist_id}","starred_url":"https://api.github.com/users/mojombo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojombo/subscriptions","organizations_url":"https://api.github.com/users/mojombo/orgs","repos_url":"https://api.github.com/users/mojombo/repos","events_url":"https://api.github.com/users/mojombo/events{/privacy}","received_events_url":"https://api.github.com/users/mojombo/received_events","type":"User","site_admin":false},{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},{"login":"pjhyett","id":3,"avatar_url":"https://avatars0.githubusercontent.com/u/3?v=4","gravatar_id":"","url":"https://api.github.com/users/pjhyett","html_url":"https://github.com/pjhyett","followers_url":"https://api.github.com/users/pjhyett/followers","following_url":"https://api.github.com/users/pjhyett/following{/other_user}","gists_url":"https://api.github.com/users/pjhyett/gists{/gist_id}","starred_url":"https://api.github.com/users/pjhyett/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pjhyett/subscriptions","organizations_url":"https://api.github.com/users/pjhyett/orgs","repos_url":"https://api.github.com/users/pjhyett/repos","events_url":"https://api.github.com/users/pjhyett/events{/privacy}","received_events_url":"https://api.github.com/users/pjhyett/received_events","type":"User","site_admin":false},{"login":"wycats","id":4,"avatar_url":"https://avatars0.githubusercontent.com/u/4?v=4","gravatar_id":"","url":"https://api.github.com/users/wycats","html_url":"https://github.com/wycats","followers_url":"https://api.github.com/users/wycats/followers","following_url":"https://api.github.com/users/wycats/following{/other_user}","gists_url":"https://api.github.com/users/wycats/gists{/gist_id}","starred_url":"https://api.github.com/users/wycats/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wycats/subscriptions","organizations_url":"https://api.github.com/users/wycats/orgs","repos_url":"https://api.github.com/users/wycats/repos","events_url":"https://api.github.com/users/wycats/events{/privacy}","received_events_url":"https://api.github.com/users/wycats/received_events","type":"User","site_admin":false},{"login":"ezmobius","id":5,"avatar_url":"https://avatars0.githubusercontent.com/u/5?v=4","gravatar_id":"","url":"https://api.github.com/users/ezmobius","html_url":"https://github.com/ezmobius","followers_url":"https://api.github.com/users/ezmobius/followers","following_url":"https://api.github.com/users/ezmobius/following{/other_user}","gists_url":"https://api.github.com/users/ezmobius/gists{/gist_id}","starred_url":"https://api.github.com/users/ezmobius/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezmobius/subscriptions","organizations_url":"https://api.github.com/users/ezmobius/orgs","repos_url":"https://api.github.com/users/ezmobius/repos","events_url":"https://api.github.com/users/ezmobius/events{/privacy}","received_events_url":"https://api.github.com/users/ezmobius/received_events","type":"User","site_admin":false},{"login":"ivey","id":6,"avatar_url":"https://avatars0.githubusercontent.com/u/6?v=4","gravatar_id":"","url":"https://api.github.com/users/ivey","html_url":"https://github.com/ivey","followers_url":"https://api.github.com/users/ivey/followers","following_url":"https://api.github.com/users/ivey/following{/other_user}","gists_url":"https://api.github.com/users/ivey/gists{/gist_id}","starred_url":"https://api.github.com/users/ivey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivey/subscriptions","organizations_url":"https://api.github.com/users/ivey/orgs","repos_url":"https://api.github.com/users/ivey/repos","events_url":"https://api.github.com/users/ivey/events{/privacy}","received_events_url":"https://api.github.com/users/ivey/received_events","type":"User","site_admin":false},{"login":"evanphx","id":7,"avatar_url":"https://avatars0.githubusercontent.com/u/7?v=4","gravatar_id":"","url":"https://api.github.com/users/evanphx","html_url":"https://github.com/evanphx","followers_url":"https://api.github.com/users/evanphx/followers","following_url":"https://api.github.com/users/evanphx/following{/other_user}","gists_url":"https://api.github.com/users/evanphx/gists{/gist_id}","starred_url":"https://api.github.com/users/evanphx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/evanphx/subscriptions","organizations_url":"https://api.github.com/users/evanphx/orgs","repos_url":"https://api.github.com/users/evanphx/repos","events_url":"https://api.github.com/users/evanphx/events{/privacy}","received_events_url":"https://api.github.com/users/evanphx/received_events","type":"User","site_admin":false},{"login":"vanpelt","id":17,"avatar_url":"https://avatars1.githubusercontent.com/u/17?v=4","gravatar_id":"","url":"https://api.github.com/users/vanpelt","html_url":"https://github.com/vanpelt","followers_url":"https://api.github.com/users/vanpelt/followers","following_url":"https://api.github.com/users/vanpelt/following{/other_user}","gists_url":"https://api.github.com/users/vanpelt/gists{/gist_id}","starred_url":"https://api.github.com/users/vanpelt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vanpelt/subscriptions","organizations_url":"https://api.github.com/users/vanpelt/orgs","repos_url":"https://api.github.com/users/vanpelt/repos","events_url":"https://api.github.com/users/vanpelt/events{/privacy}","received_events_url":"https://api.github.com/users/vanpelt/received_events","type":"User","site_admin":false},{"login":"wayneeseguin","id":18,"avatar_url":"https://avatars0.githubusercontent.com/u/18?v=4","gravatar_id":"","url":"https://api.github.com/users/wayneeseguin","html_url":"https://github.com/wayneeseguin","followers_url":"https://api.github.com/users/wayneeseguin/followers","following_url":"https://api.github.com/users/wayneeseguin/following{/other_user}","gists_url":"https://api.github.com/users/wayneeseguin/gists{/gist_id}","starred_url":"https://api.github.com/users/wayneeseguin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wayneeseguin/subscriptions","organizations_url":"https://api.github.com/users/wayneeseguin/orgs","repos_url":"https://api.github.com/users/wayneeseguin/repos","events_url":"https://api.github.com/users/wayneeseguin/events{/privacy}","received_events_url":"https://api.github.com/users/wayneeseguin/received_events","type":"User","site_admin":false},{"login":"brynary","id":19,"avatar_url":"https://avatars0.githubusercontent.com/u/19?v=4","gravatar_id":"","url":"https://api.github.com/users/brynary","html_url":"https://github.com/brynary","followers_url":"https://api.github.com/users/brynary/followers","following_url":"https://api.github.com/users/brynary/following{/other_user}","gists_url":"https://api.github.com/users/brynary/gists{/gist_id}","starred_url":"https://api.github.com/users/brynary/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brynary/subscriptions","organizations_url":"https://api.github.com/users/brynary/orgs","repos_url":"https://api.github.com/users/brynary/repos","events_url":"https://api.github.com/users/brynary/events{/privacy}","received_events_url":"https://api.github.com/users/brynary/received_events","type":"User","site_admin":false},{"login":"kevinclark","id":20,"avatar_url":"https://avatars3.githubusercontent.com/u/20?v=4","gravatar_id":"","url":"https://api.github.com/users/kevinclark","html_url":"https://github.com/kevinclark","followers_url":"https://api.github.com/users/kevinclark/followers","following_url":"https://api.github.com/users/kevinclark/following{/other_user}","gists_url":"https://api.github.com/users/kevinclark/gists{/gist_id}","starred_url":"https://api.github.com/users/kevinclark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevinclark/subscriptions","organizations_url":"https://api.github.com/users/kevinclark/orgs","repos_url":"https://api.github.com/users/kevinclark/repos","events_url":"https://api.github.com/users/kevinclark/events{/privacy}","received_events_url":"https://api.github.com/users/kevinclark/received_events","type":"User","site_admin":false},{"login":"technoweenie","id":21,"avatar_url":"https://avatars3.githubusercontent.com/u/21?v=4","gravatar_id":"","url":"https://api.github.com/users/technoweenie","html_url":"https://github.com/technoweenie","followers_url":"https://api.github.com/users/technoweenie/followers","following_url":"https://api.github.com/users/technoweenie/following{/other_user}","gists_url":"https://api.github.com/users/technoweenie/gists{/gist_id}","starred_url":"https://api.github.com/users/technoweenie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technoweenie/subscriptions","organizations_url":"https://api.github.com/users/technoweenie/orgs","repos_url":"https://api.github.com/users/technoweenie/repos","events_url":"https://api.github.com/users/technoweenie/events{/privacy}","received_events_url":"https://api.github.com/users/technoweenie/received_events","type":"User","site_admin":true},{"login":"macournoyer","id":22,"avatar_url":"https://avatars3.githubusercontent.com/u/22?v=4","gravatar_id":"","url":"https://api.github.com/users/macournoyer","html_url":"https://github.com/macournoyer","followers_url":"https://api.github.com/users/macournoyer/followers","following_url":"https://api.github.com/users/macournoyer/following{/other_user}","gists_url":"https://api.github.com/users/macournoyer/gists{/gist_id}","starred_url":"https://api.github.com/users/macournoyer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macournoyer/subscriptions","organizations_url":"https://api.github.com/users/macournoyer/orgs","repos_url":"https://api.github.com/users/macournoyer/repos","events_url":"https://api.github.com/users/macournoyer/events{/privacy}","received_events_url":"https://api.github.com/users/macournoyer/received_events","type":"User","site_admin":false},{"login":"takeo","id":23,"avatar_url":"https://avatars3.githubusercontent.com/u/23?v=4","gravatar_id":"","url":"https://api.github.com/users/takeo","html_url":"https://github.com/takeo","followers_url":"https://api.github.com/users/takeo/followers","following_url":"https://api.github.com/users/takeo/following{/other_user}","gists_url":"https://api.github.com/users/takeo/gists{/gist_id}","starred_url":"https://api.github.com/users/takeo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/takeo/subscriptions","organizations_url":"https://api.github.com/users/takeo/orgs","repos_url":"https://api.github.com/users/takeo/repos","events_url":"https://api.github.com/users/takeo/events{/privacy}","received_events_url":"https://api.github.com/users/takeo/received_events","type":"User","site_admin":false},{"login":"Caged","id":25,"avatar_url":"https://avatars3.githubusercontent.com/u/25?v=4","gravatar_id":"","url":"https://api.github.com/users/Caged","html_url":"https://github.com/Caged","followers_url":"https://api.github.com/users/Caged/followers","following_url":"https://api.github.com/users/Caged/following{/other_user}","gists_url":"https://api.github.com/users/Caged/gists{/gist_id}","starred_url":"https://api.github.com/users/Caged/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Caged/subscriptions","organizations_url":"https://api.github.com/users/Caged/orgs","repos_url":"https://api.github.com/users/Caged/repos","events_url":"https://api.github.com/users/Caged/events{/privacy}","received_events_url":"https://api.github.com/users/Caged/received_events","type":"User","site_admin":true},{"login":"topfunky","id":26,"avatar_url":"https://avatars3.githubusercontent.com/u/26?v=4","gravatar_id":"","url":"https://api.github.com/users/topfunky","html_url":"https://github.com/topfunky","followers_url":"https://api.github.com/users/topfunky/followers","following_url":"https://api.github.com/users/topfunky/following{/other_user}","gists_url":"https://api.github.com/users/topfunky/gists{/gist_id}","starred_url":"https://api.github.com/users/topfunky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/topfunky/subscriptions","organizations_url":"https://api.github.com/users/topfunky/orgs","repos_url":"https://api.github.com/users/topfunky/repos","events_url":"https://api.github.com/users/topfunky/events{/privacy}","received_events_url":"https://api.github.com/users/topfunky/received_events","type":"User","site_admin":false},{"login":"anotherjesse","id":27,"avatar_url":"https://avatars3.githubusercontent.com/u/27?v=4","gravatar_id":"","url":"https://api.github.com/users/anotherjesse","html_url":"https://github.com/anotherjesse","followers_url":"https://api.github.com/users/anotherjesse/followers","following_url":"https://api.github.com/users/anotherjesse/following{/other_user}","gists_url":"https://api.github.com/users/anotherjesse/gists{/gist_id}","starred_url":"https://api.github.com/users/anotherjesse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anotherjesse/subscriptions","organizations_url":"https://api.github.com/users/anotherjesse/orgs","repos_url":"https://api.github.com/users/anotherjesse/repos","events_url":"https://api.github.com/users/anotherjesse/events{/privacy}","received_events_url":"https://api.github.com/users/anotherjesse/received_events","type":"User","site_admin":false},{"login":"roland","id":28,"avatar_url":"https://avatars2.githubusercontent.com/u/28?v=4","gravatar_id":"","url":"https://api.github.com/users/roland","html_url":"https://github.com/roland","followers_url":"https://api.github.com/users/roland/followers","following_url":"https://api.github.com/users/roland/following{/other_user}","gists_url":"https://api.github.com/users/roland/gists{/gist_id}","starred_url":"https://api.github.com/users/roland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roland/subscriptions","organizations_url":"https://api.github.com/users/roland/orgs","repos_url":"https://api.github.com/users/roland/repos","events_url":"https://api.github.com/users/roland/events{/privacy}","received_events_url":"https://api.github.com/users/roland/received_events","type":"User","site_admin":false},{"login":"lukas","id":29,"avatar_url":"https://avatars2.githubusercontent.com/u/29?v=4","gravatar_id":"","url":"https://api.github.com/users/lukas","html_url":"https://github.com/lukas","followers_url":"https://api.github.com/users/lukas/followers","following_url":"https://api.github.com/users/lukas/following{/other_user}","gists_url":"https://api.github.com/users/lukas/gists{/gist_id}","starred_url":"https://api.github.com/users/lukas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukas/subscriptions","organizations_url":"https://api.github.com/users/lukas/orgs","repos_url":"https://api.github.com/users/lukas/repos","events_url":"https://api.github.com/users/lukas/events{/privacy}","received_events_url":"https://api.github.com/users/lukas/received_events","type":"User","site_admin":false},{"login":"fanvsfan","id":30,"avatar_url":"https://avatars2.githubusercontent.com/u/30?v=4","gravatar_id":"","url":"https://api.github.com/users/fanvsfan","html_url":"https://github.com/fanvsfan","followers_url":"https://api.github.com/users/fanvsfan/followers","following_url":"https://api.github.com/users/fanvsfan/following{/other_user}","gists_url":"https://api.github.com/users/fanvsfan/gists{/gist_id}","starred_url":"https://api.github.com/users/fanvsfan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fanvsfan/subscriptions","organizations_url":"https://api.github.com/users/fanvsfan/orgs","repos_url":"https://api.github.com/users/fanvsfan/repos","events_url":"https://api.github.com/users/fanvsfan/events{/privacy}","received_events_url":"https://api.github.com/users/fanvsfan/received_events","type":"User","site_admin":false},{"login":"tomtt","id":31,"avatar_url":"https://avatars2.githubusercontent.com/u/31?v=4","gravatar_id":"","url":"https://api.github.com/users/tomtt","html_url":"https://github.com/tomtt","followers_url":"https://api.github.com/users/tomtt/followers","following_url":"https://api.github.com/users/tomtt/following{/other_user}","gists_url":"https://api.github.com/users/tomtt/gists{/gist_id}","starred_url":"https://api.github.com/users/tomtt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomtt/subscriptions","organizations_url":"https://api.github.com/users/tomtt/orgs","repos_url":"https://api.github.com/users/tomtt/repos","events_url":"https://api.github.com/users/tomtt/events{/privacy}","received_events_url":"https://api.github.com/users/tomtt/received_events","type":"User","site_admin":false},{"login":"railsjitsu","id":32,"avatar_url":"https://avatars2.githubusercontent.com/u/32?v=4","gravatar_id":"","url":"https://api.github.com/users/railsjitsu","html_url":"https://github.com/railsjitsu","followers_url":"https://api.github.com/users/railsjitsu/followers","following_url":"https://api.github.com/users/railsjitsu/following{/other_user}","gists_url":"https://api.github.com/users/railsjitsu/gists{/gist_id}","starred_url":"https://api.github.com/users/railsjitsu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/railsjitsu/subscriptions","organizations_url":"https://api.github.com/users/railsjitsu/orgs","repos_url":"https://api.github.com/users/railsjitsu/repos","events_url":"https://api.github.com/users/railsjitsu/events{/privacy}","received_events_url":"https://api.github.com/users/railsjitsu/received_events","type":"User","site_admin":false},{"login":"nitay","id":34,"avatar_url":"https://avatars2.githubusercontent.com/u/34?v=4","gravatar_id":"","url":"https://api.github.com/users/nitay","html_url":"https://github.com/nitay","followers_url":"https://api.github.com/users/nitay/followers","following_url":"https://api.github.com/users/nitay/following{/other_user}","gists_url":"https://api.github.com/users/nitay/gists{/gist_id}","starred_url":"https://api.github.com/users/nitay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitay/subscriptions","organizations_url":"https://api.github.com/users/nitay/orgs","repos_url":"https://api.github.com/users/nitay/repos","events_url":"https://api.github.com/users/nitay/events{/privacy}","received_events_url":"https://api.github.com/users/nitay/received_events","type":"User","site_admin":false},{"login":"kevwil","id":35,"avatar_url":"https://avatars2.githubusercontent.com/u/35?v=4","gravatar_id":"","url":"https://api.github.com/users/kevwil","html_url":"https://github.com/kevwil","followers_url":"https://api.github.com/users/kevwil/followers","following_url":"https://api.github.com/users/kevwil/following{/other_user}","gists_url":"https://api.github.com/users/kevwil/gists{/gist_id}","starred_url":"https://api.github.com/users/kevwil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kevwil/subscriptions","organizations_url":"https://api.github.com/users/kevwil/orgs","repos_url":"https://api.github.com/users/kevwil/repos","events_url":"https://api.github.com/users/kevwil/events{/privacy}","received_events_url":"https://api.github.com/users/kevwil/received_events","type":"User","site_admin":false},{"login":"KirinDave","id":36,"avatar_url":"https://avatars2.githubusercontent.com/u/36?v=4","gravatar_id":"","url":"https://api.github.com/users/KirinDave","html_url":"https://github.com/KirinDave","followers_url":"https://api.github.com/users/KirinDave/followers","following_url":"https://api.github.com/users/KirinDave/following{/other_user}","gists_url":"https://api.github.com/users/KirinDave/gists{/gist_id}","starred_url":"https://api.github.com/users/KirinDave/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KirinDave/subscriptions","organizations_url":"https://api.github.com/users/KirinDave/orgs","repos_url":"https://api.github.com/users/KirinDave/repos","events_url":"https://api.github.com/users/KirinDave/events{/privacy}","received_events_url":"https://api.github.com/users/KirinDave/received_events","type":"User","site_admin":false},{"login":"jamesgolick","id":37,"avatar_url":"https://avatars2.githubusercontent.com/u/37?v=4","gravatar_id":"","url":"https://api.github.com/users/jamesgolick","html_url":"https://github.com/jamesgolick","followers_url":"https://api.github.com/users/jamesgolick/followers","following_url":"https://api.github.com/users/jamesgolick/following{/other_user}","gists_url":"https://api.github.com/users/jamesgolick/gists{/gist_id}","starred_url":"https://api.github.com/users/jamesgolick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jamesgolick/subscriptions","organizations_url":"https://api.github.com/users/jamesgolick/orgs","repos_url":"https://api.github.com/users/jamesgolick/repos","events_url":"https://api.github.com/users/jamesgolick/events{/privacy}","received_events_url":"https://api.github.com/users/jamesgolick/received_events","type":"User","site_admin":false},{"login":"atmos","id":38,"avatar_url":"https://avatars3.githubusercontent.com/u/38?v=4","gravatar_id":"","url":"https://api.github.com/users/atmos","html_url":"https://github.com/atmos","followers_url":"https://api.github.com/users/atmos/followers","following_url":"https://api.github.com/users/atmos/following{/other_user}","gists_url":"https://api.github.com/users/atmos/gists{/gist_id}","starred_url":"https://api.github.com/users/atmos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atmos/subscriptions","organizations_url":"https://api.github.com/users/atmos/orgs","repos_url":"https://api.github.com/users/atmos/repos","events_url":"https://api.github.com/users/atmos/events{/privacy}","received_events_url":"https://api.github.com/users/atmos/received_events","type":"User","site_admin":false},{"login":"errfree","id":44,"avatar_url":"https://avatars2.githubusercontent.com/u/44?v=4","gravatar_id":"","url":"https://api.github.com/users/errfree","html_url":"https://github.com/errfree","followers_url":"https://api.github.com/users/errfree/followers","following_url":"https://api.github.com/users/errfree/following{/other_user}","gists_url":"https://api.github.com/users/errfree/gists{/gist_id}","starred_url":"https://api.github.com/users/errfree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/errfree/subscriptions","organizations_url":"https://api.github.com/users/errfree/orgs","repos_url":"https://api.github.com/users/errfree/repos","events_url":"https://api.github.com/users/errfree/events{/privacy}","received_events_url":"https://api.github.com/users/errfree/received_events","type":"Organization","site_admin":false},{"login":"mojodna","id":45,"avatar_url":"https://avatars2.githubusercontent.com/u/45?v=4","gravatar_id":"","url":"https://api.github.com/users/mojodna","html_url":"https://github.com/mojodna","followers_url":"https://api.github.com/users/mojodna/followers","following_url":"https://api.github.com/users/mojodna/following{/other_user}","gists_url":"https://api.github.com/users/mojodna/gists{/gist_id}","starred_url":"https://api.github.com/users/mojodna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mojodna/subscriptions","organizations_url":"https://api.github.com/users/mojodna/orgs","repos_url":"https://api.github.com/users/mojodna/repos","events_url":"https://api.github.com/users/mojodna/events{/privacy}","received_events_url":"https://api.github.com/users/mojodna/received_events","type":"User","site_admin":false},{"login":"bmizerany","id":46,"avatar_url":"https://avatars2.githubusercontent.com/u/46?v=4","gravatar_id":"","url":"https://api.github.com/users/bmizerany","html_url":"https://github.com/bmizerany","followers_url":"https://api.github.com/users/bmizerany/followers","following_url":"https://api.github.com/users/bmizerany/following{/other_user}","gists_url":"https://api.github.com/users/bmizerany/gists{/gist_id}","starred_url":"https://api.github.com/users/bmizerany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmizerany/subscriptions","organizations_url":"https://api.github.com/users/bmizerany/orgs","repos_url":"https://api.github.com/users/bmizerany/repos","events_url":"https://api.github.com/users/bmizerany/events{/privacy}","received_events_url":"https://api.github.com/users/bmizerany/received_events","type":"User","site_admin":false}]' -- recorded: 2017-10-30T21:01:48.414Z - request: - method: GET - uri: https://api.github.com/users/defunkt - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Mon, 30 Oct 2017 21:02:21 GMT - ETag: W/"92f687a700d03a39fb8535c1f1b67a5e" - Expect-CT: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors" - Last-Modified: Fri, 22 Sep 2017 02:16:55 GMT - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: C096:592C:1876662:34E5BC0:59F79358 - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '17' - X-RateLimit-Reset: '1509400193' - X-Runtime-rack: '0.024157' - X-XSS-Protection: 1; mode=block - body: !!binary |- - eyJsb2dpbiI6ImRlZnVua3QiLCJpZCI6MiwiYXZhdGFyX3VybCI6Imh0dHBzOi8vYXZhdGFyczAuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMj92PTQiLCJncmF2YXRhcl9pZCI6IiIsInVybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdCIsImh0bWxfdXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2RlZnVua3QiLCJmb2xsb3dlcnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L2ZvbGxvd2VycyIsImZvbGxvd2luZ191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3QvZm9sbG93aW5ney9vdGhlcl91c2VyfSIsImdpc3RzX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdC9naXN0c3svZ2lzdF9pZH0iLCJzdGFycmVkX3VybCI6Imh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcnMvZGVmdW5rdC9zdGFycmVkey9vd25lcn17L3JlcG99Iiwic3Vic2NyaXB0aW9uc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3Qvc3Vic2NyaXB0aW9ucyIsIm9yZ2FuaXphdGlvbnNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L29yZ3MiLCJyZXBvc191cmwiOiJodHRwczovL2FwaS5naXRodWIuY29tL3VzZXJzL2RlZnVua3QvcmVwb3MiLCJldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L2V2ZW50c3svcHJpdmFjeX0iLCJyZWNlaXZlZF9ldmVudHNfdXJsIjoiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vycy9kZWZ1bmt0L3JlY2VpdmVkX2V2ZW50cyIsInR5cGUiOiJVc2VyIiwic2l0ZV9hZG1pbiI6dHJ1ZSwibmFtZSI6IkNocmlzIFdhbnN0cmF0aCIsImNvbXBhbnkiOiJAZ2l0aHViICIsImJsb2ciOiJodHRwOi8vY2hyaXN3YW5zdHJhdGguY29tLyIsImxvY2F0aW9uIjoiU2FuIEZyYW5jaXNjbyIsImVtYWlsIjpudWxsLCJoaXJlYWJsZSI6dHJ1ZSwiYmlvIjoi8J+NlCAiLCJwdWJsaWNfcmVwb3MiOjEwNywicHVibGljX2dpc3RzIjoyNzMsImZvbGxvd2VycyI6MTY1MjUsImZvbGxvd2luZyI6MjA4LCJjcmVhdGVkX2F0IjoiMjAwNy0xMC0yMFQwNToyNDoxOVoiLCJ1cGRhdGVkX2F0IjoiMjAxNy0wOS0yMlQwMjoxNjo1NVoifQ== -- recorded: 2017-10-30T21:39:23.307Z - request: - method: GET - uri: https://api.github.com/users/defunkt/repos?type=all - headers: {} - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Mon, 30 Oct 2017 21:39:58 GMT - ETag: W/"12aef2b6838069250967bf394db2aa59" - Expect-CT: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors" - Link: ; rel="next", ; rel="last" - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: D103:5930:284B784:50F8CD5:59F79C2A - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '8' - X-RateLimit-Reset: '1509400193' - X-Runtime-rack: '0.130005' - X-XSS-Protection: 1; mode=block - body: '[{"id":348555,"name":"resque","full_name":"bpo/resque","owner":{"login":"bpo","id":3795,"avatar_url":"https://avatars0.githubusercontent.com/u/3795?v=4","gravatar_id":"","url":"https://api.github.com/users/bpo","html_url":"https://github.com/bpo","followers_url":"https://api.github.com/users/bpo/followers","following_url":"https://api.github.com/users/bpo/following{/other_user}","gists_url":"https://api.github.com/users/bpo/gists{/gist_id}","starred_url":"https://api.github.com/users/bpo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bpo/subscriptions","organizations_url":"https://api.github.com/users/bpo/orgs","repos_url":"https://api.github.com/users/bpo/repos","events_url":"https://api.github.com/users/bpo/events{/privacy}","received_events_url":"https://api.github.com/users/bpo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bpo/resque","description":"A - simple Redis-based queue.","fork":true,"url":"https://api.github.com/repos/bpo/resque","forks_url":"https://api.github.com/repos/bpo/resque/forks","keys_url":"https://api.github.com/repos/bpo/resque/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bpo/resque/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bpo/resque/teams","hooks_url":"https://api.github.com/repos/bpo/resque/hooks","issue_events_url":"https://api.github.com/repos/bpo/resque/issues/events{/number}","events_url":"https://api.github.com/repos/bpo/resque/events","assignees_url":"https://api.github.com/repos/bpo/resque/assignees{/user}","branches_url":"https://api.github.com/repos/bpo/resque/branches{/branch}","tags_url":"https://api.github.com/repos/bpo/resque/tags","blobs_url":"https://api.github.com/repos/bpo/resque/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bpo/resque/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bpo/resque/git/refs{/sha}","trees_url":"https://api.github.com/repos/bpo/resque/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bpo/resque/statuses/{sha}","languages_url":"https://api.github.com/repos/bpo/resque/languages","stargazers_url":"https://api.github.com/repos/bpo/resque/stargazers","contributors_url":"https://api.github.com/repos/bpo/resque/contributors","subscribers_url":"https://api.github.com/repos/bpo/resque/subscribers","subscription_url":"https://api.github.com/repos/bpo/resque/subscription","commits_url":"https://api.github.com/repos/bpo/resque/commits{/sha}","git_commits_url":"https://api.github.com/repos/bpo/resque/git/commits{/sha}","comments_url":"https://api.github.com/repos/bpo/resque/comments{/number}","issue_comment_url":"https://api.github.com/repos/bpo/resque/issues/comments{/number}","contents_url":"https://api.github.com/repos/bpo/resque/contents/{+path}","compare_url":"https://api.github.com/repos/bpo/resque/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bpo/resque/merges","archive_url":"https://api.github.com/repos/bpo/resque/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bpo/resque/downloads","issues_url":"https://api.github.com/repos/bpo/resque/issues{/number}","pulls_url":"https://api.github.com/repos/bpo/resque/pulls{/number}","milestones_url":"https://api.github.com/repos/bpo/resque/milestones{/number}","notifications_url":"https://api.github.com/repos/bpo/resque/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bpo/resque/labels{/name}","releases_url":"https://api.github.com/repos/bpo/resque/releases{/id}","deployments_url":"https://api.github.com/repos/bpo/resque/deployments","created_at":"2009-10-24T19:53:11Z","updated_at":"2017-06-29T22:21:54Z","pushed_at":"2012-03-08T02:21:58Z","git_url":"git://github.com/bpo/resque.git","ssh_url":"git@github.com:bpo/resque.git","clone_url":"https://github.com/bpo/resque.git","svn_url":"https://github.com/bpo/resque","homepage":"","size":1369,"stargazers_count":10,"watchers_count":10,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":10,"default_branch":"master"},{"id":1861402,"name":"ace","full_name":"defunkt/ace","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ace","description":"Ajax.org - Cloud9 Editor","fork":true,"url":"https://api.github.com/repos/defunkt/ace","forks_url":"https://api.github.com/repos/defunkt/ace/forks","keys_url":"https://api.github.com/repos/defunkt/ace/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ace/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ace/teams","hooks_url":"https://api.github.com/repos/defunkt/ace/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ace/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ace/events","assignees_url":"https://api.github.com/repos/defunkt/ace/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ace/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ace/tags","blobs_url":"https://api.github.com/repos/defunkt/ace/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ace/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ace/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ace/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ace/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ace/languages","stargazers_url":"https://api.github.com/repos/defunkt/ace/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ace/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ace/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ace/subscription","commits_url":"https://api.github.com/repos/defunkt/ace/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ace/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ace/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ace/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ace/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ace/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ace/merges","archive_url":"https://api.github.com/repos/defunkt/ace/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ace/downloads","issues_url":"https://api.github.com/repos/defunkt/ace/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ace/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ace/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ace/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ace/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ace/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ace/deployments","created_at":"2011-06-07T18:41:40Z","updated_at":"2017-07-06T17:21:41Z","pushed_at":"2011-11-16T18:37:42Z","git_url":"git://github.com/defunkt/ace.git","ssh_url":"git@github.com:defunkt/ace.git","clone_url":"https://github.com/defunkt/ace.git","svn_url":"https://github.com/defunkt/ace","homepage":"http://ace.ajax.org","size":4405,"stargazers_count":11,"watchers_count":11,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":5,"open_issues":0,"watchers":11,"default_branch":"master"},{"id":3594,"name":"acts_as_textiled","full_name":"defunkt/acts_as_textiled","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/acts_as_textiled","description":"Makes - your models act as textiled.","fork":false,"url":"https://api.github.com/repos/defunkt/acts_as_textiled","forks_url":"https://api.github.com/repos/defunkt/acts_as_textiled/forks","keys_url":"https://api.github.com/repos/defunkt/acts_as_textiled/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/acts_as_textiled/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/acts_as_textiled/teams","hooks_url":"https://api.github.com/repos/defunkt/acts_as_textiled/hooks","issue_events_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/acts_as_textiled/events","assignees_url":"https://api.github.com/repos/defunkt/acts_as_textiled/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/acts_as_textiled/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/acts_as_textiled/tags","blobs_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/acts_as_textiled/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/acts_as_textiled/languages","stargazers_url":"https://api.github.com/repos/defunkt/acts_as_textiled/stargazers","contributors_url":"https://api.github.com/repos/defunkt/acts_as_textiled/contributors","subscribers_url":"https://api.github.com/repos/defunkt/acts_as_textiled/subscribers","subscription_url":"https://api.github.com/repos/defunkt/acts_as_textiled/subscription","commits_url":"https://api.github.com/repos/defunkt/acts_as_textiled/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/acts_as_textiled/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/acts_as_textiled/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/acts_as_textiled/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/acts_as_textiled/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/acts_as_textiled/merges","archive_url":"https://api.github.com/repos/defunkt/acts_as_textiled/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/acts_as_textiled/downloads","issues_url":"https://api.github.com/repos/defunkt/acts_as_textiled/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/acts_as_textiled/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/acts_as_textiled/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/acts_as_textiled/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/acts_as_textiled/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/acts_as_textiled/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/acts_as_textiled/deployments","created_at":"2008-03-12T06:20:18Z","updated_at":"2017-07-12T20:10:41Z","pushed_at":"2011-07-21T21:38:47Z","git_url":"git://github.com/defunkt/acts_as_textiled.git","ssh_url":"git@github.com:defunkt/acts_as_textiled.git","clone_url":"https://github.com/defunkt/acts_as_textiled.git","svn_url":"https://github.com/defunkt/acts_as_textiled","homepage":"http://errtheblog.com/posts/12-actsastextiled","size":333,"stargazers_count":115,"watchers_count":115,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":33,"mirror_url":null,"archived":false,"open_issues_count":4,"forks":33,"open_issues":4,"watchers":115,"default_branch":"master"},{"id":36,"name":"ambition","full_name":"defunkt/ambition","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambition","description":"include - Enumerable — Unmaintained","fork":false,"url":"https://api.github.com/repos/defunkt/ambition","forks_url":"https://api.github.com/repos/defunkt/ambition/forks","keys_url":"https://api.github.com/repos/defunkt/ambition/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambition/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambition/teams","hooks_url":"https://api.github.com/repos/defunkt/ambition/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambition/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambition/events","assignees_url":"https://api.github.com/repos/defunkt/ambition/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambition/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambition/tags","blobs_url":"https://api.github.com/repos/defunkt/ambition/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambition/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambition/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambition/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambition/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambition/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambition/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambition/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambition/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambition/subscription","commits_url":"https://api.github.com/repos/defunkt/ambition/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambition/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambition/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambition/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambition/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambition/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambition/merges","archive_url":"https://api.github.com/repos/defunkt/ambition/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambition/downloads","issues_url":"https://api.github.com/repos/defunkt/ambition/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambition/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambition/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambition/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambition/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambition/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambition/deployments","created_at":"2008-01-14T06:28:56Z","updated_at":"2017-07-12T20:10:40Z","pushed_at":"2015-04-24T00:18:24Z","git_url":"git://github.com/defunkt/ambition.git","ssh_url":"git@github.com:defunkt/ambition.git","clone_url":"https://github.com/defunkt/ambition.git","svn_url":"https://github.com/defunkt/ambition","homepage":"","size":473,"stargazers_count":151,"watchers_count":151,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":15,"mirror_url":null,"archived":false,"open_issues_count":1,"forks":15,"open_issues":1,"watchers":151,"default_branch":"master"},{"id":230,"name":"ambitious_activeldap","full_name":"defunkt/ambitious_activeldap","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambitious_activeldap","description":"Ambition - adapter for ActiveLdap","fork":false,"url":"https://api.github.com/repos/defunkt/ambitious_activeldap","forks_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/forks","keys_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/teams","hooks_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/events","assignees_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/tags","blobs_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/subscription","commits_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/merges","archive_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/downloads","issues_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambitious_activeldap/deployments","created_at":"2008-01-30T19:20:08Z","updated_at":"2017-07-12T20:10:41Z","pushed_at":"2008-03-26T19:10:57Z","git_url":"git://github.com/defunkt/ambitious_activeldap.git","ssh_url":"git@github.com:defunkt/ambitious_activeldap.git","clone_url":"https://github.com/defunkt/ambitious_activeldap.git","svn_url":"https://github.com/defunkt/ambitious_activeldap","homepage":"","size":96,"stargazers_count":6,"watchers_count":6,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":6,"default_branch":"master"},{"id":12641,"name":"ambitious_activerecord","full_name":"defunkt/ambitious_activerecord","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/ambitious_activerecord","description":"Unmaintained - Ambitious ActiveRecord adapter, for Ambition.","fork":false,"url":"https://api.github.com/repos/defunkt/ambitious_activerecord","forks_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/forks","keys_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/teams","hooks_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/hooks","issue_events_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/events","assignees_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/tags","blobs_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/languages","stargazers_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/stargazers","contributors_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/contributors","subscribers_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/subscribers","subscription_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/subscription","commits_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/merges","archive_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/downloads","issues_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/ambitious_activerecord/deployments","created_at":"2008-04-26T09:10:20Z","updated_at":"2017-05-11T05:50:24Z","pushed_at":"2008-04-26T10:14:04Z","git_url":"git://github.com/defunkt/ambitious_activerecord.git","ssh_url":"git@github.com:defunkt/ambitious_activerecord.git","clone_url":"https://github.com/defunkt/ambitious_activerecord.git","svn_url":"https://github.com/defunkt/ambitious_activerecord","homepage":"","size":95,"stargazers_count":12,"watchers_count":12,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":1,"forks":2,"open_issues":1,"watchers":12,"default_branch":"master"},{"id":4180,"name":"barefootexamples","full_name":"defunkt/barefootexamples","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/barefootexamples","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/barefootexamples","forks_url":"https://api.github.com/repos/defunkt/barefootexamples/forks","keys_url":"https://api.github.com/repos/defunkt/barefootexamples/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/barefootexamples/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/barefootexamples/teams","hooks_url":"https://api.github.com/repos/defunkt/barefootexamples/hooks","issue_events_url":"https://api.github.com/repos/defunkt/barefootexamples/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/barefootexamples/events","assignees_url":"https://api.github.com/repos/defunkt/barefootexamples/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/barefootexamples/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/barefootexamples/tags","blobs_url":"https://api.github.com/repos/defunkt/barefootexamples/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/barefootexamples/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/barefootexamples/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/barefootexamples/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/barefootexamples/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/barefootexamples/languages","stargazers_url":"https://api.github.com/repos/defunkt/barefootexamples/stargazers","contributors_url":"https://api.github.com/repos/defunkt/barefootexamples/contributors","subscribers_url":"https://api.github.com/repos/defunkt/barefootexamples/subscribers","subscription_url":"https://api.github.com/repos/defunkt/barefootexamples/subscription","commits_url":"https://api.github.com/repos/defunkt/barefootexamples/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/barefootexamples/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/barefootexamples/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/barefootexamples/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/barefootexamples/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/barefootexamples/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/barefootexamples/merges","archive_url":"https://api.github.com/repos/defunkt/barefootexamples/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/barefootexamples/downloads","issues_url":"https://api.github.com/repos/defunkt/barefootexamples/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/barefootexamples/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/barefootexamples/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/barefootexamples/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/barefootexamples/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/barefootexamples/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/barefootexamples/deployments","created_at":"2008-03-17T06:29:50Z","updated_at":"2017-07-12T20:10:41Z","pushed_at":"2008-03-26T20:57:13Z","git_url":"git://github.com/defunkt/barefootexamples.git","ssh_url":"git@github.com:defunkt/barefootexamples.git","clone_url":"https://github.com/defunkt/barefootexamples.git","svn_url":"https://github.com/defunkt/barefootexamples","homepage":"","size":83,"stargazers_count":5,"watchers_count":5,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":15939,"name":"body_matcher","full_name":"defunkt/body_matcher","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/body_matcher","description":"Simplify - your view testing. Forget assert_select.","fork":true,"url":"https://api.github.com/repos/defunkt/body_matcher","forks_url":"https://api.github.com/repos/defunkt/body_matcher/forks","keys_url":"https://api.github.com/repos/defunkt/body_matcher/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/body_matcher/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/body_matcher/teams","hooks_url":"https://api.github.com/repos/defunkt/body_matcher/hooks","issue_events_url":"https://api.github.com/repos/defunkt/body_matcher/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/body_matcher/events","assignees_url":"https://api.github.com/repos/defunkt/body_matcher/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/body_matcher/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/body_matcher/tags","blobs_url":"https://api.github.com/repos/defunkt/body_matcher/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/body_matcher/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/body_matcher/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/body_matcher/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/body_matcher/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/body_matcher/languages","stargazers_url":"https://api.github.com/repos/defunkt/body_matcher/stargazers","contributors_url":"https://api.github.com/repos/defunkt/body_matcher/contributors","subscribers_url":"https://api.github.com/repos/defunkt/body_matcher/subscribers","subscription_url":"https://api.github.com/repos/defunkt/body_matcher/subscription","commits_url":"https://api.github.com/repos/defunkt/body_matcher/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/body_matcher/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/body_matcher/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/body_matcher/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/body_matcher/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/body_matcher/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/body_matcher/merges","archive_url":"https://api.github.com/repos/defunkt/body_matcher/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/body_matcher/downloads","issues_url":"https://api.github.com/repos/defunkt/body_matcher/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/body_matcher/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/body_matcher/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/body_matcher/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/body_matcher/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/body_matcher/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/body_matcher/deployments","created_at":"2008-05-11T04:54:44Z","updated_at":"2017-06-19T00:30:23Z","pushed_at":"2008-05-11T04:54:46Z","git_url":"git://github.com/defunkt/body_matcher.git","ssh_url":"git@github.com:defunkt/body_matcher.git","clone_url":"https://github.com/defunkt/body_matcher.git","svn_url":"https://github.com/defunkt/body_matcher","homepage":"http://ozmm.org/posts/some_ruby_code.html","size":85,"stargazers_count":8,"watchers_count":8,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":2,"open_issues":0,"watchers":8,"default_branch":"master"},{"id":288271,"name":"burn","full_name":"defunkt/burn","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/burn","description":"Sinatra - => Campfire","fork":false,"url":"https://api.github.com/repos/defunkt/burn","forks_url":"https://api.github.com/repos/defunkt/burn/forks","keys_url":"https://api.github.com/repos/defunkt/burn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/burn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/burn/teams","hooks_url":"https://api.github.com/repos/defunkt/burn/hooks","issue_events_url":"https://api.github.com/repos/defunkt/burn/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/burn/events","assignees_url":"https://api.github.com/repos/defunkt/burn/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/burn/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/burn/tags","blobs_url":"https://api.github.com/repos/defunkt/burn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/burn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/burn/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/burn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/burn/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/burn/languages","stargazers_url":"https://api.github.com/repos/defunkt/burn/stargazers","contributors_url":"https://api.github.com/repos/defunkt/burn/contributors","subscribers_url":"https://api.github.com/repos/defunkt/burn/subscribers","subscription_url":"https://api.github.com/repos/defunkt/burn/subscription","commits_url":"https://api.github.com/repos/defunkt/burn/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/burn/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/burn/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/burn/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/burn/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/burn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/burn/merges","archive_url":"https://api.github.com/repos/defunkt/burn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/burn/downloads","issues_url":"https://api.github.com/repos/defunkt/burn/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/burn/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/burn/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/burn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/burn/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/burn/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/burn/deployments","created_at":"2009-08-26T01:31:54Z","updated_at":"2016-09-22T18:46:51Z","pushed_at":"2009-08-26T02:13:06Z","git_url":"git://github.com/defunkt/burn.git","ssh_url":"git@github.com:defunkt/burn.git","clone_url":"https://github.com/defunkt/burn.git","svn_url":"https://github.com/defunkt/burn","homepage":"","size":82,"stargazers_count":5,"watchers_count":5,"language":null,"has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":93,"name":"cache_fu","full_name":"defunkt/cache_fu","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cache_fu","description":"Ghost - from Christmas past. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/cache_fu","forks_url":"https://api.github.com/repos/defunkt/cache_fu/forks","keys_url":"https://api.github.com/repos/defunkt/cache_fu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cache_fu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cache_fu/teams","hooks_url":"https://api.github.com/repos/defunkt/cache_fu/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cache_fu/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cache_fu/events","assignees_url":"https://api.github.com/repos/defunkt/cache_fu/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cache_fu/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cache_fu/tags","blobs_url":"https://api.github.com/repos/defunkt/cache_fu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cache_fu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cache_fu/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cache_fu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cache_fu/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cache_fu/languages","stargazers_url":"https://api.github.com/repos/defunkt/cache_fu/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cache_fu/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cache_fu/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cache_fu/subscription","commits_url":"https://api.github.com/repos/defunkt/cache_fu/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cache_fu/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cache_fu/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cache_fu/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cache_fu/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cache_fu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cache_fu/merges","archive_url":"https://api.github.com/repos/defunkt/cache_fu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cache_fu/downloads","issues_url":"https://api.github.com/repos/defunkt/cache_fu/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cache_fu/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cache_fu/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cache_fu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cache_fu/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cache_fu/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cache_fu/deployments","created_at":"2008-01-23T00:28:10Z","updated_at":"2017-10-26T20:38:14Z","pushed_at":"2009-10-04T01:54:43Z","git_url":"git://github.com/defunkt/cache_fu.git","ssh_url":"git@github.com:defunkt/cache_fu.git","clone_url":"https://github.com/defunkt/cache_fu.git","svn_url":"https://github.com/defunkt/cache_fu","homepage":"http://errtheblog.com","size":105,"stargazers_count":258,"watchers_count":258,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":68,"mirror_url":null,"archived":false,"open_issues_count":6,"forks":68,"open_issues":6,"watchers":258,"default_branch":"master"},{"id":3591,"name":"cheat","full_name":"defunkt/cheat","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cheat","description":"Cheating - is fun!","fork":false,"url":"https://api.github.com/repos/defunkt/cheat","forks_url":"https://api.github.com/repos/defunkt/cheat/forks","keys_url":"https://api.github.com/repos/defunkt/cheat/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cheat/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cheat/teams","hooks_url":"https://api.github.com/repos/defunkt/cheat/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cheat/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cheat/events","assignees_url":"https://api.github.com/repos/defunkt/cheat/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cheat/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cheat/tags","blobs_url":"https://api.github.com/repos/defunkt/cheat/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cheat/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cheat/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cheat/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cheat/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cheat/languages","stargazers_url":"https://api.github.com/repos/defunkt/cheat/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cheat/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cheat/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cheat/subscription","commits_url":"https://api.github.com/repos/defunkt/cheat/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cheat/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cheat/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cheat/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cheat/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cheat/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cheat/merges","archive_url":"https://api.github.com/repos/defunkt/cheat/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cheat/downloads","issues_url":"https://api.github.com/repos/defunkt/cheat/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cheat/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cheat/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cheat/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cheat/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cheat/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cheat/deployments","created_at":"2008-03-12T06:09:09Z","updated_at":"2017-10-21T08:05:04Z","pushed_at":"2015-11-17T19:31:56Z","git_url":"git://github.com/defunkt/cheat.git","ssh_url":"git@github.com:defunkt/cheat.git","clone_url":"https://github.com/defunkt/cheat.git","svn_url":"https://github.com/defunkt/cheat","homepage":"http://cheat.errtheblog.com","size":235,"stargazers_count":229,"watchers_count":229,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":41,"mirror_url":null,"archived":false,"open_issues_count":3,"forks":41,"open_issues":3,"watchers":229,"default_branch":"master"},{"id":45193,"name":"cheat.el","full_name":"defunkt/cheat.el","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cheat.el","description":"Cheat - Emacs mode","fork":false,"url":"https://api.github.com/repos/defunkt/cheat.el","forks_url":"https://api.github.com/repos/defunkt/cheat.el/forks","keys_url":"https://api.github.com/repos/defunkt/cheat.el/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cheat.el/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cheat.el/teams","hooks_url":"https://api.github.com/repos/defunkt/cheat.el/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cheat.el/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cheat.el/events","assignees_url":"https://api.github.com/repos/defunkt/cheat.el/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cheat.el/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cheat.el/tags","blobs_url":"https://api.github.com/repos/defunkt/cheat.el/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cheat.el/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cheat.el/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cheat.el/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cheat.el/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cheat.el/languages","stargazers_url":"https://api.github.com/repos/defunkt/cheat.el/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cheat.el/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cheat.el/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cheat.el/subscription","commits_url":"https://api.github.com/repos/defunkt/cheat.el/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cheat.el/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cheat.el/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cheat.el/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cheat.el/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cheat.el/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cheat.el/merges","archive_url":"https://api.github.com/repos/defunkt/cheat.el/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cheat.el/downloads","issues_url":"https://api.github.com/repos/defunkt/cheat.el/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cheat.el/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cheat.el/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cheat.el/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cheat.el/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cheat.el/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cheat.el/deployments","created_at":"2008-08-23T06:01:37Z","updated_at":"2016-11-12T05:57:14Z","pushed_at":"2008-12-03T23:55:16Z","git_url":"git://github.com/defunkt/cheat.el.git","ssh_url":"git@github.com:defunkt/cheat.el.git","clone_url":"https://github.com/defunkt/cheat.el.git","svn_url":"https://github.com/defunkt/cheat.el","homepage":"","size":120,"stargazers_count":13,"watchers_count":13,"language":"Emacs - Lisp","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":13,"default_branch":"master"},{"id":12527,"name":"choice","full_name":"defunkt/choice","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/choice","description":"Choice - is a gem for defining and parsing command line options with a friendly DSL.","fork":false,"url":"https://api.github.com/repos/defunkt/choice","forks_url":"https://api.github.com/repos/defunkt/choice/forks","keys_url":"https://api.github.com/repos/defunkt/choice/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/choice/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/choice/teams","hooks_url":"https://api.github.com/repos/defunkt/choice/hooks","issue_events_url":"https://api.github.com/repos/defunkt/choice/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/choice/events","assignees_url":"https://api.github.com/repos/defunkt/choice/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/choice/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/choice/tags","blobs_url":"https://api.github.com/repos/defunkt/choice/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/choice/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/choice/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/choice/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/choice/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/choice/languages","stargazers_url":"https://api.github.com/repos/defunkt/choice/stargazers","contributors_url":"https://api.github.com/repos/defunkt/choice/contributors","subscribers_url":"https://api.github.com/repos/defunkt/choice/subscribers","subscription_url":"https://api.github.com/repos/defunkt/choice/subscription","commits_url":"https://api.github.com/repos/defunkt/choice/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/choice/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/choice/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/choice/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/choice/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/choice/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/choice/merges","archive_url":"https://api.github.com/repos/defunkt/choice/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/choice/downloads","issues_url":"https://api.github.com/repos/defunkt/choice/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/choice/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/choice/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/choice/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/choice/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/choice/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/choice/deployments","created_at":"2008-04-25T18:30:30Z","updated_at":"2017-07-07T12:32:09Z","pushed_at":"2016-12-14T05:29:58Z","git_url":"git://github.com/defunkt/choice.git","ssh_url":"git@github.com:defunkt/choice.git","clone_url":"https://github.com/defunkt/choice.git","svn_url":"https://github.com/defunkt/choice","homepage":"","size":145,"stargazers_count":170,"watchers_count":170,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":21,"mirror_url":null,"archived":false,"open_issues_count":2,"forks":21,"open_issues":2,"watchers":170,"default_branch":"master"},{"id":270226,"name":"cijoe","full_name":"defunkt/cijoe","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/cijoe","description":"CI - Joe is a fun Continuous Integration server. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/cijoe","forks_url":"https://api.github.com/repos/defunkt/cijoe/forks","keys_url":"https://api.github.com/repos/defunkt/cijoe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/cijoe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/cijoe/teams","hooks_url":"https://api.github.com/repos/defunkt/cijoe/hooks","issue_events_url":"https://api.github.com/repos/defunkt/cijoe/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/cijoe/events","assignees_url":"https://api.github.com/repos/defunkt/cijoe/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/cijoe/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/cijoe/tags","blobs_url":"https://api.github.com/repos/defunkt/cijoe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/cijoe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/cijoe/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/cijoe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/cijoe/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/cijoe/languages","stargazers_url":"https://api.github.com/repos/defunkt/cijoe/stargazers","contributors_url":"https://api.github.com/repos/defunkt/cijoe/contributors","subscribers_url":"https://api.github.com/repos/defunkt/cijoe/subscribers","subscription_url":"https://api.github.com/repos/defunkt/cijoe/subscription","commits_url":"https://api.github.com/repos/defunkt/cijoe/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/cijoe/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/cijoe/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/cijoe/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/cijoe/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/cijoe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/cijoe/merges","archive_url":"https://api.github.com/repos/defunkt/cijoe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/cijoe/downloads","issues_url":"https://api.github.com/repos/defunkt/cijoe/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/cijoe/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/cijoe/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/cijoe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/cijoe/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/cijoe/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/cijoe/deployments","created_at":"2009-08-06T00:20:39Z","updated_at":"2017-10-10T07:39:33Z","pushed_at":"2011-10-01T22:56:55Z","git_url":"git://github.com/defunkt/cijoe.git","ssh_url":"git@github.com:defunkt/cijoe.git","clone_url":"https://github.com/defunkt/cijoe.git","svn_url":"https://github.com/defunkt/cijoe","homepage":"","size":425,"stargazers_count":1066,"watchers_count":1066,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":137,"mirror_url":null,"archived":false,"open_issues_count":19,"forks":137,"open_issues":19,"watchers":1066,"default_branch":"master"},{"id":550681,"name":"coffee-mode","full_name":"defunkt/coffee-mode","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/coffee-mode","description":"Emacs - Major Mode for CoffeeScript","fork":false,"url":"https://api.github.com/repos/defunkt/coffee-mode","forks_url":"https://api.github.com/repos/defunkt/coffee-mode/forks","keys_url":"https://api.github.com/repos/defunkt/coffee-mode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/coffee-mode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/coffee-mode/teams","hooks_url":"https://api.github.com/repos/defunkt/coffee-mode/hooks","issue_events_url":"https://api.github.com/repos/defunkt/coffee-mode/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/coffee-mode/events","assignees_url":"https://api.github.com/repos/defunkt/coffee-mode/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/coffee-mode/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/coffee-mode/tags","blobs_url":"https://api.github.com/repos/defunkt/coffee-mode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/coffee-mode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/coffee-mode/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/coffee-mode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/coffee-mode/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/coffee-mode/languages","stargazers_url":"https://api.github.com/repos/defunkt/coffee-mode/stargazers","contributors_url":"https://api.github.com/repos/defunkt/coffee-mode/contributors","subscribers_url":"https://api.github.com/repos/defunkt/coffee-mode/subscribers","subscription_url":"https://api.github.com/repos/defunkt/coffee-mode/subscription","commits_url":"https://api.github.com/repos/defunkt/coffee-mode/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/coffee-mode/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/coffee-mode/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/coffee-mode/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/coffee-mode/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/coffee-mode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/coffee-mode/merges","archive_url":"https://api.github.com/repos/defunkt/coffee-mode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/coffee-mode/downloads","issues_url":"https://api.github.com/repos/defunkt/coffee-mode/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/coffee-mode/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/coffee-mode/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/coffee-mode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/coffee-mode/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/coffee-mode/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/coffee-mode/deployments","created_at":"2010-03-07T08:30:40Z","updated_at":"2017-10-26T21:19:40Z","pushed_at":"2017-06-26T13:17:06Z","git_url":"git://github.com/defunkt/coffee-mode.git","ssh_url":"git@github.com:defunkt/coffee-mode.git","clone_url":"https://github.com/defunkt/coffee-mode.git","svn_url":"https://github.com/defunkt/coffee-mode","homepage":"http://ozmm.org/posts/coffee_mode.html","size":662,"stargazers_count":561,"watchers_count":561,"language":"Emacs - Lisp","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":158,"mirror_url":null,"archived":false,"open_issues_count":14,"forks":158,"open_issues":14,"watchers":561,"default_branch":"master"},{"id":388149,"name":"colored","full_name":"defunkt/colored","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/colored","description":"Colors - in your terminal. Unmaintained.","fork":false,"url":"https://api.github.com/repos/defunkt/colored","forks_url":"https://api.github.com/repos/defunkt/colored/forks","keys_url":"https://api.github.com/repos/defunkt/colored/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/colored/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/colored/teams","hooks_url":"https://api.github.com/repos/defunkt/colored/hooks","issue_events_url":"https://api.github.com/repos/defunkt/colored/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/colored/events","assignees_url":"https://api.github.com/repos/defunkt/colored/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/colored/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/colored/tags","blobs_url":"https://api.github.com/repos/defunkt/colored/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/colored/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/colored/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/colored/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/colored/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/colored/languages","stargazers_url":"https://api.github.com/repos/defunkt/colored/stargazers","contributors_url":"https://api.github.com/repos/defunkt/colored/contributors","subscribers_url":"https://api.github.com/repos/defunkt/colored/subscribers","subscription_url":"https://api.github.com/repos/defunkt/colored/subscription","commits_url":"https://api.github.com/repos/defunkt/colored/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/colored/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/colored/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/colored/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/colored/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/colored/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/colored/merges","archive_url":"https://api.github.com/repos/defunkt/colored/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/colored/downloads","issues_url":"https://api.github.com/repos/defunkt/colored/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/colored/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/colored/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/colored/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/colored/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/colored/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/colored/deployments","created_at":"2009-11-28T06:16:20Z","updated_at":"2017-09-11T18:22:27Z","pushed_at":"2017-07-07T17:51:14Z","git_url":"git://github.com/defunkt/colored.git","ssh_url":"git@github.com:defunkt/colored.git","clone_url":"https://github.com/defunkt/colored.git","svn_url":"https://github.com/defunkt/colored","homepage":"","size":120,"stargazers_count":254,"watchers_count":254,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":40,"mirror_url":null,"archived":false,"open_issues_count":8,"forks":40,"open_issues":8,"watchers":254,"default_branch":"master"},{"id":12220,"name":"currency_converter","full_name":"defunkt/currency_converter","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/currency_converter","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/currency_converter","forks_url":"https://api.github.com/repos/defunkt/currency_converter/forks","keys_url":"https://api.github.com/repos/defunkt/currency_converter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/currency_converter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/currency_converter/teams","hooks_url":"https://api.github.com/repos/defunkt/currency_converter/hooks","issue_events_url":"https://api.github.com/repos/defunkt/currency_converter/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/currency_converter/events","assignees_url":"https://api.github.com/repos/defunkt/currency_converter/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/currency_converter/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/currency_converter/tags","blobs_url":"https://api.github.com/repos/defunkt/currency_converter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/currency_converter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/currency_converter/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/currency_converter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/currency_converter/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/currency_converter/languages","stargazers_url":"https://api.github.com/repos/defunkt/currency_converter/stargazers","contributors_url":"https://api.github.com/repos/defunkt/currency_converter/contributors","subscribers_url":"https://api.github.com/repos/defunkt/currency_converter/subscribers","subscription_url":"https://api.github.com/repos/defunkt/currency_converter/subscription","commits_url":"https://api.github.com/repos/defunkt/currency_converter/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/currency_converter/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/currency_converter/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/currency_converter/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/currency_converter/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/currency_converter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/currency_converter/merges","archive_url":"https://api.github.com/repos/defunkt/currency_converter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/currency_converter/downloads","issues_url":"https://api.github.com/repos/defunkt/currency_converter/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/currency_converter/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/currency_converter/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/currency_converter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/currency_converter/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/currency_converter/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/currency_converter/deployments","created_at":"2008-04-24T09:34:31Z","updated_at":"2017-05-11T05:50:24Z","pushed_at":"2008-04-24T09:36:14Z","git_url":"git://github.com/defunkt/currency_converter.git","ssh_url":"git@github.com:defunkt/currency_converter.git","clone_url":"https://github.com/defunkt/currency_converter.git","svn_url":"https://github.com/defunkt/currency_converter","homepage":"","size":374,"stargazers_count":7,"watchers_count":7,"language":"Objective-C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":7,"default_branch":"master"},{"id":18570642,"name":"d3","full_name":"defunkt/d3","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/d3","description":"A - JavaScript visualization library for HTML and SVG.","fork":true,"url":"https://api.github.com/repos/defunkt/d3","forks_url":"https://api.github.com/repos/defunkt/d3/forks","keys_url":"https://api.github.com/repos/defunkt/d3/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/d3/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/d3/teams","hooks_url":"https://api.github.com/repos/defunkt/d3/hooks","issue_events_url":"https://api.github.com/repos/defunkt/d3/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/d3/events","assignees_url":"https://api.github.com/repos/defunkt/d3/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/d3/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/d3/tags","blobs_url":"https://api.github.com/repos/defunkt/d3/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/d3/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/d3/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/d3/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/d3/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/d3/languages","stargazers_url":"https://api.github.com/repos/defunkt/d3/stargazers","contributors_url":"https://api.github.com/repos/defunkt/d3/contributors","subscribers_url":"https://api.github.com/repos/defunkt/d3/subscribers","subscription_url":"https://api.github.com/repos/defunkt/d3/subscription","commits_url":"https://api.github.com/repos/defunkt/d3/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/d3/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/d3/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/d3/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/d3/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/d3/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/d3/merges","archive_url":"https://api.github.com/repos/defunkt/d3/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/d3/downloads","issues_url":"https://api.github.com/repos/defunkt/d3/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/d3/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/d3/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/d3/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/d3/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/d3/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/d3/deployments","created_at":"2014-04-08T18:45:26Z","updated_at":"2016-05-13T16:00:52Z","pushed_at":"2014-04-08T18:46:26Z","git_url":"git://github.com/defunkt/d3.git","ssh_url":"git@github.com:defunkt/d3.git","clone_url":"https://github.com/defunkt/d3.git","svn_url":"https://github.com/defunkt/d3","homepage":"http://d3js.org","size":34521,"stargazers_count":2,"watchers_count":2,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":2,"default_branch":"master"},{"id":91988,"name":"defunkt.github.com","full_name":"defunkt/defunkt.github.com","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/defunkt.github.com","description":"My - GitHub Page","fork":false,"url":"https://api.github.com/repos/defunkt/defunkt.github.com","forks_url":"https://api.github.com/repos/defunkt/defunkt.github.com/forks","keys_url":"https://api.github.com/repos/defunkt/defunkt.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/defunkt.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/defunkt.github.com/teams","hooks_url":"https://api.github.com/repos/defunkt/defunkt.github.com/hooks","issue_events_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/defunkt.github.com/events","assignees_url":"https://api.github.com/repos/defunkt/defunkt.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/defunkt.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/defunkt.github.com/tags","blobs_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/defunkt.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/defunkt.github.com/languages","stargazers_url":"https://api.github.com/repos/defunkt/defunkt.github.com/stargazers","contributors_url":"https://api.github.com/repos/defunkt/defunkt.github.com/contributors","subscribers_url":"https://api.github.com/repos/defunkt/defunkt.github.com/subscribers","subscription_url":"https://api.github.com/repos/defunkt/defunkt.github.com/subscription","commits_url":"https://api.github.com/repos/defunkt/defunkt.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/defunkt.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/defunkt.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/defunkt.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/defunkt.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/defunkt.github.com/merges","archive_url":"https://api.github.com/repos/defunkt/defunkt.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/defunkt.github.com/downloads","issues_url":"https://api.github.com/repos/defunkt/defunkt.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/defunkt.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/defunkt.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/defunkt.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/defunkt.github.com/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/defunkt.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/defunkt.github.com/deployments","created_at":"2008-12-17T07:53:14Z","updated_at":"2016-12-28T22:00:47Z","pushed_at":"2014-08-05T00:38:47Z","git_url":"git://github.com/defunkt/defunkt.github.com.git","ssh_url":"git@github.com:defunkt/defunkt.github.com.git","clone_url":"https://github.com/defunkt/defunkt.github.com.git","svn_url":"https://github.com/defunkt/defunkt.github.com","homepage":"http://defunkt.io","size":3011,"stargazers_count":68,"watchers_count":68,"language":null,"has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":51,"mirror_url":null,"archived":false,"open_issues_count":3,"forks":51,"open_issues":3,"watchers":68,"default_branch":"master"},{"id":628288,"name":"djangode","full_name":"defunkt/djangode","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/djangode","description":"Utilities - functions for node.js that borrow some useful concepts from Django","fork":true,"url":"https://api.github.com/repos/defunkt/djangode","forks_url":"https://api.github.com/repos/defunkt/djangode/forks","keys_url":"https://api.github.com/repos/defunkt/djangode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/djangode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/djangode/teams","hooks_url":"https://api.github.com/repos/defunkt/djangode/hooks","issue_events_url":"https://api.github.com/repos/defunkt/djangode/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/djangode/events","assignees_url":"https://api.github.com/repos/defunkt/djangode/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/djangode/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/djangode/tags","blobs_url":"https://api.github.com/repos/defunkt/djangode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/djangode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/djangode/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/djangode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/djangode/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/djangode/languages","stargazers_url":"https://api.github.com/repos/defunkt/djangode/stargazers","contributors_url":"https://api.github.com/repos/defunkt/djangode/contributors","subscribers_url":"https://api.github.com/repos/defunkt/djangode/subscribers","subscription_url":"https://api.github.com/repos/defunkt/djangode/subscription","commits_url":"https://api.github.com/repos/defunkt/djangode/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/djangode/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/djangode/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/djangode/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/djangode/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/djangode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/djangode/merges","archive_url":"https://api.github.com/repos/defunkt/djangode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/djangode/downloads","issues_url":"https://api.github.com/repos/defunkt/djangode/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/djangode/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/djangode/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/djangode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/djangode/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/djangode/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/djangode/deployments","created_at":"2010-04-25T16:41:30Z","updated_at":"2016-09-22T18:47:25Z","pushed_at":"2010-04-25T16:42:56Z","git_url":"git://github.com/defunkt/djangode.git","ssh_url":"git@github.com:defunkt/djangode.git","clone_url":"https://github.com/defunkt/djangode.git","svn_url":"https://github.com/defunkt/djangode","homepage":"","size":191,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":5,"default_branch":"master"},{"id":2448060,"name":"dodgeball.github.com","full_name":"defunkt/dodgeball.github.com","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dodgeball.github.com","description":"yes","fork":false,"url":"https://api.github.com/repos/defunkt/dodgeball.github.com","forks_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/forks","keys_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/teams","hooks_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/events","assignees_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/tags","blobs_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/languages","stargazers_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/subscription","commits_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/merges","archive_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/downloads","issues_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dodgeball.github.com/deployments","created_at":"2011-09-24T03:01:09Z","updated_at":"2016-09-22T18:48:29Z","pushed_at":"2011-09-24T03:01:22Z","git_url":"git://github.com/defunkt/dodgeball.github.com.git","ssh_url":"git@github.com:defunkt/dodgeball.github.com.git","clone_url":"https://github.com/defunkt/dodgeball.github.com.git","svn_url":"https://github.com/defunkt/dodgeball.github.com","homepage":"","size":534,"stargazers_count":6,"watchers_count":6,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":5,"open_issues":0,"watchers":6,"default_branch":"master"},{"id":5171653,"name":"dotenv","full_name":"defunkt/dotenv","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dotenv","description":"Loads - environment variables from `.env`. ","fork":true,"url":"https://api.github.com/repos/defunkt/dotenv","forks_url":"https://api.github.com/repos/defunkt/dotenv/forks","keys_url":"https://api.github.com/repos/defunkt/dotenv/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dotenv/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dotenv/teams","hooks_url":"https://api.github.com/repos/defunkt/dotenv/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dotenv/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dotenv/events","assignees_url":"https://api.github.com/repos/defunkt/dotenv/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dotenv/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dotenv/tags","blobs_url":"https://api.github.com/repos/defunkt/dotenv/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dotenv/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dotenv/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dotenv/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dotenv/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dotenv/languages","stargazers_url":"https://api.github.com/repos/defunkt/dotenv/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dotenv/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dotenv/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dotenv/subscription","commits_url":"https://api.github.com/repos/defunkt/dotenv/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dotenv/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dotenv/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dotenv/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dotenv/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dotenv/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dotenv/merges","archive_url":"https://api.github.com/repos/defunkt/dotenv/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dotenv/downloads","issues_url":"https://api.github.com/repos/defunkt/dotenv/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dotenv/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dotenv/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dotenv/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dotenv/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dotenv/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dotenv/deployments","created_at":"2012-07-24T21:43:19Z","updated_at":"2016-10-23T19:22:03Z","pushed_at":"2012-07-24T04:30:34Z","git_url":"git://github.com/defunkt/dotenv.git","ssh_url":"git@github.com:defunkt/dotenv.git","clone_url":"https://github.com/defunkt/dotenv.git","svn_url":"https://github.com/defunkt/dotenv","homepage":null,"size":75,"stargazers_count":4,"watchers_count":4,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":4,"default_branch":"master"},{"id":1336779,"name":"dotjs","full_name":"defunkt/dotjs","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/dotjs","description":"~/.js - — No longer maintained, sorry.","fork":false,"url":"https://api.github.com/repos/defunkt/dotjs","forks_url":"https://api.github.com/repos/defunkt/dotjs/forks","keys_url":"https://api.github.com/repos/defunkt/dotjs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/dotjs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/dotjs/teams","hooks_url":"https://api.github.com/repos/defunkt/dotjs/hooks","issue_events_url":"https://api.github.com/repos/defunkt/dotjs/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/dotjs/events","assignees_url":"https://api.github.com/repos/defunkt/dotjs/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/dotjs/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/dotjs/tags","blobs_url":"https://api.github.com/repos/defunkt/dotjs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/dotjs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/dotjs/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/dotjs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/dotjs/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/dotjs/languages","stargazers_url":"https://api.github.com/repos/defunkt/dotjs/stargazers","contributors_url":"https://api.github.com/repos/defunkt/dotjs/contributors","subscribers_url":"https://api.github.com/repos/defunkt/dotjs/subscribers","subscription_url":"https://api.github.com/repos/defunkt/dotjs/subscription","commits_url":"https://api.github.com/repos/defunkt/dotjs/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/dotjs/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/dotjs/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/dotjs/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/dotjs/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/dotjs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/dotjs/merges","archive_url":"https://api.github.com/repos/defunkt/dotjs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/dotjs/downloads","issues_url":"https://api.github.com/repos/defunkt/dotjs/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/dotjs/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/dotjs/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/dotjs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/dotjs/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/dotjs/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/dotjs/deployments","created_at":"2011-02-07T07:01:33Z","updated_at":"2017-10-24T21:44:36Z","pushed_at":"2017-08-04T04:12:15Z","git_url":"git://github.com/defunkt/dotjs.git","ssh_url":"git@github.com:defunkt/dotjs.git","clone_url":"https://github.com/defunkt/dotjs.git","svn_url":"https://github.com/defunkt/dotjs","homepage":"http://bit.ly/dotjs","size":1316,"stargazers_count":3202,"watchers_count":3202,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":380,"mirror_url":null,"archived":false,"open_issues_count":24,"forks":380,"open_issues":24,"watchers":3202,"default_branch":"master"},{"id":69384,"name":"electron-wordwrap","full_name":"defunkt/electron-wordwrap","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/electron-wordwrap","description":null,"fork":false,"url":"https://api.github.com/repos/defunkt/electron-wordwrap","forks_url":"https://api.github.com/repos/defunkt/electron-wordwrap/forks","keys_url":"https://api.github.com/repos/defunkt/electron-wordwrap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/electron-wordwrap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/electron-wordwrap/teams","hooks_url":"https://api.github.com/repos/defunkt/electron-wordwrap/hooks","issue_events_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/electron-wordwrap/events","assignees_url":"https://api.github.com/repos/defunkt/electron-wordwrap/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/electron-wordwrap/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/electron-wordwrap/tags","blobs_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/electron-wordwrap/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/electron-wordwrap/languages","stargazers_url":"https://api.github.com/repos/defunkt/electron-wordwrap/stargazers","contributors_url":"https://api.github.com/repos/defunkt/electron-wordwrap/contributors","subscribers_url":"https://api.github.com/repos/defunkt/electron-wordwrap/subscribers","subscription_url":"https://api.github.com/repos/defunkt/electron-wordwrap/subscription","commits_url":"https://api.github.com/repos/defunkt/electron-wordwrap/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/electron-wordwrap/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/electron-wordwrap/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/electron-wordwrap/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/electron-wordwrap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/electron-wordwrap/merges","archive_url":"https://api.github.com/repos/defunkt/electron-wordwrap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/electron-wordwrap/downloads","issues_url":"https://api.github.com/repos/defunkt/electron-wordwrap/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/electron-wordwrap/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/electron-wordwrap/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/electron-wordwrap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/electron-wordwrap/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/electron-wordwrap/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/electron-wordwrap/deployments","created_at":"2008-10-29T20:03:17Z","updated_at":"2016-09-22T18:46:22Z","pushed_at":"2008-10-29T20:28:21Z","git_url":"git://github.com/defunkt/electron-wordwrap.git","ssh_url":"git@github.com:defunkt/electron-wordwrap.git","clone_url":"https://github.com/defunkt/electron-wordwrap.git","svn_url":"https://github.com/defunkt/electron-wordwrap","homepage":"","size":76,"stargazers_count":4,"watchers_count":4,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":4,"default_branch":"master"},{"id":43903,"name":"emacs","full_name":"defunkt/emacs","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/emacs","description":"My - Emacs config","fork":false,"url":"https://api.github.com/repos/defunkt/emacs","forks_url":"https://api.github.com/repos/defunkt/emacs/forks","keys_url":"https://api.github.com/repos/defunkt/emacs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/emacs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/emacs/teams","hooks_url":"https://api.github.com/repos/defunkt/emacs/hooks","issue_events_url":"https://api.github.com/repos/defunkt/emacs/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/emacs/events","assignees_url":"https://api.github.com/repos/defunkt/emacs/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/emacs/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/emacs/tags","blobs_url":"https://api.github.com/repos/defunkt/emacs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/emacs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/emacs/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/emacs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/emacs/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/emacs/languages","stargazers_url":"https://api.github.com/repos/defunkt/emacs/stargazers","contributors_url":"https://api.github.com/repos/defunkt/emacs/contributors","subscribers_url":"https://api.github.com/repos/defunkt/emacs/subscribers","subscription_url":"https://api.github.com/repos/defunkt/emacs/subscription","commits_url":"https://api.github.com/repos/defunkt/emacs/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/emacs/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/emacs/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/emacs/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/emacs/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/emacs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/emacs/merges","archive_url":"https://api.github.com/repos/defunkt/emacs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/emacs/downloads","issues_url":"https://api.github.com/repos/defunkt/emacs/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/emacs/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/emacs/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/emacs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/emacs/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/emacs/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/emacs/deployments","created_at":"2008-08-19T10:50:19Z","updated_at":"2017-10-28T15:37:44Z","pushed_at":"2011-10-25T21:53:46Z","git_url":"git://github.com/defunkt/emacs.git","ssh_url":"git@github.com:defunkt/emacs.git","clone_url":"https://github.com/defunkt/emacs.git","svn_url":"https://github.com/defunkt/emacs","homepage":"","size":1705,"stargazers_count":186,"watchers_count":186,"language":"Emacs - Lisp","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":46,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":46,"open_issues":0,"watchers":186,"default_branch":"master"},{"id":2998404,"name":"email_reply_parser","full_name":"defunkt/email_reply_parser","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/email_reply_parser","description":null,"fork":true,"url":"https://api.github.com/repos/defunkt/email_reply_parser","forks_url":"https://api.github.com/repos/defunkt/email_reply_parser/forks","keys_url":"https://api.github.com/repos/defunkt/email_reply_parser/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/email_reply_parser/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/email_reply_parser/teams","hooks_url":"https://api.github.com/repos/defunkt/email_reply_parser/hooks","issue_events_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/email_reply_parser/events","assignees_url":"https://api.github.com/repos/defunkt/email_reply_parser/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/email_reply_parser/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/email_reply_parser/tags","blobs_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/email_reply_parser/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/email_reply_parser/languages","stargazers_url":"https://api.github.com/repos/defunkt/email_reply_parser/stargazers","contributors_url":"https://api.github.com/repos/defunkt/email_reply_parser/contributors","subscribers_url":"https://api.github.com/repos/defunkt/email_reply_parser/subscribers","subscription_url":"https://api.github.com/repos/defunkt/email_reply_parser/subscription","commits_url":"https://api.github.com/repos/defunkt/email_reply_parser/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/email_reply_parser/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/email_reply_parser/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/email_reply_parser/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/email_reply_parser/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/email_reply_parser/merges","archive_url":"https://api.github.com/repos/defunkt/email_reply_parser/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/email_reply_parser/downloads","issues_url":"https://api.github.com/repos/defunkt/email_reply_parser/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/email_reply_parser/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/email_reply_parser/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/email_reply_parser/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/email_reply_parser/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/email_reply_parser/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/email_reply_parser/deployments","created_at":"2011-12-16T23:13:05Z","updated_at":"2016-09-22T18:48:34Z","pushed_at":"2011-12-16T23:13:24Z","git_url":"git://github.com/defunkt/email_reply_parser.git","ssh_url":"git@github.com:defunkt/email_reply_parser.git","clone_url":"https://github.com/defunkt/email_reply_parser.git","svn_url":"https://github.com/defunkt/email_reply_parser","homepage":"","size":137,"stargazers_count":2,"watchers_count":2,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"forks":5,"open_issues":0,"watchers":2,"default_branch":"master"},{"id":1167457,"name":"evilbot","full_name":"defunkt/evilbot","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/evilbot","description":"an - evil bot that''s definitely not for convore","fork":false,"url":"https://api.github.com/repos/defunkt/evilbot","forks_url":"https://api.github.com/repos/defunkt/evilbot/forks","keys_url":"https://api.github.com/repos/defunkt/evilbot/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/evilbot/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/evilbot/teams","hooks_url":"https://api.github.com/repos/defunkt/evilbot/hooks","issue_events_url":"https://api.github.com/repos/defunkt/evilbot/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/evilbot/events","assignees_url":"https://api.github.com/repos/defunkt/evilbot/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/evilbot/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/evilbot/tags","blobs_url":"https://api.github.com/repos/defunkt/evilbot/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/evilbot/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/evilbot/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/evilbot/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/evilbot/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/evilbot/languages","stargazers_url":"https://api.github.com/repos/defunkt/evilbot/stargazers","contributors_url":"https://api.github.com/repos/defunkt/evilbot/contributors","subscribers_url":"https://api.github.com/repos/defunkt/evilbot/subscribers","subscription_url":"https://api.github.com/repos/defunkt/evilbot/subscription","commits_url":"https://api.github.com/repos/defunkt/evilbot/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/evilbot/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/evilbot/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/evilbot/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/evilbot/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/evilbot/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/evilbot/merges","archive_url":"https://api.github.com/repos/defunkt/evilbot/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/evilbot/downloads","issues_url":"https://api.github.com/repos/defunkt/evilbot/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/evilbot/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/evilbot/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/evilbot/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/evilbot/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/evilbot/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/evilbot/deployments","created_at":"2010-12-14T08:09:11Z","updated_at":"2016-09-22T18:47:55Z","pushed_at":"2011-02-16T07:34:00Z","git_url":"git://github.com/defunkt/evilbot.git","ssh_url":"git@github.com:defunkt/evilbot.git","clone_url":"https://github.com/defunkt/evilbot.git","svn_url":"https://github.com/defunkt/evilbot","homepage":"http://convore.com/","size":156,"stargazers_count":45,"watchers_count":45,"language":"CoffeeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":14,"mirror_url":null,"archived":false,"open_issues_count":1,"forks":14,"open_issues":1,"watchers":45,"default_branch":"master"},{"id":35,"name":"exception_logger","full_name":"defunkt/exception_logger","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/exception_logger","description":"Unmaintained. - Sorry.","fork":false,"url":"https://api.github.com/repos/defunkt/exception_logger","forks_url":"https://api.github.com/repos/defunkt/exception_logger/forks","keys_url":"https://api.github.com/repos/defunkt/exception_logger/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/exception_logger/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/exception_logger/teams","hooks_url":"https://api.github.com/repos/defunkt/exception_logger/hooks","issue_events_url":"https://api.github.com/repos/defunkt/exception_logger/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/exception_logger/events","assignees_url":"https://api.github.com/repos/defunkt/exception_logger/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/exception_logger/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/exception_logger/tags","blobs_url":"https://api.github.com/repos/defunkt/exception_logger/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/exception_logger/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/exception_logger/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/exception_logger/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/exception_logger/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/exception_logger/languages","stargazers_url":"https://api.github.com/repos/defunkt/exception_logger/stargazers","contributors_url":"https://api.github.com/repos/defunkt/exception_logger/contributors","subscribers_url":"https://api.github.com/repos/defunkt/exception_logger/subscribers","subscription_url":"https://api.github.com/repos/defunkt/exception_logger/subscription","commits_url":"https://api.github.com/repos/defunkt/exception_logger/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/exception_logger/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/exception_logger/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/exception_logger/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/exception_logger/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/exception_logger/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/exception_logger/merges","archive_url":"https://api.github.com/repos/defunkt/exception_logger/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/exception_logger/downloads","issues_url":"https://api.github.com/repos/defunkt/exception_logger/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/exception_logger/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/exception_logger/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/exception_logger/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/exception_logger/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/exception_logger/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/exception_logger/deployments","created_at":"2008-01-14T03:32:19Z","updated_at":"2017-08-02T04:15:40Z","pushed_at":"2016-01-01T04:57:28Z","git_url":"git://github.com/defunkt/exception_logger.git","ssh_url":"git@github.com:defunkt/exception_logger.git","clone_url":"https://github.com/defunkt/exception_logger.git","svn_url":"https://github.com/defunkt/exception_logger","homepage":"","size":232,"stargazers_count":237,"watchers_count":237,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":85,"mirror_url":null,"archived":false,"open_issues_count":2,"forks":85,"open_issues":2,"watchers":237,"default_branch":"master"},{"id":425,"name":"facebox","full_name":"defunkt/facebox","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/facebox","description":"Facebook-style - lightbox, built in jQuery","fork":false,"url":"https://api.github.com/repos/defunkt/facebox","forks_url":"https://api.github.com/repos/defunkt/facebox/forks","keys_url":"https://api.github.com/repos/defunkt/facebox/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/facebox/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/facebox/teams","hooks_url":"https://api.github.com/repos/defunkt/facebox/hooks","issue_events_url":"https://api.github.com/repos/defunkt/facebox/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/facebox/events","assignees_url":"https://api.github.com/repos/defunkt/facebox/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/facebox/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/facebox/tags","blobs_url":"https://api.github.com/repos/defunkt/facebox/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/facebox/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/facebox/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/facebox/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/facebox/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/facebox/languages","stargazers_url":"https://api.github.com/repos/defunkt/facebox/stargazers","contributors_url":"https://api.github.com/repos/defunkt/facebox/contributors","subscribers_url":"https://api.github.com/repos/defunkt/facebox/subscribers","subscription_url":"https://api.github.com/repos/defunkt/facebox/subscription","commits_url":"https://api.github.com/repos/defunkt/facebox/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/facebox/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/facebox/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/facebox/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/facebox/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/facebox/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/facebox/merges","archive_url":"https://api.github.com/repos/defunkt/facebox/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/facebox/downloads","issues_url":"https://api.github.com/repos/defunkt/facebox/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/facebox/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/facebox/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/facebox/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/facebox/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/facebox/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/facebox/deployments","created_at":"2008-02-11T22:49:27Z","updated_at":"2017-10-27T07:44:52Z","pushed_at":"2013-07-15T19:55:04Z","git_url":"git://github.com/defunkt/facebox.git","ssh_url":"git@github.com:defunkt/facebox.git","clone_url":"https://github.com/defunkt/facebox.git","svn_url":"https://github.com/defunkt/facebox","homepage":"http://defunkt.io/facebox/","size":1174,"stargazers_count":1950,"watchers_count":1950,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":417,"mirror_url":null,"archived":false,"open_issues_count":31,"forks":417,"open_issues":31,"watchers":1950,"default_branch":"master"},{"id":5211331,"name":"faceup","full_name":"defunkt/faceup","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/faceup","description":"More - than just mustaches.","fork":true,"url":"https://api.github.com/repos/defunkt/faceup","forks_url":"https://api.github.com/repos/defunkt/faceup/forks","keys_url":"https://api.github.com/repos/defunkt/faceup/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/faceup/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/faceup/teams","hooks_url":"https://api.github.com/repos/defunkt/faceup/hooks","issue_events_url":"https://api.github.com/repos/defunkt/faceup/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/faceup/events","assignees_url":"https://api.github.com/repos/defunkt/faceup/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/faceup/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/faceup/tags","blobs_url":"https://api.github.com/repos/defunkt/faceup/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/faceup/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/faceup/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/faceup/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/faceup/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/faceup/languages","stargazers_url":"https://api.github.com/repos/defunkt/faceup/stargazers","contributors_url":"https://api.github.com/repos/defunkt/faceup/contributors","subscribers_url":"https://api.github.com/repos/defunkt/faceup/subscribers","subscription_url":"https://api.github.com/repos/defunkt/faceup/subscription","commits_url":"https://api.github.com/repos/defunkt/faceup/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/faceup/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/faceup/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/faceup/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/faceup/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/faceup/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/faceup/merges","archive_url":"https://api.github.com/repos/defunkt/faceup/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/faceup/downloads","issues_url":"https://api.github.com/repos/defunkt/faceup/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/faceup/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/faceup/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/faceup/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/faceup/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/faceup/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/faceup/deployments","created_at":"2012-07-28T02:11:56Z","updated_at":"2017-10-27T23:27:15Z","pushed_at":"2012-07-28T02:40:26Z","git_url":"git://github.com/defunkt/faceup.git","ssh_url":"git@github.com:defunkt/faceup.git","clone_url":"https://github.com/defunkt/faceup.git","svn_url":"https://github.com/defunkt/faceup","homepage":"http://faceup.me/","size":1994,"stargazers_count":5,"watchers_count":5,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"open_issues_count":1,"forks":6,"open_issues":1,"watchers":5,"default_branch":"master"}]' -- recorded: 2018-04-14T12:51:16.617Z - request: - method: GET - uri: https://api.github.com/repos/defunkt/facebox - response: - status: 200 - headers: - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: ETag, Link, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval - Cache-Control: public, max-age=60, s-maxage=60 - Content-Security-Policy: default-src 'none' - Content-Type: application/json; charset=utf-8 - Date: Sat, 14 Apr 2018 12:51:59 GMT - ETag: W/"a7bf03016d18cfe4d8889fd4638f6898" - Last-Modified: Thu, 12 Apr 2018 05:43:21 GMT - Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin - Server: GitHub.com - Status: 200 OK - Strict-Transport-Security: max-age=31536000; includeSubdomains; preload - Transfer-Encoding: chunked - Vary: Accept - X-Content-Type-Options: nosniff - X-Frame-Options: deny - X-GitHub-Media-Type: github.v3; format=json - X-GitHub-Request-Id: E1EE:3CE0:3563B05:67EFF36:5AD1F96D - X-RateLimit-Limit: '60' - X-RateLimit-Remaining: '56' - X-RateLimit-Reset: '1523713711' - X-Runtime-rack: '0.055815' - X-XSS-Protection: 1; mode=block - body: '{"id":425,"name":"facebox","full_name":"defunkt/facebox","owner":{"login":"defunkt","id":2,"avatar_url":"https://avatars0.githubusercontent.com/u/2?v=4","gravatar_id":"","url":"https://api.github.com/users/defunkt","html_url":"https://github.com/defunkt","followers_url":"https://api.github.com/users/defunkt/followers","following_url":"https://api.github.com/users/defunkt/following{/other_user}","gists_url":"https://api.github.com/users/defunkt/gists{/gist_id}","starred_url":"https://api.github.com/users/defunkt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/defunkt/subscriptions","organizations_url":"https://api.github.com/users/defunkt/orgs","repos_url":"https://api.github.com/users/defunkt/repos","events_url":"https://api.github.com/users/defunkt/events{/privacy}","received_events_url":"https://api.github.com/users/defunkt/received_events","type":"User","site_admin":true},"private":false,"html_url":"https://github.com/defunkt/facebox","description":"Facebook-style - lightbox, built in jQuery","fork":false,"url":"https://api.github.com/repos/defunkt/facebox","forks_url":"https://api.github.com/repos/defunkt/facebox/forks","keys_url":"https://api.github.com/repos/defunkt/facebox/keys{/key_id}","collaborators_url":"https://api.github.com/repos/defunkt/facebox/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/defunkt/facebox/teams","hooks_url":"https://api.github.com/repos/defunkt/facebox/hooks","issue_events_url":"https://api.github.com/repos/defunkt/facebox/issues/events{/number}","events_url":"https://api.github.com/repos/defunkt/facebox/events","assignees_url":"https://api.github.com/repos/defunkt/facebox/assignees{/user}","branches_url":"https://api.github.com/repos/defunkt/facebox/branches{/branch}","tags_url":"https://api.github.com/repos/defunkt/facebox/tags","blobs_url":"https://api.github.com/repos/defunkt/facebox/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/defunkt/facebox/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/defunkt/facebox/git/refs{/sha}","trees_url":"https://api.github.com/repos/defunkt/facebox/git/trees{/sha}","statuses_url":"https://api.github.com/repos/defunkt/facebox/statuses/{sha}","languages_url":"https://api.github.com/repos/defunkt/facebox/languages","stargazers_url":"https://api.github.com/repos/defunkt/facebox/stargazers","contributors_url":"https://api.github.com/repos/defunkt/facebox/contributors","subscribers_url":"https://api.github.com/repos/defunkt/facebox/subscribers","subscription_url":"https://api.github.com/repos/defunkt/facebox/subscription","commits_url":"https://api.github.com/repos/defunkt/facebox/commits{/sha}","git_commits_url":"https://api.github.com/repos/defunkt/facebox/git/commits{/sha}","comments_url":"https://api.github.com/repos/defunkt/facebox/comments{/number}","issue_comment_url":"https://api.github.com/repos/defunkt/facebox/issues/comments{/number}","contents_url":"https://api.github.com/repos/defunkt/facebox/contents/{+path}","compare_url":"https://api.github.com/repos/defunkt/facebox/compare/{base}...{head}","merges_url":"https://api.github.com/repos/defunkt/facebox/merges","archive_url":"https://api.github.com/repos/defunkt/facebox/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/defunkt/facebox/downloads","issues_url":"https://api.github.com/repos/defunkt/facebox/issues{/number}","pulls_url":"https://api.github.com/repos/defunkt/facebox/pulls{/number}","milestones_url":"https://api.github.com/repos/defunkt/facebox/milestones{/number}","notifications_url":"https://api.github.com/repos/defunkt/facebox/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/defunkt/facebox/labels{/name}","releases_url":"https://api.github.com/repos/defunkt/facebox/releases{/id}","deployments_url":"https://api.github.com/repos/defunkt/facebox/deployments","created_at":"2008-02-11T22:49:27Z","updated_at":"2018-04-12T05:43:21Z","pushed_at":"2013-07-15T19:55:04Z","git_url":"git://github.com/defunkt/facebox.git","ssh_url":"git@github.com:defunkt/facebox.git","clone_url":"https://github.com/defunkt/facebox.git","svn_url":"https://github.com/defunkt/facebox","homepage":"http://defunkt.io/facebox/","size":1174,"stargazers_count":1941,"watchers_count":1941,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":419,"mirror_url":null,"archived":false,"open_issues_count":31,"license":{"key":"mit","name":"MIT - License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":419,"open_issues":31,"watchers":1941,"default_branch":"master","network_count":419,"subscribers_count":68}' diff --git a/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt b/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt index 9e7aded4..ff5559a7 100644 --- a/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt @@ -9,19 +9,25 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry -import com.jraska.github.client.http.ReplayHttpModule -import okreplay.OkReplay +import com.jraska.github.client.android.test.http.assetJson +import com.jraska.github.client.http.MockWebServerInterceptorRule +import com.jraska.github.client.http.onUrlPartReturn +import com.jraska.github.client.http.onUrlReturn +import okhttp3.mockwebserver.MockWebServer import org.hamcrest.Matchers import org.junit.Rule import org.junit.Test class DeepLinkLaunchTest { - @get:Rule - val testRule = ReplayHttpModule.okReplayRule() + + @get:Rule val mockWebServer = MockWebServer() + + @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) @Test - @OkReplay fun whenUsersLinkThenUsersActivityDisplayed() { + mockWebServer.enqueue(assetJson("response/users.json")) + launchDeepLink("https://github.com/users") onView(withText("defunkt")).check(matches(isDisplayed())) @@ -29,16 +35,20 @@ class DeepLinkLaunchTest { } @Test - @OkReplay fun whenDetailLinkThenUserDetailActivityDisplayed() { - launchDeepLink("https://github.com/defunkt") + mockWebServer.onUrlReturn(".*/users/mojombo".toRegex(), assetJson("response/mojombo.json")) + mockWebServer.onUrlPartReturn("users/mojombo/repos", assetJson("response/mojombo_repos.json")) - onView(withText("dotjs")).check(matches(isDisplayed())) + launchDeepLink("https://github.com/mojombo") + + onView(withText("charlock_holmes")).check(matches(isDisplayed())) } @Test - @OkReplay fun whenRepoLinkThenRepoActivityDisplayed() { + mockWebServer.enqueue(assetJson("response/repo_detail.json")) + mockWebServer.enqueue(assetJson("response/repo_pulls.json")) + launchDeepLink("https://github.com/jraska/Falcon") onView(withText(Matchers.containsString("Language: Java"))) diff --git a/app/src/androidTest/java/com/jraska/github/client/http/OkReplayMediator.kt b/app/src/androidTest/java/com/jraska/github/client/http/OkReplayMediator.kt deleted file mode 100644 index 7dbad159..00000000 --- a/app/src/androidTest/java/com/jraska/github/client/http/OkReplayMediator.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.jraska.github.client.http - -import okhttp3.HttpUrl -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.Response -import okreplay.OkReplayInterceptor - -class OkReplayMediator { - private val ordinalsInterceptor = AddOrdinalParameterInterceptor() - val okReplayInterceptor = OkReplayInterceptor() - - fun onTestStart() { - ordinalsInterceptor.clear() - } - - fun onTestStop() { - ordinalsInterceptor.clear() - } - - fun configure(clientBuilder: OkHttpClient.Builder) { - clientBuilder.addInterceptor(ordinalsInterceptor) - clientBuilder.addInterceptor(okReplayInterceptor) - clientBuilder.addInterceptor(RemoveOrdinalParameterInterceptor()) - } -} - -const val SYNTHETIC_PARAMETER_NAME = "syntheticOkReplayOrdinal" - -private class RemoveOrdinalParameterInterceptor : Interceptor { - override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request() - val url = request.url - if (url.queryParameter(SYNTHETIC_PARAMETER_NAME) == null) { - return chain.proceed(request) - } - - val newRequest = request.newBuilder() - .url(url.newBuilder() - .removeAllQueryParameters(SYNTHETIC_PARAMETER_NAME) - .build()) - .build() - - return chain.proceed(newRequest) - } -} - -private class AddOrdinalParameterInterceptor : Interceptor { - private val requestCounts = HashMap() - - override fun intercept(chain: Interceptor.Chain): Response { - val request = chain.request() - val url = request.url - - val requestsPerformed = requestCounts[url] - if (requestsPerformed == null) { - requestCounts[url] = 1 - return chain.proceed(request) // do not add anything, first request - } else { - val requestOrdinal = requestsPerformed + 1 - requestCounts[url] = requestOrdinal - - // we add synthetic parameter to distinguish request - val newRequest = request.newBuilder() - .url(url.newBuilder() - .addQueryParameter(SYNTHETIC_PARAMETER_NAME, requestOrdinal.toString()) - .build()) - .build() - return chain.proceed(newRequest) - } - } - - fun clear() { - requestCounts.clear() - } -} diff --git a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt index 3d4d10ec..35111823 100644 --- a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt +++ b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt @@ -1,100 +1,16 @@ package com.jraska.github.client.http -import android.Manifest -import android.app.Activity -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.rule.ActivityTestRule -import androidx.test.rule.GrantPermissionRule -import com.jraska.github.client.users.ui.UsersActivity import dagger.Module import dagger.Provides -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import okreplay.AndroidTapeRoot -import okreplay.OkReplayConfig -import okreplay.OkReplayRuleChain -import okreplay.TapeMode -import org.junit.rules.ExternalResource -import org.junit.rules.RuleChain -import org.junit.rules.TestRule import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory -import retrofit2.converter.gson.GsonConverterFactory @Module object ReplayHttpModule { - private val retrofit by lazy { createRetrofit() } + private val retrofit by lazy { HttpTest.retrofit() } @Provides fun retrofit(): Retrofit { return retrofit } - - private val REPLAY_MEDIATOR = OkReplayMediator() - - private fun createRetrofit(): Retrofit { - return Retrofit.Builder() - .baseUrl("https://api.github.com") - .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) - .addConverterFactory(GsonConverterFactory.create()) - .client(okReplayClient()) - .build() - } - - fun okReplayRule(): TestRule { - return okReplayRule(TapeMode.READ_ONLY) - } - - fun okReplayRule(tapeMode: TapeMode): TestRule { - return okReplayRule(UsersActivity::class.java, tapeMode) - } - - fun okReplayRule(activityClass: Class, tapeMode: TapeMode): TestRule { - val testClass = findTestClassInStack() - - val configuration = OkReplayConfig.Builder() - .tapeRoot(AndroidTapeRoot(InstrumentationRegistry.getInstrumentation().context, testClass)) - .defaultMode(tapeMode) - .sslEnabled(true) - .interceptor(REPLAY_MEDIATOR.okReplayInterceptor) - .build() - - return RuleChain.outerRule(GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)) - .around(MediatorRule(REPLAY_MEDIATOR)) - .around(OkReplayRuleChain(configuration, ActivityTestRule(activityClass)).get()) - } - - private fun findTestClassInStack(): Class<*> { - for (element in Throwable().stackTrace) { - if (element.className.endsWith("Test")) { - return Class.forName(element.className) - } - } - - throw IllegalStateException("No test class with suffix 'Test' found") - } - - private fun okReplayClient(): OkHttpClient { - val httpLoggingInterceptor = HttpLoggingInterceptor() - val builder = OkHttpClient.Builder() - .addInterceptor(httpLoggingInterceptor.apply { httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BASIC }) - - REPLAY_MEDIATOR.configure(builder) - - builder.addInterceptor(MockWebServerInterceptor) - - return builder.build() - } -} - -class MediatorRule(private val okReplayMediator: OkReplayMediator) : ExternalResource() { - override fun before() { - okReplayMediator.onTestStart() - } - - override fun after() { - okReplayMediator.onTestStop() - } } diff --git a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt index 32114d15..20132196 100644 --- a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt @@ -10,37 +10,53 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withHint import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.rule.ActivityTestRule import com.google.firebase.analytics.FirebaseAnalytics import com.jraska.github.client.EnableConfigRule import com.jraska.github.client.R -import com.jraska.github.client.http.ReplayHttpModule +import com.jraska.github.client.android.test.http.assetJson +import com.jraska.github.client.http.MockWebServerInterceptorRule +import com.jraska.github.client.http.onUrlPartReturn +import com.jraska.github.client.http.onUrlReturn import com.jraska.github.client.recordedEvents -import okreplay.OkReplay +import com.jraska.github.client.users.ui.UsersActivity +import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Rule import org.junit.Test class UsersActivityFlowTest { - @Suppress("unused") + @get:Rule val mockWebServer = MockWebServer() + + @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + @get:Rule - val testRule = ReplayHttpModule.okReplayRule() + val rule = ActivityTestRule(UsersActivity::class.java, false, false) @get:Rule val enableConfigRule = EnableConfigRule("user_detail_section_size", 4L) @Test - @OkReplay fun whenStartsThenDisplaysUsers() { - onView(withText("defunkt")).perform(click()) - onView(withText("dotjs")).check(matches(isDisplayed())) - onView(withText("facebox")).perform(click()) - onView(withText("1941")).check(matches(isDisplayed())) + mockWebServer.onUrlReturn(".*/users".toRegex(), assetJson("response/users.json")) + mockWebServer.onUrlReturn(".*/users/mojombo".toRegex(), assetJson("response/defunkt.json")) + mockWebServer.onUrlPartReturn("users/mojombo/repos", assetJson("response/defunkt_repos.json")) + mockWebServer.onUrlPartReturn("repos/defunkt/hurl", assetJson("response/repo_hurl.json")) + + rule.launchActivity(null) + + onView(withText("mojombo")).perform(click()) + onView(withText("charlock_holmes")).check(matches(isDisplayed())) + onView(withText("hurl")).perform(click()) + onView(withText("523")).check(matches(isDisplayed())) } @Test - @OkReplay fun whenSettingsThenReportsEvent() { + rule.launchActivity(null) + mockWebServer.enqueue(assetJson("response/users.json")) + onView(withId(R.id.action_settings)).perform(click()) onView(withHint("Value")).perform(ViewActions.typeText("0.01")) onView(withText("Purchase")).perform(click()) @@ -51,16 +67,21 @@ class UsersActivityFlowTest { } @Test - @OkReplay fun whenAboutThenOpensAbout() { + rule.launchActivity(null) + mockWebServer.enqueue(assetJson("response/users.json")) + onView(withId(R.id.action_about)).perform(click()) onView(withText("by Josef Raska")).check(matches(isDisplayed())) } @Test - @OkReplay fun whenRefreshesThenDisplaysOtherUsers() { + rule.launchActivity(null) + mockWebServer.enqueue(assetJson("response/users.json")) + mockWebServer.enqueue(assetJson("response/users_no_defunkt.json")) + onView(withText("defunkt")).check(matches(isDisplayed())) onView(withId(R.id.users_refresh_swipe_layout)).perform(swipeDown()) onView(withText("defunkt")).check(doesNotExist()) diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/http/MockWebServer.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/http/MockWebServer.kt new file mode 100644 index 00000000..a78c8af9 --- /dev/null +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/http/MockWebServer.kt @@ -0,0 +1,11 @@ +package com.jraska.github.client.android.test.http + +import androidx.test.platform.app.InstrumentationRegistry +import okhttp3.mockwebserver.MockResponse + +fun assetJson(path: String): MockResponse { + val assetsStream = InstrumentationRegistry.getInstrumentation().context.assets.open(path) + + val json = assetsStream.bufferedReader().readText() + return MockResponse().setResponseCode(200).setBody(json) +} diff --git a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt index 01592786..4908705d 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt @@ -37,16 +37,20 @@ fun MockWebServer.enqueue(path: String) { this.enqueue(MockResponse().setBody(json(path))) } -fun MockWebServer.onUrlPartReturn(urlPart: String, jsonPath: String) { +fun MockWebServer.onUrlPartReturn(urlPart: String, jsonPath: String) = onUrlPartReturn(urlPart, jsonResource(jsonPath)) + +fun MockWebServer.onUrlPartReturn(urlPart: String, mockResponse: MockResponse) { ensureMapDispatcher() - (dispatcher as MapDispatcher).onUrlPartReturn(urlPart, jsonPath) + (dispatcher as MapDispatcher).onMatchingReturn(UrlContainsMatcher(urlPart), mockResponse) } -fun MockWebServer.onUrlReturn(urlRegex: Regex, jsonPath: String) { +fun MockWebServer.onUrlReturn(urlRegex: Regex, jsonPath: String) = onUrlReturn(urlRegex, jsonResource(jsonPath)) + +fun MockWebServer.onUrlReturn(urlRegex: Regex, mockResponse: MockResponse) { ensureMapDispatcher() - (dispatcher as MapDispatcher).onUrlReturn(urlRegex, jsonPath) + (dispatcher as MapDispatcher).onMatchingReturn(UrlRegexMatcher(urlRegex), mockResponse) } private fun MockWebServer.ensureMapDispatcher() { @@ -61,6 +65,10 @@ internal fun json(path: String): String { return String(file.readBytes()) } +fun jsonResource(path: String): MockResponse { + return MockResponse().setBody(json(path)) +} + object MockWebServerInterceptor : Interceptor { var mockWebServer: MockWebServer? = null diff --git a/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt b/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt index 5b6b82b6..f4f7aef1 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt @@ -10,19 +10,9 @@ import org.hamcrest.TypeSafeMatcher class MapDispatcher : Dispatcher() { private val requestDispatchers = mutableSetOf() - fun onUrlReturn(urlRegex: Regex, jsonPath: String) { - onMatchingReturn(UrlRegexMatcher(urlRegex), jsonPath) - } - - fun onUrlPartReturn(urlPart: String, jsonPath: String) { - onMatchingReturn(UrlContainsMatcher(urlPart), jsonPath) - } - - fun onMatchingReturn(matcher: Matcher, jsonPath: String) { + fun onMatchingReturn(matcher: Matcher, mockResponse: MockResponse) { requestDispatchers.add( - NetworkMockEntry(matcher) { - MockResponse().setBody(json(jsonPath)) - }) + NetworkMockEntry(matcher) { mockResponse }) } override fun dispatch(request: RecordedRequest): MockResponse { diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt index c9f9921d..a0cfb55e 100644 --- a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt @@ -5,6 +5,7 @@ import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule +import com.jraska.github.client.android.test.http.assetJson import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.users.ui.UsersActivity import okhttp3.mockwebserver.MockResponse @@ -41,10 +42,6 @@ class UsersActivityTest { } private fun twoUsersResponse(): MockResponse { - val assetsStream = InstrumentationRegistry.getInstrumentation().context.assets.open("users/two_users.json") - - val json = assetsStream.bufferedReader().readText() - - return MockResponse().setResponseCode(200).setBody(json) + return assetJson("users/two_users.json") } } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt index c8b4d135..d1253188 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt @@ -6,7 +6,7 @@ import retrofit2.http.Path import retrofit2.http.Query internal interface GitHubUsersApi { - @GET("/users") + @GET("/users?some=1") fun getUsers(@Query("since") since: Int): Single> @GET("/users/{login}") From 93948aa814ec9933efee8db3bbd43981621f35d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 30 Apr 2021 23:45:46 +0000 Subject: [PATCH 030/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a8154743..06305019 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.28.5' - versionCode 104 + versionName '0.29.0' + versionCode 105 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 219ea937f619d07fca9bec8094a5f4c69747e087 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 1 May 2021 11:39:09 +0200 Subject: [PATCH 031/621] Improve push tests (#506) * Test improvements for push tests * Idling resource is a property now * Better naming * Spacing to highlight the integration * Update publishing token to real time database * Renaming to make more sense --- .../github/client/xpush/PushAwaitRule.kt | 23 +++++-------- .../client/xpush/PushIntegrationTest.kt | 14 +++----- .../github/client/xpush/PushServerClient.kt | 34 +++++++++++-------- .../client/push/PushTokenSynchronizer.kt | 14 +++++--- 4 files changed, 43 insertions(+), 42 deletions(-) diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushAwaitRule.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushAwaitRule.kt index 52e3b592..9e6fe7e3 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushAwaitRule.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushAwaitRule.kt @@ -3,44 +3,39 @@ package com.jraska.github.client.xpush import androidx.test.espresso.IdlingRegistry import androidx.test.espresso.IdlingResource import androidx.test.espresso.idling.CountingIdlingResource -import androidx.test.internal.runner.junit4.statement.UiThreadStatement import com.google.firebase.messaging.RemoteMessage import com.jraska.github.client.push.PushHandleModel import org.junit.rules.ExternalResource class PushAwaitRule : ExternalResource() { override fun before() { - IdlingRegistry.getInstance().register(PushAwaitIdlingResource.idlingResource()) + IdlingRegistry.getInstance().register(PushAwaitIdlingResource.idlingResource) } override fun after() { - IdlingRegistry.getInstance().unregister(PushAwaitIdlingResource.idlingResource()) + IdlingRegistry.getInstance().unregister(PushAwaitIdlingResource.idlingResource) } - fun viewWillAwaitPush() { - PushAwaitIdlingResource.waitForPush() + fun onViewAwaitPush() { + PushAwaitIdlingResource.awaitPush() } private object PushAwaitIdlingResource { private val countingIdlingResource = CountingIdlingResource("Push Await") - fun idlingResource(): IdlingResource = countingIdlingResource + val idlingResource: IdlingResource = countingIdlingResource - fun waitForPush() = countingIdlingResource.increment() + fun awaitPush() = countingIdlingResource.increment() - fun onPush() { - // Doing this to make sure anything scheduled on UI thread will run before this - UiThreadStatement.runOnUiThread { - countingIdlingResource.decrement() - } - } + fun onPush() = countingIdlingResource.decrement() } class TestPushHandleModel( - val productionModel: PushHandleModel, + private val productionModel: PushHandleModel, ) : PushHandleModel by productionModel { override fun onMessageReceived(message: RemoteMessage) { productionModel.onMessageReceived(message) + PushAwaitIdlingResource.onPush() } } diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt index 2a84da00..5c0ead01 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt @@ -6,7 +6,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import com.google.android.gms.tasks.Tasks -import com.google.firebase.iid.FirebaseInstanceId +import com.google.firebase.messaging.FirebaseMessaging import com.jraska.github.client.DeepLinkLaunchTest import org.junit.Assume import org.junit.Before @@ -25,15 +25,15 @@ class PushIntegrationTest { fun setUp() { pushClient = PushServerClient.create(apiKey()) - val instanceIdTask = FirebaseInstanceId.getInstance().instanceId - thisDeviceToken = Tasks.await(instanceIdTask).token + val tokenTask = FirebaseMessaging.getInstance().token + thisDeviceToken = Tasks.await(tokenTask) } @Test fun testPushIntegrationFromSettingsToAbout() { DeepLinkLaunchTest.launchDeepLink("https://github.com/settings") - viewWillAwaitPush() + pushRule.onViewAwaitPush() sendDeepLinkPush("https://github.com/about") onView(withText("by Josef Raska")).check(matches(isDisplayed())) @@ -43,7 +43,7 @@ class PushIntegrationTest { fun testPushIntegrationFromAboutToSettings() { DeepLinkLaunchTest.launchDeepLink("https://github.com/about") - viewWillAwaitPush() + pushRule.onViewAwaitPush() sendDeepLinkPush("https://github.com/settings") onView(withText("Purchase")).check(matches(isDisplayed())) @@ -66,8 +66,4 @@ class PushIntegrationTest { return apiKey as String } - - private fun viewWillAwaitPush() { - pushRule.viewWillAwaitPush() - } } diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt index d7c8002b..143400ba 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt @@ -1,7 +1,9 @@ package com.jraska.github.client.xpush import io.reactivex.rxjava3.core.Completable +import okhttp3.Interceptor import okhttp3.OkHttpClient +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory @@ -16,24 +18,28 @@ interface PushServerClient { companion object { fun create(authorizationToken: String): PushServerClient { - return Retrofit.Builder().validateEagerly(true) + return Retrofit.Builder() + .baseUrl("https://fcm.googleapis.com") + .client(pushClient(authorizationToken)) .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .addConverterFactory(GsonConverterFactory.create()) - .baseUrl("https://fcm.googleapis.com") - .client( - OkHttpClient.Builder() - .addInterceptor { chain -> - chain.proceed( - chain.request().newBuilder() - .addHeader("Authorization", "key=$authorizationToken") - .build() - ) - } - .addInterceptor(HttpLoggingInterceptor { Timber.d(it) }.setLevel(HttpLoggingInterceptor.Level.BASIC)) - .build() - ) .build() .create(PushServerClient::class.java) } + + private fun pushClient(authorizationToken: String) = OkHttpClient.Builder() + .addInterceptor(AddAuthorizationHeaderInterceptor(authorizationToken)) + .addInterceptor(HttpLoggingInterceptor { Timber.d(it) }.setLevel(HttpLoggingInterceptor.Level.BASIC)) + .build() + } + + private class AddAuthorizationHeaderInterceptor(private val value: String) : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val newRequest = chain.request().newBuilder() + .addHeader("Authorization", "key=$value") + .build() + + return chain.proceed(newRequest) + } } } diff --git a/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt b/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt index 55048caf..85a60510 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt @@ -2,7 +2,7 @@ package com.jraska.github.client.push import android.os.Build import com.google.firebase.database.FirebaseDatabase -import com.google.firebase.iid.FirebaseInstanceId +import com.google.firebase.installations.FirebaseInstallations import com.jraska.github.client.time.DateTimeProvider import timber.log.Timber import java.util.HashMap @@ -14,15 +14,19 @@ internal class PushTokenSynchronizer @Inject constructor( ) { fun onTokenRefresh(token: String) { - val instanceId = FirebaseInstanceId.getInstance() - val id = instanceId.id + val installationIdTask = FirebaseInstallations.getInstance().id - Timber.d("Id: %s, Token: %s", id, token) + installationIdTask.addOnSuccessListener { saveToken(it, token) } + .addOnFailureListener { Timber.e(it, "installation Id couldn't be found.") } + } + + private fun saveToken(id: String, pushToken: String) { + Timber.d("Id: %s, Token: %s", id, pushToken) val map = HashMap() map["date"] = dateTimeProvider.now().toString() - map["push_token"] = token + map["push_token"] = pushToken map["android_os"] = Build.VERSION.RELEASE map["manufacturer"] = Build.BRAND map["model"] = Build.MODEL From 0130cf5807f2bec3724aded1a8f038a2a98e350d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 1 May 2021 12:01:39 +0200 Subject: [PATCH 032/621] Reduce duplicate modules, remove todos (#507) --- .../com/jraska/github/client/TestUITestApp.kt | 4 ++-- .../github/client/http/ReplayHttpModule.kt | 16 -------------- .../com/jraska/github/client/http/HttpTest.kt | 21 ++++++++++--------- .../jraska/github/client/http/HttpModule.kt | 2 +- .../repo/model/GitHubApiRepoRepositoryTest.kt | 2 +- .../client/users/test/TestUsersComponent.kt | 9 +------- .../model/GitHubApiUsersRepositoryTest.kt | 2 +- 7 files changed, 17 insertions(+), 39 deletions(-) delete mode 100644 app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index 923151fa..d1e9e0ec 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.test.platform.app.InstrumentationRegistry import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.ServiceModel -import com.jraska.github.client.http.ReplayHttpModule +import com.jraska.github.client.http.FakeHttpModule import com.jraska.github.client.users.test.DeepLinkRecordingComponent import com.jraska.github.client.users.test.FakeDeepLinkRecordingModule import dagger.BindsInstance @@ -36,7 +36,7 @@ class TestUITestApp : BaseApp() { modules = [ SharedModules::class, FakeCoreModule::class, - ReplayHttpModule::class, + FakeHttpModule::class, FakeDeepLinkRecordingModule::class ] ) diff --git a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt b/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt deleted file mode 100644 index 35111823..00000000 --- a/app/src/androidTest/java/com/jraska/github/client/http/ReplayHttpModule.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.jraska.github.client.http - -import dagger.Module -import dagger.Provides -import retrofit2.Retrofit - -@Module -object ReplayHttpModule { - - private val retrofit by lazy { HttpTest.retrofit() } - - @Provides - fun retrofit(): Retrofit { - return retrofit - } -} diff --git a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt index 4908705d..10e6005e 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt @@ -1,6 +1,5 @@ package com.jraska.github.client.http -import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.Interceptor import okhttp3.OkHttpClient @@ -17,20 +16,22 @@ import java.io.File object HttpTest { private val DEFAULT_BASE_URL = "https://api.github.com".toHttpUrl() - fun retrofit(baseUrl: HttpUrl = DEFAULT_BASE_URL): Retrofit { + fun retrofit(mockWebServer: MockWebServer? = null): Retrofit { return Retrofit.Builder() - .baseUrl(baseUrl) - .client( - OkHttpClient.Builder() - .also { if (baseUrl == DEFAULT_BASE_URL) it.addInterceptor(MockWebServerInterceptor) } // TODO: 30/4/21 Hack - unification of network mocking needed - .addInterceptor(HttpLoggingInterceptor { println(it) }.apply { - level = HttpLoggingInterceptor.Level.BASIC - }).build() - ) + .baseUrl(mockWebServer?.url("/") ?: DEFAULT_BASE_URL) + .client(client(mockWebServer)) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() } + + private fun client(mockWebServer: MockWebServer?): OkHttpClient { + return OkHttpClient.Builder() + .also { if (mockWebServer == null) it.addInterceptor(MockWebServerInterceptor) } + .addInterceptor(HttpLoggingInterceptor { println(it) }.apply { + level = HttpLoggingInterceptor.Level.BASIC + }).build() + } } fun MockWebServer.enqueue(path: String) { diff --git a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt index 4bc7de42..c6d91a9c 100644 --- a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt +++ b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt @@ -17,7 +17,7 @@ import java.io.File import javax.inject.Singleton @Module -class HttpModule { +object HttpModule { @Provides @Singleton fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit { diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt index 3fb1a6a6..cd0e6f1c 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt @@ -28,7 +28,7 @@ internal class GitHubApiRepoRepositoryTest { assertThat(repoDetail).usingRecursiveComparison().isEqualTo(expectedRepoDetail()) } - private fun repoGitHubApi() = HttpTest.retrofit(mockWebServer.url("/")).create(RepoGitHubApi::class.java) + private fun repoGitHubApi() = HttpTest.retrofit(mockWebServer).create(RepoGitHubApi::class.java) companion object { fun expectedRepoDetail(): RepoDetail { diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt index f55f40a1..9553639c 100644 --- a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt @@ -6,6 +6,7 @@ import com.jraska.github.client.FakeWebLinkModule import com.jraska.github.client.android.test.FakeAndroidCoreModule import com.jraska.github.client.core.android.AppBaseComponent import com.jraska.github.client.core.android.CoreAndroidModule +import com.jraska.github.client.http.FakeHttpModule import com.jraska.github.client.http.HttpTest import com.jraska.github.client.users.UsersModule import dagger.BindsInstance @@ -32,11 +33,3 @@ interface TestUsersComponent : AppBaseComponent, DeepLinkRecordingComponent { fun create(@BindsInstance context: Context): TestUsersComponent } } - -// TODO: 21/04/2021 Unify the network mocking with app to have only one fake http module -@Module -class FakeHttpModule { - @Provides - @Singleton - fun provideRetrofit() = HttpTest.retrofit() -} diff --git a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt index 07865217..e023af7f 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt @@ -22,7 +22,7 @@ class GitHubApiUsersRepositoryTest { @Before fun setUp() { - repository = GitHubApiUsersRepository(HttpTest.retrofit(mockWebServer.url("/")).create(GitHubUsersApi::class.java), Fakes.trampoline()) + repository = GitHubApiUsersRepository(HttpTest.retrofit(mockWebServer).create(GitHubUsersApi::class.java), Fakes.trampoline()) } @Test From 606da6df9488077aadd4dfae91b493ece3548f42 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 1 May 2021 12:21:26 +0200 Subject: [PATCH 033/621] Update README with testing updates (#508) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c91d6d14..f08e458d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # github-client Experimental architecture app with example usage intended to be a showcase, test and skeleton app. -Screenshot 2021-01-25 at 23 16 04 +Module graph # Topics demonstrated - If you are interested in any of these topics, feel free to reach out by creating an issue or [contact me on Twitter](https://twitter.com/josef_raska) - I'm happy to chat, exchange opinions or development stories. @@ -15,10 +15,10 @@ Experimental architecture app with example usage intended to be a showcase, test - Plugin based composition of features and modules contributing to collection of "plugins" - see: `OnAppCreate`, or `LinkLauncher` ## Testing -- UI Instrumentation testing using Espresso and mocking network layer to achieve isolation [OkReplay](https://github.com/airbnb/okreplay) See `ReplayHttpComponent` +- UI Instrumentation testing using Espresso and mocking network layer with `okhttp3.MockWebServer` to achieve isolation. See [UsersActivityFlowTest](https://github.com/jraska/github-client/blob/master/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt) or [DeepLinkLaunchTest](https://github.com/jraska/github-client/blob/master/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt) - Tests are run on Firebase Test Lab. [See PR](https://github.com/jraska/github-client/pull/233) - UI tests on Firebase Test Lab results reporting to Mixpanel - see [this PR](https://github.com/jraska/github-client/pull/342). -- Instrumented tests can live in modules for fast local iteration - see [this PR](https://github.com/jraska/github-client/pull/477) +- Instrumented tests can live in modules for fast local iteration - see [this PR](https://github.com/jraska/github-client/pull/477) or this [issue track](https://github.com/jraska/github-client/issues/436). - Uses [LiveData-Testing](https://github.com/jraska/livedata-testing) to test ViewModel. [Article](https://android.jlelse.eu/effective-livedata-and-viewmodel-testing-17f25069fcd4) - ViewModels are tested with real dependencies, faking only network code and therefore simulating the real usage, increasing the confiidence in tests - [Example](https://github.com/jraska/github-client/pull/467/files#diff-7ef3a06920375e0c0ccd785bc53f127aa8700f6f76171f784e0ddcf9dcde7634), [Related article on philosophy](https://kentcdodds.com/blog/write-tests). They are fast as they run on JVM. - Respositories tests are implemented similar like ViewModels tests - using real dependnecies and faking network requests only - [Example](https://github.com/jraska/github-client/blob/master/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt) From 978cbaa48e5bd2d0f9bc780c303c2df30a03ffb6 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 2 May 2021 19:37:29 +0200 Subject: [PATCH 034/621] Report config values to crashlytics (#509) * Report Config values to Crashlytics * Add test crash button * Remove useless condition * Try to tweak order * Move Crahs model to the bottom * Make the crash label and not a button * Make the crash label and not a button * Try to remove the crash item * emove the crash option * Remove extra empty spaces --- .../jraska/github/client/FirebaseConfigProxy.kt | 17 +++++++++++++++-- .../com/jraska/github/client/GitHubClientApp.kt | 6 ------ .../java/com/jraska/github/client/Config.kt | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt b/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt index 8edbecc6..627a9da5 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt +++ b/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt @@ -1,6 +1,7 @@ package com.jraska.github.client import com.google.android.gms.tasks.OnCompleteListener +import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.remoteconfig.FirebaseRemoteConfig import timber.log.Timber import java.util.Date @@ -8,8 +9,11 @@ import java.util.Date internal class FirebaseConfigProxy(private val config: FirebaseRemoteConfig) : Config { private val onFetchCompleteListener: OnCompleteListener = OnCompleteListener { config.activate() - Timber.d("Config fetch complete. last fetch: %s", - Date(config.info.fetchTimeMillis)) + Timber.d( + "Config fetch complete. last fetch: %s", + Date(config.info.fetchTimeMillis) + ) + configsToCrashlytics() } override fun getBoolean(key: Config.Key): Boolean { @@ -38,6 +42,15 @@ internal class FirebaseConfigProxy(private val config: FirebaseRemoteConfig) : C return this } + private fun configsToCrashlytics() { + config.getKeysByPrefix("") + .map { it to config.getValue(it).asString() } + .also { Timber.v("Setting Crashlytics properties from config: %s", it) } + .forEach { + FirebaseCrashlytics.getInstance().setCustomKey(it.first, it.second) + } + } + companion object { private const val TWELVE_HOURS = (12 * 60 * 60).toLong() private const val IGNORE_CACHE: Long = 1 // don't ever put zero! That is ignored and cache is used diff --git a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt index 484304f0..b40aa0b1 100644 --- a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt +++ b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt @@ -1,6 +1,5 @@ package com.jraska.github.client -import com.google.firebase.perf.metrics.AddTrace import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.HasServiceModelFactory import com.jraska.github.client.core.android.HasViewModelFactory @@ -9,11 +8,6 @@ open class GitHubClientApp : BaseApp(), HasViewModelFactory, HasServiceModelFact override val appComponent: AppComponent by lazy { createAppComponent() } - @AddTrace(name = "App.onCreate") - override fun onCreate() { - super.onCreate() - } - open fun createAppComponent(): AppComponent { return DaggerAppComponent.factory().create(this) } diff --git a/core-api/src/main/java/com/jraska/github/client/Config.kt b/core-api/src/main/java/com/jraska/github/client/Config.kt index 84a43ea6..d70588a1 100644 --- a/core-api/src/main/java/com/jraska/github/client/Config.kt +++ b/core-api/src/main/java/com/jraska/github/client/Config.kt @@ -1,14 +1,14 @@ package com.jraska.github.client interface Config { - fun triggerRefresh() - fun getBoolean(key: Key): Boolean fun getLong(key: Key): Long fun getString(key: Key): String + fun triggerRefresh() + class Key(val name: String, val owner: Owner) interface Decoration { From 4ceb68a85992b5f6ec39c716f271fcca354d4ee1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 2 May 2021 17:56:23 +0000 Subject: [PATCH 035/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 06305019..05551b89 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.29.0' - versionCode 105 + versionName '0.29.1' + versionCode 106 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From dbec22a4869c8a4cca2b379b800c10dc4bea9c48 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 2 May 2021 20:19:17 +0200 Subject: [PATCH 036/621] Sync Gradle version to be 7.0-bin (#510) --- plugins/gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index 14e30f74..f371643e 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From d4100c3b48f3baa7727b242dc1524140ff58345d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 2 May 2021 23:26:46 +0200 Subject: [PATCH 037/621] Add inappmessaging (#511) --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 05551b89..ea140b29 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -124,6 +124,7 @@ dependencies { implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-messaging' + implementation 'com.google.firebase:firebase-inappmessaging-display' implementation 'com.google.firebase:firebase-database' implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' From f69ba7753738b19dfeddc2db9f23d9fd3cebfd62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 2 May 2021 21:32:52 +0000 Subject: [PATCH 038/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ea140b29..ed32343d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.29.1' - versionCode 106 + versionName '0.29.2' + versionCode 107 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 18817a6cdca1200561e5b64d090b16aa392f6194 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 11:28:13 +0200 Subject: [PATCH 039/621] Bump media from 1.3.0 to 1.3.1 (#513) Bumps media from 1.3.0 to 1.3.1. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ed32343d..80c5170e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.3.2' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.media:media:1.3.0' + implementation 'androidx.media:media:1.3.1' implementation platform('com.google.firebase:firebase-bom:27.1.0') implementation 'com.google.firebase:firebase-core' From bdc820b66ac8b713602b6c46947a0d1553aaffcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 May 2021 18:42:13 +0000 Subject: [PATCH 040/621] Bump gradle from 4.1.3 to 4.2.0 (#512) * Bump gradle from 4.1.3 to 4.2.0 Bumps gradle from 4.1.3 to 4.2.0. Signed-off-by: dependabot[bot] * Update TripleT plugin to match the AGP changes Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- build.gradle | 2 +- core-testing/build.gradle | 17 ++++++++++++++--- core-testing/src/main/AndroidManifest.xml | 1 + .../main/java/com/jraska/github/client/Fakes.kt | 4 ---- feature/identity/build.gradle | 1 - .../identity/internal/SessionIdProviderTest.kt | 4 +--- .../identity/internal}/TestTimeProvider.kt | 2 +- 8 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 core-testing/src/main/AndroidManifest.xml rename {core-testing/src/main/java/com/jraska/github/client => feature/identity/src/test/java/com/jraska/github/client/identity/internal}/TestTimeProvider.kt (90%) diff --git a/app/build.gradle b/app/build.gradle index 80c5170e..f49702bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,6 @@ plugins { id "com.jraska.module.graph.assertion" version "1.4.0" - id "com.github.triplet.play" version "3.0.0" + id "com.github.triplet.play" version "3.4.0-agp4.2" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' id 'com.jraska.github.client.release' diff --git a/build.gradle b/build.gradle index e063c853..ba22014b 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.3' + classpath 'com.android.tools.build:gradle:4.2.0' classpath('com.google.firebase:firebase-plugins:2.0.0') { exclude group: 'com.google.api-client', module: 'google-api-client' // conflicts with com.github.triplet.play } diff --git a/core-testing/build.gradle b/core-testing/build.gradle index b00c0494..379655e9 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -1,8 +1,19 @@ -apply plugin: 'java-library' -apply plugin: 'com.android.lint' -apply plugin: 'kotlin' +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +android { + compileSdkVersion 30 + defaultConfig { + minSdkVersion 24 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + dependencies { implementation project(':core-api') implementation project(':navigation-api') diff --git a/core-testing/src/main/AndroidManifest.xml b/core-testing/src/main/AndroidManifest.xml new file mode 100644 index 00000000..0cbea14d --- /dev/null +++ b/core-testing/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt index b976d066..7715f438 100644 --- a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt +++ b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt @@ -18,10 +18,6 @@ object Fakes { return RecordingEventAnalytics() } - fun testTimeProvider(elapsed: Long = 0): TestTimeProvider { - return TestTimeProvider(elapsed) - } - fun trampoline(): AppSchedulers { return AppSchedulers(Schedulers.trampoline(), Schedulers.trampoline(), Schedulers.trampoline()) } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index 60178a1e..b843d97c 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -14,6 +14,5 @@ dependencies { implementation rootProject.ext.dagger testImplementation 'junit:junit:4.13.2' - testImplementation project(':core-testing') testImplementation 'org.assertj:assertj-core:3.19.0' } diff --git a/feature/identity/src/test/java/com/jraska/github/client/identity/internal/SessionIdProviderTest.kt b/feature/identity/src/test/java/com/jraska/github/client/identity/internal/SessionIdProviderTest.kt index 1df1e763..1616a59b 100644 --- a/feature/identity/src/test/java/com/jraska/github/client/identity/internal/SessionIdProviderTest.kt +++ b/feature/identity/src/test/java/com/jraska/github/client/identity/internal/SessionIdProviderTest.kt @@ -1,7 +1,5 @@ package com.jraska.github.client.identity.internal -import com.jraska.github.client.Fakes -import com.jraska.github.client.TestTimeProvider import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -12,7 +10,7 @@ class SessionIdProviderTest { @Before fun setUp() { - timeProvider = Fakes.testTimeProvider() + timeProvider = TestTimeProvider() sessionIdProvider = SessionIdProvider(timeProvider) } diff --git a/core-testing/src/main/java/com/jraska/github/client/TestTimeProvider.kt b/feature/identity/src/test/java/com/jraska/github/client/identity/internal/TestTimeProvider.kt similarity index 90% rename from core-testing/src/main/java/com/jraska/github/client/TestTimeProvider.kt rename to feature/identity/src/test/java/com/jraska/github/client/identity/internal/TestTimeProvider.kt index 7ace57ae..3d6ea0c3 100644 --- a/core-testing/src/main/java/com/jraska/github/client/TestTimeProvider.kt +++ b/feature/identity/src/test/java/com/jraska/github/client/identity/internal/TestTimeProvider.kt @@ -1,4 +1,4 @@ -package com.jraska.github.client +package com.jraska.github.client.identity.internal import com.jraska.github.client.time.TimeProvider From 831a8cd51d13813adb74ad7f1a36cef13fb78b91 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 12 May 2021 18:59:39 +0000 Subject: [PATCH 041/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f49702bb..054fadb4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.29.2' - versionCode 107 + versionName '0.29.3' + versionCode 108 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From da42c89b0f4a1b35b4a323412d7186a4597e2eda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 13:55:10 +0100 Subject: [PATCH 042/621] Bump epoxy from 4.5.0 to 4.6.1 (#515) Bumps [epoxy](https://github.com/airbnb/epoxy) from 4.5.0 to 4.6.1. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.5.0...4.6.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 658fc80a..87343171 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/app/build.gradle b/app/build.gradle index 054fadb4..417c2d49 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -131,7 +131,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 490d01ce..68f262ce 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.0' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 4cd7d32d..94d32436 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 76a172b5..b7418df6 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 27278084..6b989f82 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.google.android.material:material:1.3.0' - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' implementation 'com.jraska:console:1.1.0' implementation 'com.jraska:console-timber-tree:1.1.0' implementation rootProject.ext.okHttp diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index ce4267f1..33524ced 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -20,5 +20,5 @@ android { dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 2b2f1b44..92ce81f1 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' - implementation 'com.airbnb.android:epoxy:4.5.0' + implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' From 5f53248576bdc1ef8b770b320a1fd5cf95fad701 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 13:55:27 +0100 Subject: [PATCH 043/621] Bump firebase-bom from 27.1.0 to 28.0.1 (#516) Bumps firebase-bom from 27.1.0 to 28.0.1. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 417c2d49..848456e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' - implementation platform('com.google.firebase:firebase-bom:27.1.0') + implementation platform('com.google.firebase:firebase-bom:28.0.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 2b581acf..4d84c251 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:27.1.0') + implementation platform('com.google.firebase:firebase-bom:28.0.1') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 05650db61e4fb26a8393d844324a47c96ef76746 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 15:43:49 +0200 Subject: [PATCH 044/621] Bump firebase-crashlytics-gradle from 2.5.2 to 2.6.1 (#517) Bumps firebase-crashlytics-gradle from 2.5.2 to 2.6.1. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ba22014b..82eb0ce9 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { classpath('com.google.firebase:firebase-plugins:2.0.0') { exclude group: 'com.google.api-client', module: 'google-api-client' // conflicts with com.github.triplet.play } - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.5' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From 2527ee72a6bb8a54f85430257c70844f22eb7a73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 15:55:26 +0200 Subject: [PATCH 045/621] Bump gradle from 4.2.0 to 4.2.1 (#518) Bumps gradle from 4.2.0 to 4.2.1. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 82eb0ce9..2d6086f1 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.0' + classpath 'com.android.tools.build:gradle:4.2.1' classpath('com.google.firebase:firebase-plugins:2.0.0') { exclude group: 'com.google.api-client', module: 'google-api-client' // conflicts with com.github.triplet.play } From cf7cd6ce6f7b1b1e01a7c97cd056463f62eb3fba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 15:55:36 +0200 Subject: [PATCH 046/621] Bump google-services from 4.3.5 to 4.3.8 (#514) Bumps google-services from 4.3.5 to 4.3.8. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2d6086f1..9ada6f22 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { exclude group: 'com.google.api-client', module: 'google-api-client' // conflicts with com.github.triplet.play } classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' - classpath 'com.google.gms:google-services:4.3.5' + classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } From 2891733a25e0d3da4c1f8939a7645fa2908b6a24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 16:32:11 +0200 Subject: [PATCH 047/621] Bump mockito-core from 3.8.0 to 3.10.0 (#519) Bumps [mockito-core](https://github.com/mockito/mockito) from 3.8.0 to 3.10.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.8.0...v3.10.0) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 848456e1..ff94b1b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,7 +147,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'javax.inject:javax.inject:1' - testImplementation 'org.mockito:mockito-core:3.8.0' + testImplementation 'org.mockito:mockito-core:3.10.0' testImplementation 'org.threeten:threetenbp:1.5.1' // to fix failures with three ten db androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/core/build.gradle b/core/build.gradle index cc0075c2..3553bbea 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -46,5 +46,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.19.0' - testImplementation 'org.mockito:mockito-core:3.8.0' + testImplementation 'org.mockito:mockito-core:3.10.0' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 68f262ce..4b850439 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -35,7 +35,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'org.mockito:mockito-core:3.8.0' + testImplementation 'org.mockito:mockito-core:3.10.0' testImplementation project(':core-testing') androidTestImplementation 'junit:junit:4.13.2' From f1abfb73d1717e90205afe6daf9f69ed8e33ebaf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 17 May 2021 22:32:34 +0000 Subject: [PATCH 048/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ff94b1b0..60332d3e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.29.3' - versionCode 108 + versionName '0.29.4' + versionCode 109 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 1684c4d4eaf2dfd7c641b86b2e7346b87f3d7043 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 10:10:02 +0100 Subject: [PATCH 049/621] Bump core from 1.3.2 to 1.5.0 (#520) Bumps core from 1.3.2 to 1.5.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 60332d3e..4271165c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,7 +114,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.core:core:1.3.2' + implementation 'androidx.core:core:1.5.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' From 8190eb48bf276a3968c07ec74b460fbe8adb072c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 May 2021 10:10:14 +0100 Subject: [PATCH 050/621] Bump appcompat from 1.2.0 to 1.3.0 (#521) Bumps appcompat from 1.2.0 to 1.3.0. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 87343171..41c59348 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/build.gradle b/app/build.gradle index 4271165c..4a2bf6de 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -110,7 +110,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 38fa1b5d..570967a8 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' diff --git a/core/build.gradle b/core/build.gradle index 3553bbea..6c519386 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index fc654ae7..3f0c9bd5 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.0' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger From 9e9dd2b5d838240cb5b0dc0e40bd2db57b1bb1ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 24 May 2021 09:46:40 +0000 Subject: [PATCH 051/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4a2bf6de..e8f84c43 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.29.4' - versionCode 109 + versionName '0.30.0' + versionCode 110 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 4ba6a644a465e7196157e337fdacccc0199fecb8 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 26 May 2021 01:44:02 +0100 Subject: [PATCH 052/621] Update to livedata-testing 1.2.0 (#522) --- build.gradle | 8 +++----- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 3 +-- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 9ada6f22..24829e17 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,7 @@ buildscript { ext.kotlin_version = '1.5.0' repositories { google() - maven { url 'https://maven.fabric.io/public' } - maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } - maven { url "https://plugins.gradle.org/m2/" } - jcenter() + mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.2.1' @@ -21,7 +18,8 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() + jcenter() // Fresco https://github.com/facebook/fresco/issues/2585 } } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index b7418df6..baf6d59b 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -46,6 +46,6 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.18.1' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'com.jraska.livedata:testing-ktx:1.1.2' + testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' kaptTest rootProject.ext.daggerAnnotationProcessor } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 92ce81f1..eece24cb 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -44,8 +44,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-reactivestreams-ktx:2.3.1' - testImplementation 'com.jraska.livedata:testing:1.1.2' - testImplementation 'com.jraska.livedata:testing-ktx:1.1.2' + testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.19.0' testImplementation 'androidx.arch.core:core-testing:2.1.0' From d314b3885603aeb0252f22b3661d1a2a94866bcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 12:50:05 +0200 Subject: [PATCH 053/621] Bump kotlin_version from 1.5.0 to 1.5.10 (#523) Bumps `kotlin_version` from 1.5.0 to 1.5.10. Updates `kotlin-gradle-plugin` from 1.5.0 to 1.5.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.0...v1.5.10) Updates `kotlin-stdlib` from 1.5.0 to 1.5.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.0...v1.5.10) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 24829e17..1260ce77 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.0' + ext.kotlin_version = '1.5.10' repositories { google() mavenCentral() From f790d85dd858d6266d3f1938fccab1707f2dfe18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 12:50:22 +0200 Subject: [PATCH 054/621] Bump gson from 2.8.6 to 2.8.7 (#525) Bumps [gson](https://github.com/google/gson) from 2.8.6 to 2.8.7. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.8.6...gson-parent-2.8.7) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e8f84c43..f350df86 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -143,7 +143,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:4.7.1' - implementation 'com.google.code.gson:gson:2.8.6' + implementation 'com.google.code.gson:gson:2.8.7' testImplementation 'junit:junit:4.13.2' testImplementation 'javax.inject:javax.inject:1' diff --git a/core/build.gradle b/core/build.gradle index 6c519386..da39d61c 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.6' + implementation 'com.google.code.gson:gson:2.8.7' implementation rootProject.ext.okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index baf6d59b..330d7ac6 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.6' + implementation 'com.google.code.gson:gson:2.8.7' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index eece24cb..c2d9b949 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.6' + implementation 'com.google.code.gson:gson:2.8.7' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From 89d38f660036b0ddec5645d300fc21b82b981d85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 11:00:48 +0000 Subject: [PATCH 055/621] Bump daggerVersion from 2.35 to 2.36 (#524) Bumps `daggerVersion` from 2.35 to 2.36. Updates `dagger-compiler` from 2.35 to 2.36 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.35...dagger-2.36) Updates `dagger` from 2.35 to 2.36 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.35...dagger-2.36) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index f575e98c..a5abd2cb 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.35' + daggerVersion = '2.36' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From e4e827810d4846020f964aa197b88644dc527382 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 31 May 2021 15:17:07 +0000 Subject: [PATCH 056/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f350df86..aa54d209 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,8 +24,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.30.0' - versionCode 110 + versionName '0.31.0' + versionCode 111 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From dd0715e4229b830fed05f901c6c1a47931bf258d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 31 May 2021 23:52:03 +0100 Subject: [PATCH 057/621] Remove obsolete files (#526) * Recording obsolete OkReplay file * Remove butterknife rules * Remove lint.xml to check if it is still needed --- app/Recording_with_OkReplay.patch | 25 ------------------------- app/lint.xml | 11 ----------- 2 files changed, 36 deletions(-) delete mode 100644 app/Recording_with_OkReplay.patch delete mode 100644 app/lint.xml diff --git a/app/Recording_with_OkReplay.patch b/app/Recording_with_OkReplay.patch deleted file mode 100644 index 722dc8c9..00000000 --- a/app/Recording_with_OkReplay.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: client/src/androidTest/java/com/jraska/github/client/http/ReplayHttpComponent.kt -IDEA additional info: -Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP -<+>UTF-8 -=================================================================== ---- client/src/androidTest/java/com/jraska/github/client/http/ReplayHttpComponent.kt (revision Local Version) -+++ client/src/androidTest/java/com/jraska/github/client/http/ReplayHttpComponent.kt (revision Shelved Version) -@@ -50,7 +50,7 @@ - - val configuration = OkReplayConfig.Builder() - .tapeRoot(AndroidTapeRoot(InstrumentationRegistry.getContext(), testClass)) -- .defaultMode(TapeMode.READ_ONLY) -+ .defaultMode(TapeMode.READ_WRITE) - .sslEnabled(true) - .interceptor(REPLAY_INTERCEPTOR) - .build(); -@@ -72,7 +72,7 @@ - return OkHttpClient.Builder() - .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC)) - .addInterceptor(REPLAY_INTERCEPTOR) -- .addNetworkInterceptor() { _ -> throw UnsupportedOperationException(NETWORK_ERROR_MESSAGE) } -+// .addNetworkInterceptor() { _ -> throw UnsupportedOperationException(NETWORK_ERROR_MESSAGE) } - .build() - } - diff --git a/app/lint.xml b/app/lint.xml deleted file mode 100644 index cc2cd3f0..00000000 --- a/app/lint.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - From 6927dd4164b43db31b8f1226ddda524ddf6b183f Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 3 Jun 2021 00:40:01 +0100 Subject: [PATCH 058/621] Always enable Firebase performance on CI (#528) --- app/build.gradle | 3 ++- build.gradle | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index aa54d209..30a655b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,8 @@ plugins { apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' -if (project.hasProperty("enable-performance-plugin")) { +if (System.getenv("CI") == "true") { + println("Applying 'com.google.firebase.firebase-perf'") apply plugin: 'com.google.firebase.firebase-perf' } diff --git a/build.gradle b/build.gradle index 1260ce77..dd55e817 100644 --- a/build.gradle +++ b/build.gradle @@ -6,9 +6,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.2.1' - classpath('com.google.firebase:firebase-plugins:2.0.0') { - exclude group: 'com.google.api-client', module: 'google-api-client' // conflicts with com.github.triplet.play - } + classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" From 2f75a127b8fc328f2331e853cd06ec1d83ad489a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 2 Jun 2021 23:54:16 +0000 Subject: [PATCH 059/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 30a655b5..61becb2e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.0' - versionCode 111 + versionName '0.31.1' + versionCode 112 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 0894e283bd9306129eb69927c4757718ae92d6cb Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 3 Jun 2021 09:55:29 +0100 Subject: [PATCH 060/621] Add onCreate traces (#529) --- .../main/java/com/jraska/github/client/GitHubClientApp.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt index b40aa0b1..22c5bf5d 100644 --- a/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt +++ b/app/src/main/java/com/jraska/github/client/GitHubClientApp.kt @@ -1,5 +1,6 @@ package com.jraska.github.client +import com.google.firebase.perf.metrics.AddTrace import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.HasServiceModelFactory import com.jraska.github.client.core.android.HasViewModelFactory @@ -11,4 +12,9 @@ open class GitHubClientApp : BaseApp(), HasViewModelFactory, HasServiceModelFact open fun createAppComponent(): AppComponent { return DaggerAppComponent.factory().create(this) } + + @AddTrace(name = "GitHubClientApp.onCreate") + override fun onCreate() { + super.onCreate() + } } From 20799aef25967ac28d8f4a47223c508d7642be5e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 3 Jun 2021 10:38:20 +0000 Subject: [PATCH 061/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 61becb2e..d655239a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.1' - versionCode 112 + versionName '0.31.2' + versionCode 113 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From be6513d0ee5c7063ae142ac6731c68a501437f7a Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 5 Jun 2021 00:55:34 +0200 Subject: [PATCH 062/621] Update Console to 1.2.0 (#530) --- feature/settings/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 6b989f82..5e09ed08 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -24,8 +24,8 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'com.airbnb.android:epoxy:4.6.1' - implementation 'com.jraska:console:1.1.0' - implementation 'com.jraska:console-timber-tree:1.1.0' + implementation 'com.jraska:console:1.2.0' + implementation 'com.jraska:console-timber-tree:1.2.0' implementation rootProject.ext.okHttp implementation rootProject.ext.dagger From 8a0e055ea9812d0e954687957419afce6b0b9462 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 5 Jun 2021 03:08:26 +0200 Subject: [PATCH 063/621] Update README.md (#531) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f08e458d..8b04b194 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Experimental architecture app with example usage intended to be a showcase, test - Instrumented tests can live in modules for fast local iteration - see [this PR](https://github.com/jraska/github-client/pull/477) or this [issue track](https://github.com/jraska/github-client/issues/436). - Uses [LiveData-Testing](https://github.com/jraska/livedata-testing) to test ViewModel. [Article](https://android.jlelse.eu/effective-livedata-and-viewmodel-testing-17f25069fcd4) - ViewModels are tested with real dependencies, faking only network code and therefore simulating the real usage, increasing the confiidence in tests - [Example](https://github.com/jraska/github-client/pull/467/files#diff-7ef3a06920375e0c0ccd785bc53f127aa8700f6f76171f784e0ddcf9dcde7634), [Related article on philosophy](https://kentcdodds.com/blog/write-tests). They are fast as they run on JVM. -- Respositories tests are implemented similar like ViewModels tests - using real dependnecies and faking network requests only - [Example](https://github.com/jraska/github-client/blob/master/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt) +- Repository tests are implemented similar like ViewModels tests - using real dependnecies and faking network requests only - [Example](https://github.com/jraska/github-client/blob/master/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt) - Push integration is tested end to end through UI test - see [this PR](https://github.com/jraska/github-client/pull/300). ## Release & CI From 6c2e34475b762bfac45e3408f20e4eaf5fe92498 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 6 Jun 2021 16:11:27 +0200 Subject: [PATCH 064/621] Do not create always new Adapter to keep scroll position (#532) --- .../java/com/jraska/github/client/users/ui/UsersActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt index 7dd2f3cc..186d0aca 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt @@ -76,7 +76,9 @@ class UsersActivity : BaseActivity(), UserModel.UserListener { } private fun setUsers(users: List) { - val adapter = SimpleEpoxyAdapter() + val adapter = usersRecycler.adapter as SimpleEpoxyAdapter? ?: SimpleEpoxyAdapter() + adapter.removeAllModels() + val models = users.map { user -> UserModel(user, this) } adapter.addModels(models) From f16a87e520a4a739845c057dc42539a3e2eb853c Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 6 Jun 2021 19:14:58 +0200 Subject: [PATCH 065/621] Add OnAppCreateAsyncExecutor to parallelise some startup operations (#533) --- .../github/client/core/android/OnAppCreate.kt | 9 +++++++ .../client/core/android/CoreAndroidModule.kt | 23 +++++++++------- .../core/android/OnAppCreateAsyncExecutor.kt | 27 +++++++++++++++++++ .../client/inappupdate/InAppUpdateModule.kt | 11 ++++---- .../jraska/github/client/users/UsersModule.kt | 17 ++++++++++++ 5 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt diff --git a/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt index 8e53b677..fe496d8c 100644 --- a/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt +++ b/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt @@ -5,3 +5,12 @@ import android.app.Application interface OnAppCreate { fun onCreate(app: Application) } + +/** + * Interface to parallelise startup of time consuming components. + * + * Initialisations which are not necessarily critical and don't have to block should happen here. + */ +interface OnAppCreateAsync { + fun onCreateAsync(app: Application) +} diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index fb5b9fbd..de2447f8 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -26,6 +26,7 @@ import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers +import javax.inject.Provider import javax.inject.Singleton @Module @@ -105,11 +106,11 @@ object CoreAndroidModule { @Provides @IntoSet - fun reportAppCreateEvent(eventAnalytics: EventAnalytics): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) { + fun reportAppCreateEvent(eventAnalytics: Provider): OnAppCreateAsync { + return object : OnAppCreateAsync { + override fun onCreateAsync(app: Application) { val createEvent = AnalyticsEvent.create(AnalyticsEvent.Key("app_create", Owner.CORE_TEAM)) - eventAnalytics.report(createEvent) + eventAnalytics.get().report(createEvent) } } } @@ -119,17 +120,21 @@ object CoreAndroidModule { @Provides @IntoSet - fun setupFresco(): OnAppCreate { + fun setupThreeTen(): OnAppCreate { return object : OnAppCreate { - override fun onCreate(app: Application) = Fresco.initialize(app) + override fun onCreate(app: Application) = AndroidThreeTen.init(app) } } @Provides @IntoSet - fun setupThreeTen(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) = AndroidThreeTen.init(app) + fun setupFresco(): OnAppCreateAsync { + return object : OnAppCreateAsync { + override fun onCreateAsync(app: Application) = Fresco.initialize(app) } } + + @Provides + @IntoSet + fun bindAppAsync(executor: OnAppCreateAsyncExecutor): OnAppCreate = executor } diff --git a/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt new file mode 100644 index 00000000..dac2d3b3 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt @@ -0,0 +1,27 @@ +package com.jraska.github.client.core.android + +import android.app.Application +import com.jraska.github.client.rx.AppSchedulers +import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.internal.functions.Functions +import javax.inject.Inject + +class OnAppCreateAsyncExecutor @Inject constructor( + private val asyncActions: @JvmSuppressWildcards Set, + private val appSchedulers: AppSchedulers +) : OnAppCreate { + override fun onCreate(app: Application) { + asyncActions.forEach { appCreateAsync -> + Completable.fromAction { appCreateAsync.onCreateAsync(app) } + .subscribeOn(appSchedulers.computation) + .subscribe(Functions.EMPTY_ACTION, { crashTheApp(it) }) + } + } + + // From https://github.com/ReactiveX/RxJava/blob/0df952e007814da9f2d4566097676590b977c708/src/main/java/io/reactivex/rxjava3/plugins/RxJavaPlugins.java#L431 + private fun crashTheApp(error: Throwable) { + val currentThread = Thread.currentThread() + val handler = currentThread.uncaughtExceptionHandler!! + handler.uncaughtException(currentThread, error) + } +} diff --git a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt index 42b6f71d..9d430302 100644 --- a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt +++ b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt @@ -5,19 +5,20 @@ import android.content.Context import com.jraska.github.client.config.MutableConfigDef import com.jraska.github.client.config.MutableConfigSetup import com.jraska.github.client.config.MutableConfigType -import com.jraska.github.client.core.android.OnAppCreate +import com.jraska.github.client.core.android.OnAppCreateAsync import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet +import javax.inject.Provider @Module object InAppUpdateModule { @Provides @IntoSet - internal fun checkOnAppCreate(checkScheduler: UpdateCheckScheduler): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) { - checkScheduler.startNonBlockingCheck() + internal fun checkOnAppCreate(checkScheduler: Provider): OnAppCreateAsync { + return object : OnAppCreateAsync { + override fun onCreateAsync(app: Application) { + checkScheduler.get().startNonBlockingCheck() } } } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt index 7037a796..c76fddf3 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt @@ -1,11 +1,13 @@ package com.jraska.github.client.users import android.app.Activity +import android.app.Application import androidx.lifecycle.ViewModel import com.jraska.github.client.config.MutableConfigDef import com.jraska.github.client.config.MutableConfigSetup import com.jraska.github.client.config.MutableConfigType import com.jraska.github.client.core.android.LinkLauncher +import com.jraska.github.client.core.android.OnAppCreateAsync import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.GitHubApiUsersRepository import com.jraska.github.client.users.model.GitHubUsersApi @@ -18,6 +20,7 @@ import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet import okhttp3.HttpUrl import retrofit2.Retrofit +import javax.inject.Provider import javax.inject.Singleton @Module @@ -70,6 +73,20 @@ object UsersModule { } } + /** + * This is an optimisation of the app startup - all features SHOULD NOT do this as it consumes app startup resources. + * This is recommended only for features loaded at the app startup. + */ + @Provides + @IntoSet + internal fun prepareHttpClient(usersRepositoryProvider: Provider): OnAppCreateAsync { + return object : OnAppCreateAsync { + override fun onCreateAsync(app: Application) { + usersRepositoryProvider.get() // setups asynchronously the rest client + } + } + } + @Provides @IntoSet internal fun debugConfigs(): MutableConfigSetup { From e91edd381edd1df8918bd5809ec6a381d2b36c6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 6 Jun 2021 17:23:18 +0000 Subject: [PATCH 066/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d655239a..18a32f2c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.2' - versionCode 113 + versionName '0.31.3' + versionCode 114 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 772979fcefdc081a5ce132ab2d9052a5e22c3e47 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 09:21:00 +0200 Subject: [PATCH 067/621] Bump firebase-crashlytics-gradle from 2.6.1 to 2.7.0 (#535) Bumps firebase-crashlytics-gradle from 2.6.1 to 2.7.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index dd55e817..66edd705 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.2.1' classpath 'com.google.firebase:perf-plugin:1.4.0' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.0' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From f300543ccf631d3201611053f0fd92f849f994e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 09:21:18 +0200 Subject: [PATCH 068/621] Bump recyclerview from 1.2.0 to 1.2.1 (#534) Bumps recyclerview from 1.2.0 to 1.2.1. --- updated-dependencies: - dependency-name: androidx.recyclerview:recyclerview dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 4b850439..71565473 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.3.0' testImplementation 'junit:junit:4.13.2' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 94d32436..e674552f 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 330d7ac6..65dbe068 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.7' implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 5e09ed08..d27ee7ef 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation project(':navigation-api') implementation project(':feature:ui-common-api') - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.3.0' implementation 'com.airbnb.android:epoxy:4.6.1' implementation 'com.jraska:console:1.2.0' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 33524ced..369415d7 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -19,6 +19,6 @@ android { dependencies { implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.1' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index c2d9b949..32e3a8dd 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'androidx.recyclerview:recyclerview:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.1' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' From bc9ebdc90f49bab9dbbc0046510e4ad6d553e3f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 10:14:37 +0200 Subject: [PATCH 069/621] Bump rxjava from 3.0.12 to 3.0.13 (#536) Bumps [rxjava](https://github.com/ReactiveX/RxJava) from 3.0.12 to 3.0.13. - [Release notes](https://github.com/ReactiveX/RxJava/releases) - [Commits](https://github.com/ReactiveX/RxJava/compare/v3.0.12...v3.0.13) --- updated-dependencies: - dependency-name: io.reactivex.rxjava3:rxjava dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core-api/build.gradle b/core-api/build.gradle index 17201d79..abce46be 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'io.reactivex.rxjava3:rxjava:3.0.12' + implementation 'io.reactivex.rxjava3:rxjava:3.0.13' implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 379655e9..cfce9911 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'junit:junit:4.13.2' - implementation 'io.reactivex.rxjava3:rxjava:3.0.12' + implementation 'io.reactivex.rxjava3:rxjava:3.0.13' implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 0854207a..a94dc4e3 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.google.android.play:core:1.10.0' - implementation 'io.reactivex.rxjava3:rxjava:3.0.12' + implementation 'io.reactivex.rxjava3:rxjava:3.0.13' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 22fe6242..84612d3a 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'com.google.android.material:material:1.3.0' - implementation 'io.reactivex.rxjava3:rxjava:3.0.12' + implementation 'io.reactivex.rxjava3:rxjava:3.0.13' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' From 7605da1e752fff8c9d4a1a47d58c2e0630a2ed22 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:56:13 +0200 Subject: [PATCH 070/621] Bump firebase-bom from 28.0.1 to 28.1.0 (#538) Bumps firebase-bom from 28.0.1 to 28.1.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 18a32f2c..0e111f1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.0.1') + implementation platform('com.google.firebase:firebase-bom:28.1.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4d84c251..50cda171 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.0.1') + implementation platform('com.google.firebase:firebase-bom:28.1.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From dbeb12129bfe424e9b7f2daecc61ebb5842def05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:56:25 +0200 Subject: [PATCH 071/621] Bump com.jraska.module.graph.assertion from 1.4.0 to 1.5.1 (#539) Bumps com.jraska.module.graph.assertion from 1.4.0 to 1.5.1. --- updated-dependencies: - dependency-name: com.jraska.module.graph.assertion dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0e111f1e..4c8f2798 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "1.4.0" + id "com.jraska.module.graph.assertion" version "1.5.1" id "com.github.triplet.play" version "3.4.0-agp4.2" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' From bd976260e49cb21de77dc85ff473f7e513307363 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:56:36 +0200 Subject: [PATCH 072/621] Bump mockito-core from 3.10.0 to 3.11.0 (#537) Bumps [mockito-core](https://github.com/mockito/mockito) from 3.10.0 to 3.11.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.10.0...v3.11.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4c8f2798..6928c531 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'javax.inject:javax.inject:1' - testImplementation 'org.mockito:mockito-core:3.10.0' + testImplementation 'org.mockito:mockito-core:3.11.0' testImplementation 'org.threeten:threetenbp:1.5.1' // to fix failures with three ten db androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/core/build.gradle b/core/build.gradle index da39d61c..19aba877 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -46,5 +46,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.19.0' - testImplementation 'org.mockito:mockito-core:3.10.0' + testImplementation 'org.mockito:mockito-core:3.11.0' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 71565473..adc59018 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -35,7 +35,7 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'org.mockito:mockito-core:3.10.0' + testImplementation 'org.mockito:mockito-core:3.11.0' testImplementation project(':core-testing') androidTestImplementation 'junit:junit:4.13.2' From 7cad08354149c67e5191d1e7732ce3ddd8cf1cd6 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:07:59 +0200 Subject: [PATCH 073/621] Make sure we get always up-to-date network state (#540) --- .../networkstatus/internal/NetworkObservable.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt index ff986db1..75ee8d68 100644 --- a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt +++ b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt @@ -5,7 +5,8 @@ import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.subjects.BehaviorSubject +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.subjects.PublishSubject import javax.inject.Inject internal class NetworkObservable @Inject constructor( @@ -16,26 +17,27 @@ internal class NetworkObservable @Inject constructor( } fun connectedObservable(): Observable { - return networkObservable + return networkObservable.startWith(Single.just(isConnected())) + .distinctUntilChanged() } private val connectivityManager get() = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager private fun setupNetworkObservable(): Observable { - val behaviorSubject = BehaviorSubject.createDefault(isConnected()) + val publishSubject = PublishSubject.create() connectivityManager.registerNetworkCallback(allChangesRequest(), object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { - behaviorSubject.onNext(isConnected()) + publishSubject.onNext(isConnected()) } override fun onLost(network: Network) { - behaviorSubject.onNext(isConnected()) + publishSubject.onNext(isConnected()) } }) - return behaviorSubject.distinctUntilChanged() + return publishSubject } private fun allChangesRequest() = NetworkRequest.Builder().build() From c743246eab0374388d996bcc10e498a67f84b770 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 13 Jun 2021 12:23:23 +0200 Subject: [PATCH 074/621] Update Fresco + remove Jcenter (#541) --- build.gradle | 1 - dependencies.gradle | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 66edd705..fec75be7 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,6 @@ allprojects { repositories { google() mavenCentral() - jcenter() // Fresco https://github.com/facebook/fresco/issues/2585 } } diff --git a/dependencies.gradle b/dependencies.gradle index a5abd2cb..88d6d8a6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -13,7 +13,7 @@ ext { okHttpLoggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okHttpVersion" okHttpMockWebServer = "com.squareup.okhttp3:mockwebserver:$okHttpVersion" - frescoVesion = '2.4.0' + frescoVesion = '2.5.0' fresco = "com.facebook.fresco:fresco:$frescoVesion" frescoDrawee = "com.facebook.fresco:drawee:$frescoVesion" } From f84e7a1a9d99f75f8e5d2ef3c0329449fee9b85b Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 13 Jun 2021 14:05:10 +0200 Subject: [PATCH 075/621] Remove deprecated parser (#543) --- plugins/src/main/java/com/jraska/lint/LintXmlParser.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt b/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt index 589c13ed..04397a22 100644 --- a/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt +++ b/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt @@ -3,7 +3,7 @@ package com.jraska.lint import com.jraska.module.ModuleMetadata import groovy.util.Node import groovy.util.NodeList -import groovy.util.XmlParser +import groovy.xml.XmlParser class LintXmlParser( private val moduleMetadata: ModuleMetadata, From 2064517bc662f5e9e4984f517b44060a4d2b9ae7 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 13 Jun 2021 14:06:38 +0200 Subject: [PATCH 076/621] Remove Mockito + plugins update (#542) --- app/build.gradle | 5 ----- core/build.gradle | 5 ++++- .../core/android/TopActivityProviderImplTest.kt | 3 +-- feature/about/build.gradle | 5 ----- plugins/build.gradle | 16 ++++++++-------- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6928c531..5840cfe6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -146,11 +146,6 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.7' - testImplementation 'junit:junit:4.13.2' - testImplementation 'javax.inject:javax.inject:1' - testImplementation 'org.mockito:mockito-core:3.11.0' - testImplementation 'org.threeten:threetenbp:1.5.1' // to fix failures with three ten db - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' diff --git a/core/build.gradle b/core/build.gradle index 19aba877..52403113 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -16,6 +16,10 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } + + testOptions { + unitTests.returnDefaultValues = true + } } dependencies { @@ -46,5 +50,4 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.19.0' - testImplementation 'org.mockito:mockito-core:3.11.0' } diff --git a/core/src/test/java/com/jraska/github/client/core/android/TopActivityProviderImplTest.kt b/core/src/test/java/com/jraska/github/client/core/android/TopActivityProviderImplTest.kt index 57ba27e1..b3b876a2 100644 --- a/core/src/test/java/com/jraska/github/client/core/android/TopActivityProviderImplTest.kt +++ b/core/src/test/java/com/jraska/github/client/core/android/TopActivityProviderImplTest.kt @@ -3,13 +3,12 @@ package com.jraska.github.client.core.android import android.app.Activity import org.assertj.core.api.Assertions.assertThat import org.junit.Test -import org.mockito.Mockito.mock import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit class TopActivityProviderImplTest { - val activity = mock(Activity::class.java) + val activity = Activity() @Test fun handlesMultiThreading() { diff --git a/feature/about/build.gradle b/feature/about/build.gradle index adc59018..6449f720 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -33,11 +33,6 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.3.0' - testImplementation 'junit:junit:4.13.2' - testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'org.mockito:mockito-core:3.11.0' - testImplementation project(':core-testing') - androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' diff --git a/plugins/build.gradle b/plugins/build.gradle index dca7bb7d..d958d87d 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -1,9 +1,9 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10" } } @@ -12,18 +12,18 @@ apply plugin: 'java-gradle-plugin' apply from: '../dependencies.gradle' repositories { - jcenter() + mavenCentral() } dependencies { implementation gradleApi() - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.31" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.10" implementation 'com.mixpanel:mixpanel-java:1.4.4' - implementation project.ext.retrofit - implementation project.ext.retrofitGsonConverter - implementation project.ext.okHttp - implementation project.ext.okHttpLoggingInterceptor + implementation retrofit + implementation retrofitGsonConverter + implementation okHttp + implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.19.0' From 477cd3c909c9584479d9c6855bf51ca3099a149e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 10:02:32 +0200 Subject: [PATCH 077/621] Bump daggerVersion from 2.36 to 2.37 (#545) Bumps `daggerVersion` from 2.36 to 2.37. Updates `dagger-compiler` from 2.36 to 2.37 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.36...dagger-2.37) Updates `dagger` from 2.36 to 2.37 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.36...dagger-2.37) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 88d6d8a6..b4b52a1e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.36' + daggerVersion = '2.37' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From add78e360e791c774c8b3ed98b68eac082b0c7a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Jun 2021 10:02:47 +0200 Subject: [PATCH 078/621] Bump epoxy from 4.6.1 to 4.6.2 (#544) Bumps [epoxy](https://github.com/airbnb/epoxy) from 4.6.1 to 4.6.2. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/4.6.1...4.6.2) --- updated-dependencies: - dependency-name: com.airbnb.android:epoxy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 41c59348..02a715c8 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/app/build.gradle b/app/build.gradle index 5840cfe6..8935dfe9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -132,7 +132,7 @@ dependencies { implementation rootProject.ext.fresco - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 6449f720..3e269cc6 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index e674552f..005a5b69 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 65dbe068..2b947c21 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index d27ee7ef..e739f10a 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.3.0' - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation rootProject.ext.okHttp diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 369415d7..acd3e4af 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -20,5 +20,5 @@ android { dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 32e3a8dd..2f6e1b84 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.1' + implementation 'com.airbnb.android:epoxy:4.6.2' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' From f4d68b1ac9c6d844d7ac0888acfd570902112af6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jun 2021 08:28:36 +0000 Subject: [PATCH 079/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8935dfe9..06cbcc06 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.3' - versionCode 114 + versionName '0.31.4' + versionCode 115 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From e13721b0e80a973dc0600cd3f336969cac44d419 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 14 Jun 2021 11:50:33 +0200 Subject: [PATCH 080/621] Downgrade crashlytics as there is an issue with release (#546) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fec75be7..3eb834d1 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.2.1' classpath 'com.google.firebase:perf-plugin:1.4.0' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From 5358987fc595ea7b87a1154a98a41209d18f7798 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Jun 2021 09:54:01 +0000 Subject: [PATCH 081/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 06cbcc06..2051c9a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.4' - versionCode 115 + versionName '0.31.5' + versionCode 116 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From f441e7e117139867eca8fc09ca4688616ae5b58a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Jun 2021 23:27:03 +0200 Subject: [PATCH 082/621] Bump assertj-core from 3.19.0 to 3.20.2 (#548) Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.19.0 to 3.20.2. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.19.0...assertj-core-3.20.2) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/identity/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2051c9a5..3bf0999a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,7 +149,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' - androidTestImplementation 'org.assertj:assertj-core:3.19.0' + androidTestImplementation 'org.assertj:assertj-core:3.20.2' androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') diff --git a/core/build.gradle b/core/build.gradle index 52403113..48a74065 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,5 +49,5 @@ dependencies { implementation rootProject.ext.okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 3e269cc6..8017a83a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -35,5 +35,5 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - androidTestImplementation 'org.assertj:assertj-core:3.19.0' + androidTestImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 005a5b69..0fe48d22 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -28,5 +28,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index b843d97c..bfbc0450 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -14,5 +14,5 @@ dependencies { implementation rootProject.ext.dagger testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 50cda171..5e41ce87 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -31,5 +31,5 @@ dependencies { implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 2b947c21..ea8ecbc5 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -43,7 +43,7 @@ dependencies { testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.18.1' + testImplementation 'org.assertj:assertj-core:3.20.2' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index e739f10a..d8979263 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -32,5 +32,5 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 2f6e1b84..4f5f40ca 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -46,7 +46,7 @@ dependencies { testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation okHttpMockWebServer testImplementation project(':core-testing') From 38168714c8a2ef63aaa768a146131ff27f986cbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jun 2021 10:49:13 +0200 Subject: [PATCH 083/621] Bump kotlin_version from 1.5.10 to 1.5.20 (#551) Bumps `kotlin_version` from 1.5.10 to 1.5.20. Updates `kotlin-gradle-plugin` from 1.5.10 to 1.5.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.5.20/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.10...v1.5.20) Updates `kotlin-stdlib` from 1.5.10 to 1.5.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.5.20/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.10...v1.5.20) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3eb834d1..0baf2e26 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.10' + ext.kotlin_version = '1.5.20' repositories { google() mavenCentral() From 745a7195ceb12f7c0ae9acd57c010f65564d6912 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jun 2021 10:49:24 +0200 Subject: [PATCH 084/621] Bump firebase-bom from 28.1.0 to 28.2.0 (#550) Bumps firebase-bom from 28.1.0 to 28.2.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3bf0999a..b115e1a5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.1.0') + implementation platform('com.google.firebase:firebase-bom:28.2.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 5e41ce87..1a51328c 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.1.0') + implementation platform('com.google.firebase:firebase-bom:28.2.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 6068a891d7038203259cc95e87f3284b66360aa9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 28 Jun 2021 08:52:36 +0000 Subject: [PATCH 085/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b115e1a5..23694e6b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.5' - versionCode 116 + versionName '0.31.6' + versionCode 117 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 32a5ee8521763a7f1b360365380abbe0e7c1398d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 10 Jul 2021 17:58:08 +0300 Subject: [PATCH 086/621] Bump espresso-core from 3.3.0 to 3.4.0 (#554) Bumps espresso-core from 3.3.0 to 3.4.0. --- updated-dependencies: - dependency-name: androidx.test.espresso:espresso-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/users/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 23694e6b..fe7260c9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -146,7 +146,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.7' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'org.assertj:assertj-core:3.20.2' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 8017a83a..7df444db 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -34,6 +34,6 @@ dependencies { implementation 'com.google.android.material:material:1.3.0' androidTestImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 4f5f40ca..439afb36 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -53,7 +53,7 @@ dependencies { kaptTest rootProject.ext.daggerAnnotationProcessor androidTestImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' From 946e80b48bed1f802c6fb151d6ff4b70259b4638 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 10 Jul 2021 17:58:25 +0300 Subject: [PATCH 087/621] Bump rules from 1.3.0 to 1.4.0 (#552) Bumps rules from 1.3.0 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.test:rules dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/users/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fe7260c9..524a7d04 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test:runner:1.3.0' - androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test:rules:1.4.0' androidTestImplementation 'org.assertj:assertj-core:3.20.2' androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 439afb36..4c2fdb46 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -56,7 +56,7 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' androidTestImplementation 'androidx.test:runner:1.3.0' - androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test:rules:1.4.0' kaptAndroidTest rootProject.ext.daggerAnnotationProcessor androidTestImplementation project(':core-testing') From 631cfdc02551c3886c98a7ea7a6c0ace0cd6d09e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Jul 2021 08:18:02 +0300 Subject: [PATCH 088/621] Bump material from 1.3.0 to 1.4.0 (#553) Bumps [material](https://github.com/material-components/material-components-android) from 1.3.0 to 1.4.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.3.0...1.4.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 02a715c8..c6161ad7 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' diff --git a/app/build.gradle b/app/build.gradle index 524a7d04..15ca69f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,7 +113,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.5.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' diff --git a/core/build.gradle b/core/build.gradle index 48a74065..b3ffb8df 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -40,7 +40,7 @@ dependencies { implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.timber:timber:4.7.1' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 7df444db..46f05ce9 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation rootProject.ext.okHttp implementation rootProject.ext.frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 84612d3a..7e08e75b 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'io.reactivex.rxjava3:rxjava:3.0.13' implementation 'com.jakewharton.timber:timber:4.7.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index ea8ecbc5..857112c1 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation rootProject.ext.retrofitRxJavaAdapter implementation 'com.google.code.gson:gson:2.8.7' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' implementation rootProject.ext.fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index d8979263..b5864543 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':feature:ui-common-api') implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index acd3e4af..6a2dbcc6 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 4c2fdb46..d1c6e110 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation rootProject.ext.retrofitRxJavaAdapter implementation 'com.google.code.gson:gson:2.8.7' - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' From b8fc6433099f309b846592edfcdbf70ccf00bc1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Jul 2021 12:01:18 +0200 Subject: [PATCH 089/621] Bump gradle from 4.2.1 to 4.2.2 (#556) Bumps gradle from 4.2.1 to 4.2.2. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0baf2e26..3ebef493 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:4.2.2' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' From 07b19ee6d5f21b8d8f48328e1abcfdcfffff0846 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 11 Jul 2021 12:01:30 +0200 Subject: [PATCH 090/621] Bump core from 1.5.0 to 1.6.0 (#555) Bumps core from 1.5.0 to 1.6.0. --- updated-dependencies: - dependency-name: androidx.core:core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 15ca69f6..1b856ebf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -115,7 +115,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.core:core:1.5.0' + implementation 'androidx.core:core:1.6.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' From 28f8e1b128802c5c72a5f1340e6dba804389f5a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 11 Jul 2021 17:03:41 +0000 Subject: [PATCH 091/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1b856ebf..84ccaa4f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.31.6' - versionCode 117 + versionName '0.32.0' + versionCode 118 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From d9776eefc20849c388bf859c43d22e7265da66bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 09:40:19 +0200 Subject: [PATCH 092/621] Bump firebase-bom from 28.2.0 to 28.2.1 (#558) Bumps firebase-bom from 28.2.0 to 28.2.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 84ccaa4f..2d54d82f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.2.0') + implementation platform('com.google.firebase:firebase-bom:28.2.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 1a51328c..ac19baae 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.2.0') + implementation platform('com.google.firebase:firebase-bom:28.2.1') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 2861e3efa6cb5484710f77efd259a0c021919c7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jul 2021 09:40:33 +0200 Subject: [PATCH 093/621] Bump runner from 1.3.0 to 1.4.0 (#557) Bumps runner from 1.3.0 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.test:runner dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/users/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2d54d82f..73f94e60 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,7 +147,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.7' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:rules:1.4.0' androidTestImplementation 'org.assertj:assertj-core:3.20.2' androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index d1c6e110..0f553e8b 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -55,7 +55,7 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'org.assertj:assertj-core:3.19.0' - androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:rules:1.4.0' kaptAndroidTest rootProject.ext.daggerAnnotationProcessor From cf13b89ca9fa53e8c59a344e316b7e1896fda375 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 14 Jul 2021 19:54:55 +0200 Subject: [PATCH 094/621] Use only zero for refreshing config (#560) --- .../main/java/com/jraska/github/client/FirebaseConfigProxy.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt b/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt index 627a9da5..6bd119c3 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt +++ b/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt @@ -53,6 +53,6 @@ internal class FirebaseConfigProxy(private val config: FirebaseRemoteConfig) : C companion object { private const val TWELVE_HOURS = (12 * 60 * 60).toLong() - private const val IGNORE_CACHE: Long = 1 // don't ever put zero! That is ignored and cache is used + private const val IGNORE_CACHE: Long = 0 } } From 380024eaca98415624d92dd68324dbcf4a6cb6f2 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Jul 2021 01:33:27 +0200 Subject: [PATCH 095/621] Add a push action to resend a push token (#561) --- .../github/client/push/PushHandleModelImpl.kt | 2 +- .../jraska/github/client/push/PushModule.kt | 7 ++++++- .../client/push/PushTokenSynchronizer.kt | 2 +- .../github/client/push/SendPushTokenCommand.kt | 18 ++++++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 feature/push/src/main/java/com/jraska/github/client/push/SendPushTokenCommand.kt diff --git a/feature/push/src/main/java/com/jraska/github/client/push/PushHandleModelImpl.kt b/feature/push/src/main/java/com/jraska/github/client/push/PushHandleModelImpl.kt index dbab7641..16d004e8 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/PushHandleModelImpl.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/PushHandleModelImpl.kt @@ -19,6 +19,6 @@ internal class PushHandleModelImpl @Inject constructor( override fun onNewToken(token: String) { analytics.onTokenRefresh() - tokenSynchronizer.onTokenRefresh(token) + tokenSynchronizer.synchronizeToken(token) } } diff --git a/feature/push/src/main/java/com/jraska/github/client/push/PushModule.kt b/feature/push/src/main/java/com/jraska/github/client/push/PushModule.kt index efd02452..7d8b7f9e 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/PushModule.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/PushModule.kt @@ -70,11 +70,16 @@ object PushModule { @Binds @IntoMap @StringKey("launch_deep_link") - internal abstract fun deepLinkCommand(command: LaunchDeepLinkCommand): PushActionCommand + internal abstract fun deepLinkCommand(command: LaunchDeepLinkCommand): PushActionCommand @Binds @IntoMap @StringKey("press_back") internal abstract fun pressBackCommand(command: PressBackButtonCommand): PushActionCommand + + @Binds + @IntoMap + @StringKey("send_push_token") + internal abstract fun resendPushToken(command: SendPushTokenCommand): PushActionCommand } } diff --git a/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt b/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt index 85a60510..0676747b 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/PushTokenSynchronizer.kt @@ -13,7 +13,7 @@ internal class PushTokenSynchronizer @Inject constructor( private val dateTimeProvider: DateTimeProvider ) { - fun onTokenRefresh(token: String) { + fun synchronizeToken(token: String) { val installationIdTask = FirebaseInstallations.getInstance().id installationIdTask.addOnSuccessListener { saveToken(it, token) } diff --git a/feature/push/src/main/java/com/jraska/github/client/push/SendPushTokenCommand.kt b/feature/push/src/main/java/com/jraska/github/client/push/SendPushTokenCommand.kt new file mode 100644 index 00000000..ceae3db9 --- /dev/null +++ b/feature/push/src/main/java/com/jraska/github/client/push/SendPushTokenCommand.kt @@ -0,0 +1,18 @@ +package com.jraska.github.client.push + +import com.google.firebase.messaging.FirebaseMessaging +import com.jraska.github.client.common.BooleanResult +import timber.log.Timber +import javax.inject.Inject + +internal class SendPushTokenCommand @Inject constructor( + private val synchronizer: PushTokenSynchronizer +) : PushActionCommand { + override fun execute(action: PushAction): BooleanResult { + FirebaseMessaging.getInstance().token.addOnSuccessListener { + synchronizer.synchronizeToken(it) + }.addOnFailureListener { Timber.e(it, "Error getting push token to send") } + + return BooleanResult.SUCCESS + } +} From 3bb59c8f3fff9563e3dd1915e8f2fa6d8f732a51 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Jul 2021 02:00:30 +0200 Subject: [PATCH 096/621] Filter out not merged PRs to skip marking them with milestone (#562) --- .../jraska/github/client/release/GitHubApi.kt | 2 +- .../github/client/release/ReleaseMarker.kt | 2 +- .../client/release/data/GitHubApiImpl.kt | 3 +- .../client/release/data/RetrofitGitHubApi.kt | 3 + .../client/release/GitHubApiImplTest.kt | 10 + .../test/resources/response/pulls_empty.json | 2 + .../response/pulls_with_not_merged.json | 1037 +++++++++++++++++ 7 files changed, 1056 insertions(+), 3 deletions(-) create mode 100644 plugins/src/test/resources/response/pulls_empty.json create mode 100644 plugins/src/test/resources/response/pulls_with_not_merged.json diff --git a/plugins/src/main/java/com/jraska/github/client/release/GitHubApi.kt b/plugins/src/main/java/com/jraska/github/client/release/GitHubApi.kt index af9b25c9..1937b3d6 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/GitHubApi.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/GitHubApi.kt @@ -11,7 +11,7 @@ interface GitHubApi { fun setReleaseBody(release: String, body: String) - fun listPrsWithoutMilestone(): List + fun listMergedPrsWithoutMilestone(): List fun createRelease(version: String) diff --git a/plugins/src/main/java/com/jraska/github/client/release/ReleaseMarker.kt b/plugins/src/main/java/com/jraska/github/client/release/ReleaseMarker.kt index 45c57cb6..20cb7bb6 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/ReleaseMarker.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/ReleaseMarker.kt @@ -8,7 +8,7 @@ class ReleaseMarker( private val leadTimeReporter: LeadTimeReporter ) { fun markPrsWithMilestone(release: Release) { - val pullRequests = gitHubApi.listPrsWithoutMilestone() + val pullRequests = gitHubApi.listMergedPrsWithoutMilestone() val milestoneNumber = gitHubApi.createMilestone(release.releaseName) diff --git a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt index e2546a72..931bfc3b 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt @@ -31,7 +31,7 @@ class GitHubApiImpl( api.setReleseBody(releaseId, ReleaseBodyDto(body)).execute() } - override fun listPrsWithoutMilestone(): List { + override fun listMergedPrsWithoutMilestone(): List { val pulls = mutableListOf() var page = 1 @@ -42,6 +42,7 @@ class GitHubApiImpl( .execute() .body()!! .filter { it.milestone == null } + .filter { it.mergedAt != null } .map { PullRequest(it.number, it.title) } .also { pulls.addAll(it) } page++ diff --git a/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt b/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt index 445480e6..571f6425 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt @@ -48,6 +48,9 @@ class PullRequestDto { @SerializedName("milestone") var milestone: MilestoneDto? = null + + @SerializedName("merged_at") + var mergedAt: String? = null } class ReleaseBodyDto( diff --git a/plugins/src/test/kotlin/com/jraska/github/client/release/GitHubApiImplTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/release/GitHubApiImplTest.kt index eefe831a..cf006d3b 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/release/GitHubApiImplTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/release/GitHubApiImplTest.kt @@ -51,6 +51,16 @@ class GitHubApiImplTest { ) assertThat(prCommits[1]).usingRecursiveComparison().isEqualTo(expectedCommit) } + + @Test + fun filtersNotMergedPRs() { + mockWebServer.enqueue("response/pulls_with_not_merged.json") + mockWebServer.enqueue("response/pulls_empty.json") + + val pulls = gitHubApi.listMergedPrsWithoutMilestone() + + assertThat(pulls.size).isEqualTo(2) + } } fun MockWebServer.enqueue(path: String) { diff --git a/plugins/src/test/resources/response/pulls_empty.json b/plugins/src/test/resources/response/pulls_empty.json new file mode 100644 index 00000000..0d4f101c --- /dev/null +++ b/plugins/src/test/resources/response/pulls_empty.json @@ -0,0 +1,2 @@ +[ +] diff --git a/plugins/src/test/resources/response/pulls_with_not_merged.json b/plugins/src/test/resources/response/pulls_with_not_merged.json new file mode 100644 index 00000000..50439a66 --- /dev/null +++ b/plugins/src/test/resources/response/pulls_with_not_merged.json @@ -0,0 +1,1037 @@ +[ + { + "url": "https://api.github.com/repos/jraska/github-client/pulls/553", + "id": 683259468, + "node_id": "MDExOlB1bGxSZXF1ZXN0NjgzMjU5NDY4", + "html_url": "https://github.com/jraska/github-client/pull/553", + "diff_url": "https://github.com/jraska/github-client/pull/553.diff", + "patch_url": "https://github.com/jraska/github-client/pull/553.patch", + "issue_url": "https://api.github.com/repos/jraska/github-client/issues/553", + "number": 553, + "state": "closed", + "locked": false, + "title": "Bump material from 1.3.0 to 1.4.0", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "body": "Bumps [material](https://github.com/material-components/material-components-android) from 1.3.0 to 1.4.0.\n
\nRelease notes\n

Sourced from material's releases.

\n
\n

1.4.0

\n

What's new since 1.3.0

\n
    \n
  • NavigationRailView (Docs)
  • \n
  • Motion theming (Docs)
  • \n
\n

Other highlights

\n
    \n
  • Support for centered titles in MaterialToolbar (cbf528e3a6deaa2bc39d0836b3a850b27c2ada49)
  • \n
  • Max width for MaterialButtons (eb5453cd7ee0cc8e0610b57d39b44b26cd95f31e)
  • \n
  • Max width for BottomSheets (63d01aa2686d56b165e9131265a449d810359695)
  • \n
  • Updated edge-to-edge support for BottomSheet (c15139a5c3f685ff8c0e64857fdac4b2afc49abc) (b163458a3a7919d7b7c76de81a7a9b5c940c8def) (c574e9ea23a6f54f7e0582495f9a9d3691b6af22) (28c3254d2a9d51a76ef25aa245a6a140536bcdb6)
  • \n
  • TextField's collapsed hint background no longer overlap with the field's background color (6015a4e901dc55a02f86e12703820d520684f95e)
  • \n
\n

Dependency Updates

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DependencyPrevious versionNew version
compileSdkVersion2930
androidx.core1.2.01.5.0
\n

Full list of changes

\n

https://github.com/material-components/material-components-android/compare/1.3.0...1.4.0

\n

1.4.0-rc01

\n

Dependency Updates

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DependencyPrevious versionNew version
androidx.core1.5.0-rc011.5.0
\n

Library Updates

\n
    \n
  • CollapsingToolbarLayout\n
      \n
    • Fixed RTL text only laying out as RTL when actual text is RTL. (72b0c39ca01388713ead773e8b48034437f196bb)
    • \n
    • Added experimental setRtlTextDirectionHeuristicsEnabled() method. (5af36434cf1234f382095319bed58ad4a1e71c65)
    • \n
    • Fix title fade mode collapsing title position errors. (bab907f08e9af6522b3632934808885be418e796)
    • \n
    \n
  • \n
  • TextAppearance\n
      \n
    • Added a TextAppearanceConfig.shouldLoadFontSynchronously() check to allow forcing synchronous font loading for edge cases. (4e45c2cd202afa03b6ce47dfe508bc5f86652041)
    • \n
    \n
  • \n
\n

Full list of changes

\n

https://github.com/material-components/material-components-android/compare/1.4.0-beta01...1.4.0-rc01

\n

1.4.0-beta01

\n

Compile SDK Version changed to API 30.

\n

Dependency Updates

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DependencyPrevious versionNew version
androidx.core1.2.01.5.0-rc01
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1b36365 [CollapsingToolbarLayout] Added option to add extra height when title text sp...
  • \n
  • 245ffe7 [CollapsingToolbarLayout] Added option to force always applying system window...
  • \n
  • 6f28838 [CollapsingToolbarLayout] Fixed multiline RTL collapsed title text position
  • \n
  • 3a76417 Update library version to 1.4.0
  • \n
  • 5af3643 [CollapsingToolbarLayout] Added experimental setRtlTextDirectionHeuristicsEna...
  • \n
  • bab907f [TopAppBar] Fix title fade mode collapsing title position errors.
  • \n
  • 4e45c2c [TextAppearance] Added a TextAppearanceConfig.shouldLoadFontSynchronously() c...
  • \n
  • d78235f [Gradle] Updated androidx.core dependency from 1.5.0-rc01 to 1.5.0 stable
  • \n
  • 72b0c39 [CollapsingToolbarLayout] Fixed RTL text only laying out as RTL when actual t...
  • \n
  • a096515 Updated library version to 1.4.0-rc01
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.android.material:material&package-manager=gradle&previous-version=1.3.0&new-version=1.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", + "created_at": "2021-07-05T00:07:02Z", + "updated_at": "2021-07-11T17:08:54Z", + "closed_at": "2021-07-11T05:18:03Z", + "merged_at": "2021-07-11T05:18:03Z", + "merge_commit_sha": "631cfdc02551c3886c98a7ea7a6c0ace0cd6d09e", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + { + "id": 2291005142, + "node_id": "MDU6TGFiZWwyMjkxMDA1MTQy", + "url": "https://api.github.com/repos/jraska/github-client/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + } + ], + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/github-client/pulls/553/commits", + "review_comments_url": "https://api.github.com/repos/jraska/github-client/pulls/553/comments", + "review_comment_url": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/github-client/issues/553/comments", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/bfcd56c577717dc93c785802e545838ddf0cbda8", + "head": { + "label": "jraska:dependabot/gradle/com.google.android.material-material-1.4.0", + "ref": "dependabot/gradle/com.google.android.material-material-1.4.0", + "sha": "bfcd56c577717dc93c785802e545838ddf0cbda8", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "946e80b48bed1f802c6fb151d6ff4b70259b4638", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/553" + }, + "html": { + "href": "https://github.com/jraska/github-client/pull/553" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/github-client/issues/553" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/github-client/issues/553/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/553/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/553/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/github-client/statuses/bfcd56c577717dc93c785802e545838ddf0cbda8" + } + }, + "author_association": "CONTRIBUTOR", + "auto_merge": null, + "active_lock_reason": null + }, + { + "url": "https://api.github.com/repos/jraska/github-client/pulls/550", + "id": 678604083, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njc4NjA0MDgz", + "html_url": "https://github.com/jraska/github-client/pull/550", + "diff_url": "https://github.com/jraska/github-client/pull/550.diff", + "patch_url": "https://github.com/jraska/github-client/pull/550.patch", + "issue_url": "https://api.github.com/repos/jraska/github-client/issues/550", + "number": 550, + "state": "closed", + "locked": false, + "title": "Bump firebase-bom from 28.1.0 to 28.2.0", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "body": "[//]: # (dependabot-start)\n⚠️ **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps firebase-bom from 28.1.0 to 28.2.0.\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.firebase:firebase-bom&package-manager=gradle&previous-version=28.1.0&new-version=28.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", + "created_at": "2021-06-28T00:09:31Z", + "updated_at": "2021-06-28T08:59:01Z", + "closed_at": "2021-06-28T08:49:24Z", + "merged_at": "2021-06-28T08:49:24Z", + "merge_commit_sha": "745a7195ceb12f7c0ae9acd57c010f65564d6912", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + { + "id": 2291005142, + "node_id": "MDU6TGFiZWwyMjkxMDA1MTQy", + "url": "https://api.github.com/repos/jraska/github-client/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + } + ], + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/github-client/pulls/550/commits", + "review_comments_url": "https://api.github.com/repos/jraska/github-client/pulls/550/comments", + "review_comment_url": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/github-client/issues/550/comments", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/068e4ff9f8150ec3c635ec5209392c7ca6c27d96", + "head": { + "label": "jraska:dependabot/gradle/com.google.firebase-firebase-bom-28.2.0", + "ref": "dependabot/gradle/com.google.firebase-firebase-bom-28.2.0", + "sha": "068e4ff9f8150ec3c635ec5209392c7ca6c27d96", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "f441e7e117139867eca8fc09ca4688616ae5b58a", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/550" + }, + "html": { + "href": "https://github.com/jraska/github-client/pull/550" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/github-client/issues/550" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/github-client/issues/550/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/550/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/550/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/github-client/statuses/068e4ff9f8150ec3c635ec5209392c7ca6c27d96" + } + }, + "author_association": "CONTRIBUTOR", + "auto_merge": null, + "active_lock_reason": null + }, + { + "url": "https://api.github.com/repos/jraska/github-client/pulls/549", + "id": 678604075, + "node_id": "MDExOlB1bGxSZXF1ZXN0Njc4NjA0MDc1", + "html_url": "https://github.com/jraska/github-client/pull/549", + "diff_url": "https://github.com/jraska/github-client/pull/549.diff", + "patch_url": "https://github.com/jraska/github-client/pull/549.patch", + "issue_url": "https://api.github.com/repos/jraska/github-client/issues/549", + "number": 549, + "state": "closed", + "locked": false, + "title": "Bump com.github.triplet.play from 3.4.0-agp4.2 to 3.5.0-agp7.0", + "user": { + "login": "dependabot[bot]", + "id": 49699333, + "node_id": "MDM6Qm90NDk2OTkzMzM=", + "avatar_url": "https://avatars.githubusercontent.com/in/29110?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dependabot%5Bbot%5D", + "html_url": "https://github.com/apps/dependabot", + "followers_url": "https://api.github.com/users/dependabot%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dependabot%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/dependabot%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/dependabot%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/dependabot%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "body": "Bumps com.github.triplet.play from 3.4.0-agp4.2 to 3.5.0-agp7.0.\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.github.triplet.play&package-manager=gradle&previous-version=3.4.0-agp4.2&new-version=3.5.0-agp7.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", + "created_at": "2021-06-28T00:09:29Z", + "updated_at": "2021-06-28T08:59:02Z", + "closed_at": "2021-06-28T08:49:37Z", + "merged_at": null, + "merge_commit_sha": "d73f3e62039ae5589b778c3b9928857b4561e675", + "assignee": null, + "assignees": [ + + ], + "requested_reviewers": [ + + ], + "requested_teams": [ + + ], + "labels": [ + { + "id": 2291005142, + "node_id": "MDU6TGFiZWwyMjkxMDA1MTQy", + "url": "https://api.github.com/repos/jraska/github-client/labels/dependencies", + "name": "dependencies", + "color": "0366d6", + "default": false, + "description": "Pull requests that update a dependency file" + } + ], + "draft": false, + "commits_url": "https://api.github.com/repos/jraska/github-client/pulls/549/commits", + "review_comments_url": "https://api.github.com/repos/jraska/github-client/pulls/549/comments", + "review_comment_url": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/jraska/github-client/issues/549/comments", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/3b5cc205e6041c7c32541f459aa3704881bbc08b", + "head": { + "label": "jraska:dependabot/gradle/com.github.triplet.play-3.5.0-agp7.0", + "ref": "dependabot/gradle/com.github.triplet.play-3.5.0-agp7.0", + "sha": "3b5cc205e6041c7c32541f459aa3704881bbc08b", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "base": { + "label": "jraska:master", + "ref": "master", + "sha": "f441e7e117139867eca8fc09ca4688616ae5b58a", + "user": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 52918490, + "node_id": "MDEwOlJlcG9zaXRvcnk1MjkxODQ5MA==", + "name": "github-client", + "full_name": "jraska/github-client", + "private": false, + "owner": { + "login": "jraska", + "id": 6277721, + "node_id": "MDQ6VXNlcjYyNzc3MjE=", + "avatar_url": "https://avatars.githubusercontent.com/u/6277721?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jraska", + "html_url": "https://github.com/jraska", + "followers_url": "https://api.github.com/users/jraska/followers", + "following_url": "https://api.github.com/users/jraska/following{/other_user}", + "gists_url": "https://api.github.com/users/jraska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jraska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jraska/subscriptions", + "organizations_url": "https://api.github.com/users/jraska/orgs", + "repos_url": "https://api.github.com/users/jraska/repos", + "events_url": "https://api.github.com/users/jraska/events{/privacy}", + "received_events_url": "https://api.github.com/users/jraska/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/jraska/github-client", + "description": "Experimental architecture app with example usage intended to be a showcase, test and skeleton app.", + "fork": false, + "url": "https://api.github.com/repos/jraska/github-client", + "forks_url": "https://api.github.com/repos/jraska/github-client/forks", + "keys_url": "https://api.github.com/repos/jraska/github-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jraska/github-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jraska/github-client/teams", + "hooks_url": "https://api.github.com/repos/jraska/github-client/hooks", + "issue_events_url": "https://api.github.com/repos/jraska/github-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/jraska/github-client/events", + "assignees_url": "https://api.github.com/repos/jraska/github-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/jraska/github-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/jraska/github-client/tags", + "blobs_url": "https://api.github.com/repos/jraska/github-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jraska/github-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jraska/github-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jraska/github-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jraska/github-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jraska/github-client/languages", + "stargazers_url": "https://api.github.com/repos/jraska/github-client/stargazers", + "contributors_url": "https://api.github.com/repos/jraska/github-client/contributors", + "subscribers_url": "https://api.github.com/repos/jraska/github-client/subscribers", + "subscription_url": "https://api.github.com/repos/jraska/github-client/subscription", + "commits_url": "https://api.github.com/repos/jraska/github-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jraska/github-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jraska/github-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jraska/github-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jraska/github-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/jraska/github-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jraska/github-client/merges", + "archive_url": "https://api.github.com/repos/jraska/github-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jraska/github-client/downloads", + "issues_url": "https://api.github.com/repos/jraska/github-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/jraska/github-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jraska/github-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jraska/github-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jraska/github-client/labels{/name}", + "releases_url": "https://api.github.com/repos/jraska/github-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/jraska/github-client/deployments", + "created_at": "2016-03-01T23:38:14Z", + "updated_at": "2021-07-14T23:33:30Z", + "pushed_at": "2021-07-14T23:33:27Z", + "git_url": "git://github.com/jraska/github-client.git", + "ssh_url": "git@github.com:jraska/github-client.git", + "clone_url": "https://github.com/jraska/github-client.git", + "svn_url": "https://github.com/jraska/github-client", + "homepage": "", + "size": 1760, + "stargazers_count": 114, + "watchers_count": 114, + "language": "Kotlin", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 15, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "apache-2.0", + "name": "Apache License 2.0", + "spdx_id": "Apache-2.0", + "url": "https://api.github.com/licenses/apache-2.0", + "node_id": "MDc6TGljZW5zZTI=" + }, + "forks": 15, + "open_issues": 3, + "watchers": 114, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/549" + }, + "html": { + "href": "https://github.com/jraska/github-client/pull/549" + }, + "issue": { + "href": "https://api.github.com/repos/jraska/github-client/issues/549" + }, + "comments": { + "href": "https://api.github.com/repos/jraska/github-client/issues/549/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/549/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/jraska/github-client/pulls/549/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/jraska/github-client/statuses/3b5cc205e6041c7c32541f459aa3704881bbc08b" + } + }, + "author_association": "CONTRIBUTOR", + "auto_merge": null, + "active_lock_reason": null + } +] From da9e631ee852522eef3935acfb8147a89332882d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 16 Jul 2021 00:39:42 +0200 Subject: [PATCH 097/621] Update Gradle to 7.1.1 (#563) --- gradle/wrapper/gradle-wrapper.properties | 2 +- plugins/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f371643e..05679dc3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index f371643e..05679dc3 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 038443c39b7906891da226b00c3706b607b00abe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 15 Jul 2021 23:12:45 +0000 Subject: [PATCH 098/621] {release-bot: Bump version for next release} --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 73f94e60..c48f16f5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.32.0' - versionCode 118 + versionName '0.32.1' + versionCode 119 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From ce90cedd79d4ee896b77a6d7a5662c725671ed67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Jul 2021 10:35:10 +0200 Subject: [PATCH 099/621] Bump kotlin_version from 1.5.20 to 1.5.21 (#564) Bumps `kotlin_version` from 1.5.20 to 1.5.21. Updates `kotlin-gradle-plugin` from 1.5.20 to 1.5.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.20...v1.5.21) Updates `kotlin-stdlib` from 1.5.20 to 1.5.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.20...v1.5.21) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3ebef493..a894bc6c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.20' + ext.kotlin_version = '1.5.21' repositories { google() mavenCentral() From 914b051d1463a058a4eb52533f3a641ca4d2aa46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 10:13:30 +0200 Subject: [PATCH 100/621] Bump firebase-bom from 28.2.1 to 28.3.0 (#565) Bumps firebase-bom from 28.2.1 to 28.3.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c48f16f5..f9069d3b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.2.1') + implementation platform('com.google.firebase:firebase-bom:28.3.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index ac19baae..e8b4b4bf 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.2.1') + implementation platform('com.google.firebase:firebase-bom:28.3.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From a0ee1a49d67c3c79a4e89d51f0573d7c21e1dad1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 10:13:40 +0200 Subject: [PATCH 101/621] Bump appcompat from 1.3.0 to 1.3.1 (#567) Bumps appcompat from 1.3.0 to 1.3.1. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index c6161ad7..3e3af812 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/build.gradle b/app/build.gradle index f9069d3b..f5fa5842 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -111,7 +111,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 570967a8..741c0152 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' diff --git a/core/build.gradle b/core/build.gradle index b3ffb8df..3aae3dad 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 3f0c9bd5..55803bad 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.appcompat:appcompat:1.3.1' kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger From c9a5470f5b1f03577c81cd618586c60f74e9008c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 08:46:11 +0000 Subject: [PATCH 102/621] Bump daggerVersion from 2.37 to 2.38 (#566) Bumps `daggerVersion` from 2.37 to 2.38. Updates `dagger-compiler` from 2.37 to 2.38 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.37...dagger-2.38) Updates `dagger` from 2.37 to 2.38 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.37...dagger-2.38) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index b4b52a1e..37a4c3b1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.37' + daggerVersion = '2.38' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From ec62a5b5134961e8994540581cc301d28fa674fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 12:09:07 +0200 Subject: [PATCH 103/621] Bump media from 1.3.1 to 1.4.0 (#568) Bumps media from 1.3.1 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f5fa5842..469c325f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.6.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.media:media:1.3.1' + implementation 'androidx.media:media:1.4.0' implementation platform('com.google.firebase:firebase-bom:28.3.0') implementation 'com.google.firebase:firebase-core' From 8150a68e7e98ea9c25f5a9f4d0eeb160c714c5ae Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 3 Aug 2021 19:42:14 +0200 Subject: [PATCH 104/621] Use Firebase Pixel 2, API 27 device instead of deprecated API 28 (#571) * Tried to update Pixel 2 to use API 27 instead of deprecated 28 * Try to run on Pixel 3, API 28 * Run on Pixel 5 * Trying Pixel 2 again with API 27 * Pixel 2 with API 27 --- .../src/main/java/com/jraska/github/client/firebase/Device.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt index 61105cf0..9bfea1b7 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt @@ -16,6 +16,6 @@ class Device( companion object { val Pixel4 = Device("flame", 30, "en", "portrait") - val Pixel2 = Device("walleye", 28, "en", "portrait") + val Pixel2 = Device("walleye", 27, "en", "portrait") } } From 0e93ef83880a06ca84cadd0f143a55b3ddd6d6c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Aug 2021 18:06:39 +0000 Subject: [PATCH 105/621] Bump daggerVersion from 2.38 to 2.38.1 (#569) Bumps `daggerVersion` from 2.38 to 2.38.1. Updates `dagger-compiler` from 2.38 to 2.38.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.38...dagger-2.38.1) Updates `dagger` from 2.38 to 2.38.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.38...dagger-2.38.1) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 37a4c3b1..56e458a7 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ ext { retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" - daggerVersion = '2.38' + daggerVersion = '2.38.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 7dfed79734af50ab2fbf00a92720ea799111c0b9 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 4 Aug 2021 10:55:43 +0200 Subject: [PATCH 106/621] release-bot: Bump version for next release (#572) Co-authored-by: github-actions[bot] --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 469c325f..d49a586a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.32.1' - versionCode 119 + versionName '0.32.2' + versionCode 120 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 3403f78f0b48538eb957d97352b013dac9d7cec3 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 6 Aug 2021 01:08:20 +0200 Subject: [PATCH 107/621] Explicitly state release message commit to master as default chanegd to main (#573) --- .github/workflows/release_trigger.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release_trigger.yml b/.github/workflows/release_trigger.yml index 9b23e1fa..aebfc67c 100644 --- a/.github/workflows/release_trigger.yml +++ b/.github/workflows/release_trigger.yml @@ -26,3 +26,4 @@ jobs: with: github_token: ${{ secrets.CI_GITHUB_TOKEN }} message: 'release-bot: Bump version for next release' + branch: 'master' From eda20a802a5cffb6bb17d73524cd66ae026eee4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Aug 2021 23:25:41 +0000 Subject: [PATCH 108/621] Bump gradle from 4.2.2 to 7.0.0 (#570) * Bump gradle from 4.2.2 to 7.0.0 Bumps gradle from 4.2.2 to 7.0.0. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Ignore Timber issues for now * Ignore Timber issues for now Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 9 ++++++++- core/lint.xml | 6 ------ feature/config-debug/build.gradle | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) delete mode 100644 core/lint.xml diff --git a/build.gradle b/build.gradle index a894bc6c..b6add415 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.0.0' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' @@ -46,6 +46,13 @@ subprojects { enabled = false } } + } else { + // https://github.com/JakeWharton/timber/issues/408 + it.afterEvaluate { + if (it.plugins.hasPlugin("com.android.application") || it.plugins.hasPlugin("com.android.library")) { + it.android.lintOptions.disable = ["LogNotTimber", "StringFormatInTimber", "ThrowableNotAtBeginning", "BinaryOperationInTimber", "TimberArgCount", "TimberArgTypes", "TimberTagLength", "TimberExceptionLogging"] + } + } } } diff --git a/core/lint.xml b/core/lint.xml deleted file mode 100644 index 7f38fb6c..00000000 --- a/core/lint.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 0fe48d22..ba063757 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,6 +23,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' From b1fc9b57d731c6a0d606b085cb10714bde9a9866 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Aug 2021 23:32:26 +0000 Subject: [PATCH 109/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d49a586a..24f0160a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.32.2' - versionCode 120 + versionName '0.33.0' + versionCode 121 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 596b434b627fcd15f33f376166113aae9ee73dc9 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 6 Aug 2021 01:47:13 +0200 Subject: [PATCH 110/621] Update Gradle Play publisher (#574) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 24f0160a..e085cd73 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,6 @@ plugins { id "com.jraska.module.graph.assertion" version "1.5.1" - id "com.github.triplet.play" version "3.4.0-agp4.2" + id "com.github.triplet.play" version "3.6.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' id 'com.jraska.github.client.release' From 4670815c332ecb9d333c32d462d5f050b1e3829b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 Aug 2021 23:49:23 +0000 Subject: [PATCH 111/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e085cd73..937d9b3f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.0' - versionCode 121 + versionName '0.33.1' + versionCode 122 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 353c6d60a98dd3a72d6a21019a30353b1faa4ebb Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 6 Aug 2021 21:17:29 +0200 Subject: [PATCH 112/621] Disable Firebase test lab (#576) --- .github/workflows/build.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3be7fb4e..522b5d9e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,11 +21,12 @@ jobs: run: ./gradlew androidDependencies --stacktrace - name: Run Tests run: ./gradlew check --stacktrace - - name: Run Tests Firebase - env: - GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} - FCM_API_KEY: ${{ secrets.FCM_API_KEY }} - run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace + # Firebase Test Lab is down +# - name: Run Tests Firebase +# env: +# GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} +# FCM_API_KEY: ${{ secrets.FCM_API_KEY }} +# run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace lint: runs-on: ubuntu-latest steps: From ab9f94c9fe5e097dd3e3c057c506131b70543f35 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 6 Aug 2021 21:19:41 +0200 Subject: [PATCH 113/621] Update Lint results path (#575) --- plugins/src/main/java/com/jraska/lint/LintProjectExtractor.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/src/main/java/com/jraska/lint/LintProjectExtractor.kt b/plugins/src/main/java/com/jraska/lint/LintProjectExtractor.kt index 3600ae6a..e1e9fd38 100644 --- a/plugins/src/main/java/com/jraska/lint/LintProjectExtractor.kt +++ b/plugins/src/main/java/com/jraska/lint/LintProjectExtractor.kt @@ -40,12 +40,12 @@ class LintProjectExtractor { private fun locateLintFile(project: Project): File { val buildDir = project.buildDir - val androidModuleCase = File(buildDir, "reports/lint-results.xml") + val androidModuleCase = File(buildDir, "reports/lint-results-debug.xml") if (androidModuleCase.exists()) { return androidModuleCase } - val jvmModuleCase = File(buildDir, "test-results/lint-results.xml") + val jvmModuleCase = File(buildDir, "reports/lint-results.xml") if (jvmModuleCase.exists()) { return jvmModuleCase } From be19c202326806cbe5e7c6e002198428b44f90ad Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 7 Aug 2021 12:43:15 +0200 Subject: [PATCH 114/621] Enable back Firebase Test lab with Pixel 5 and Pixel 2 (#578) * Pixel 5 on testlab * Enable back Firebase Test Lab --- .github/workflows/build.yml | 11 +++++------ .../java/com/jraska/github/client/firebase/Device.kt | 2 +- .../github/client/firebase/FirebaseTestLabPlugin.kt | 2 +- .../firebase/report/FirebaseResultExtractorTest.kt | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 522b5d9e..3be7fb4e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,12 +21,11 @@ jobs: run: ./gradlew androidDependencies --stacktrace - name: Run Tests run: ./gradlew check --stacktrace - # Firebase Test Lab is down -# - name: Run Tests Firebase -# env: -# GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} -# FCM_API_KEY: ${{ secrets.FCM_API_KEY }} -# run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace + - name: Run Tests Firebase + env: + GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} + FCM_API_KEY: ${{ secrets.FCM_API_KEY }} + run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace lint: runs-on: ubuntu-latest steps: diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt index 9bfea1b7..6d8f7b36 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt @@ -15,7 +15,7 @@ class Device( } companion object { - val Pixel4 = Device("flame", 30, "en", "portrait") + val Pixel5 = Device("redfin", 30, "en", "portrait") val Pixel2 = Device("walleye", 27, "en", "portrait") } } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt index f1bee2a8..92b7344b 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt @@ -29,7 +29,7 @@ class FirebaseTestLabPlugin : Plugin { val appApk = "${project.buildDir}/outputs/apk/debug/app-debug.apk" val testApk = "${project.buildDir}/outputs/apk/androidTest/debug/app-debug-androidTest.apk" - val firstDevice = Device.Pixel4 + val firstDevice = Device.Pixel5 val secondDevice = Device.Pixel2 val resultDir = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()) diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt index 67dfb763..78257487 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt @@ -13,7 +13,7 @@ class FirebaseResultExtractorTest { @Before fun setUp() { - extractor = FirebaseResultExtractor("someUrl", GitInfo("exampleBrach", "123", false, ""), null, Device.Pixel4) + extractor = FirebaseResultExtractor("someUrl", GitInfo("exampleBrach", "123", false, ""), null, Device.Pixel5) } @Test From 4a31f120e3c5632f0c263b4887d2a83f6ec844fc Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 7 Aug 2021 13:07:25 +0200 Subject: [PATCH 115/621] Analytics improvements (#579) * Analytics reporter now has a name to avoid leaking abstraction * Fix intentional bugto chck error throwing --- .../java/com/jraska/analytics/AnalyticsReporter.kt | 14 ++++++++++---- .../java/com/jraska/analytics/ConsoleReporter.kt | 2 ++ .../jraska/analytics/MixpanelAnalyticsReporter.kt | 2 ++ .../com/jraska/gradle/buildtime/BuildReporter.kt | 7 +++---- .../java/com/jraska/module/ModuleStatsReporter.kt | 2 +- .../client/release/data/LeadTimeReporterTest.kt | 2 ++ 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/plugins/src/main/java/com/jraska/analytics/AnalyticsReporter.kt b/plugins/src/main/java/com/jraska/analytics/AnalyticsReporter.kt index eedc049c..32540411 100644 --- a/plugins/src/main/java/com/jraska/analytics/AnalyticsReporter.kt +++ b/plugins/src/main/java/com/jraska/analytics/AnalyticsReporter.kt @@ -3,16 +3,22 @@ package com.jraska.analytics import com.mixpanel.mixpanelapi.MixpanelAPI interface AnalyticsReporter { + val name: String + fun report(vararg events: AnalyticsEvent) companion object { fun create(reporterName: String): AnalyticsReporter { val mixpanelToken: String? = System.getenv("GITHUB_CLIENT_MIXPANEL_API_KEY") - if (mixpanelToken == null) { - println("'GITHUB_CLIENT_MIXPANEL_API_KEY' not set, data will be reported to console only") - return ConsoleReporter(reporterName) - } else { + if (mixpanelToken != null) { return MixpanelAnalyticsReporter(mixpanelToken, MixpanelAPI(), reporterName) + } else { + if (System.getenv("CI") == "true") { + throw IllegalStateException("'GITHUB_CLIENT_MIXPANEL_API_KEY' not set on CI") + } else { + println("'GITHUB_CLIENT_MIXPANEL_API_KEY' not set, data will be reported to console only") + return ConsoleReporter(reporterName) + } } } } diff --git a/plugins/src/main/java/com/jraska/analytics/ConsoleReporter.kt b/plugins/src/main/java/com/jraska/analytics/ConsoleReporter.kt index 2bdeb692..3b718bac 100644 --- a/plugins/src/main/java/com/jraska/analytics/ConsoleReporter.kt +++ b/plugins/src/main/java/com/jraska/analytics/ConsoleReporter.kt @@ -1,6 +1,8 @@ package com.jraska.analytics class ConsoleReporter(private val reporterName: String) : AnalyticsReporter { + override val name = "Console" + override fun report(vararg events: AnalyticsEvent) { events.forEach { println("$reporterName: $it") diff --git a/plugins/src/main/java/com/jraska/analytics/MixpanelAnalyticsReporter.kt b/plugins/src/main/java/com/jraska/analytics/MixpanelAnalyticsReporter.kt index e1919a92..20c9a2f2 100644 --- a/plugins/src/main/java/com/jraska/analytics/MixpanelAnalyticsReporter.kt +++ b/plugins/src/main/java/com/jraska/analytics/MixpanelAnalyticsReporter.kt @@ -10,6 +10,8 @@ class MixpanelAnalyticsReporter( private val api: MixpanelAPI, private val distinctId: String ) : AnalyticsReporter { + override val name = "Mixpanel" + override fun report(vararg events: AnalyticsEvent) { val delivery = ClientDelivery() diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt index e382f31b..41224053 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt @@ -2,7 +2,6 @@ package com.jraska.gradle.buildtime import com.jraska.analytics.AnalyticsEvent import com.jraska.analytics.AnalyticsReporter -import com.mixpanel.mixpanelapi.ClientDelivery import java.util.concurrent.TimeUnit class BuildReporter( @@ -10,19 +9,19 @@ class BuildReporter( ) { fun report(buildData: BuildData) { try { - reportToMixpanel(buildData) + reportMeasured(buildData) } catch (ex: Exception) { println("Build time reporting failed: $ex") } } - private fun reportToMixpanel(buildData: BuildData) { + private fun reportMeasured(buildData: BuildData) { val start = nowMillis() reportInternal(buildData) val reportingOverhead = nowMillis() - start - println("$STOPWATCH_ICON Build time '${buildData.buildTime} ms' reported to Mixpanel in $reportingOverhead ms.$STOPWATCH_ICON") + println("$STOPWATCH_ICON Build time '${buildData.buildTime} ms' reported to ${analyticsReporter.name} in $reportingOverhead ms.$STOPWATCH_ICON") } private fun reportInternal(buildData: BuildData) { diff --git a/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt b/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt index a98fe4f2..f29326ed 100644 --- a/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt +++ b/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt @@ -24,7 +24,7 @@ class ModuleStatsReporter( analyticsReporter.report(*events.toTypedArray()) - println("$GRAPH_ICON Module stats reported to Mixpanel $GRAPH_ICON") + println("$GRAPH_ICON Module stats reported to ${analyticsReporter.name} $GRAPH_ICON") } private fun convertModules(stats: ProjectStatistics): Map { diff --git a/plugins/src/test/kotlin/com/jraska/github/client/release/data/LeadTimeReporterTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/release/data/LeadTimeReporterTest.kt index c8a87713..cc62158d 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/release/data/LeadTimeReporterTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/release/data/LeadTimeReporterTest.kt @@ -70,6 +70,8 @@ class RecordingAnalyticsReporter : AnalyticsReporter { fun events(): List = recorder + override val name = "Test Recorder" + override fun report(vararg events: AnalyticsEvent) { recorder.addAll(events) } From d8d025ebe807e59827c049eb0f25ca1343b3b212 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 7 Aug 2021 11:09:54 +0000 Subject: [PATCH 116/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 937d9b3f..bb1e4ef2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.1' - versionCode 122 + versionName '0.33.2' + versionCode 123 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 236abbdb42c1edb1720ac8b1baa4900665921601 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 00:18:09 +0200 Subject: [PATCH 117/621] Have running remote cache (#580) * Running remote cache * Modify app to invalidate local cache * Cache only dependencies * Update cache * Edit paths * Disable Firebase Test Lab * Try with remote cache and scan * Disable local cache push on CI * Change cache to store * Completely disabl elocal cache on CI * Remove Gradle Enterprise * Put back the Firebase test lab * Put previous order of app build.gradle --- .github/workflows/build.yml | 10 +++++----- settings.gradle | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3be7fb4e..b2b0d2bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,8 +13,8 @@ jobs: uses: actions/cache@v2.1.4 with: path: | - ~/.gradle/caches - ~/.gradle/wrapper + ~/.gradle/caches/modules-2 + ~/.gradle/caches/transforms-2 key: build-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Get Dependencies if: steps.cache-dependencies.outputs.cache-hit != 'true' @@ -36,8 +36,8 @@ jobs: uses: actions/cache@v2.1.4 with: path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: lint-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} + ~/.gradle/caches/modules-2 + ~/.gradle/caches/transforms-2 + key: lint--${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Lint run: ./gradlew lint --stacktrace diff --git a/settings.gradle b/settings.gradle index 4a3bab6f..16d4a007 100644 --- a/settings.gradle +++ b/settings.gradle @@ -25,3 +25,23 @@ include ':app', ':feature:about', ':feature:shortcuts', ':feature:chrome-custom-tabs' + + +buildCache { + remote(HttpBuildCache) { + url = 'http://34.85.222.61:5071/cache/' + allowUntrustedServer = true + allowInsecureProtocol = true + push = (System.getenv("CI") == "true") + } + + local { + + // The rationale behind disabling local cache on CI + // is that the large local cache packing and unpacking + // is unnecessary overhead and take tens of seconds for larger entries. + // Storing all local outputs is ineffective + // and leads to archive of Gigabyte in size and yields only low cache hits. + enabled = (System.getenv("CI") != "true") + } +} From 837f8499fa50228bbbbdc97eea053635b81687e9 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 00:46:59 +0200 Subject: [PATCH 118/621] DOn't cache for reporting as it might be unnecessary (#582) --- .github/workflows/reporting.yml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/reporting.yml b/.github/workflows/reporting.yml index 4ed85ad7..c08e9960 100644 --- a/.github/workflows/reporting.yml +++ b/.github/workflows/reporting.yml @@ -10,14 +10,6 @@ jobs: steps: - name: Checkout the code uses: actions/checkout@v2 - - name: Cache Dependencies - id: cache-dependencies - uses: actions/cache@v2.1.4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: build-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Run Module Statistics Report run: ./gradlew reportModuleStatistics --stacktrace --no-configure-on-demand lintReport: @@ -25,13 +17,5 @@ jobs: steps: - name: Checkout the code uses: actions/checkout@v2 - - name: Cache Dependencies - id: cache-dependencies - uses: actions/cache@v2.1.4 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: lint-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} - name: Run Lint Report run: ./gradlew lintStatisticsReport --stacktrace From 245ff72c744be95fbd934090441416cb20d2063a Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 00:52:58 +0200 Subject: [PATCH 119/621] Run firebase separately (#583) * Try to run Firebase separately * Try to run Firebase separately --- .github/workflows/build.yml | 16 ++++++++++++++++ .../com/jraska/github/client/rx/AppSchedulers.kt | 6 +++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b2b0d2bd..7e2eada4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,6 +21,22 @@ jobs: run: ./gradlew androidDependencies --stacktrace - name: Run Tests run: ./gradlew check --stacktrace + ui-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout the code + uses: actions/checkout@v2 + - name: Cache Dependencies + id: cache-dependencies + uses: actions/cache@v2.1.4 + with: + path: | + ~/.gradle/caches/modules-2 + ~/.gradle/caches/transforms-2 + key: build-${{ hashFiles('build.gradle') }}-${{ hashFiles('dependencies.gradle') }}-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }}-${{ hashFiles('app/build.gradle') }} + - name: Get Dependencies + if: steps.cache-dependencies.outputs.cache-hit != 'true' + run: ./gradlew androidDependencies --stacktrace - name: Run Tests Firebase env: GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} diff --git a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt index d0d006e4..f77e6f35 100644 --- a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt +++ b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt @@ -6,4 +6,8 @@ class AppSchedulers( val mainThread: Scheduler, val io: Scheduler, val computation: Scheduler -) +) { + fun changePublicApi() { + + } +} From 01fb19c8bc02b6517d99305bc650a1e389a23105 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 00:59:39 +0200 Subject: [PATCH 120/621] Remove empty method (#584) --- .../main/java/com/jraska/github/client/rx/AppSchedulers.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt index f77e6f35..d0d006e4 100644 --- a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt +++ b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt @@ -6,8 +6,4 @@ class AppSchedulers( val mainThread: Scheduler, val io: Scheduler, val computation: Scheduler -) { - fun changePublicApi() { - - } -} +) From a25e057848e2e3f824aad9fccf4969824f4c4b30 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 7 Aug 2021 23:02:57 +0000 Subject: [PATCH 121/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bb1e4ef2..a6a75216 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.2' - versionCode 123 + versionName '0.33.3' + versionCode 124 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 1c21504f7ad464aa8cd53e7b804e8f4504eb224b Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 16:18:18 +0200 Subject: [PATCH 122/621] Minor fixes of Lint found issues (#585) * Align dependency version, resolve AS inspection results * Bit more fixes --- .../com/jraska/github/client/TestUITestApp.kt | 4 +-- app/src/debug/AndroidManifest.xml | 1 - .../test/FakeDeepLinkRecordingModule.kt | 3 +-- .../java/com/jraska/github/client/Owner.kt | 2 +- .../github/client/http/FakeHttpModule.kt | 1 - .../github/client/http/MapDispatcher.kt | 2 +- .../github/client/about/AboutActivity.kt | 2 +- .../config/debug/ui/BooleanConfigModel.kt | 1 - .../client/inappupdate/UpdateChecker.kt | 1 - .../client/push/ConfigAsPropertyCommand.kt | 2 +- .../client/repo/model/GitHubPullRequest.kt | 1 - .../client/repo/model/RepoRepository.kt | 1 - feature/users/build.gradle | 2 +- .../client/users/test/TestUsersComponent.kt | 5 ++-- .../client/users/test/UsersActivityTest.kt | 2 +- .../client/users/model/GitHubUserDetail.kt | 27 ------------------- plugins/build.gradle | 6 ++--- .../firebase/report/TestResultsReporter.kt | 3 +-- .../github/client/release/ReleasePlugin.kt | 1 - .../client/release/data/GitHubApiFactory.kt | 1 - .../client/release/data/GitHubApiImpl.kt | 2 +- .../client/release/data/RetrofitGitHubApi.kt | 2 +- .../gradle/buildtime/BuildDataFactory.kt | 10 +++---- .../jraska/gradle/buildtime/BuildReporter.kt | 2 +- .../com/jraska/lint/LintAnalyticsReporter.kt | 2 +- .../com/jraska/lint/LintReporterPlugin.kt | 4 +-- .../java/com/jraska/lint/LintXmlParser.kt | 2 +- .../com/jraska/module/ModuleStatsReporter.kt | 2 +- .../extract/StatisticsGradleExtractor.kt | 12 +++------ 29 files changed, 31 insertions(+), 75 deletions(-) diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index d1e9e0ec..868e3344 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -5,8 +5,8 @@ import androidx.test.platform.app.InstrumentationRegistry import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.FakeHttpModule -import com.jraska.github.client.users.test.DeepLinkRecordingComponent -import com.jraska.github.client.users.test.FakeDeepLinkRecordingModule +import com.jraska.github.client.android.test.DeepLinkRecordingComponent +import com.jraska.github.client.android.test.FakeDeepLinkRecordingModule import dagger.BindsInstance import dagger.Component import javax.inject.Singleton diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index c104b5f4..f346446c 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -3,6 +3,5 @@ xmlns:android="http://schemas.android.com/apk/res/android" package="com.jraska.github.client"> -
diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt index 2b17be4b..923922a6 100644 --- a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeDeepLinkRecordingModule.kt @@ -1,7 +1,6 @@ -package com.jraska.github.client.users.test +package com.jraska.github.client.android.test import androidx.test.platform.app.InstrumentationRegistry -import com.jraska.github.client.android.test.DeepLinksRecorder import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.LinkLauncher import dagger.Module diff --git a/core-api/src/main/java/com/jraska/github/client/Owner.kt b/core-api/src/main/java/com/jraska/github/client/Owner.kt index e04c4d34..10f521e7 100644 --- a/core-api/src/main/java/com/jraska/github/client/Owner.kt +++ b/core-api/src/main/java/com/jraska/github/client/Owner.kt @@ -16,5 +16,5 @@ package com.jraska.github.client enum class Owner { CORE_TEAM, USERS_TEAM, - UNKNOWN // Stale! Can be deleted at any moment during resource key audit. + UNKNOWN_STALE // Stale! Can be deleted at any moment during resource key audit. } diff --git a/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt b/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt index d332ddc0..97d74b31 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/FakeHttpModule.kt @@ -2,7 +2,6 @@ package com.jraska.github.client.http import dagger.Module import dagger.Provides -import okhttp3.mockwebserver.MockWebServer import javax.inject.Singleton @Module diff --git a/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt b/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt index f4f7aef1..25777f9f 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/MapDispatcher.kt @@ -21,7 +21,7 @@ class MapDispatcher : Dispatcher() { 1 -> return matchingEntries.single().responseFactory(request) 0 -> throw IllegalStateException("No mocked response found for request: $request") - else -> throw IllegalStateException("Multiple matched mocked responses for request: $request,\nmatches: ${matchingEntries}") + else -> throw IllegalStateException("Multiple matched mocked responses for request: $request,\nmatches: $matchingEntries") } } diff --git a/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt b/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt index 026060f7..d2a3c005 100644 --- a/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt +++ b/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt @@ -32,7 +32,7 @@ internal class AboutActivity : BaseActivity() { aboutRecycler.adapter = epoxyAdapter } - private fun createModels(): List>? { + private fun createModels(): List> { return listOf( DescriptionModel(viewModel::onProjectDescriptionClick), VersionInfoModel(), diff --git a/feature/config-debug/src/main/java/com/jraska/github/client/config/debug/ui/BooleanConfigModel.kt b/feature/config-debug/src/main/java/com/jraska/github/client/config/debug/ui/BooleanConfigModel.kt index 46d701b2..633895e1 100644 --- a/feature/config-debug/src/main/java/com/jraska/github/client/config/debug/ui/BooleanConfigModel.kt +++ b/feature/config-debug/src/main/java/com/jraska/github/client/config/debug/ui/BooleanConfigModel.kt @@ -2,7 +2,6 @@ package com.jraska.github.client.config.debug.ui import android.view.View import android.widget.CompoundButton -import android.widget.Switch import com.airbnb.epoxy.EpoxyModel import com.jraska.github.client.config.MutableConfigDef import com.jraska.github.client.config.debug.MutableConfig diff --git a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateChecker.kt b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateChecker.kt index a8d2d283..ef91ea69 100644 --- a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateChecker.kt +++ b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateChecker.kt @@ -1,6 +1,5 @@ package com.jraska.github.client.inappupdate -import android.view.View import com.google.android.play.core.appupdate.AppUpdateInfo import com.google.android.play.core.install.model.AppUpdateType import com.google.android.play.core.install.model.InstallStatus diff --git a/feature/push/src/main/java/com/jraska/github/client/push/ConfigAsPropertyCommand.kt b/feature/push/src/main/java/com/jraska/github/client/push/ConfigAsPropertyCommand.kt index 71355a55..84adb833 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/ConfigAsPropertyCommand.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/ConfigAsPropertyCommand.kt @@ -14,7 +14,7 @@ internal class ConfigAsPropertyCommand @Inject constructor( override fun execute(action: PushAction): BooleanResult { val key = action.parameters["config_key"] ?: return FAILURE - val value = config.getString(Config.Key(key, Owner.UNKNOWN)) + val value = config.getString(Config.Key(key, Owner.UNKNOWN_STALE)) analyticsProperty.setUserProperty(key, value) return BooleanResult.SUCCESS } diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubPullRequest.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubPullRequest.kt index 6b1350a5..2b1e3dec 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubPullRequest.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubPullRequest.kt @@ -1,7 +1,6 @@ package com.jraska.github.client.repo.model import androidx.annotation.Keep -import com.google.gson.annotations.Expose import com.google.gson.annotations.SerializedName @Keep diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt index 9dac2188..99849d7b 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt @@ -1,7 +1,6 @@ package com.jraska.github.client.repo.model import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Single internal interface RepoRepository { fun getRepoDetail(owner: String, repoName: String): Observable diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 0f553e8b..0ba0828a 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -54,7 +54,7 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'org.assertj:assertj-core:3.19.0' + androidTestImplementation 'org.assertj:assertj-core:3.20.2' androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:rules:1.4.0' diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt index 9553639c..235af35c 100644 --- a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/TestUsersComponent.kt @@ -3,16 +3,15 @@ package com.jraska.github.client.users.test import android.content.Context import com.jraska.github.client.FakeCoreModule import com.jraska.github.client.FakeWebLinkModule +import com.jraska.github.client.android.test.DeepLinkRecordingComponent import com.jraska.github.client.android.test.FakeAndroidCoreModule +import com.jraska.github.client.android.test.FakeDeepLinkRecordingModule import com.jraska.github.client.core.android.AppBaseComponent import com.jraska.github.client.core.android.CoreAndroidModule import com.jraska.github.client.http.FakeHttpModule -import com.jraska.github.client.http.HttpTest import com.jraska.github.client.users.UsersModule import dagger.BindsInstance import dagger.Component -import dagger.Module -import dagger.Provides import javax.inject.Singleton @Singleton diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt index a0cfb55e..e5dceecd 100644 --- a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt @@ -3,9 +3,9 @@ package com.jraska.github.client.users.test import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.matcher.ViewMatchers.withText -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule import com.jraska.github.client.android.test.http.assetJson +import com.jraska.github.client.android.test.usingLinkRecording import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.users.ui.UsersActivity import okhttp3.mockwebserver.MockResponse diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUserDetail.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUserDetail.kt index d0299783..a2cc13fa 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUserDetail.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUserDetail.kt @@ -25,33 +25,6 @@ internal class GitHubUserDetail { @SerializedName("html_url") @Expose var htmlUrl: String? = null - @SerializedName("followers_url") - @Expose - var followersUrl: String? = null - @SerializedName("following_url") - @Expose - var followingUrl: String? = null - @SerializedName("gists_url") - @Expose - var gistsUrl: String? = null - @SerializedName("starred_url") - @Expose - var starredUrl: String? = null - @SerializedName("subscriptions_url") - @Expose - var subscriptionsUrl: String? = null - @SerializedName("organizations_url") - @Expose - var organizationsUrl: String? = null - @SerializedName("repos_url") - @Expose - var reposUrl: String? = null - @SerializedName("events_url") - @Expose - var eventsUrl: String? = null - @SerializedName("received_events_url") - @Expose - var receivedEventsUrl: String? = null @SerializedName("type") @Expose var type: String? = null diff --git a/plugins/build.gradle b/plugins/build.gradle index d958d87d..ccdb2fd8 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" } } @@ -17,7 +17,7 @@ repositories { dependencies { implementation gradleApi() - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.10" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.21" implementation 'com.mixpanel:mixpanel-java:1.4.4' implementation retrofit @@ -26,7 +26,7 @@ dependencies { implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.19.0' + testImplementation 'org.assertj:assertj-core:3.20.2' testImplementation okHttpMockWebServer } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt index 6fdb196e..19e23b52 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt @@ -63,7 +63,6 @@ class TestResultsReporter( } companion object { - private val FLAG_ICON = "\uD83C\uDFC1" - private val SINGLE_NAME_FOR_TEST_REPORTS_USER = "Test Reporter" + private const val FLAG_ICON = "\uD83C\uDFC1" } } diff --git a/plugins/src/main/java/com/jraska/github/client/release/ReleasePlugin.kt b/plugins/src/main/java/com/jraska/github/client/release/ReleasePlugin.kt index 5b9fc4de..718c14b1 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/ReleasePlugin.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/ReleasePlugin.kt @@ -3,7 +3,6 @@ package com.jraska.github.client.release import org.gradle.api.Plugin import org.gradle.api.Project import java.io.ByteArrayOutputStream -import java.io.File class ReleasePlugin : Plugin { override fun apply(project: Project) { diff --git a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiFactory.kt b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiFactory.kt index 088d8dd0..22ad431d 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiFactory.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiFactory.kt @@ -6,7 +6,6 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import java.lang.IllegalStateException object GitHubApiFactory { fun create(environment: Environment): GitHubApi { diff --git a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt index 931bfc3b..4bbf7055 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/data/GitHubApiImpl.kt @@ -28,7 +28,7 @@ class GitHubApiImpl( val releaseId = api.getRelease(release).execute().body()!!.id println(releaseId) - api.setReleseBody(releaseId, ReleaseBodyDto(body)).execute() + api.setReleaseBody(releaseId, ReleaseBodyDto(body)).execute() } override fun listMergedPrsWithoutMilestone(): List { diff --git a/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt b/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt index 571f6425..52ded717 100644 --- a/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt +++ b/plugins/src/main/java/com/jraska/github/client/release/data/RetrofitGitHubApi.kt @@ -24,7 +24,7 @@ interface RetrofitGitHubApi { fun getRelease(@Path("tag") tag: String): Call @PATCH("releases/{release_id}") - fun setReleseBody(@Path("release_id") id: Int, @Body relaseBody: ReleaseBodyDto): Call + fun setReleaseBody(@Path("release_id") id: Int, @Body releaseBody: ReleaseBodyDto): Call @PATCH("issues/{issue_number}") fun assignMilestone(@Path("issue_number") prNumber: Int, @Body dto: AssignMilestoneDto): Call diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt index 8ab5e5bd..b9695f66 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt @@ -67,12 +67,10 @@ object BuildDataFactory { } private fun Gradle.environment(): Environment { - return if (rootProject.hasProperty("android.injected.invoked.from.ide")) { - Environment.IDE - } else if (System.getenv("CI") != null) { - Environment.CI - } else { - Environment.CMD + return when { + rootProject.hasProperty("android.injected.invoked.from.ide") -> Environment.IDE + System.getenv("CI") != null -> Environment.CI + else -> Environment.CMD } } diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt index 41224053..56641f99 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildReporter.kt @@ -60,6 +60,6 @@ class BuildReporter( } companion object { - private val STOPWATCH_ICON = "\u23F1" + private const val STOPWATCH_ICON = "\u23F1" } } diff --git a/plugins/src/main/java/com/jraska/lint/LintAnalyticsReporter.kt b/plugins/src/main/java/com/jraska/lint/LintAnalyticsReporter.kt index b2840724..ba6492c3 100644 --- a/plugins/src/main/java/com/jraska/lint/LintAnalyticsReporter.kt +++ b/plugins/src/main/java/com/jraska/lint/LintAnalyticsReporter.kt @@ -72,6 +72,6 @@ class LintAnalyticsReporter( } companion object { - private val GRAPH_ICON = "\uD83D\uDCC9" + private const val GRAPH_ICON = "\uD83D\uDCC9" } } diff --git a/plugins/src/main/java/com/jraska/lint/LintReporterPlugin.kt b/plugins/src/main/java/com/jraska/lint/LintReporterPlugin.kt index 5092e0cd..cce2b3c7 100644 --- a/plugins/src/main/java/com/jraska/lint/LintReporterPlugin.kt +++ b/plugins/src/main/java/com/jraska/lint/LintReporterPlugin.kt @@ -5,8 +5,8 @@ import org.gradle.api.Project class LintReporterPlugin : Plugin { override fun apply(project: Project) { - project.afterEvaluate { - it.tasks.register("lintStatisticsReport") { lintReportTask -> + project.afterEvaluate { theProject -> + theProject.tasks.register("lintStatisticsReport") { lintReportTask -> lintReportTask.doLast { LintReportProcess.create().executeReport(lintReportTask.project) } diff --git a/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt b/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt index 04397a22..fce03e17 100644 --- a/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt +++ b/plugins/src/main/java/com/jraska/lint/LintXmlParser.kt @@ -74,6 +74,6 @@ class LintXmlParser( } companion object { - private val MAX_TEXT_LENGTH = 200 + private const val MAX_TEXT_LENGTH = 200 } } diff --git a/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt b/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt index f29326ed..bedfd06a 100644 --- a/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt +++ b/plugins/src/main/java/com/jraska/module/ModuleStatsReporter.kt @@ -81,6 +81,6 @@ class ModuleStatsReporter( } companion object { - private val GRAPH_ICON = "\uD83D\uDCC9" + private const val GRAPH_ICON = "\uD83D\uDCC9" } } diff --git a/plugins/src/main/java/com/jraska/module/extract/StatisticsGradleExtractor.kt b/plugins/src/main/java/com/jraska/module/extract/StatisticsGradleExtractor.kt index de947585..4046e838 100644 --- a/plugins/src/main/java/com/jraska/module/extract/StatisticsGradleExtractor.kt +++ b/plugins/src/main/java/com/jraska/module/extract/StatisticsGradleExtractor.kt @@ -54,7 +54,8 @@ class StatisticsGradleExtractor { private fun extractDependencies(module: Project): List { val metadata = module.moduleMetadata() - val dependencies = module.configurations + + return module.configurations .filter { CONFIGURATION_TO_LOOK.containsKey(it.name) } .flatMap { configuration -> val projectDependencies = configuration.allDependencies.filterIsInstance(ProjectDependency::class.java) @@ -72,8 +73,6 @@ class StatisticsGradleExtractor { ) } }.distinct() - - return dependencies } private fun traverseAndAddChildren(firstLevelDependency: ResolvedDependency): Set { @@ -121,11 +120,8 @@ class StatisticsGradleExtractor { private fun countLines(file: File): Int { var lines = 0 val reader = BufferedReader(FileReader(file)) - try { - while (reader.readLine() != null) lines++ - reader.close() - } finally { - reader.close() + reader.use { + while (it.readLine() != null) lines++ } return lines } From 5215a0f5f17df968dba1ef4da821b1075fe1ddda Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 8 Aug 2021 16:27:55 +0200 Subject: [PATCH 123/621] Setting exported property + intent flags for Android 12 (#586) --- app-partial-users/src/main/AndroidManifest.xml | 3 ++- app/src/main/AndroidManifest.xml | 3 ++- core/src/main/AndroidManifest.xml | 3 ++- feature/push/src/main/AndroidManifest.xml | 3 ++- .../com/jraska/github/client/push/ShowNotificationCommand.kt | 2 +- feature/shortcuts/src/main/AndroidManifest.xml | 3 ++- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app-partial-users/src/main/AndroidManifest.xml b/app-partial-users/src/main/AndroidManifest.xml index b49a574e..5d1c7bb7 100644 --- a/app-partial-users/src/main/AndroidManifest.xml +++ b/app-partial-users/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ tools:ignore="GoogleAppIndexingWarning"> + android:label="@string/app_name" + android:exported="true"> diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 539db978..dddd9533 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,8 @@ tools:ignore="GoogleAppIndexingWarning"> + android:label="@string/app_name" + android:exported="true"> diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 21d5b958..228d5cc1 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -2,7 +2,8 @@ package="com.jraska.github.client.core"> - + diff --git a/feature/push/src/main/AndroidManifest.xml b/feature/push/src/main/AndroidManifest.xml index 81717371..57753a69 100644 --- a/feature/push/src/main/AndroidManifest.xml +++ b/feature/push/src/main/AndroidManifest.xml @@ -1,7 +1,8 @@ - + diff --git a/feature/push/src/main/java/com/jraska/github/client/push/ShowNotificationCommand.kt b/feature/push/src/main/java/com/jraska/github/client/push/ShowNotificationCommand.kt index 0079a203..2896e4b9 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/ShowNotificationCommand.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/ShowNotificationCommand.kt @@ -24,7 +24,7 @@ internal class ShowNotificationCommand @Inject constructor( uriActivityIntent.`package` = context.packageName uriActivityIntent.data = Uri.parse(deepLink) - val linkContentIntent = PendingIntent.getActivity(context, 0, uriActivityIntent, 0) + val linkContentIntent = PendingIntent.getActivity(context, 0, uriActivityIntent, PendingIntent.FLAG_IMMUTABLE) val notification = NotificationCompat.Builder(context, NotificationSetup.PUSH_CHANNEL_ID) .setSmallIcon(android.R.drawable.ic_dialog_info) diff --git a/feature/shortcuts/src/main/AndroidManifest.xml b/feature/shortcuts/src/main/AndroidManifest.xml index 3ac189eb..bf3ad528 100644 --- a/feature/shortcuts/src/main/AndroidManifest.xml +++ b/feature/shortcuts/src/main/AndroidManifest.xml @@ -3,7 +3,8 @@ package="com.jraska.github.client.shortcuts"> - + From 4984b00e36b3eaac68ccf10f4d9b99e60cd7b1cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 8 Aug 2021 14:41:05 +0000 Subject: [PATCH 124/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a6a75216..4dbe9da4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.3' - versionCode 124 + versionName '0.33.4' + versionCode 125 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 97353710c72c39c4db0aa3b33a68c78baabe6e65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Aug 2021 00:43:40 +0000 Subject: [PATCH 125/621] Bump firebase-bom from 28.3.0 to 28.3.1 (#589) Bumps firebase-bom from 28.3.0 to 28.3.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4dbe9da4..9ee3f7be 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.4.0' - implementation platform('com.google.firebase:firebase-bom:28.3.0') + implementation platform('com.google.firebase:firebase-bom:28.3.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index e8b4b4bf..9a8d1c60 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.3.0') + implementation platform('com.google.firebase:firebase-bom:28.3.1') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From dcd48a1d1846702e8597fcd5ce3429543ab1fae2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Aug 2021 08:14:21 +0000 Subject: [PATCH 126/621] Bump media from 1.4.0 to 1.4.1 (#587) Bumps media from 1.4.0 to 1.4.1. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9ee3f7be..0969b1cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.6.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'androidx.media:media:1.4.0' + implementation 'androidx.media:media:1.4.1' implementation platform('com.google.firebase:firebase-bom:28.3.1') implementation 'com.google.firebase:firebase-core' From 6b81a815d69f357172cc0fcf697b08e7bda5be00 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 12 Aug 2021 23:41:09 +0200 Subject: [PATCH 127/621] Fix Firebase Test Lab XML parsing (#591) --- .../github/client/firebase/report/FirebaseResultExtractor.kt | 2 +- .../client/firebase/report/FirebaseResultExtractorTest.kt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt index 3bc721ef..50915572 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt @@ -17,7 +17,7 @@ class FirebaseResultExtractor( private val device: Device ) { fun extract(xml: String): TestSuiteResult { - val testSuiteNode = XmlParser().parseText(xml) + val testSuiteNode = (XmlParser().parseText(xml).get("testsuite") as NodeList).first() as Node val testsCount = testSuiteNode.attributeInt("tests") val flakyTests = testSuiteNode.attributeInt("flakes") diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt index 78257487..8976dd02 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt @@ -76,6 +76,7 @@ class FirebaseResultExtractorTest { companion object { val SUCCESS_RESULT = """ + @@ -93,9 +94,11 @@ class FirebaseResultExtractorTest { + """.trimIndent() val ERROR_RESULT = """ + @@ -115,6 +118,7 @@ class FirebaseResultExtractorTest { + """.trimIndent() } } From f76bf23a1738146a95ea5e00489b469037ba4b09 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 12 Aug 2021 23:45:53 +0200 Subject: [PATCH 128/621] Add no-op long click revert action (#590) --- .../github/client/espressox/LongClickPatch.kt | 23 +++++++++++++++++++ .../client/users/UsersActivityFlowTest.kt | 5 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 app/src/androidTest/java/com/jraska/github/client/espressox/LongClickPatch.kt diff --git a/app/src/androidTest/java/com/jraska/github/client/espressox/LongClickPatch.kt b/app/src/androidTest/java/com/jraska/github/client/espressox/LongClickPatch.kt new file mode 100644 index 00000000..1325fa90 --- /dev/null +++ b/app/src/androidTest/java/com/jraska/github/client/espressox/LongClickPatch.kt @@ -0,0 +1,23 @@ +package com.jraska.github.client.espressox + +import android.view.View +import androidx.test.espresso.UiController +import androidx.test.espresso.ViewAction +import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom +import org.hamcrest.Matcher + +// Action to do nothing and just retry again in case of accidental long tap. +// https://issuetracker.google.com/issues/37078920 +object LongClickPatch : ViewAction { + override fun getConstraints(): Matcher { + return isAssignableFrom(View::class.java) + } + + override fun getDescription(): String { + return "Handle tap->long click."; + } + + override fun perform(uiController: UiController?, view: View?) { + // do nothing as we just want to click again. + } +} diff --git a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt index 20132196..277703d3 100644 --- a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt @@ -15,6 +15,7 @@ import com.google.firebase.analytics.FirebaseAnalytics import com.jraska.github.client.EnableConfigRule import com.jraska.github.client.R import com.jraska.github.client.android.test.http.assetJson +import com.jraska.github.client.espressox.LongClickPatch import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.http.onUrlPartReturn import com.jraska.github.client.http.onUrlReturn @@ -57,7 +58,7 @@ class UsersActivityFlowTest { rule.launchActivity(null) mockWebServer.enqueue(assetJson("response/users.json")) - onView(withId(R.id.action_settings)).perform(click()) + onView(withId(R.id.action_settings)).perform(click(LongClickPatch)) onView(withHint("Value")).perform(ViewActions.typeText("0.01")) onView(withText("Purchase")).perform(click()) @@ -71,7 +72,7 @@ class UsersActivityFlowTest { rule.launchActivity(null) mockWebServer.enqueue(assetJson("response/users.json")) - onView(withId(R.id.action_about)).perform(click()) + onView(withId(R.id.action_about)).perform(click(LongClickPatch)) onView(withText("by Josef Raska")).check(matches(isDisplayed())) } From 2b6c4c57d2900da6632a18427b87efa69c837771 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Aug 2021 21:52:18 +0000 Subject: [PATCH 129/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0969b1cc..75196ba8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.4' - versionCode 125 + versionName '0.33.5' + versionCode 126 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 32650775f278958ee1daec065161f63aa0ea68c7 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 17 Aug 2021 23:53:50 +0200 Subject: [PATCH 130/621] Update again Firebase XML parsing (#594) --- .../client/firebase/report/FirebaseResultExtractor.kt | 7 ++++++- .../client/firebase/report/FirebaseResultExtractorTest.kt | 2 -- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt index 50915572..9c51b587 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt @@ -17,7 +17,12 @@ class FirebaseResultExtractor( private val device: Device ) { fun extract(xml: String): TestSuiteResult { - val testSuiteNode = (XmlParser().parseText(xml).get("testsuite") as NodeList).first() as Node + val rootNode = XmlParser().parseText(xml) + val testSuiteNode = if(rootNode.name() == "testsuite") { + rootNode + } else { + (rootNode.get("testsuite") as NodeList).first() as Node + } val testsCount = testSuiteNode.attributeInt("tests") val flakyTests = testSuiteNode.attributeInt("flakes") diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt index 8976dd02..b7b4cfe4 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt @@ -76,7 +76,6 @@ class FirebaseResultExtractorTest { companion object { val SUCCESS_RESULT = """ - @@ -94,7 +93,6 @@ class FirebaseResultExtractorTest { - """.trimIndent() val ERROR_RESULT = """ From 75a7db6ba2ee07dcd03dfca117dbb2fbbb6a35bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Aug 2021 22:01:44 +0000 Subject: [PATCH 131/621] Bump rxjava from 3.0.13 to 3.1.0 (#593) Bumps [rxjava](https://github.com/ReactiveX/RxJava) from 3.0.13 to 3.1.0. - [Release notes](https://github.com/ReactiveX/RxJava/releases) - [Commits](https://github.com/ReactiveX/RxJava/compare/v3.0.13...v3.1.0) --- updated-dependencies: - dependency-name: io.reactivex.rxjava3:rxjava dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core-api/build.gradle b/core-api/build.gradle index abce46be..8c5b7a47 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'io.reactivex.rxjava3:rxjava:3.0.13' + implementation 'io.reactivex.rxjava3:rxjava:3.1.0' implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index cfce9911..696e34c5 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'junit:junit:4.13.2' - implementation 'io.reactivex.rxjava3:rxjava:3.0.13' + implementation 'io.reactivex.rxjava3:rxjava:3.1.0' implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index a94dc4e3..befafe0f 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.google.android.play:core:1.10.0' - implementation 'io.reactivex.rxjava3:rxjava:3.0.13' + implementation 'io.reactivex.rxjava3:rxjava:3.1.0' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 7e08e75b..e1da8767 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'com.google.android.material:material:1.4.0' - implementation 'io.reactivex.rxjava3:rxjava:3.0.13' + implementation 'io.reactivex.rxjava3:rxjava:3.1.0' implementation 'com.jakewharton.timber:timber:4.7.1' testImplementation 'junit:junit:4.13.2' From 58fa2ce71bb70d0024044af21a8544f173646df2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Aug 2021 22:19:48 +0000 Subject: [PATCH 132/621] Bump timber from 4.7.1 to 5.0.1 (#592) * Bump timber from 4.7.1 to 5.0.1 Bumps [timber](https://github.com/JakeWharton/timber) from 4.7.1 to 5.0.1. - [Release notes](https://github.com/JakeWharton/timber/releases) - [Changelog](https://github.com/JakeWharton/timber/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/timber/compare/4.7.1...5.0.1) --- updated-dependencies: - dependency-name: com.jakewharton.timber:timber dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Be explicit in settings for Timber 5 Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- build.gradle | 7 ------- core/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/settings/build.gradle | 1 + feature/users/build.gradle | 2 +- 9 files changed, 8 insertions(+), 14 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 3e3af812..7c5e4df9 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' implementation rootProject.ext.retrofit - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation rootProject.ext.fresco diff --git a/app/build.gradle b/app/build.gradle index 75196ba8..2e5374f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -142,7 +142,7 @@ dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.okHttpLoggingInterceptor - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.code.gson:gson:2.8.7' diff --git a/build.gradle b/build.gradle index b6add415..8558961c 100644 --- a/build.gradle +++ b/build.gradle @@ -46,13 +46,6 @@ subprojects { enabled = false } } - } else { - // https://github.com/JakeWharton/timber/issues/408 - it.afterEvaluate { - if (it.plugins.hasPlugin("com.android.application") || it.plugins.hasPlugin("com.android.library")) { - it.android.lintOptions.disable = ["LogNotTimber", "StringFormatInTimber", "ThrowableNotAtBeginning", "BinaryOperationInTimber", "TimberArgCount", "TimberArgTypes", "TimberTagLength", "TimberExceptionLogging"] - } - } } } diff --git a/core/build.gradle b/core/build.gradle index 3aae3dad..b559001f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' implementation rootProject.ext.retrofit diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index befafe0f..beb38417 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'com.google.android.play:core:1.10.0' implementation 'io.reactivex.rxjava3:rxjava:3.1.0' - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index e1da8767..f0219b62 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'io.reactivex.rxjava3:rxjava:3.1.0' - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 9a8d1c60..10037ed2 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation rootProject.ext.dagger kapt rootProject.ext.daggerAnnotationProcessor - implementation 'com.jakewharton.timber:timber:4.7.1' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation rootProject.ext.okHttp implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index b5864543..b11e469f 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation rootProject.ext.okHttp implementation rootProject.ext.dagger diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 0ba0828a..10e0a6f5 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -63,5 +63,5 @@ dependencies { androidTestImplementation project(':core-android-testing') androidTestImplementation project(':core') androidTestImplementation okHttpMockWebServer - androidTestImplementation 'com.jakewharton.timber:timber:4.7.1' + androidTestImplementation 'com.jakewharton.timber:timber:5.0.1' } From 114d7c42f8537717365b676ffa91d34065b7e2ff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 17 Aug 2021 22:22:01 +0000 Subject: [PATCH 133/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2e5374f8..f5bc4f4b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.5' - versionCode 126 + versionName '0.33.6' + versionCode 127 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From e7e7dace8c552c11a3504029b40680eff11ace6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Aug 2021 21:12:33 +0000 Subject: [PATCH 134/621] Bump firebase-bom from 28.3.1 to 28.4.0 (#596) Bumps firebase-bom from 28.3.1 to 28.4.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f5bc4f4b..f8d72b59 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' implementation 'androidx.media:media:1.4.1' - implementation platform('com.google.firebase:firebase-bom:28.3.1') + implementation platform('com.google.firebase:firebase-bom:28.4.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 10037ed2..5deb9cbc 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation platform('com.google.firebase:firebase-bom:28.3.1') + implementation platform('com.google.firebase:firebase-bom:28.4.0') implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 38ec4c4edc10f6da9bc23d06b7e5203cc96d00f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Aug 2021 21:20:03 +0000 Subject: [PATCH 135/621] Bump gson from 2.8.7 to 2.8.8 (#595) Bumps [gson](https://github.com/google/gson) from 2.8.7 to 2.8.8. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.8.7...gson-parent-2.8.8) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f8d72b59..1cf7c3b4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.code.gson:gson:2.8.7' + implementation 'com.google.code.gson:gson:2.8.8' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation 'androidx.test:runner:1.4.0' diff --git a/core/build.gradle b/core/build.gradle index b559001f..0c219f6b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -45,7 +45,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.7' + implementation 'com.google.code.gson:gson:2.8.8' implementation rootProject.ext.okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 857112c1..baf12f81 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.7' + implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 10e0a6f5..22b4a351 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter implementation rootProject.ext.retrofitRxJavaAdapter - implementation 'com.google.code.gson:gson:2.8.7' + implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From 2168020aac34328b4e36ee7f928b1515f72dad84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 11:33:18 +0200 Subject: [PATCH 136/621] Bump kotlin_version from 1.5.21 to 1.5.30 (#599) Bumps `kotlin_version` from 1.5.21 to 1.5.30. Updates `kotlin-gradle-plugin` from 1.5.21 to 1.5.30 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.21...v1.5.30) Updates `kotlin-stdlib` from 1.5.21 to 1.5.30 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.5.21...v1.5.30) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8558961c..6de4fb1c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.21' + ext.kotlin_version = '1.5.30' repositories { google() mavenCentral() From 218ed4d23c6c34d4398f2442ba9618f00c194e68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Aug 2021 11:33:34 +0200 Subject: [PATCH 137/621] Bump gradle from 7.0.0 to 7.0.1 (#598) Bumps gradle from 7.0.0 to 7.0.1. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6de4fb1c..8403c4e8 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.0' + classpath 'com.android.tools.build:gradle:7.0.1' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' From f050003d23efad552270f5ed61720718be286817 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 30 Aug 2021 09:58:10 +0000 Subject: [PATCH 138/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1cf7c3b4..861f42c1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.6' - versionCode 127 + versionName '0.33.7' + versionCode 128 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 2219d8be546c237cf3a19bdccb068800d250ebc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 13:25:50 +0200 Subject: [PATCH 139/621] Bump gradle from 7.0.1 to 7.0.2 (#600) Bumps gradle from 7.0.1 to 7.0.2. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8403c4e8..00a7ebc8 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.1' + classpath 'com.android.tools.build:gradle:7.0.2' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' From 40c0dfa3b5ffd12aa02ba3816b5e9d8c0cd00a54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 13:26:00 +0200 Subject: [PATCH 140/621] Bump core from 1.10.0 to 1.10.1 (#601) Bumps core from 1.10.0 to 1.10.1. --- updated-dependencies: - dependency-name: com.google.android.play:core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/in-app-update/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index beb38417..f1379b64 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -22,7 +22,7 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'com.google.android.play:core:1.10.0' + implementation 'com.google.android.play:core:1.10.1' implementation 'io.reactivex.rxjava3:rxjava:3.1.0' implementation 'com.jakewharton.timber:timber:5.0.1' From 923b3c8994e880ed03ab1a4f91a303d4df70f837 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 13:26:10 +0200 Subject: [PATCH 141/621] Bump rxjava from 3.1.0 to 3.1.1 (#602) Bumps [rxjava](https://github.com/ReactiveX/RxJava) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/ReactiveX/RxJava/releases) - [Commits](https://github.com/ReactiveX/RxJava/compare/v3.1.0...v3.1.1) --- updated-dependencies: - dependency-name: io.reactivex.rxjava3:rxjava dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core-api/build.gradle b/core-api/build.gradle index 8c5b7a47..68ffbe11 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'io.reactivex.rxjava3:rxjava:3.1.0' + implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 696e34c5..8be3b664 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'junit:junit:4.13.2' - implementation 'io.reactivex.rxjava3:rxjava:3.1.0' + implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index f1379b64..6b022b09 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'com.google.android.play:core:1.10.1' - implementation 'io.reactivex.rxjava3:rxjava:3.1.0' + implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index f0219b62..e5a75c2d 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'com.google.android.material:material:1.4.0' - implementation 'io.reactivex.rxjava3:rxjava:3.1.0' + implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' From ad50b4114d4c2cc1bf0c538e5aa5af1a3f446198 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 14 Sep 2021 13:50:13 +0000 Subject: [PATCH 142/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 861f42c1..00a69fa5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.7' - versionCode 128 + versionName '0.33.8' + versionCode 129 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From cc39443dfb305caabd14683c26ab9a53ac49c453 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:18:16 +0200 Subject: [PATCH 143/621] Update to Gradle 7.2 (#604) --- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 zcmY&<19zBR)MXm8v2EM7ZQHi-#I|kQZfv7Tn#Q)%81v4zX3d)U4d4 zYYc!v@NU%|U;_sM`2z(4BAilWijmR>4U^KdN)D8%@2KLcqkTDW%^3U(Wg>{qkAF z&RcYr;D1I5aD(N-PnqoEeBN~JyXiT(+@b`4Pv`;KmkBXYN48@0;iXuq6!ytn`vGp$ z6X4DQHMx^WlOek^bde&~cvEO@K$oJ}i`T`N;M|lX0mhmEH zuRpo!rS~#&rg}ajBdma$$}+vEhz?JAFUW|iZEcL%amAg_pzqul-B7Itq6Y_BGmOCC zX*Bw3rFz3R)DXpCVBkI!SoOHtYstv*e-May|+?b80ZRh$MZ$FerlC`)ZKt} zTd0Arf9N2dimjs>mg5&@sfTPsRXKXI;0L~&t+GH zkB<>wxI9D+k5VHHcB7Rku{Z>i3$&hgd9Mt_hS_GaGg0#2EHzyV=j=u5xSyV~F0*qs zW{k9}lFZ?H%@4hII_!bzao!S(J^^ZZVmG_;^qXkpJb7OyR*sPL>))Jx{K4xtO2xTr@St!@CJ=y3q2wY5F`77Tqwz8!&Q{f7Dp zifvzVV1!Dj*dxG%BsQyRP6${X+Tc$+XOG zzvq5xcC#&-iXlp$)L=9t{oD~bT~v^ZxQG;FRz|HcZj|^L#_(VNG)k{=_6|6Bs-tRNCn-XuaZ^*^hpZ@qwi`m|BxcF6IWc?_bhtK_cDZRTw#*bZ2`1@1HcB`mLUmo_>@2R&nj7&CiH zF&laHkG~7#U>c}rn#H)q^|sk+lc!?6wg0xy`VPn!{4P=u@cs%-V{VisOxVqAR{XX+ zw}R;{Ux@6A_QPka=48|tph^^ZFjSHS1BV3xfrbY84^=?&gX=bmz(7C({=*oy|BEp+ zYgj;<`j)GzINJA>{HeSHC)bvp6ucoE`c+6#2KzY9)TClmtEB1^^Mk)(mXWYvup02e%Ghm9qyjz#fO3bNGBX} zFiB>dvc1+If!>I10;qZk`?6pEd*(?bI&G*3YLt;MWw&!?=Mf7%^Op?qnyXWur- zwX|S^P>jF?{m9c&mmK-epCRg#WB+-VDe!2d2~YVoi%7_q(dyC{(}zB${!ElKB2D}P z7QNFM!*O^?FrPMGZ}wQ0TrQAVqZy!weLhu_Zq&`rlD39r*9&2sJHE(JT0EY5<}~x@ z1>P0!L2IFDqAB!($H9s2fI`&J_c+5QT|b#%99HA3@zUWOuYh(~7q7!Pf_U3u!ij5R zjFzeZta^~RvAmd_TY+RU@e}wQaB_PNZI26zmtzT4iGJg9U(Wrgrl>J%Z3MKHOWV(? zj>~Ph$<~8Q_sI+)$DOP^9FE6WhO09EZJ?1W|KidtEjzBX3RCLUwmj9qH1CM=^}MaK z59kGxRRfH(n|0*lkE?`Rpn6d^u5J6wPfi0WF(rucTv(I;`aW)3;nY=J=igkjsn?ED ztH&ji>}TW8)o!Jg@9Z}=i2-;o4#xUksQHu}XT~yRny|kg-$Pqeq!^78xAz2mYP9+4 z9gwAoti2ICvUWxE&RZ~}E)#M8*zy1iwz zHqN%q;u+f6Ti|SzILm0s-)=4)>eb5o-0K zbMW8ecB4p^6OuIX@u`f{>Yn~m9PINEl#+t*jqalwxIx=TeGB9(b6jA}9VOHnE$9sC zH`;epyH!k-3kNk2XWXW!K`L_G!%xOqk0ljPCMjK&VweAxEaZ==cT#;!7)X&C|X{dY^IY(e4D#!tx^vV3NZqK~--JW~wtXJ8X19adXim?PdN(|@o(OdgH3AiHts~?#QkolO?*=U_buYC&tQ3sc(O5HGHN~=6wB@dgIAVT$ z_OJWJ^&*40Pw&%y^t8-Wn4@l9gOl`uU z{Uda_uk9!Iix?KBu9CYwW9Rs=yt_lE11A+k$+)pkY5pXpocxIEJe|pTxwFgB%Kpr&tH;PzgOQ&m|(#Otm?@H^r`v)9yiR8v&Uy>d#TNdRfyN4Jk;`g zp+jr5@L2A7TS4=G-#O<`A9o;{En5!I8lVUG?!PMsv~{E_yP%QqqTxxG%8%KxZ{uwS zOT+EA5`*moN8wwV`Z=wp<3?~f#frmID^K?t7YL`G^(X43gWbo!6(q*u%HxWh$$^2EOq`Hj zp=-fS#Av+s9r-M)wGIggQ)b<@-BR`R8l1G@2+KODmn<_$Tzb7k35?e8;!V0G>`(!~ zY~qZz!6*&|TupOcnvsQYPbcMiJ!J{RyfezB^;fceBk znpA1XS)~KcC%0^_;ihibczSxwBuy;^ksH7lwfq7*GU;TLt*WmUEVQxt{ zKSfJf;lk$0XO8~48Xn2dnh8tMC9WHu`%DZj&a`2!tNB`5%;Md zBs|#T0Ktf?vkWQ)Y+q!At1qgL`C|nbzvgc(+28Q|4N6Geq)Il%+I5c@t02{9^=QJ?=h2BTe`~BEu=_u3xX2&?^zwcQWL+)7dI>JK0g8_`W1n~ zMaEP97X>Ok#=G*nkPmY`VoP8_{~+Rp7DtdSyWxI~?TZHxJ&=6KffcO2Qx1?j7=LZA z?GQt`oD9QpXw+s7`t+eeLO$cpQpl9(6h3_l9a6OUpbwBasCeCw^UB6we!&h9Ik@1zvJ`j4i=tvG9X8o34+N|y(ay~ho$f=l z514~mP>Z>#6+UxM<6@4z*|hFJ?KnkQBs_9{H(-v!_#Vm6Z4(xV5WgWMd3mB9A(>@XE292#k(HdI7P zJkQ2)`bQXTKlr}{VrhSF5rK9TsjtGs0Rs&nUMcH@$ZX_`Hh$Uje*)(Wd&oLW($hZQ z_tPt`{O@f8hZ<}?aQc6~|9iHt>=!%We3=F9yIfiqhXqp=QUVa!@UY@IF5^dr5H8$R zIh{=%S{$BHG+>~a=vQ={!B9B=<-ID=nyjfA0V8->gN{jRL>Qc4Rc<86;~aY+R!~Vs zV7MI~gVzGIY`B*Tt@rZk#Lg}H8sL39OE31wr_Bm%mn}8n773R&N)8B;l+-eOD@N$l zh&~Wz`m1qavVdxwtZLACS(U{rAa0;}KzPq9r76xL?c{&GaG5hX_NK!?)iq`t7q*F# zFoKI{h{*8lb>&sOeHXoAiqm*vV6?C~5U%tXR8^XQ9Y|(XQvcz*>a?%HQ(Vy<2UhNf zVmGeOO#v159KV@1g`m%gJ)XGPLa`a|?9HSzSSX{j;)xg>G(Ncc7+C>AyAWYa(k}5B3mtzg4tsA=C^Wfezb1&LlyrBE1~kNfeiubLls{C)!<%#m@f}v^o+7<VZ6!FZ;JeiAG@5vw7Li{flC8q1%jD_WP2ApBI{fQ}kN zhvhmdZ0bb5(qK@VS5-)G+@GK(tuF6eJuuV5>)Odgmt?i_`tB69DWpC~e8gqh!>jr_ zL1~L0xw@CbMSTmQflpRyjif*Y*O-IVQ_OFhUw-zhPrXXW>6X}+73IoMsu2?uuK3lT>;W#38#qG5tDl66A7Y{mYh=jK8Se!+f=N7%nv zYSHr6a~Nxd`jqov9VgII{%EpC_jFCEc>>SND0;}*Ja8Kv;G)MK7?T~h((c&FEBcQq zvUU1hW2^TX(dDCeU@~a1LF-(+#lz3997A@pipD53&Dr@III2tlw>=!iGabjXzbyUJ z4Hi~M1KCT-5!NR#I%!2Q*A>mqI{dpmUa_mW)%SDs{Iw1LG}0y=wbj@0ba-`q=0!`5 zr(9q1p{#;Rv2CY!L#uTbs(UHVR5+hB@m*zEf4jNu3(Kj$WwW|v?YL*F_0x)GtQC~! zzrnZRmBmwt+i@uXnk05>uR5&1Ddsx1*WwMrIbPD3yU*2By`71pk@gt{|H0D<#B7&8 z2dVmXp*;B)SWY)U1VSNs4ds!yBAj;P=xtatUx^7_gC5tHsF#vvdV;NmKwmNa1GNWZ zi_Jn-B4GnJ%xcYWD5h$*z^haku#_Irh818x^KB)3-;ufjf)D0TE#6>|zFf@~pU;Rs zNw+}c9S+6aPzxkEA6R%s*xhJ37wmgc)-{Zd1&mD5QT}4BQvczWr-Xim>(P^)52`@R z9+Z}44203T5}`AM_G^Snp<_KKc!OrA(5h7{MT^$ZeDsSr(R@^kI?O;}QF)OU zQ9-`t^ys=6DzgLcWt0U{Q(FBs22=r zKD%fLQ^5ZF24c-Z)J{xv?x$&4VhO^mswyb4QTIofCvzq+27*WlYm;h@;Bq%i;{hZA zM97mHI6pP}XFo|^pRTuWQzQs3B-8kY@ajLV!Fb?OYAO3jFv*W-_;AXd;G!CbpZt04iW`Ie^_+cQZGY_Zd@P<*J9EdRsc>c=edf$K|;voXRJ zk*aC@@=MKwR120(%I_HX`3pJ+8GMeO>%30t?~uXT0O-Tu-S{JA;zHoSyXs?Z;fy58 zi>sFtI7hoxNAdOt#3#AWFDW)4EPr4kDYq^`s%JkuO7^efX+u#-qZ56aoRM!tC^P6O zP(cFuBnQGjhX(^LJ(^rVe4-_Vk*3PkBCj!?SsULdmVr0cGJM^=?8b0^DuOFq>0*yA zk1g|C7n%pMS0A8@Aintd$fvRbH?SNdRaFrfoAJ=NoX)G5Gr}3-$^IGF+eI&t{I-GT zp=1fj)2|*ur1Td)+s&w%p#E6tDXX3YYOC{HGHLiCvv?!%%3DO$B$>A}aC;8D0Ef#b z{7NNqC8j+%1n95zq8|hFY`afAB4E)w_&7?oqG0IPJZv)lr{MT}>9p?}Y`=n+^CZ6E zKkjIXPub5!82(B-O2xQojW^P(#Q*;ETpEr^+Wa=qDJ9_k=Wm@fZB6?b(u?LUzX(}+ zE6OyapdG$HC& z&;oa*ALoyIxVvB2cm_N&h&{3ZTuU|aBrJlGOLtZc3KDx)<{ z27@)~GtQF@%6B@w3emrGe?Cv_{iC@a#YO8~OyGRIvp@%RRKC?fclXMP*6GzBFO z5U4QK?~>AR>?KF@I;|(rx(rKxdT9-k-anYS+#S#e1SzKPslK!Z&r8iomPsWG#>`Ld zJ<#+8GFHE!^wsXt(s=CGfVz5K+FHYP5T0E*?0A-z*lNBf)${Y`>Gwc@?j5{Q|6;Bl zkHG1%r$r&O!N^><8AEL+=y(P$7E6hd=>BZ4ZZ9ukJ2*~HR4KGvUR~MUOe$d>E5UK3 z*~O2LK4AnED}4t1Fs$JgvPa*O+WeCji_cn1@Tv7XQ6l@($F1K%{E$!naeX)`bfCG> z8iD<%_M6aeD?a-(Qqu61&fzQqC(E8ksa%CulMnPvR35d{<`VsmaHyzF+B zF6a@1$CT0xGVjofcct4SyxA40uQ`b#9kI)& z?B67-12X-$v#Im4CVUGZHXvPWwuspJ610ITG*A4xMoRVXJl5xbk;OL(;}=+$9?H`b z>u2~yd~gFZ*V}-Q0K6E@p}mtsri&%Zep?ZrPJmv`Qo1>94Lo||Yl)nqwHXEbe)!g( zo`w|LU@H14VvmBjjkl~=(?b{w^G$~q_G(HL`>|aQR%}A64mv0xGHa`S8!*Wb*eB}` zZh)&rkjLK!Rqar)UH)fM<&h&@v*YyOr!Xk2OOMV%$S2mCRdJxKO1RL7xP_Assw)bb z9$sQ30bapFfYTS`i1PihJZYA#0AWNmp>x(;C!?}kZG7Aq?zp!B+gGyJ^FrXQ0E<>2 zCjqZ(wDs-$#pVYP3NGA=en<@_uz!FjFvn1&w1_Igvqs_sL>ExMbcGx4X5f%`Wrri@ z{&vDs)V!rd=pS?G(ricfwPSg(w<8P_6=Qj`qBC7_XNE}1_5>+GBjpURPmvTNE7)~r)Y>ZZecMS7Ro2` z0}nC_GYo3O7j|Wux?6-LFZs%1IV0H`f`l9or-8y0=5VGzjPqO2cd$RRHJIY06Cnh- ztg@Pn1OeY=W`1Mv3`Ti6!@QIT{qcC*&vptnX4Pt1O|dWv8u2s|(CkV`)vBjAC_U5` zCw1f&c4o;LbBSp0=*q z3Y^horBAnR)u=3t?!}e}14%K>^562K!)Vy6r~v({5{t#iRh8WIL|U9H6H97qX09xp zjb0IJ^9Lqxop<-P*VA0By@In*5dq8Pr3bTPu|ArID*4tWM7w+mjit0PgmwLV4&2PW z3MnIzbdR`3tPqtUICEuAH^MR$K_u8~-U2=N1)R=l>zhygus44>6V^6nJFbW-`^)f} zI&h$FK)Mo*x?2`0npTD~jRd}5G~-h8=wL#Y-G+a^C?d>OzsVl7BFAaM==(H zR;ARWa^C3J)`p~_&FRsxt|@e+M&!84`eq)@aO9yBj8iifJv0xVW4F&N-(#E=k`AwJ z3EFXWcpsRlB%l_0Vdu`0G(11F7( zsl~*@XP{jS@?M#ec~%Pr~h z2`M*lIQaolzWN&;hkR2*<=!ORL(>YUMxOzj(60rQfr#wTrkLO!t{h~qg% zv$R}0IqVIg1v|YRu9w7RN&Uh7z$ijV=3U_M(sa`ZF=SIg$uY|=NdC-@%HtkUSEqJv zg|c}mKTCM=Z8YmsFQu7k{VrXtL^!Cts-eb@*v0B3M#3A7JE*)MeW1cfFqz~^S6OXFOIP&iL;Vpy z4dWKsw_1Wn%Y;eW1YOfeP_r1s4*p1C(iDG_hrr~-I%kA>ErxnMWRYu{IcG{sAW;*t z9T|i4bI*g)FXPpKM@~!@a7LDVVGqF}C@mePD$ai|I>73B+9!Ks7W$pw;$W1B%-rb; zJ*-q&ljb=&41dJ^*A0)7>Wa@khGZ;q1fL(2qW=|38j43mTl_;`PEEw07VKY%71l6p z@F|jp88XEnm1p~<5c*cVXvKlj0{THF=n3sU7g>Ki&(ErR;!KSmfH=?49R5(|c_*xw z4$jhCJ1gWT6-g5EV)Ahg?Nw=}`iCyQ6@0DqUb%AZEM^C#?B-@Hmw?LhJ^^VU>&phJ zlB!n5&>I>@sndh~v$2I2Ue23F?0!0}+9H~jg7E`?CS_ERu75^jSwm%!FTAegT`6s7 z^$|%sj2?8wtPQR>@D3sA0-M-g-vL@47YCnxdvd|1mPymvk!j5W1jHnVB&F-0R5e-vs`@u8a5GKdv`LF7uCfKncI4+??Z4iG@AxuX7 z6+@nP^TZ5HX#*z(!y+-KJ3+Ku0M90BTY{SC^{ z&y2#RZPjfX_PE<<>XwGp;g4&wcXsQ0T&XTi(^f+}4qSFH1%^GYi+!rJo~t#ChTeAX zmR0w(iODzQOL+b&{1OqTh*psAb;wT*drr^LKdN?c?HJ*gJl+%kEH&48&S{s28P=%p z7*?(xFW_RYxJxxILS!kdLIJYu@p#mnQ(?moGD1)AxQd66X6b*KN?o&e`u9#N4wu8% z^Gw#G!@|>c740RXziOR=tdbkqf(v~wS_N^CS^1hN-N4{Dww1lvSWcBTX*&9}Cz|s@ z*{O@jZ4RVHq19(HC9xSBZI0M)E;daza+Q*zayrX~N5H4xJ33BD4gn5Ka^Hj{995z4 zzm#Eo?ntC$q1a?)dD$qaC_M{NW!5R!vVZ(XQqS67xR3KP?rA1^+s3M$60WRTVHeTH z6BJO$_jVx0EGPXy}XK_&x597 zt(o6ArN8vZX0?~(lFGHRtHP{gO0y^$iU6Xt2e&v&ugLxfsl;GD)nf~3R^ACqSFLQ< zV7`cXgry((wDMJB55a6D4J;13$z6pupC{-F+wpToW%k1qKjUS^$Mo zN3@}T!ZdpiV7rkNvqP3KbpEn|9aB;@V;gMS1iSb@ zwyD7!5mfj)q+4jE1dq3H`sEKgrVqk|y8{_vmn8bMOi873!rmnu5S=1=-DFx+Oj)Hi zx?~ToiJqOrvSou?RVALltvMADodC7BOg7pOyc4m&6yd(qIuV5?dYUpYzpTe!BuWKi zpTg(JHBYzO&X1e{5o|ZVU-X5e?<}mh=|eMY{ldm>V3NsOGwyxO2h)l#)rH@BI*TN; z`yW26bMSp=k6C4Ja{xB}s`dNp zE+41IwEwo>7*PA|7v-F#jLN>h#a`Er9_86!fwPl{6yWR|fh?c%qc44uP~Ocm2V*(* zICMpS*&aJjxutxKC0Tm8+FBz;3;R^=ajXQUB*nTN*Lb;mruQHUE<&=I7pZ@F-O*VMkJbI#FOrBM8`QEL5Uy=q5e2 z_BwVH%c0^uIWO0*_qD;0jlPoA@sI7BPwOr-mrp7y`|EF)j;$GYdOtEPFRAKyUuUZS z(N4)*6R*ux8s@pMdC*TP?Hx`Zh{{Ser;clg&}CXriXZCr2A!wIoh;j=_eq3_%n7V} za?{KhXg2cXPpKHc90t6=`>s@QF-DNcTJRvLTS)E2FTb+og(wTV7?$kI?QZYgVBn)& zdpJf@tZ{j>B;<MVHiPl_U&KlqBT)$ic+M0uUQWK|N1 zCMl~@o|}!!7yyT%7p#G4?T^Azxt=D(KP{tyx^lD_(q&|zNFgO%!i%7T`>mUuU^FeR zHP&uClWgXm6iXgI8*DEA!O&X#X(zdrNctF{T#pyax16EZ5Lt5Z=RtAja!x+0Z31U8 zjfaky?W)wzd+66$L>o`n;DISQNs09g{GAv%8q2k>2n8q)O^M}=5r#^WR^=se#WSCt zQ`7E1w4qdChz4r@v6hgR?nsaE7pg2B6~+i5 zcTTbBQ2ghUbC-PV(@xvIR(a>Kh?{%YAsMV#4gt1nxBF?$FZ2~nFLKMS!aK=(`WllA zHS<_7ugqKw!#0aUtQwd#A$8|kPN3Af?Tkn)dHF?_?r#X68Wj;|$aw)Wj2Dkw{6)*^ zZfy!TWwh=%g~ECDCy1s8tTgWCi}F1BvTJ9p3H6IFq&zn#3FjZoecA_L_bxGWgeQup zAAs~1IPCnI@H>g|6Lp^Bk)mjrA3_qD4(D(65}l=2RzF-8@h>|Aq!2K-qxt(Q9w7c^ z;gtx`I+=gKOl;h=#fzSgw-V*YT~2_nnSz|!9hIxFb{~dKB!{H zSi??dnmr@%(1w^Be=*Jz5bZeofEKKN&@@uHUMFr-DHS!pb1I&;x9*${bmg6=2I4Zt zHb5LSvojY7ubCNGhp)=95jQ00sMAC{IZdAFsN!lAVQDeiec^HAu=8);2AKqNTT!&E zo+FAR`!A1#T6w@0A+o%&*yzkvxsrqbrfVTG+@z8l4+mRi@j<&)U9n6L>uZoezW>qS zA4YfO;_9dQSyEYpkWnsk0IY}Nr2m(ql@KuQjLgY-@g z4=$uai6^)A5+~^TvLdvhgfd+y?@+tRE^AJabamheJFnpA#O*5_B%s=t8<;?I;qJ}j z&g-9?hbwWEez-!GIhqpB>nFvyi{>Yv>dPU=)qXnr;3v-cd`l}BV?6!v{|cHDOx@IG z;TSiQQ(8=vlH^rCEaZ@Yw}?4#a_Qvx=}BJuxACxm(E7tP4hki^jU@8A zUS|4tTLd)gr@T|F$1eQXPY%fXb7u}(>&9gsd3It^B{W#6F2_g40cgo1^)@-xO&R5X z>qKon+Nvp!4v?-rGQu#M_J2v+3e+?N-WbgPQWf`ZL{Xd9KO^s{uIHTJ6~@d=mc7i z+##ya1p+ZHELmi%3C>g5V#yZt*jMv( zc{m*Y;7v*sjVZ-3mBuaT{$g+^sbs8Rp7BU%Ypi+c%JxtC4O}|9pkF-p-}F{Z7-+45 zDaJQx&CNR)8x~0Yf&M|-1rw%KW3ScjWmKH%J1fBxUp(;F%E+w!U470e_3%+U_q7~P zJm9VSWmZ->K`NfswW(|~fGdMQ!K2z%k-XS?Bh`zrjZDyBMu74Fb4q^A=j6+Vg@{Wc zPRd5Vy*-RS4p1OE-&8f^Fo}^yDj$rb+^>``iDy%t)^pHSV=En5B5~*|32#VkH6S%9 zxgIbsG+|{-$v7mhOww#v-ejaS>u(9KV9_*X!AY#N*LXIxor9hDv%aie@+??X6@Et=xz>6ev9U>6Pn$g4^!}w2Z%Kpqpp+M%mk~?GE-jL&0xLC zy(`*|&gm#mLeoRU8IU?Ujsv=;ab*URmsCl+r?%xcS1BVF*rP}XRR%MO_C!a9J^fOe>U;Y&3aj3 zX`3?i12*^W_|D@VEYR;h&b^s#Kd;JMNbZ#*x8*ZXm(jgw3!jyeHo14Zq!@_Q`V;Dv zKik~!-&%xx`F|l^z2A92aCt4x*I|_oMH9oeqsQgQDgI0j2p!W@BOtCTK8Jp#txi}7 z9kz);EX-2~XmxF5kyAa@n_$YYP^Hd4UPQ>O0-U^-pw1*n{*kdX`Jhz6{!W=V8a$0S z9mYboj#o)!d$gs6vf8I$OVOdZu7L5%)Vo0NhN`SwrQFhP3y4iXe2uV@(G{N{yjNG( zKvcN{k@pXkxyB~9ucR(uPSZ7{~sC=lQtz&V(^A^HppuN!@B4 zS>B=kb14>M-sR>{`teApuHlca6YXs6&sRvRV;9G!XI08CHS~M$=%T~g5Xt~$exVk` zWP^*0h{W%`>K{BktGr@+?ZP}2t0&smjKEVw@3=!rSjw5$gzlx`{dEajg$A58m|Okx zG8@BTPODSk@iqLbS*6>FdVqk}KKHuAHb0UJNnPm!(XO{zg--&@#!niF4T!dGVdNif z3_&r^3+rfQuV^8}2U?bkI5Ng*;&G>(O4&M<86GNxZK{IgKNbRfpg>+32I>(h`T&uv zUN{PRP&onFj$tn1+Yh|0AF330en{b~R+#i9^QIbl9fBv>pN|k&IL2W~j7xbkPyTL^ z*TFONZUS2f33w3)fdzr?)Yg;(s|||=aWZV(nkDaACGSxNCF>XLJSZ=W@?$*` z#sUftY&KqTV+l@2AP5$P-k^N`Bme-xcWPS|5O~arUq~%(z8z87JFB|llS&h>a>Som zC34(_uDViE!H2jI3<@d+F)LYhY)hoW6)i=9u~lM*WH?hI(yA$X#ip}yYld3RAv#1+sBt<)V_9c4(SN9Fn#$}_F}A-}P>N+8io}I3mh!}> z*~*N}ZF4Zergb;`R_g49>ZtTCaEsCHiFb(V{9c@X0`YV2O^@c6~LXg2AE zhA=a~!ALnP6aO9XOC^X15(1T)3!1lNXBEVj5s*G|Wm4YBPV`EOhU&)tTI9-KoLI-U zFI@adu6{w$dvT(zu*#aW*4F=i=!7`P!?hZy(9iL;Z^De3?AW`-gYTPALhrZ*K2|3_ zfz;6xQN9?|;#_U=4t^uS2VkQ8$|?Ub5CgKOj#Ni5j|(zX>x#K(h7LgDP-QHwok~-I zOu9rn%y97qrtKdG=ep)4MKF=TY9^n6CugQ3#G2yx;{))hvlxZGE~rzZ$qEHy-8?pU#G;bwufgSN6?*BeA!7N3RZEh{xS>>-G1!C(e1^ zzd#;39~PE_wFX3Tv;zo>5cc=md{Q}(Rb?37{;YPtAUGZo7j*yHfGH|TOVR#4ACaM2 z;1R0hO(Gl}+0gm9Bo}e@lW)J2OU4nukOTVKshHy7u)tLH^9@QI-jAnDBp(|J8&{fKu=_97$v&F67Z zq+QsJ=gUx3_h_%=+q47msQ*Ub=gMzoSa@S2>`Y9Cj*@Op4plTc!jDhu51nSGI z^sfZ(4=yzlR}kP2rcHRzAY9@T7f`z>fdCU0zibx^gVg&fMkcl)-0bRyWe12bT0}<@ z^h(RgGqS|1y#M;mER;8!CVmX!j=rfNa6>#_^j{^C+SxGhbSJ_a0O|ae!ZxiQCN2qA zKs_Z#Zy|9BOw6x{0*APNm$6tYVG2F$K~JNZ!6>}gJ_NLRYhcIsxY1z~)mt#Yl0pvC zO8#Nod;iow5{B*rUn(0WnN_~~M4|guwfkT(xv;z)olmj=f=aH#Y|#f_*d1H!o( z!EXNxKxth9w1oRr0+1laQceWfgi8z`YS#uzg#s9-QlTT7y2O^^M1PZx z3YS7iegfp6Cs0-ixlG93(JW4wuE7)mfihw}G~Uue{Xb+#F!BkDWs#*cHX^%(We}3% zT%^;m&Juw{hLp^6eyM}J({luCL_$7iRFA6^8B!v|B9P{$42F>|M`4Z_yA{kK()WcM zu#xAZWG%QtiANfX?@+QQOtbU;Avr*_>Yu0C2>=u}zhH9VLp6M>fS&yp*-7}yo8ZWB z{h>ce@HgV?^HgwRThCYnHt{Py0MS=Ja{nIj5%z;0S@?nGQ`z`*EVs&WWNwbzlk`(t zxDSc)$dD+4G6N(p?K>iEKXIk>GlGKTH{08WvrehnHhh%tgpp&8db4*FLN zETA@<$V=I7S^_KxvYv$Em4S{gO>(J#(Wf;Y%(NeECoG3n+o;d~Bjme-4dldKukd`S zRVAnKxOGjWc;L#OL{*BDEA8T=zL8^`J=2N)d&E#?OMUqk&9j_`GX*A9?V-G zdA5QQ#(_Eb^+wDkDiZ6RXL`fck|rVy%)BVv;dvY#`msZ}{x5fmd! zInmWSxvRgXbJ{unxAi*7=Lt&7_e0B#8M5a=Ad0yX#0rvMacnKnXgh>4iiRq<&wit93n!&p zeq~-o37qf)L{KJo3!{l9l9AQb;&>)^-QO4RhG>j`rBlJ09~cbfNMR_~pJD1$UzcGp zOEGTzz01j$=-kLC+O$r8B|VzBotz}sj(rUGOa7PDYwX~9Tum^sW^xjjoncxSz;kqz z$Pz$Ze|sBCTjk7oM&`b5g2mFtuTx>xl{dj*U$L%y-xeQL~|i>KzdUHeep-Yd@}p&L*ig< zgg__3l9T=nbM3bw0Sq&Z2*FA)P~sx0h634BXz0AxV69cED7QGTbK3?P?MENkiy-mV zZ1xV5ry3zIpy>xmThBL0Q!g+Wz@#?6fYvzmEczs(rcujrfCN=^!iWQ6$EM zaCnRThqt~gI-&6v@KZ78unqgv9j6-%TOxpbV`tK{KaoBbhc}$h+rK)5h|bT6wY*t6st-4$e99+Egb#3ip+ERbve08G@Ref&hP)qB&?>B94?eq5i3k;dOuU#!y-@+&5>~!FZik=z4&4|YHy=~!F254 zQAOTZr26}Nc7jzgJ;V~+9ry#?7Z0o*;|Q)k+@a^87lC}}1C)S))f5tk+lMNqw>vh( z`A9E~5m#b9!ZDBltf7QIuMh+VheCoD7nCFhuzThlhA?|8NCt3w?oWW|NDin&&eDU6 zwH`aY=))lpWG?{fda=-auXYp1WIPu&3 zwK|t(Qiqvc@<;1_W#ALDJ}bR;3&v4$9rP)eAg`-~iCte`O^MY+SaP!w%~+{{1tMo` zbp?T%ENs|mHP)Lsxno=nWL&qizR+!Ib=9i%4=B@(Umf$|7!WVxkD%hfRjvxV`Co<; zG*g4QG_>;RE{3V_DOblu$GYm&!+}%>G*yO{-|V9GYG|bH2JIU2iO}ZvY>}Fl%1!OE zZFsirH^$G>BDIy`8;R?lZl|uu@qWj2T5}((RG``6*05AWsVVa2Iu>!F5U>~7_Tlv{ zt=Dpgm~0QVa5mxta+fUt)I0gToeEm9eJX{yYZ~3sLR&nCuyuFWuiDIVJ+-lwViO(E zH+@Rg$&GLueMR$*K8kOl>+aF84Hss5p+dZ8hbW$=bWNIk0paB!qEK$xIm5{*^ad&( zgtA&gb&6FwaaR2G&+L+Pp>t^LrG*-B&Hv;-s(h0QTuYWdnUObu8LRSZoAVd7SJ;%$ zh%V?58mD~3G2X<$H7I)@x?lmbeeSY7X~QiE`dfQ5&K^FB#9e!6!@d9vrSt!);@ZQZ zO#84N5yH$kjm9X4iY#f+U`FKhg=x*FiDoUeu1O5LcC2w&$~5hKB9ZnH+8BpbTGh5T zi_nfmyQY$vQh%ildbR7T;7TKPxSs#vhKR|uup`qi1PufMa(tNCjRbllakshQgn1)a8OO-j8W&aBc_#q1hKDF5-X$h`!CeT z+c#Ial~fDsGAenv7~f@!icm(~)a3OKi((=^zcOb^qH$#DVciGXslUwTd$gt{7)&#a`&Lp ze%AnL0#U?lAl8vUkv$n>bxH*`qOujO0HZkPWZnE0;}0DSEu1O!hg-d9#{&#B1Dm)L zvN%r^hdEt1vR<4zwshg*0_BNrDWjo65be1&_82SW8#iKWs7>TCjUT;-K~*NxpG2P% zovXUo@S|fMGudVSRQrP}J3-Wxq;4xIxJJC|Y#TQBr>pwfy*%=`EUNE*dr-Y?9y9xK zmh1zS@z{^|UL}v**LNYY!?1qIRPTvr!gNXzE{%=-`oKclPrfMKwn` zUwPeIvLcxkIV>(SZ-SeBo-yw~{p!<&_}eELG?wxp zee-V59%@BtB+Z&Xs=O(@P$}v_qy1m=+`!~r^aT> zY+l?+6(L-=P%m4ScfAYR8;f9dyVw)@(;v{|nO#lAPI1xDHXMYt~-BGiP&9y2OQsYdh7-Q1(vL<$u6W0nxVn-qh=nwuRk}{d!uACozccRGx6~xZQ;=#JCE?OuA@;4 zadp$sm}jfgW4?La(pb!3f0B=HUI{5A4b$2rsB|ZGb?3@CTA{|zBf07pYpQ$NM({C6Srv6%_{rVkCndT=1nS}qyEf}Wjtg$e{ng7Wgz$7itYy0sWW_$qld);iUm85GBH)fk3b=2|5mvflm?~inoVo zDH_%e;y`DzoNj|NgZ`U%a9(N*=~8!qqy0Etkxo#`r!!{|(NyT0;5= z8nVZ6AiM+SjMG8J@6c4_f-KXd_}{My?Se1GWP|@wROFpD^5_lu?I%CBzpwi(`x~xh B8dv}T delta 17845 zcmV)CK*GO}(F4QI1F(Jx4W$DjNjn4p0N4ir06~)x5+0MO2`GQvQyWzj|J`gh3(E#l zNGO!HfVMRRN~%`0q^)g%XlN*vP!O#;m*h5VyX@j-1N|HN;8S1vqEAj=eCdn`)tUB9 zXZjcT^`bL6qvL}gvXj%9vrOD+x!Gc_0{$Zg+6lTXG$bmoEBV z*%y^c-mV0~Rjzv%e6eVI)yl>h;TMG)Ft8lqpR`>&IL&`>KDi5l$AavcVh9g;CF0tY zw_S0eIzKD?Nj~e4raA8wxiiImTRzv6;b6|LFmw)!E4=CiJ4I%&axSey4zE-MIh@*! z*P;K2Mx{xVYPLeagKA}Hj=N=1VrWU`ukuBnc14iBG?B}Uj>?=2UMk4|42=()8KOnc zrJzAxxaEIfjw(CKV6F$35u=1qyf(%cY8fXaS9iS?yetY{mQ#Xyat*7sSoM9fJlZqq zyasQ3>D>6p^`ck^Y|kYYZB*G})uAbQ#7)Jeb~glGz@2rPu}zBWDzo5K$tP<|meKV% z{Swf^eq6NBioF)v&~9NLIxHMTKe6gJ@QQ^A6fA!n#u1C&n`aG7TDXKM1Jly-DwTB` z+6?=Y)}hj;C#r5>&x;MCM4U13nuXVK*}@yRY~W3X%>U>*CB2C^K6_OZsXD!nG2RSX zQg*0)$G3%Es$otA@p_1N!hIPT(iSE=8OPZG+t)oFyD~{nevj0gZen$p>U<7}uRE`t5Mk1f4M0K*5 zbn@3IG5I2mk;8K>*RZ zPV6iL006)S001s%0eYj)9hu1 z9o)iQT9(v*sAuZ|ot){RrZ0Qw4{E0A+!Yx_M~#Pj&OPUM&i$RU=Uxu}e*6Sr2ror= z&?lmvFCO$)BY+^+21E>ENWe`I0{02H<-lz&?})gIVFyMWxX0B|0b?S6?qghp3lDgz z2?0|ALJU=7s-~Lb3>9AA5`#UYCl!Xeh^i@bxs5f&SdiD!WN}CIgq&WI4VCW;M!UJL zX2};d^sVj5oVl)OrkapV-C&SrG)*x=X*ru!2s04TjZ`pY$jP)4+%)7&MlpiZ`lgoF zo_p>^4qGz^(Y*uB10dY2kcIbt=$FIdYNqk;~47wf@)6|nJp z1cocL3zDR9N2Pxkw)dpi&_rvMW&Dh0@T*_}(1JFSc0S~Ph2Sr=vy)u*=TY$i_IHSo zR+&dtWFNxHE*!miRJ%o5@~GK^G~4$LzEYR-(B-b(L*3jyTq}M3d0g6sdx!X3-m&O% zK5g`P179KHJKXpIAAX`A2MFUA;`nXx^b?mboVbQgigIHTU8FI>`q53AjWaD&aowtj z{XyIX>c)*nLO~-WZG~>I)4S1d2q@&?nwL)CVSWqWi&m1&#K1!gt`g%O4s$u^->Dwq ziKc&0O9KQ7000OG0000%03-m(e&Y`S09YWC4iYDSty&3q8^?8ij|8zxaCt!zCFq1@ z9TX4Hl68`nY>}cQNW4Ullqp$~SHO~l1!CdFLKK}ij_t^a?I?C^CvlvnZkwiVn>dl2 z2$V(JN{`5`-8ShF_ek6HNRPBlPuIPYu>TAeAV5O2)35r3*_k(Q-h1+h5pb(Zu%oJ__pBsW0n5ILw`!&QR&YV`g0Fe z(qDM!FX_7;`U3rxX#QHT{f%h;)Eursw=*#qvV)~y%^Uo^% zi-%sMe^uz;#Pe;@{JUu05zT*i=u7mU9{MkT`ft(vPdQZoK&2mg=tnf8FsaNQ+QcPg zB>vP8Rd6Z0JoH5_Q`zldg;hx4azQCq*rRZThqlqTRMzn1O3_rQTrHk8LQ<{5UYN~` zM6*~lOGHyAnx&#yCK{i@%N1Us@=6cw=UQxpSE;<(LnnES%6^q^QhBYQ-VCSmIu8wh z@_LmwcFDfAhIn>`%h7L{)iGBzu`Md4dj-m3C8mA9+BL*<>q z#$7^ttIBOE-=^|zmG`K8yUKT{yjLu2SGYsreN0*~9yhFxn4U};Nv1XXj1fH*v-g=3 z@tCPc`YdzQGLp%zXwo*o$m9j-+~nSWls#s|?PyrHO%SUGdk**X9_=|b)Y%^j_V$3S z>mL2A-V)Q}qb(uZipEFVm?}HWc+%G6_K+S+87g-&RkRQ8-{0APDil115eG|&>WQhU zufO*|e`hFks^cJJmx_qNx{ltSp3aT|XgD5-VxGGXb7gkiOG$w^qMVBDjR8%!Sbh72niHRDV* ziFy8LE+*$j?t^6aZP9qt-ow;hzkmhvy*Hn-X^6?yVMbtNbyqZQ^rXg58`gk+I%Wv} zn_)dRq+3xjc8D%}EQ%nnTF7L7m}o9&*^jf`_qvUhVKY7w9Zgxr-0YHWFRd3$l_6UX zpXt^U&TiC*qZWx#pOG6k?3Tg)pra*fw(O6_45>lUBN1U5Qmc>^DHt)5b~Ntjsw!NI z1n4{$HWFeIi)*qvgK^ui;(81VQc1(wJ8C#tjR>Dkjf{xYC^_B^#qrdCc)uZxtgua6 zk98UGQF|;;k`c+0_z)tQ&9DwLB~&12@D1!*mTz_!3Mp=cg;B7Oq4cKN>5v&dW7q@H zal=g6Ipe`siZN4NZiBrkJCU*x216gmbV(FymgHuG@%%|8sgD?gR&0*{y4n=pukZnd z4=Nl~_>jVfbIehu)pG)WvuUpLR}~OKlW|)=S738Wh^a&L+Vx~KJU25o6%G7+Cy5mB zgmYsgkBC|@K4Jm_PwPoz`_|5QSk}^p`XV`649#jr4Lh^Q>Ne~#6Cqxn$7dNMF=%Va z%z9Ef6QmfoXAlQ3)PF8#3Y% zadcE<1`fd1&Q9fMZZnyI;&L;YPuy#TQ8b>AnXr*SGY&xUb>2678A+Y z8K%HOdgq_4LRFu_M>Ou|kj4W%sPPaV)#zDzN~25klE!!PFz_>5wCxglj7WZI13U5| zEq_YLKPH;v8sEhyG`dV_jozR);a6dBvkauhC;1dk%mr+J*Z6MMH9jqxFk@)&h{mHl zrf^i_d-#mTF=6-T8Rk?(1+rPGgl$9=j%#dkf@x6>czSc`jk7$f!9SrV{do%m!t8{? z_iAi$Qe&GDR#Nz^#uJ>-_?(E$ns)(3)X3cYY)?gFvU+N>nnCoBSmwB2<4L|xH19+4 z`$u#*Gt%mRw=*&|em}h_Y`Pzno?k^8e*hEwfM`A_yz-#vJtUfkGb=s>-!6cHfR$Mz z`*A8jVcz7T{n8M>ZTb_sl{EZ9Ctau4naX7TX?&g^VLE?wZ+}m)=YW4ODRy*lV4%-0 zG1XrPs($mVVfpnqoSihnIFkLdxG9um&n-U|`47l{bnr(|8dmglO7H~yeK7-wDwZXq zaHT($Qy2=MMuj@lir(iyxI1HnMlaJwpX86je}e=2n|Esb6hB?SmtDH3 z2qH6o`33b{;M{mDa5@@~1or8+Zcio*97pi1Jkx6v5MXCaYsb~Ynq)eWpKnF{n)FXZ z?Xd;o7ESu&rtMFr5(yJ(B7V>&0gnDdL*4MZH&eO+r*t!TR98ssbMRaw`7;`SLI8mT z=)hSAt~F=mz;JbDI6g~J%w!;QI(X14AnOu;uve^4wyaP3>(?jSLp+LQ7uU(iib%IyB(d&g@+hg;78M>h7yAeq$ALRoHGkKXA+E z$Sk-hd$Fs2nL4w9p@O*Y$c;U)W#d~)&8Js;i^Dp^* z0*7*zEGj~VehF4sRqSGny*K_CxeF=T^8;^lb}HF125G{kMRV?+hYktZWfNA^Mp7y8 zK~Q?ycf%rr+wgLaHQ|_<6z^eTG7izr@99SG9Q{$PCjJabSz`6L_QJJe7{LzTc$P&pwTy<&3RRUlSHmK;?}=QAhQaDW3#VWcNAH3 zeBPRTDf3?3mfdI$&WOg(nr9Gyzg`&u^o!f2rKJ57D_>p z6|?Vg?h(@(*X=o071{g^le>*>qSbVam`o}sAK8>b|11%e&;%`~b2OP7--q%0^2YDS z`2M`{2QYr1VC)sIW9WOu8<~7Q>^$*Og{KF+kI;wFegvaIDkB%3*%PWtWKSq7l`1YcDxQQ2@nv{J!xWV?G+w6C zhUUxUYVf%(Q(40_xrZB@rbxL=Dj3RV^{*yHd>4n-TOoHVRnazDOxxkS9kiZyN}IN3 zB^5N=* zRSTO+rA<{*P8-$GZdyUNOB=MzddG$*@q>mM;pUIiQ_z)hbE#Ze-IS)9G}Rt$5PSB{ zZZ;#h9nS7Rf1ecW&n(Gpu9}{vXQZ-f`UHIvD?cTbF`YvH*{rgE(zE22pLAQfhg-`U zuh612EpByB(~{w7svCylrBk%5$LCIyuhrGi=yOfca`=8ltKxHcSNfDRt@62QH^R_0 z&eQL6rRk>Dvf6rjMQv5ZXzg}S`HqV69hJT^pPHtdhqsrPJWs|IT9>BvpQa@*(FX6v zG}TYjreQCnH(slMt5{NgUf)qsS1F&Bb(M>$X}tWI&yt2I&-rJbqveuj?5J$`Dyfa2 z)m6Mq0XH@K)Y2v8X=-_4=4niodT&Y7W?$KLQhjA<+R}WTdYjX9>kD+SRS^oOY1{A= zZTId-(@wF^UEWso($wZtrs%e7t<}YaC_;#@`r0LUzKY&|qPJz*y~RHG`E6bypP5AX zN!p0^AUu8uDR>xM-ALFzBxXM~Q3z=}fHWCIG>0&I6x2Iu7&U)49j7qeMI&?qb$=4I zdMmhAJrO%@0f%YW! z^gLByEGSk+R0v4*d4w*N$Ju6z#j%HBI}6y$2en=-@S3=6+yZX94m&1j@s- z7T6|#0$c~dYq9IkA!P)AGkp~S$zYJ1SXZ#RM0|E~Q0PSm?DsT4N3f^)b#h(u9%_V5 zX*&EIX|gD~P!vtx?ra71pl%v)F!W~X2hcE!h8cu@6uKURdmo1-7icN4)ej4H1N~-C zjXgOK+mi#aJv4;`DZ%QUbVVZclkx;9`2kgbAhL^d{@etnm+5N8pB#fyH)bxtZGCAv z(%t0kPgBS{Q2HtjrfI0B$$M0c?{r~2T=zeXo7V&&aprCzww=i*}Atu7g^(*ivauMz~kkB%Vt{Wydlz%%2c26%>0PAbZO zVHx%tK(uzDl#ZZK`cW8TD2)eD77wB@gum{B2bO_jnqGl~01EF_^jx4Uqu1yfA~*&g zXJ`-N?D-n~5_QNF_5+Un-4&l$1b zVlHFqtluoN85b^C{A==lp#hS9J(npJ#6P4aY41r) zzCmv~c77X5L}H%sj>5t&@0heUDy;S1gSOS>JtH1v-k5l}z2h~i3^4NF6&iMb;ZYVE zMw*0%-9GdbpF1?HHim|4+)Zed=Fk<2Uz~GKc^P(Ig@x0&XuX0<-K(gA*KkN&lY2Xu zG054Q8wbK~$jE32#Ba*Id2vkqmfV{U$Nx9vJ;jeI`X+j1kh7hB8$CBTe@ANmT^tI8 z%U>zrTKuECin-M|B*gy(SPd`(_xvxjUL?s137KOyH>U{z01cBcFFt=Fp%d+BK4U;9 zQG_W5i)JASNpK)Q0wQpL<+Ml#cei41kCHe&P9?>p+KJN>I~`I^vK1h`IKB7k^xi`f z$H_mtr_+@M>C5+_xt%v}{#WO{86J83;VS@Ei3JLtp<*+hsY1oGzo z0?$?OJO$79;{|@aP!fO6t9TJ!?8i&|c&UPWRMbkwT3nEeFH`Yyyh6b%Rm^nBuTt@9 z+$&-4lf!G|@LCo3<8=yN@5dYbc%uq|Hz|0tiiLQKiUoM9g14zyECKGv0}3AWv2WJ zUAXGUhvkNk`0-H%ACsRSmy4fJ@kxBD3ZKSj6g(n1KPw?g{v19phcBr3BEF>J%lL|d zud3LNuL;cR*xS+;X+N^Br+x2{&hDMhb-$6_fKU(Pt0FQUXgNrZvzsVCnsFqv?#L z4-FYsQ-?D>;LdjHu_TT1CHN~aGkmDjWJkJg4G^!+V_APd%_48tErDv6BW5;ji^UDD zRu5Sw7wwplk`w{OGEKWJM&61c-AWn!SeUP8G#+beH4_Ov*)NUV?eGw&GHNDI6G(1Y zTfCv?T*@{QyK|!Q09wbk5koPD>=@(cA<~i4pSO?f(^5sSbdhUc+K$DW#_7^d7i%At z?KBg#vm$?P4h%?T=XymU;w*AsO_tJr)`+HUll+Uk_zx6vNw>G3jT){w3ck+Z=>7f0 zZVkM*!k^Z_E@_pZK6uH#|vzoL{-j1VFlUHP&5~q?j=UvJJNQG ztQdiCF$8_EaN_Pu8+afN6n8?m5UeR_p_6Log$5V(n9^W)-_vS~Ws`RJhQNPb1$C?| zd9D_ePe*`aI9AZ~Ltbg)DZ;JUo@-tu*O7CJ=T)ZI1&tn%#cisS85EaSvpS~c#CN9B z#Bx$vw|E@gm{;cJOuDi3F1#fxWZ9+5JCqVRCz5o`EDW890NUfNCuBn)3!&vFQE{E$L`Cf7FMSSX%ppLH+Z}#=p zSow$)$z3IL7frW#M>Z4|^9T!=Z8}B0h*MrWXXiVschEA=$a|yX9T~o!=%C?T+l^Cc zJx&MB$me(a*@lLLWZ=>PhKs!}#!ICa0! zq%jNgnF$>zrBZ3z%)Y*yOqHbKzEe_P=@<5$u^!~9G2OAzi#}oP&UL9JljG!zf{JIK z++G*8j)K=$#57N)hj_gSA8golO7xZP|KM?elUq)qLS)i(?&lk{oGMJh{^*FgklBY@Xfl<_Q zXP~(}ST6V01$~VfOmD6j!Hi}lsE}GQikW1YmBH)`f_+)KI!t#~B7=V;{F*`umxy#2Wt8(EbQ~ks9wZS(KV5#5Tn3Ia90r{}fI%pfbqBAG zhZ)E7)ZzqA672%@izC5sBpo>dCcpXi$VNFztSQnmI&u`@zQ#bqFd9d&ls?RomgbSh z9a2rjfNiKl2bR!$Y1B*?3Ko@s^L5lQN|i6ZtiZL|w5oq%{Fb@@E*2%%j=bcma{K~9 z*g1%nEZ;0g;S84ZZ$+Rfurh;Nhq0;{t~(EIRt}D@(Jb7fbe+_@H=t&)I)gPCtj*xI z9S>k?WEAWBmJZ|gs}#{3*pR`-`!HJ)1Dkx8vAM6Tv1bHZhH=MLI;iC#Y!$c|$*R>h zjP{ETat(izXB{@tTOAC4nWNhh1_%7AVaf!kVI5D=Jf5I1!?}stbx_Yv23hLf$iUTb z-)WrTtd2X+;vBW_q*Z6}B!10fs=2FA=3gy*dljsE43!G*3Uw(Is>(-a*5E!T4}b-Y zfvOC)-HYjNfcpi`=kG%(X3XcP?;p&=pz+F^6LKqRom~pA}O* zitR+Np{QZ(D2~p_Jh-k|dL!LPmexLM?tEqI^qRDq9Mg z5XBftj3z}dFir4oScbB&{m5>s{v&U=&_trq#7i&yQN}Z~OIu0}G)>RU*`4<}@7bB% zKYxGx0#L#u199YKSWZwV$nZd>D>{mDTs4qDNyi$4QT6z~D_%Bgf?>3L#NTtvX;?2D zS3IT*2i$Snp4fjDzR#<)A``4|dA(}wv^=L?rB!;kiotwU_gma`w+@AUtkSyhwp{M} z!e`jbUR3AG4XvnBVcyIZht6Vi~?pCC!$XF2 z*V~)DBVm8H7$*OZQJYl3482hadhsI2NCz~_NINtpC?|KI6H3`SG@1d%PsDdw{u}hq zN;OU~F7L1jT&KAitilb&Fl3X12zfSuFm;X)xQWOHL&7d)Q5wgn{78QJ6k5J;is+XP zCPO8_rlGMJB-kuQ*_=Yo1TswG4xnZd&eTjc8=-$6J^8TAa~kEnRQ@Zp-_W&B(4r@F zA==}0vBzsF1mB~743XqBmL9=0RSkGn$cvHf*hyc{<2{@hW+jKjbC|y%CNupHY_NC% zivz^btBLP-cDyV8j>u)=loBs>HoI5ME)xg)oK-Q0wAy|8WD$fm>K{-`0|W{H00;;G z000j`0OWQ8aHA9e04^;603eeQIvtaXMG=2tcr1y8Fl-J;AS+=<0%DU8Bp3oEEDhA^ zOY)M8%o5+cF$rC?trfMcty*f)R;^v=f~}||Xe!#;T3eTDZELN&-50xk+J1heP5AQ>h5O#S_uO;O@;~REd*_G$x$hVeE#bchX)otXQy|S5(oB)2a2%Sc(iDHm z=d>V|a!BLp9^#)o7^EQ2kg=K4%nI^sK2w@-kmvB+ARXYdq?xC2age6)e4$^UaY=wn zgLD^{X0A+{ySY+&7RpldwpC6=E zSPq?y(rl8ZN%(A*sapd4PU+dIakIwT0=zxIJEUW0kZSo|(zFEWdETY*ZjIk9uNMUA ze11=mHu8lUUlgRx!hItf0dAF#HfdIB+#aOuY--#QN9Ry zbx|XkG?PrBb@l6Owl{9Oa9w{x^R}%GwcEEfY;L-6OU8|9RXvu`-ECS`jcO1x1MP{P zcr;Bw##*Dod9K@pEx9z9G~MiNi>8v1OU-}vk*HbI)@CM? zn~b=jWUF%HP=CS+VCP>GiAU_UOz$aq3%%Z2laq^Gx`WAEmuNScCN)OlW>YHGYFgV2 z42lO5ZANs5VMXLS-RZTvBJkWy*OeV#L;7HwWg51*E|RpFR=H}h(|N+79g)tIW!RBK ze08bg^hlygY$C2`%N>7bDm`UZ(5M~DTanh3d~dg+OcNdUanr8azO?})g}EfnUB;5- zE1FX=ru?X=zAk4_6@__o1fE+ml1r&u^f1Kb24Jf-)zKla%-dbd>UZ1 zrj3!RR!Jg`ZnllKJ)4Yfg)@z>(fFepeOcp=F-^VHv?3jSxfa}-NB~*qkJ5Uq(yn+( z<8)qbZh{C!xnO@-XC~XMNVnr-Z+paowv!$H7>`ypMwA(X4(knx7z{UcWWe-wXM!d? zYT}xaVy|7T@yCbNOoy)$D=E%hUNTm(lPZqL)?$v+-~^-1P8m@Jm2t^L%4#!JK#Vtg zyUjM+Y*!$);1<)0MUqL00L0*EZcsE&usAK-?|{l|-)b7|PBKl}?TM6~#j9F+eZq25_L&oSl}DOMv^-tacpDI)l*Ws3u+~jO@;t(T)P=HCEZ#s_5q=m zOsVY!QsOJn)&+Ge6Tm)Ww_Bd@0PY(78ZJ)7_eP-cnXYk`>j9q`x2?Xc6O@55wF+6R zUPdIX!2{VGA;FSivN@+;GNZ7H2(pTDnAOKqF*ARg+C54vZ@Ve`i?%nDDvQRh?m&`1 zq46gH)wV=;UrwfCT3F(m!Q5qYpa!#f6qr0wF=5b9rk%HF(ITc!*R3wIFaCcftGwPt z(kzx{$*>g5L<;u}HzS4XD%ml zmdStbJcY@pn`!fUmkzJ8N>*8Y+DOO^r}1f4ix-`?x|khoRvF%jiA)8)P{?$8j2_qN zcl3Lm9-s$xdYN9)>3j6BPFK)Jbovl|Sf_p((CHe!4hx@F)hd&&*Xb&{TBj>%pT;-n z{3+hA^QZYnjXxtF2XwxPZ`S#J8h>5qLwtwM-{5abbEnRS z`9_`Zq8FJiI#0syE_V_3M&trw$P=ezkHosV$8&I5c0(*-9KBE5DJOC-Xv zw}1bq~AD0_Xerm`%ryiG9_$S z5G|btfiAUNdV09SO2l9v+e#(H6HYOdQs=^ z@xwZQU)~;p1L*~ciC}9ao{nQ-@B>rpUzKBxv=cUusOP5Trs3QnvHxGh9e>s7AM{V1|HfYe z3QwH;nHHR49fYzuGc3W3l5xrDAI392SFXx>lWE3V9Ds9il3PyZaN5>oC3>9W-^7vC z3~KZ-@iD?tIkhg+6t{m;RGk2%>@I0&kf)o$+-^ls0(YABNbM(=l#ad@nKp_j=b~Xs ziR;xu_+)lxy6|+af!@}gO2H_x)p;nZ-tYxW5Omq=l`GzMp*GTLr>vZN1?e}^C$t*Z zvzEdIc2|HA2RFN_4#EkzMqKnbbw!?!?%B@M0^^5Z;K?x-%lg?Z>}wMV8zEqHZ$cr~Y#Wv>9+)KMUZatUqbRU8 z8t9qrek(H^C0Tuzq|cP2$WL7tzj+Dj5y^2SF1D154CnsB$xbz`$wV||n-cG%rsT$p z+3RHdadK(3-noj(2L#8c5lODg)V8pv(GEnNb@F>dEHQr>!qge@L>#qg)RAUtiOYqF ziiV_ETExwD)bQ<))?-9$)E(FiRBYyC@}issHS!j9n)~I1tarxnQ2LfjdIJ)*jp{0E z&1oTd%!Qbw$W58s!6ms>F z=p0!~_Mv~8jyaicOS*t(ntw`5uFi0Bc4*mH8kSkk$>!f0;FM zX_t14I55!ZVsg0O$D2iuEDb7(J>5|NKW^Z~kzm@dax z9(|As$U7^}LF%#`6r&UPB*6`!Rf74h~*C=ami6xUxYCwiJxdr$+`z zKSC4A%8!s%R&j*2si(OEc*fy!q)?%=TjDZJ2}O zxT6o>jlKXz_7_Y$N})}IG`*#KfMzs#R(SI#)3*ZEzCv%_tu(VTZ5J| zw2$5kK)xTa>xGFgS0?X(NecjzFVKG%VVn?neu=&eQ+DJ1APlY1E?Q1s!Kk=yf7Uho z>8mg_!U{cKqpvI3ucSkC2V`!d^XMDk;>GG~>6>&X_z75-kv0UjevS5ORHV^e8r{tr z-9z*y&0eq3k-&c_AKw~<`8dtjsP0XgFv6AnG?0eo5P14T{xW#b*Hn2gEnt5-KvN1z zy!TUSi>IRbD3u+h@;fn7fy{F&hAKx7dG4i!c?5_GnvYV|_d&F16p;)pzEjB{zL-zr z(0&AZUkQ!(A>ghC5U-)t7(EXb-3)tNgb=z`>8m8n+N?vtl-1i&*ftMbE~0zsKG^I$ zSbh+rUiucsb!Ax@yB}j>yGeiKIZk1Xj!i#K^I*LZW_bWQIA-}FmJ~^}>p=K$bX9F{}z{s^KWc~OK(zl_X57aB^J9v}yQ5h#BE$+C)WOglV)nd0WWtaF{7`_Ur`my>4*NleQG#xae4fIo(b zW(&|g*#YHZNvDtE|6}yHvu(hDekJ-t*f!2RK;FZHRMb*l@Qwkh*~CqQRNLaepXypX z1?%ATf_nHIu3z6gK<7Dmd;{`0a!|toT0ck|TL$U;7Wr-*piO@R)KrbUz8SXO0vr1K z>76arfrqImq!ny+VkH!4?x*IR$d6*;ZA}Mhro(mzUa?agrFZpHi*)P~4~4N;XoIvH z9N%4VK|j4mV2DRQUD!_-9fmfA2(YVYyL#S$B;vqu7fnTbAFMqH``wS7^B5=|1O&fL z)qq(oV6_u4x(I(**#mD}MnAy(C&B4a1n6V%$&=vrIDq^F_KhE5Uw8_@{V`_#M0vCu zaNUXB=n0HT@D+ppDXi8-vp{tj)?7+k>1j}VvEKRgQ~DWva}8*pp`W8~KRo*kJ*&X} zP!~2fxQr@dM*q0dI|)Fux=pZWBk==RI7i{^BQf`kWlD2%|@R9!JA7& zLbM$uJ12y}_62$|T|{)@OJZtzfpL^t@1nMTYHutrF#D+^?~CN~9`YQ@#&&@c_Zf)( zbC~y8!2LO8jHwQXv>G~1q?c68ipT*%dY&c{8wd_!Y#~tMJ7yk!F8| zt?m_CLVw6cU@@p(#h4cY&Qsfz2Xp3w^4Cg%m03Tmq~9n%hyoMH^KY7{(QkRyn_!YB zzZa!Tgr~5$MAG$x)Fs71#6j}Kvcv3=9VUX8CH< zbP3|fY8f#$K*<5JQ7whM(v=GN2k26Xsh)#0!HKS(koLgAp-;)8z0w&_Z=nG4v6n8u z&Tm0Fi){4_!Y5Kp?!zv$FKfUifQ{%c82uYfrvE{%ejUd72aNYmI*0z3-a-EYr+bB->oH3#t(AY3 zV{Z=(SJr;D#0(`u*dc*~9T7D8Pudw894%!>c4wU&V1m<~0InidR6fbi?yPl(z+sKa zdF*kS>_4^1UO>y4T%Ar>epSr5&vp`$KdY7B(F%P0@VyHk@1fJ=6X0=aGjD-)BrOJD zW}IU@hg~^2r>a1fQvjTtvL*mKJ7q;pfP*U2=URL`VB_Y_JojbZ+MS=vaVN0C6L_MV zG1#5=35-E`KsD%r>-Q_ndvJ2tOYcMMP9f*t0iJ`(Z`^+YP)h>@lR(@Wvrt-`0tHG+ zuP2R@@mx=T@fPoQ1s`e^1I0H*kQPBGDky@!ZQG@8jY-+2ihreG5q$6i{3vmDTg0j$ zzRb*-nKN@{_wD`V6+i*YS)?$XfrA-sW?js?SYU8#vXxxQCc|*K!EbpWfu)3~jwq6_@KC0m;3A%jH^18_a0;ksC2DEwa@2{9@{ z9@T??<4QwR69zk{UvcHHX;`ICOwrF;@U;etd@YE)4MzI1WCsadP=`%^B>xPS-{`=~ zZ+2im8meb#4p~XIL9}ZOBg7D8R=PC8V}ObDcxEEK(4yGKcyCQWUe{9jCs+@k!_y|I z%s{W(&>P4w@hjQ>PQL$zY+=&aDU6cWr#hG)BVCyfP)h>@3IG5I2mk;8K>)Ppba*!h z005B=001VF5fT=Y4_ytCUk`sv8hJckqSy&Gc2Jx^WJ$J~08N{il-M$fz_ML$)Cpil z(nOv_nlZB^c4s&&O3h=OLiCz&(|f0 zxWU_-JZy>hxP*gvR>CLnNeQ1~g;6{g#-}AbkIzWR;j=8=6!AHpKQCbjFYxf9h%bov zVi;eNa1>t-<14KERUW>^KwoF+8zNo`Y*WiQwq}3m0_2RYtL9Wmu`JaRaQMQ)`Si^6+VbM`!rH~T?DX2=(n4nT zf`G`(Rpq*pDk*v~wMYPZ@vMNZDMPnxMYmU!lA{Xfo?n=Ibb4y3eyY1@Dut4|Y^ml& zqs$r}jAo=B(Ml>ogeEjyv(E`=kBzPf2uv9TQtO$~bamD#=Tv`lNy(K|w$J2O6jS51 zzZtOCHDWz7W0=L1XDW5WR5mtLGc~W+>*vX5{e~U@rE~?7e>vKU-v8bj;F4#abtcV(3ZtwXo9ia93HiETyQXwW4a-0){;$OU*l` zW^bjkyZTJ6_DL^0}`*)#EZ|2nvKRzMLH9-~@Z6$v#t8Dm%(qpP+DgzNe6d)1q zBqhyF$jJTyYFvl_=a>#I8jhJ)d6SBNPg#xg2^kZ3NX8kQ74ah(Y5Z8mlXyzTD&}Q8 ziY(pj-N-V2f>&hZQJ`Di%wp2fN(I%F@l)3M8GcSdNy+#HuO{$I8NXubRlFkL)cY@b z#`v{}-^hRXEq*8B_cG=%PZvI$eo(|8Wc(2o8L#0_GX9L$1@yV>%7mGk)QTD1R*OvS z4OW;ym1)%k9Bfem0tOqq3yyAUWp&q|LsN!RDnxa|j;>R|Mm2rIv7=tej5GFaa+`#| z;7u9Z_^XV+vD@2hF8Xe63+Qd`oig6S9jX(*DbjzPb*K-H7c^7E-(~!R6E%TrgW;RvG;WS{Ziv*W*a*`9Bb;$Er3?MyF~5GcXv`k>U)n}lwv$Sp+H@IKA5$mKk0g*4Ln{!tfvITeY zzr%8JJ5BdcEYsR9eGzJ4B&$}4FMmbRU6{8{_w7Kl77@PNe7|Bc#c?5(C5&Z=kJ#(oM90D4`rh2S!|^L!P#e#1hkD5@~-- z`63GV0~*rOZSqw7k^#-Y$Q4z3Oa2SPRURqEahB1B^h{7~+p03SwzqL9QU#$3-X zdYtQ?-K5xDAdfomEd6(yPtZ!yY_<35bMedeq`z2JWorljz5-f9<^93HM-$#+acw%9r!JOM%O<|BR`W& zd-%j_?b^q7Kl6{q^N{cg2u;11rFB5EP+oqG9&pHD#_Mo@aNMj;LUvsl&nK(ca(hT( zzFc2oHC6WQv8g7jo+3ZSwK+9G$cvfRnql)?g=XeQ3+LTh3)79nhEle8OqS3T$qn(> z(=5Bg?EWq-ldEywgzXW965%H(9^ik*rH(8dNdkbcS9|ow&_r`X~R^R?B+(oTiMzzlx8KnHqUi z8Rh-)VAnS-CO+3}yxqm8)X+N+uzieFVm-F#syP#M1p5&$wX3MJ8 z+R@grZ*5G^Uh4I@VT=>C4RJNc^~3mx$kS1F{L?3)BzdduD2MZKdu#jNno&f2&d{?` zW(>$oktzY@GO{|Ln~Bt^A4)(%?l-&(Dm!iL#$K_xOyhwAf=K2<+Bom zw7|hl6E5}B$d%n0sfZvfQRy9Fyz2~ z83#=#LaHnf1th^k*p|ux8!!8pfHE!)x*%=_hAddl)P%4h4%&8!5-W#xqqb}c=H(i|wqcIS&oDQ{ zhI7N-$f$ra3=RjPmMh?-IEkJYQ<}R9Z!}wmp$#~Uc%u1oh#TP}wF*kJJmQX2#27kL z_dz(yKufo<=m71bZfLp^Ll#t3(IHkrgMcvx@~om%Ib(h(<$Da7urTI`x|%`wD--sN zJEEa>4DGSEG?0ulkosfj8IMNN4)B=ZtvGG{|4Fp=Xhg!wPNgYzS>{Bp%%Qa+624X@ X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc3..ffed3a25 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..744e882e 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index 05679dc3..ffed3a25 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From e93bf7fd134dc557ae7f96534ca461fce14c0b3a Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 17 Sep 2021 23:00:40 +0200 Subject: [PATCH 144/621] Repo detail to coroutines (#605) * Repo detail on Coroutines * This fails, but things should be like this. * Remove network thread logging interceptor * Use extension method to get network response in blocking manner * Dirty PoC of idling * Remove test code * This commit moves the RepoDetailViewModelTest to fail * This commit moves the RepoDetailViewModelTest to pass * Proper implementation of IdlingDispatcher * Rmove Rx dpndncy from repo module * Test only flow * Add example long suspend function * Different context will fail * Make things production ready * Remove public stateFlow method * Delete test code --- app/build.gradle | 3 + .../com/jraska/github/client/TestUITestApp.kt | 2 + .../com/jraska/github/client/AppComponent.kt | 2 +- core-android-testing/build.gradle | 1 + .../android/test/FakeAndroidCoreModule.kt | 15 ++++- .../client/android/test/IdlingDispatcher.kt | 55 +++++++++++++++++++ core-api/build.gradle | 1 + .../client/coroutines/AppDispatchers.kt | 8 +++ core-testing/build.gradle | 1 + .../client/android/FakeCoreAndroidModule.kt | 11 ++++ core/build.gradle | 1 + .../jraska/github/client/CoroutinesModule.kt | 19 +++++++ dependencies.gradle | 5 ++ feature/repo/build.gradle | 8 ++- .../github/client/repo/RepoDetailViewModel.kt | 26 ++++----- .../repo/model/GitHubApiRepoRepository.kt | 38 +++++++++---- .../github/client/repo/model/RepoGitHubApi.kt | 6 +- .../client/repo/model/RepoRepository.kt | 4 +- .../client/repo/RepoDetailViewModelTest.kt | 8 ++- .../repo/model/GitHubApiRepoRepositoryTest.kt | 24 ++++---- 20 files changed, 188 insertions(+), 50 deletions(-) create mode 100644 core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt create mode 100644 core-api/src/main/java/com/jraska/github/client/coroutines/AppDispatchers.kt create mode 100644 core/src/main/java/com/jraska/github/client/CoroutinesModule.kt diff --git a/app/build.gradle b/app/build.gradle index 00a69fa5..37fea7fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,6 +76,8 @@ android { packagingOptions { exclude 'META-INF/licenses/ASM' + exclude 'META-INF/AL2.0' + exclude 'META-INF/LGPL2.1' } if (gradle.startParameter.taskNames.any { it.contains("Firebase") }) { @@ -153,6 +155,7 @@ dependencies { androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') + androidTestImplementation coroutinesJvm androidTestImplementation rootProject.ext.retrofit androidTestImplementation rootProject.ext.retrofitGsonConverter diff --git a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt index 868e3344..98439618 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestUITestApp.kt @@ -6,6 +6,7 @@ import com.jraska.github.client.core.android.BaseApp import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.http.FakeHttpModule import com.jraska.github.client.android.test.DeepLinkRecordingComponent +import com.jraska.github.client.android.test.FakeAndroidCoreModule import com.jraska.github.client.android.test.FakeDeepLinkRecordingModule import dagger.BindsInstance import dagger.Component @@ -37,6 +38,7 @@ class TestUITestApp : BaseApp() { SharedModules::class, FakeCoreModule::class, FakeHttpModule::class, + FakeAndroidCoreModule::class, FakeDeepLinkRecordingModule::class ] ) diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index ae49cd08..930ea52c 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -49,5 +49,5 @@ interface AppComponent : AppBaseComponent { ) object SharedModules -@Module(includes = [FirebaseCoreModule::class, HttpModule::class]) +@Module(includes = [FirebaseCoreModule::class, HttpModule::class, CoroutinesModule::class]) object ToExchange diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index e447a8ae..839ac2d4 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation coroutinesJvm implementation okHttpMockWebServer implementation rootProject.ext.okHttp diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt index f192a0e0..3dcc2420 100644 --- a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt @@ -2,8 +2,10 @@ package com.jraska.github.client.android.test import android.app.Application import androidx.lifecycle.ViewModel +import androidx.test.espresso.IdlingRegistry import com.jraska.github.client.core.android.OnAppCreate import com.jraska.github.client.core.android.ServiceModel +import com.jraska.github.client.coroutines.AppDispatchers import com.squareup.rx3.idler.Rx3Idler import dagger.Module import dagger.Provides @@ -11,6 +13,8 @@ import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet import io.reactivex.rxjava3.plugins.RxJavaPlugins +import kotlinx.coroutines.Dispatchers +import javax.inject.Singleton @Module object FakeAndroidCoreModule { @@ -31,7 +35,7 @@ object FakeAndroidCoreModule { @Provides @IntoSet - fun startupRxIdlers() : OnAppCreate { + fun startupRxIdlers(): OnAppCreate { return object : OnAppCreate { override fun onCreate(app: Application) { RxJavaPlugins.setInitComputationSchedulerHandler( @@ -43,4 +47,13 @@ object FakeAndroidCoreModule { } } } + + @Provides + @Singleton + fun appDispatchers(): AppDispatchers { + val idlingDispatcher = IdlingDispatcher(Dispatchers.IO) + IdlingRegistry.getInstance().register(idlingDispatcher) + + return AppDispatchers(Dispatchers.Main, idlingDispatcher) + } } diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt new file mode 100644 index 00000000..ddfc2b19 --- /dev/null +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt @@ -0,0 +1,55 @@ +package com.jraska.github.client.android.test + +import androidx.test.espresso.IdlingResource +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.InternalCoroutinesApi +import kotlinx.coroutines.Job +import java.util.Collections +import java.util.WeakHashMap +import kotlin.coroutines.CoroutineContext + +class IdlingDispatcher( + private val parent: CoroutineDispatcher +) : CoroutineDispatcher(), IdlingResource { + + private val jobs = Collections.newSetFromMap(WeakHashMap()) + private var idlingCallback: IdlingResource.ResourceCallback? = null + + override fun getName() = "Coroutines IdlingDispatcher" + + override fun isIdleNow(): Boolean { + jobs.removeAll { !it.isActive } + return jobs.isEmpty() + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + idlingCallback = callback + } + + override fun dispatch(context: CoroutineContext, block: Runnable) { + context[Job]?.let { addNewJob(it) } + parent.dispatch(context, block) + } + + @InternalCoroutinesApi + override fun dispatchYield(context: CoroutineContext, block: Runnable) { + context[Job]?.let { addNewJob(it) } + parent.dispatchYield(context, block) + } + + override fun isDispatchNeeded(context: CoroutineContext): Boolean { + context[Job]?.let { addNewJob(it) } + return parent.isDispatchNeeded(context) + } + + private fun addNewJob(job: Job) { + job.invokeOnCompletion { onJobComplete() } + jobs.add(job) + } + + private fun onJobComplete() { + if (isIdleNow) { + idlingCallback?.onTransitionToIdle() + } + } +} diff --git a/core-api/build.gradle b/core-api/build.gradle index 68ffbe11..d1c88816 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -6,6 +6,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'io.reactivex.rxjava3:rxjava:3.1.1' + implementation coroutinesJvm implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-api/src/main/java/com/jraska/github/client/coroutines/AppDispatchers.kt b/core-api/src/main/java/com/jraska/github/client/coroutines/AppDispatchers.kt new file mode 100644 index 00000000..8e3b805f --- /dev/null +++ b/core-api/src/main/java/com/jraska/github/client/coroutines/AppDispatchers.kt @@ -0,0 +1,8 @@ +package com.jraska.github.client.coroutines + +import kotlinx.coroutines.CoroutineDispatcher + +class AppDispatchers( + val main: CoroutineDispatcher, + val io: CoroutineDispatcher +) diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 8be3b664..7f2b15cb 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -23,6 +23,7 @@ dependencies { implementation 'junit:junit:4.13.2' implementation 'io.reactivex.rxjava3:rxjava:3.1.1' + implementation coroutinesTest implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter diff --git a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt index 964c5135..1b7c6aa6 100644 --- a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt @@ -2,11 +2,14 @@ package com.jraska.github.client.android import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Fakes +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.ui.SnackbarDisplay import dagger.Module import dagger.Provides import io.reactivex.rxjava3.plugins.RxJavaPlugins +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.test.setMain import javax.inject.Singleton @Module @@ -19,6 +22,14 @@ object FakeCoreAndroidModule { return Fakes.trampoline() } + @Provides + @Singleton + fun dispatchers(): AppDispatchers { + Dispatchers.setMain(Dispatchers.Unconfined) + + return AppDispatchers(Dispatchers.Unconfined, Dispatchers.Unconfined) + } + @Provides @Singleton fun provideNavigator(): DeepLinkLauncher { diff --git a/core/build.gradle b/core/build.gradle index 0c219f6b..08d189f0 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -38,6 +38,7 @@ dependencies { implementation rootProject.ext.dagger implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' diff --git a/core/src/main/java/com/jraska/github/client/CoroutinesModule.kt b/core/src/main/java/com/jraska/github/client/CoroutinesModule.kt new file mode 100644 index 00000000..302423d1 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/CoroutinesModule.kt @@ -0,0 +1,19 @@ +package com.jraska.github.client + +import com.jraska.github.client.coroutines.AppDispatchers +import dagger.Module +import dagger.Provides +import kotlinx.coroutines.Dispatchers +import javax.inject.Singleton + +@Module +object CoroutinesModule { + @Provides + @Singleton + fun dispatchers(): AppDispatchers { + return AppDispatchers( + Dispatchers.Main, + Dispatchers.IO + ) + } +} diff --git a/dependencies.gradle b/dependencies.gradle index 56e458a7..7fbcf1c5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,4 +1,9 @@ ext { + coroutinesVersion = "1.5.2" + coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" + coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" + coroutinesTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion" + retrofitVersion = '2.9.0' retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index baf12f81..cb566b1d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -27,9 +27,12 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger + implementation coroutinesAndroid + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" + implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter - implementation rootProject.ext.retrofitRxJavaAdapter implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.google.android.material:material:1.4.0' @@ -38,8 +41,6 @@ dependencies { implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' - implementation 'androidx.lifecycle:lifecycle-reactivestreams-ktx:2.3.1' - testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' @@ -47,5 +48,6 @@ dependencies { testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' + testImplementation coroutinesTest kaptTest rootProject.ext.daggerAnnotationProcessor } diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt index b0700cdc..7ad02b05 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/RepoDetailViewModel.kt @@ -2,27 +2,28 @@ package com.jraska.github.client.repo import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel -import androidx.lifecycle.toLiveData +import androidx.lifecycle.asLiveData import com.google.android.material.snackbar.Snackbar import com.jraska.github.client.Owner import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.common.lazyMap -import com.jraska.github.client.ui.SnackbarData -import com.jraska.github.client.ui.SnackbarDisplay +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.navigation.Urls import com.jraska.github.client.repo.model.RepoDetail import com.jraska.github.client.repo.model.RepoHeader import com.jraska.github.client.repo.model.RepoRepository -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.core.BackpressureStrategy -import io.reactivex.rxjava3.core.Single +import com.jraska.github.client.ui.SnackbarData +import com.jraska.github.client.ui.SnackbarDisplay +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import javax.inject.Inject internal class RepoDetailViewModel @Inject constructor( private val repoRepository: RepoRepository, - private val appSchedulers: AppSchedulers, + private val appDispatchers: AppDispatchers, private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics, private val snackbarDisplay: SnackbarDisplay @@ -37,13 +38,10 @@ internal class RepoDetailViewModel @Inject constructor( private fun createRepoDetailLiveData(fullRepoName: String): LiveData { val parts = fullRepoName.split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray() return repoRepository.getRepoDetail(parts[0], parts[1]) - .subscribeOn(appSchedulers.io) - .observeOn(appSchedulers.mainThread) - .map { detail -> ViewState.ShowRepo(detail) } - .onErrorReturn { ViewState.Error(it) } - .startWith(Single.just(ViewState.Loading)) - .toFlowable(BackpressureStrategy.MISSING) - .toLiveData() + .map { ViewState.ShowRepo(it) as ViewState } + .onStart { emit(ViewState.Loading) } + .catch { emit(ViewState.Error(it)) } + .asLiveData(appDispatchers.io) } fun onGitHubIconClicked(fullRepoName: String) { diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt index a5ed1829..753d66f9 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt @@ -1,22 +1,36 @@ package com.jraska.github.client.repo.model -import io.reactivex.rxjava3.core.Observable +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import retrofit2.Call internal class GitHubApiRepoRepository( private val gitHubRepoApi: RepoGitHubApi ) : RepoRepository { - override fun getRepoDetail(owner: String, repoName: String): Observable { - return gitHubRepoApi.getRepo(owner, repoName) - .toObservable() - .map { RepoConverter.convertToDetail(it) } - .concatMap { detail -> - Observable.just(detail) - .concatWith( - gitHubRepoApi.getPulls(owner, repoName) - .map { RepoConverter.convertRepos(detail, it) } - .onErrorReturn { RepoConverter.convertRepos(detail, it) } - ) + override fun getRepoDetail(owner: String, repoName: String): Flow { + return flow { + val repo = gitHubRepoApi.getRepo(owner, repoName).result() + val firstDetail = RepoConverter.convertToDetail(repo) + emit(firstDetail) + + try { + val pulls = gitHubRepoApi.getPulls(owner, repoName).result() + val secondDetail = RepoConverter.convertRepos(firstDetail, pulls) + + emit(secondDetail) + } catch (ex: Exception) { + emit(RepoConverter.convertRepos(firstDetail, ex)) } + } + } + + fun Call.result(): T { + val response = execute() + if (response.isSuccessful) { + return response.body()!! + } else { + throw retrofit2.HttpException(response) + } } } diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt index 667cf2c9..39763915 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoGitHubApi.kt @@ -1,13 +1,13 @@ package com.jraska.github.client.repo.model -import io.reactivex.rxjava3.core.Single +import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Path internal interface RepoGitHubApi { @GET("/repos/{owner}/{name}") - fun getRepo(@Path("owner") path: String, @Path("name") name: String): Single + fun getRepo(@Path("owner") path: String, @Path("name") name: String): Call @GET("/repos/{owner}/{name}/pulls?state=all") - fun getPulls(@Path("owner") path: String, @Path("name") name: String): Single> + fun getPulls(@Path("owner") path: String, @Path("name") name: String): Call> } diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt index 99849d7b..b2b86c05 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/RepoRepository.kt @@ -1,7 +1,7 @@ package com.jraska.github.client.repo.model -import io.reactivex.rxjava3.core.Observable +import kotlinx.coroutines.flow.Flow internal interface RepoRepository { - fun getRepoDetail(owner: String, repoName: String): Observable + fun getRepoDetail(owner: String, repoName: String): Flow } diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt index c9e0ff72..590237ad 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt @@ -7,6 +7,8 @@ import com.jraska.github.client.repo.di.DaggerTestRepoComponent import com.jraska.github.client.repo.di.TestRepoComponent import com.jraska.github.client.repo.model.GitHubApiRepoRepositoryTest import com.jraska.livedata.test +import kotlinx.coroutines.flow.toCollection +import kotlinx.coroutines.runBlocking import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before @@ -18,9 +20,11 @@ internal class RepoDetailViewModelTest { @get:Rule val testRule = InstantTaskExecutorRule() - @get:Rule val mockWebServer = MockWebServer() + @get:Rule + val mockWebServer = MockWebServer() - @get:Rule val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) + @get:Rule + val mockWebServerInterceptorRule = MockWebServerInterceptorRule(mockWebServer) lateinit var component: TestRepoComponent lateinit var repoDetailViewModel: RepoDetailViewModel diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt index cd0e6f1c..4cab42eb 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/model/GitHubApiRepoRepositoryTest.kt @@ -2,6 +2,8 @@ package com.jraska.github.client.repo.model import com.jraska.github.client.http.HttpTest import com.jraska.github.client.http.enqueue +import kotlinx.coroutines.flow.toCollection +import kotlinx.coroutines.runBlocking import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Rule @@ -14,18 +16,16 @@ internal class GitHubApiRepoRepositoryTest { val mockWebServer = MockWebServer() @Test - fun getsTheDetailProperly() { - val gitHubApiRepoRepository = GitHubApiRepoRepository(repoGitHubApi()) - mockWebServer.enqueue("response/repo_detail.json") - mockWebServer.enqueue("response/repo_pulls.json") - - val repoDetail = gitHubApiRepoRepository.getRepoDetail("jraska", "github-client") - .test() - .assertValueCount(2) - .values() - .last() - - assertThat(repoDetail).usingRecursiveComparison().isEqualTo(expectedRepoDetail()) + fun getsTheDetailProperlyCoroutines() { + runBlocking { + val gitHubApiRepoRepository = GitHubApiRepoRepository(repoGitHubApi()) + mockWebServer.enqueue("response/repo_detail.json") + mockWebServer.enqueue("response/repo_pulls.json") + + val repoDetail = gitHubApiRepoRepository.getRepoDetail("jraska", "github-client").toCollection(mutableListOf()) + + assertThat(repoDetail[1]).usingRecursiveComparison().isEqualTo(expectedRepoDetail()) + } } private fun repoGitHubApi() = HttpTest.retrofit(mockWebServer).create(RepoGitHubApi::class.java) From e91150c1d8eafeb98e80ed4ef52ee8b6b02e87c1 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 18 Sep 2021 01:42:33 +0200 Subject: [PATCH 145/621] Users module to coroutines (#606) * Users to coroutines * Add coroutines to user app * Make suer detail requests in parallel --- .../github/client/users/UsersAppComponent.kt | 2 + core-api/build.gradle | 1 + .../jraska/github/client/coroutines/Call.kt | 12 +++++ .../java/com/jraska/github/client/Fakes.kt | 10 ++-- .../client/android/FakeCoreAndroidModule.kt | 12 +---- feature/in-app-update/build.gradle | 3 +- feature/repo/build.gradle | 1 - .../repo/model/GitHubApiRepoRepository.kt | 11 +---- feature/users/build.gradle | 12 ++++- .../client/users/UserDetailViewModel.kt | 20 ++++---- .../jraska/github/client/users/UsersModule.kt | 6 +-- .../github/client/users/UsersViewModel.kt | 46 ++++++++++------- .../users/model/GitHubApiUsersRepository.kt | 49 ++++++++++++------- .../client/users/model/GitHubUsersApi.kt | 10 ++-- .../client/users/model/UsersRepository.kt | 7 ++- .../com/jraska/github/client/users/rx/Rx.kt | 10 ---- .../model/GitHubApiUsersRepositoryTest.kt | 29 +++++------ 17 files changed, 124 insertions(+), 117 deletions(-) create mode 100644 core-api/src/main/java/com/jraska/github/client/coroutines/Call.kt delete mode 100644 feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt diff --git a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt index 73fa93b4..ac2c9050 100644 --- a/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt +++ b/app-partial-users/src/main/java/com/jraska/github/client/users/UsersAppComponent.kt @@ -2,6 +2,7 @@ package com.jraska.github.client.users import android.content.Context import androidx.lifecycle.ViewModelProvider +import com.jraska.github.client.CoroutinesModule import com.jraska.github.client.FakeCoreModule import com.jraska.github.client.FakeWebLinkModule import com.jraska.github.client.core.android.CoreAndroidModule @@ -18,6 +19,7 @@ import javax.inject.Singleton FakeCoreModule::class, HttpModule::class, FakeWebLinkModule::class, + CoroutinesModule::class, UsersModule::class] ) interface UsersAppComponent { diff --git a/core-api/build.gradle b/core-api/build.gradle index d1c88816..1e86a8e5 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -7,6 +7,7 @@ dependencies { implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation coroutinesJvm + implementation retrofit implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-api/src/main/java/com/jraska/github/client/coroutines/Call.kt b/core-api/src/main/java/com/jraska/github/client/coroutines/Call.kt new file mode 100644 index 00000000..3fa56d55 --- /dev/null +++ b/core-api/src/main/java/com/jraska/github/client/coroutines/Call.kt @@ -0,0 +1,12 @@ +package com.jraska.github.client.coroutines + +import retrofit2.Call + +fun Call.result(): T { + val response = execute() + if (response.isSuccessful) { + return response.body()!! + } else { + throw retrofit2.HttpException(response) + } +} diff --git a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt index 7715f438..c501f2c6 100644 --- a/core-testing/src/main/java/com/jraska/github/client/Fakes.kt +++ b/core-testing/src/main/java/com/jraska/github/client/Fakes.kt @@ -2,8 +2,8 @@ package com.jraska.github.client import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.android.RecordingDeepLinkLauncher -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.schedulers.Schedulers +import com.jraska.github.client.coroutines.AppDispatchers +import kotlinx.coroutines.Dispatchers object Fakes { fun config(values: Map = emptyMap()): FakeConfig { @@ -18,15 +18,15 @@ object Fakes { return RecordingEventAnalytics() } - fun trampoline(): AppSchedulers { - return AppSchedulers(Schedulers.trampoline(), Schedulers.trampoline(), Schedulers.trampoline()) + fun unconfined(): AppDispatchers { + return AppDispatchers(Dispatchers.Unconfined, Dispatchers.Unconfined) } fun recordingAnalyticsProperty(): RecordingAnalyticsProperty { return RecordingAnalyticsProperty() } - fun recordingDeepLinkLauncher() : RecordingDeepLinkLauncher { + fun recordingDeepLinkLauncher(): RecordingDeepLinkLauncher { return RecordingDeepLinkLauncher() } } diff --git a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt index 1b7c6aa6..2dd4ba05 100644 --- a/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt +++ b/core-testing/src/main/java/com/jraska/github/client/android/FakeCoreAndroidModule.kt @@ -3,31 +3,21 @@ package com.jraska.github.client.android import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Fakes import com.jraska.github.client.coroutines.AppDispatchers -import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.ui.SnackbarDisplay import dagger.Module import dagger.Provides -import io.reactivex.rxjava3.plugins.RxJavaPlugins import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.test.setMain import javax.inject.Singleton @Module object FakeCoreAndroidModule { - @Provides - @Singleton - fun schedulers(): AppSchedulers { - RxJavaPlugins.setErrorHandler { /* empty for now */ } // TODO: 09/04/2021 Better test implementation https://github.com/jraska/github-client/pull/467/checks?check_run_id=2301305103 - - return Fakes.trampoline() - } - @Provides @Singleton fun dispatchers(): AppDispatchers { Dispatchers.setMain(Dispatchers.Unconfined) - return AppDispatchers(Dispatchers.Unconfined, Dispatchers.Unconfined) + return Fakes.unconfined() } @Provides diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 6b022b09..e4a7cf71 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -18,8 +18,9 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') implementation project(':feature:config-debug-api') + implementation 'androidx.lifecycle:lifecycle-process:2.3.1' - kapt rootProject.ext.daggerAnnotationProcessor + kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger implementation 'com.google.android.play:core:1.10.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index cb566b1d..ac180077 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -28,7 +28,6 @@ dependencies { implementation rootProject.ext.dagger implementation coroutinesAndroid - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" implementation rootProject.ext.retrofit diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt index 753d66f9..a001e3ac 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/model/GitHubApiRepoRepository.kt @@ -1,8 +1,8 @@ package com.jraska.github.client.repo.model +import com.jraska.github.client.coroutines.result import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import retrofit2.Call internal class GitHubApiRepoRepository( private val gitHubRepoApi: RepoGitHubApi @@ -24,13 +24,4 @@ internal class GitHubApiRepoRepository( } } } - - fun Call.result(): T { - val response = execute() - if (response.isSuccessful) { - return response.body()!! - } else { - throw retrofit2.HttpException(response) - } - } } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 22b4a351..9b3752bb 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -18,6 +18,12 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } + + packagingOptions { + exclude 'META-INF/licenses/ASM' + exclude 'META-INF/AL2.0' + exclude 'META-INF/LGPL2.1' + } } dependencies { @@ -32,17 +38,19 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter - implementation rootProject.ext.retrofitRxJavaAdapter implementation 'com.google.code.gson:gson:2.8.8' + implementation coroutinesJvm + implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.jakewharton.timber:timber:5.0.1' implementation rootProject.ext.fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' - implementation 'androidx.lifecycle:lifecycle-reactivestreams-ktx:2.3.1' + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt index f9fb320c..fee32c36 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UserDetailViewModel.kt @@ -2,6 +2,7 @@ package com.jraska.github.client.users import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.asLiveData import com.jraska.github.client.Config import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Owner @@ -9,18 +10,19 @@ import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.common.lazyMap -import com.jraska.github.client.users.rx.toLiveData +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.navigation.Urls -import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.RepoHeader import com.jraska.github.client.users.model.UserDetail import com.jraska.github.client.users.model.UsersRepository -import io.reactivex.rxjava3.core.Single +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import javax.inject.Inject internal class UserDetailViewModel @Inject constructor( private val usersRepository: UsersRepository, - private val schedulers: AppSchedulers, + private val dispatchers: AppDispatchers, private val deepLinkLauncher: DeepLinkLauncher, private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics, @@ -40,12 +42,10 @@ internal class UserDetailViewModel @Inject constructor( } return usersRepository.getUserDetail(login, reposInSection) - .subscribeOn(schedulers.io) - .observeOn(schedulers.mainThread) - .map { userDetail -> ViewState.DisplayUser(userDetail) } - .onErrorReturn { ViewState.Error(it) } - .startWith(Single.just(ViewState.Loading)) - .toLiveData() + .map { userDetail -> ViewState.DisplayUser(userDetail) as ViewState } + .onStart { emit(ViewState.Loading) } + .catch { emit(ViewState.Error(it)) } + .asLiveData(dispatchers.io) } fun onUserGitHubIconClick(login: String) { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt index c76fddf3..20ea091c 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt @@ -8,7 +8,7 @@ import com.jraska.github.client.config.MutableConfigSetup import com.jraska.github.client.config.MutableConfigType import com.jraska.github.client.core.android.LinkLauncher import com.jraska.github.client.core.android.OnAppCreateAsync -import com.jraska.github.client.rx.AppSchedulers +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.users.model.GitHubApiUsersRepository import com.jraska.github.client.users.model.GitHubUsersApi import com.jraska.github.client.users.model.UsersRepository @@ -28,10 +28,10 @@ object UsersModule { @Provides @Singleton - internal fun provideUsersRepository(retrofit: Retrofit, appSchedulers: AppSchedulers): UsersRepository { + internal fun provideUsersRepository(retrofit: Retrofit, appDispatchers: AppDispatchers): UsersRepository { val usersApi = retrofit.create(GitHubUsersApi::class.java) - return GitHubApiUsersRepository(usersApi, appSchedulers) + return GitHubApiUsersRepository(usersApi, appDispatchers) } @Provides diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt index 698a6094..c19c0fca 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersViewModel.kt @@ -1,43 +1,34 @@ package com.jraska.github.client.users import androidx.lifecycle.LiveData +import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.asLiveData import com.jraska.github.client.DeepLinkLauncher import com.jraska.github.client.Owner import com.jraska.github.client.WebLinkLauncher import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics -import com.jraska.github.client.users.rx.toLiveData +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.navigation.Urls -import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.users.model.User import com.jraska.github.client.users.model.UsersRepository -import io.reactivex.rxjava3.core.Single -import io.reactivex.rxjava3.subjects.PublishSubject +import kotlinx.coroutines.flow.flow import javax.inject.Inject internal class UsersViewModel @Inject constructor( - usersRepository: UsersRepository, - appSchedulers: AppSchedulers, + private val usersRepository: UsersRepository, + private val appDispatchers: AppDispatchers, private val deepLinkLauncher: DeepLinkLauncher, private val webLinkLauncher: WebLinkLauncher, private val eventAnalytics: EventAnalytics ) : ViewModel() { - private val users: LiveData - private val refreshSignal = PublishSubject.create() + private val users = MediatorLiveData() + private lateinit var currentData: LiveData init { - users = usersRepository.getUsers(0) - .map { users -> ViewState.ShowUsers(users) } - .onErrorReturn { ViewState.Error(it) } - .toObservable() - .subscribeOn(appSchedulers.io) - .startWith(Single.just(ViewState.Loading)) - .repeatWhen { refreshSignal } - .cache() - .observeOn(appSchedulers.mainThread) - .toLiveData() + setupLiveData() } fun users(): LiveData { @@ -45,7 +36,9 @@ internal class UsersViewModel @Inject constructor( } fun onRefresh() { - refreshSignal.onNext(Unit) + users.removeSource(currentData) + + setupLiveData() } fun onUserClicked(user: User) { @@ -80,6 +73,21 @@ internal class UsersViewModel @Inject constructor( deepLinkLauncher.launch(Urls.about()) } + private fun setupLiveData() { + currentData = newUsersLiveData() + users.addSource(currentData) { users.value = it } + } + + private fun newUsersLiveData() = flow { + this.emit(ViewState.Loading) + try { + val users = usersRepository.getUsers(0) + this.emit(ViewState.ShowUsers(users)) + } catch (ex: Exception) { + this.emit(ViewState.Error(ex)) + } + }.asLiveData(appDispatchers.io) + sealed class ViewState { object Loading : ViewState() class Error(val error: Throwable) : ViewState() diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt index 8c7b0480..900d2643 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt @@ -1,40 +1,51 @@ package com.jraska.github.client.users.model -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Single +import com.jraska.github.client.coroutines.AppDispatchers +import com.jraska.github.client.coroutines.result +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.withContext import java.util.Collections internal class GitHubApiUsersRepository( private val gitHubUsersApi: GitHubUsersApi, - private val appSchedulers: AppSchedulers + private val appDispatchers: AppDispatchers ) : UsersRepository { private val converter: UserDetailWithReposConverter = UserDetailWithReposConverter.INSTANCE private var lastUsers: List? = null - override fun getUsers(since: Int): Single> { - return gitHubUsersApi.getUsers(since) - .map { this.translateUsers(it) } - .doOnSuccess { users -> lastUsers = users } + override suspend fun getUsers(since: Int): List { + val userDtos = gitHubUsersApi.getUsers(since).result() + return translateUsers(userDtos).also { lastUsers = it } } - override fun getUserDetail(login: String, reposInSection: Int): Observable { - return gitHubUsersApi.getUserDetail(login) - .subscribeOn(appSchedulers.io) // this has to be here now to run requests in parallel - .zipWith(gitHubUsersApi.getRepos(login), { a: GitHubUserDetail, b: List -> Pair(a, b) }) - .map { result -> converter.translateUserDetail(result.component1(), result.component2(), reposInSection) } - .toObservable() - .startWith(cachedUser(login)) + override fun getUserDetail(login: String, reposInSection: Int): Flow { + return flow { + cachedUser(login)?.let { + emit(it) + } + + val userDetail = withContext(appDispatchers.io) { + val asyncDetail = async { gitHubUsersApi.getUserDetail(login).result() } + val asyncRepo = async { gitHubUsersApi.getRepos(login).result() } + awaitAll(asyncDetail, asyncRepo) + + converter.translateUserDetail(asyncDetail.await(), asyncRepo.await(), reposInSection) + } + + emit(userDetail) + } } - private fun cachedUser(login: String): Observable { - val lastUsers = this.lastUsers ?: return Observable.empty() + private fun cachedUser(login: String): UserDetail? { + val lastUsers = this.lastUsers ?: return null return lastUsers.firstOrNull { login == it.login } - ?.let { Observable.just(UserDetail(it, null, emptyList(), emptyList())) } - ?: Observable.empty() + ?.let { UserDetail(it, null, emptyList(), emptyList()) } } private fun translateUsers(gitHubUsers: List): List { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt index d1253188..e1dc3e28 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubUsersApi.kt @@ -1,17 +1,17 @@ package com.jraska.github.client.users.model -import io.reactivex.rxjava3.core.Single +import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query internal interface GitHubUsersApi { - @GET("/users?some=1") - fun getUsers(@Query("since") since: Int): Single> + @GET("/users") + fun getUsers(@Query("since") since: Int): Call> @GET("/users/{login}") - fun getUserDetail(@Path("login") login: String): Single + fun getUserDetail(@Path("login") login: String): Call @GET("/users/{login}/repos?type=all") - fun getRepos(@Path("login") login: String): Single> + fun getRepos(@Path("login") login: String): Call> } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt index d5f27d9c..85f8e7e6 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/UsersRepository.kt @@ -1,10 +1,9 @@ package com.jraska.github.client.users.model -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Single +import kotlinx.coroutines.flow.Flow internal interface UsersRepository { - fun getUsers(since: Int): Single> + suspend fun getUsers(since: Int): List - fun getUserDetail(login: String, reposInSection: Int): Observable + fun getUserDetail(login: String, reposInSection: Int): Flow } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt b/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt deleted file mode 100644 index 9df060f0..00000000 --- a/feature/users/src/main/java/com/jraska/github/client/users/rx/Rx.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.jraska.github.client.users.rx - -import androidx.lifecycle.LiveData -import androidx.lifecycle.toLiveData -import io.reactivex.rxjava3.core.BackpressureStrategy -import io.reactivex.rxjava3.core.Observable - -fun Observable.toLiveData(): LiveData { - return toFlowable(BackpressureStrategy.MISSING).toLiveData() -} diff --git a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt index e023af7f..7fdc2c4b 100644 --- a/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt +++ b/feature/users/src/test/java/com/jraska/github/client/users/model/GitHubApiUsersRepositoryTest.kt @@ -5,8 +5,8 @@ import com.jraska.github.client.http.HttpTest import com.jraska.github.client.http.enqueue import com.jraska.github.client.http.onUrlPartReturn import com.jraska.github.client.http.onUrlReturn -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.schedulers.Schedulers +import kotlinx.coroutines.flow.toCollection +import kotlinx.coroutines.runBlocking import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before @@ -22,17 +22,14 @@ class GitHubApiUsersRepositoryTest { @Before fun setUp() { - repository = GitHubApiUsersRepository(HttpTest.retrofit(mockWebServer).create(GitHubUsersApi::class.java), Fakes.trampoline()) + repository = GitHubApiUsersRepository(HttpTest.retrofit(mockWebServer).create(GitHubUsersApi::class.java), Fakes.unconfined()) } @Test fun getsUsersProperly() { mockWebServer.enqueue("response/users.json") - val users = repository.getUsers(0) - .test() - .values() - .first() + val users = runBlocking { repository.getUsers(0) } assertThat(users).hasSize(30) assertThat(users.first()).usingRecursiveComparison().isEqualTo(testFirstUser()) @@ -44,18 +41,16 @@ class GitHubApiUsersRepositoryTest { mockWebServer.onUrlReturn(".*/users.mojombo".toRegex(), "response/mojombo.json") mockWebServer.onUrlPartReturn("users/mojombo/repos", "response/mojombo_repos.json") - repository.getUserDetail("mojombo", 1) - .test() - .awaitCount(1) - .assertComplete() + val values = runBlocking { + val userDetails = repository.getUserDetail("mojombo", 1).toCollection(mutableListOf()) + assertThat(userDetails.size).isEqualTo(1) - repository.getUsers(0).test() // this line simulates the list request to cache - val values = repository.getUserDetail("mojombo", 1) - .test() - .awaitCount(2) - .assertComplete() - .values() + repository.getUsers(0) + repository.getUserDetail("mojombo", 1).toCollection(mutableListOf()) + } + + assertThat(values.size).isEqualTo(2) assertThat(values.first().user).usingRecursiveComparison().isEqualTo(testFirstUser()) assertThat(values.last().user).usingRecursiveComparison().isEqualTo(testFirstUser()) } From 46d85c6060ef445e99901c1d2a0234a5131c1e98 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 18 Sep 2021 16:45:42 +0200 Subject: [PATCH 146/621] Coroutines everywhere (#607) * Full move to coroutines * Adding missing idling resource dependency * Add missing monitor dependency * Replace HotObservable with Flow * Execute async init actions in parallel --- README.md | 2 +- app-partial-users/build.gradle | 1 - app/build.gradle | 4 +-- .../com/jraska/github/client/AppSetupTest.kt | 13 --------- .../com/jraska/github/client/TestRunner.kt | 14 --------- .../client/xpush/PushIntegrationTest.kt | 2 +- .../github/client/xpush/PushServerClient.kt | 7 ++--- .../github/client/core/android/OnAppCreate.kt | 2 +- core-android-testing/build.gradle | 4 +-- .../android/test/FakeAndroidCoreModule.kt | 20 ------------- core-api/build.gradle | 1 - .../jraska/github/client/rx/AppSchedulers.kt | 9 ------ core-testing/build.gradle | 2 -- .../com/jraska/github/client/http/HttpTest.kt | 2 -- core/build.gradle | 2 -- .../client/core/android/CoreAndroidModule.kt | 16 ++-------- .../core/android/OnAppCreateAsyncExecutor.kt | 29 ++++++++++++++----- .../jraska/github/client/http/HttpModule.kt | 2 -- dependencies.gradle | 1 - feature/in-app-update/build.gradle | 4 +-- .../client/inappupdate/InAppUpdateModule.kt | 6 ++-- .../inappupdate/UpdateCheckScheduler.kt | 22 -------------- feature/network-status/build.gradle | 3 +- .../{NetworkObservable.kt => NetworkFlow.kt} | 28 +++++++++--------- .../internal/NetworkStatusDisplayer.kt | 27 ++++++++++------- .../jraska/github/client/users/UsersModule.kt | 2 +- 26 files changed, 70 insertions(+), 155 deletions(-) delete mode 100644 core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt delete mode 100644 feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt rename feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/{NetworkObservable.kt => NetworkFlow.kt} (56%) diff --git a/README.md b/README.md index 8b04b194..c8233c10 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Experimental architecture app with example usage intended to be a showcase, test - Deep Link navigation used across the app - [Article](https://proandroiddev.com/in-app-deep-link-navigation-because-deep-links-matter-17f0c91f2658) - All core services have its lightweight fake implementation. See `Fakes` - Dependency replacement in test is done by Dagger components in `TestUITestApp` -- RxJava is used for threading everywhere, allowing proper idling of UI tests. Also `AppSchedulers` dependency makes all threading testable. +- Coroutines is used for threading everywhere, allowing proper idling of UI tests. Also `AppDispatchers` dependency makes all threading testable. - Push is implemented by using Firebase Cloud Messaging. See `PushActionCommand`. Thanks to deep link navigation app can be controlled remotely by executing deep links - `LaunchDeepLinkCommand : PushActionCommand` - `TopActivityProvider` to avoid having `Context` dependencie everywhere and to be able to have cleaner pure Kotlin interfaces - Enforced ownership of remote configuration and analytics events - [Details on PR](https://github.com/jraska/github-client/pull/230). More on why these need to be explicitly owned on [this article](https://proandroiddev.com/remote-feature-flags-do-not-always-come-for-free-a372f1768a70). diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 7c5e4df9..941e609d 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -56,7 +56,6 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.okHttpLoggingInterceptor diff --git a/app/build.gradle b/app/build.gradle index 37fea7fc..e8d6ea30 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -140,7 +140,6 @@ dependencies { implementation rootProject.ext.dagger implementation rootProject.ext.retrofit - implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation rootProject.ext.okHttpLoggingInterceptor @@ -149,17 +148,16 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.8' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.4.0' androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test:rules:1.4.0' androidTestImplementation 'org.assertj:assertj-core:3.20.2' - androidTestImplementation 'com.squareup.rx.idler:rx3-idler:0.11.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation coroutinesJvm androidTestImplementation rootProject.ext.retrofit androidTestImplementation rootProject.ext.retrofitGsonConverter - androidTestImplementation rootProject.ext.retrofitRxJavaAdapter androidTestImplementation okHttpMockWebServer kaptAndroidTest rootProject.ext.daggerAnnotationProcessor diff --git a/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt b/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt index e9384d38..2443aab0 100644 --- a/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/AppSetupTest.kt @@ -1,6 +1,5 @@ package com.jraska.github.client -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import org.assertj.core.api.Assertions.assertThat import org.junit.Test import timber.log.Timber @@ -19,18 +18,6 @@ class AppSetupTest { assertThat(event).isNotNull } - - @Test - fun androidSchedulerIsAsync() { - // This got broken so many times - even reflection might be worth the test - val handlerScheduler = AndroidSchedulers.mainThread() - - val asyncField = handlerScheduler.javaClass.getDeclaredField("async") - asyncField.isAccessible = true - - val isAsync = asyncField.get(AndroidSchedulers.mainThread()) as Boolean - assertThat(isAsync).isTrue() - } } fun recordedEvents() = FakeCoreModule diff --git a/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt b/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt index 8f0508f3..34f1a87c 100644 --- a/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt +++ b/app/src/androidTest/java/com/jraska/github/client/TestRunner.kt @@ -2,25 +2,11 @@ package com.jraska.github.client import android.app.Application import android.content.Context -import android.os.Bundle import androidx.test.runner.AndroidJUnitRunner -import com.squareup.rx3.idler.Rx3Idler -import io.reactivex.rxjava3.plugins.RxJavaPlugins @Suppress("unused") // build.gradle class TestRunner : AndroidJUnitRunner() { override fun newApplication(cl: ClassLoader, className: String, context: Context): Application { return super.newApplication(cl, TestUITestApp::class.java.name, context) } - - override fun onCreate(arguments: Bundle?) { - super.onCreate(arguments) - - RxJavaPlugins.setInitComputationSchedulerHandler( - Rx3Idler.create("RxJava 3.x Computation Scheduler") - ) - RxJavaPlugins.setInitIoSchedulerHandler( - Rx3Idler.create("RxJava 3.x IO Scheduler") - ) - } } diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt index 5c0ead01..3681829e 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushIntegrationTest.kt @@ -57,7 +57,7 @@ class PushIntegrationTest { data["deepLink"] = deepLink } - pushClient.sendPush(messageToThisDevice).blockingAwait() + pushClient.sendPush(messageToThisDevice).execute() } private fun apiKey(): String { diff --git a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt index 143400ba..7afb6c3a 100644 --- a/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt +++ b/app/src/androidTest/java/com/jraska/github/client/xpush/PushServerClient.kt @@ -1,12 +1,12 @@ package com.jraska.github.client.xpush -import io.reactivex.rxjava3.core.Completable import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Response +import okhttp3.ResponseBody import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Call import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import retrofit2.http.Body import retrofit2.http.POST @@ -14,14 +14,13 @@ import timber.log.Timber interface PushServerClient { @POST("/fcm/send") - fun sendPush(@Body message: PushServerDto): Completable + fun sendPush(@Body message: PushServerDto): Call companion object { fun create(authorizationToken: String): PushServerClient { return Retrofit.Builder() .baseUrl("https://fcm.googleapis.com") .client(pushClient(authorizationToken)) - .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .addConverterFactory(GsonConverterFactory.create()) .build() .create(PushServerClient::class.java) diff --git a/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt index fe496d8c..f19784a2 100644 --- a/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt +++ b/core-android-api/src/main/java/com/jraska/github/client/core/android/OnAppCreate.kt @@ -12,5 +12,5 @@ interface OnAppCreate { * Initialisations which are not necessarily critical and don't have to block should happen here. */ interface OnAppCreateAsync { - fun onCreateAsync(app: Application) + suspend fun onCreateAsync(app: Application) } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 839ac2d4..8114ff49 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -28,9 +28,9 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation coroutinesJvm + implementation 'androidx.test.espresso:espresso-idling-resource:3.4.0' + implementation 'androidx.test:monitor:1.4.0' implementation okHttpMockWebServer implementation rootProject.ext.okHttp implementation 'com.squareup.okio:okio:2.10.0' - - implementation 'com.squareup.rx.idler:rx3-idler:0.11.0' } diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt index 3dcc2420..463b379c 100644 --- a/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/FakeAndroidCoreModule.kt @@ -1,18 +1,13 @@ package com.jraska.github.client.android.test -import android.app.Application import androidx.lifecycle.ViewModel import androidx.test.espresso.IdlingRegistry -import com.jraska.github.client.core.android.OnAppCreate import com.jraska.github.client.core.android.ServiceModel import com.jraska.github.client.coroutines.AppDispatchers -import com.squareup.rx3.idler.Rx3Idler import dagger.Module import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap -import dagger.multibindings.IntoSet -import io.reactivex.rxjava3.plugins.RxJavaPlugins import kotlinx.coroutines.Dispatchers import javax.inject.Singleton @@ -33,21 +28,6 @@ object FakeAndroidCoreModule { return object : ViewModel() {} // Make sure the collection is not empty } - @Provides - @IntoSet - fun startupRxIdlers(): OnAppCreate { - return object : OnAppCreate { - override fun onCreate(app: Application) { - RxJavaPlugins.setInitComputationSchedulerHandler( - Rx3Idler.create("RxJava 3.x Computation Scheduler") - ) - RxJavaPlugins.setInitIoSchedulerHandler( - Rx3Idler.create("RxJava 3.x IO Scheduler") - ) - } - } - } - @Provides @Singleton fun appDispatchers(): AppDispatchers { diff --git a/core-api/build.gradle b/core-api/build.gradle index 1e86a8e5..07f4e000 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -5,7 +5,6 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation coroutinesJvm implementation retrofit implementation rootProject.ext.okHttp diff --git a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt b/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt deleted file mode 100644 index d0d006e4..00000000 --- a/core-api/src/main/java/com/jraska/github/client/rx/AppSchedulers.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.jraska.github.client.rx - -import io.reactivex.rxjava3.core.Scheduler - -class AppSchedulers( - val mainThread: Scheduler, - val io: Scheduler, - val computation: Scheduler -) diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 7f2b15cb..6be5305d 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -22,12 +22,10 @@ dependencies { implementation rootProject.ext.dagger implementation 'junit:junit:4.13.2' - implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation coroutinesTest implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter - implementation rootProject.ext.retrofitRxJavaAdapter implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor diff --git a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt index 10e6005e..11e3e6f6 100644 --- a/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt +++ b/core-testing/src/main/java/com/jraska/github/client/http/HttpTest.kt @@ -9,7 +9,6 @@ import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import org.junit.rules.ExternalResource import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import java.io.File @@ -21,7 +20,6 @@ object HttpTest { .baseUrl(mockWebServer?.url("/") ?: DEFAULT_BASE_URL) .client(client(mockWebServer)) .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() } diff --git a/core/build.gradle b/core/build.gradle index 08d189f0..193caf7d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -37,7 +37,6 @@ dependencies { kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger - implementation 'io.reactivex.rxjava3:rxandroid:3.0.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' implementation 'com.jakewharton.timber:timber:5.0.1' @@ -45,7 +44,6 @@ dependencies { implementation rootProject.ext.retrofit implementation rootProject.ext.retrofitGsonConverter - implementation rootProject.ext.retrofitRxJavaAdapter implementation 'com.google.code.gson:gson:2.8.8' implementation rootProject.ext.okHttpLoggingInterceptor diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index de2447f8..1423ed9b 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -12,7 +12,6 @@ import com.jraska.github.client.Owner import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.core.android.logging.SetupLogging -import com.jraska.github.client.rx.AppSchedulers import com.jraska.github.client.time.DateTimeProvider import com.jraska.github.client.time.RealDateTimeProvider import com.jraska.github.client.time.RealTimeProvider @@ -24,8 +23,6 @@ import dagger.Provides import dagger.multibindings.ClassKey import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.schedulers.Schedulers import javax.inject.Provider import javax.inject.Singleton @@ -89,15 +86,6 @@ object CoreAndroidModule { @Singleton internal fun deepLinkHandler(implementation: DeepLinkHandlerImpl): DeepLinkHandler = implementation - @Provides - @Singleton - fun schedulers(): AppSchedulers { - return AppSchedulers( - AndroidSchedulers.mainThread(), - Schedulers.io(), Schedulers.computation() - ) - } - @Provides @IntoSet internal fun setupLoggingOnCreate(setupLogging: SetupLogging): OnAppCreate { @@ -108,7 +96,7 @@ object CoreAndroidModule { @IntoSet fun reportAppCreateEvent(eventAnalytics: Provider): OnAppCreateAsync { return object : OnAppCreateAsync { - override fun onCreateAsync(app: Application) { + override suspend fun onCreateAsync(app: Application) { val createEvent = AnalyticsEvent.create(AnalyticsEvent.Key("app_create", Owner.CORE_TEAM)) eventAnalytics.get().report(createEvent) } @@ -130,7 +118,7 @@ object CoreAndroidModule { @IntoSet fun setupFresco(): OnAppCreateAsync { return object : OnAppCreateAsync { - override fun onCreateAsync(app: Application) = Fresco.initialize(app) + override suspend fun onCreateAsync(app: Application) = Fresco.initialize(app) } } diff --git a/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt index dac2d3b3..8799968a 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt @@ -1,20 +1,33 @@ package com.jraska.github.client.core.android import android.app.Application -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.core.Completable -import io.reactivex.rxjava3.internal.functions.Functions +import com.jraska.github.client.coroutines.AppDispatchers +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.launch import javax.inject.Inject class OnAppCreateAsyncExecutor @Inject constructor( private val asyncActions: @JvmSuppressWildcards Set, - private val appSchedulers: AppSchedulers + private val appDispatchers: AppDispatchers ) : OnAppCreate { + + @DelicateCoroutinesApi // this is app init override fun onCreate(app: Application) { - asyncActions.forEach { appCreateAsync -> - Completable.fromAction { appCreateAsync.onCreateAsync(app) } - .subscribeOn(appSchedulers.computation) - .subscribe(Functions.EMPTY_ACTION, { crashTheApp(it) }) + GlobalScope.launch(appDispatchers.io) { + asyncActions.map { + async { it.execute(app) } + }.awaitAll() + } + } + + private suspend fun OnAppCreateAsync.execute(app: Application) { + try { + onCreateAsync(app) + } catch (ex: Exception) { + crashTheApp(ex) } } diff --git a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt index c6d91a9c..9c7ea583 100644 --- a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt +++ b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt @@ -9,7 +9,6 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor.Level import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import timber.log.Timber @@ -26,7 +25,6 @@ object HttpModule { .validateEagerly(BuildConfig.DEBUG) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous()) .build() } diff --git a/dependencies.gradle b/dependencies.gradle index 7fbcf1c5..846843af 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -7,7 +7,6 @@ ext { retrofitVersion = '2.9.0' retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - retrofitRxJavaAdapter = "com.squareup.retrofit2:adapter-rxjava3:$retrofitVersion" daggerVersion = '2.38.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index e4a7cf71..cbf763ff 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -18,14 +18,12 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') implementation project(':feature:config-debug-api') - implementation 'androidx.lifecycle:lifecycle-process:2.3.1' - kapt rootProject.ext.daggerAnnotationProcessor + kapt rootProject.ext.daggerAnnotationProcessor implementation rootProject.ext.dagger implementation 'com.google.android.play:core:1.10.1' - implementation 'io.reactivex.rxjava3:rxjava:3.1.1' implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt index 9d430302..bc5464a7 100644 --- a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt +++ b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/InAppUpdateModule.kt @@ -15,10 +15,10 @@ import javax.inject.Provider object InAppUpdateModule { @Provides @IntoSet - internal fun checkOnAppCreate(checkScheduler: Provider): OnAppCreateAsync { + internal fun checkOnAppCreate(checkScheduler: Provider): OnAppCreateAsync { return object : OnAppCreateAsync { - override fun onCreateAsync(app: Application) { - checkScheduler.get().startNonBlockingCheck() + override suspend fun onCreateAsync(app: Application) { + checkScheduler.get().checkForUpdates() } } } diff --git a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt b/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt deleted file mode 100644 index 17e92a4d..00000000 --- a/feature/in-app-update/src/main/java/com/jraska/github/client/inappupdate/UpdateCheckScheduler.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.jraska.github.client.inappupdate - -import android.annotation.SuppressLint -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.core.Completable -import io.reactivex.rxjava3.internal.functions.Functions -import timber.log.Timber -import javax.inject.Inject - -internal class UpdateCheckScheduler @Inject constructor( - private val updateChecker: UpdateChecker, - private val appSchedulers: AppSchedulers -) { - - @SuppressLint("CheckResult") // Fire and forget - fun startNonBlockingCheck() { - Timber.d("Starts") - Completable.fromAction { updateChecker.checkForUpdates() } - .subscribeOn(appSchedulers.io) - .subscribe(Functions.EMPTY_ACTION, { Timber.e(it, "Scheduled version check failed") }) - } -} diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index e5a75c2d..852a1727 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,8 @@ dependencies { implementation rootProject.ext.dagger implementation 'com.google.android.material:material:1.4.0' - implementation 'io.reactivex.rxjava3:rxjava:3.1.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation coroutinesJvm implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkFlow.kt similarity index 56% rename from feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt rename to feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkFlow.kt index 75ee8d68..2603180d 100644 --- a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkObservable.kt +++ b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkFlow.kt @@ -4,40 +4,40 @@ import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Single -import io.reactivex.rxjava3.subjects.PublishSubject +import kotlinx.coroutines.channels.BufferOverflow +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.distinctUntilChanged import javax.inject.Inject -internal class NetworkObservable @Inject constructor( +internal class NetworkFlow @Inject constructor( private val context: Context ) { - private val networkObservable: Observable by lazy { - setupNetworkObservable() + private val networkFlow: Flow by lazy { + setupNetworkFlow() } - fun connectedObservable(): Observable { - return networkObservable.startWith(Single.just(isConnected())) - .distinctUntilChanged() + fun connectedFlow(): Flow { + return networkFlow.distinctUntilChanged() } private val connectivityManager get() = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - private fun setupNetworkObservable(): Observable { - val publishSubject = PublishSubject.create() + private fun setupNetworkFlow(): Flow { + val sharedFlow = MutableSharedFlow(replay = 1, extraBufferCapacity = 1, BufferOverflow.DROP_OLDEST) connectivityManager.registerNetworkCallback(allChangesRequest(), object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { - publishSubject.onNext(isConnected()) + sharedFlow.tryEmit(isConnected()) } override fun onLost(network: Network) { - publishSubject.onNext(isConnected()) + sharedFlow.tryEmit(isConnected()) } }) - return publishSubject + return sharedFlow } private fun allChangesRequest() = NetworkRequest.Builder().build() diff --git a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt index 917263bd..94d9bce5 100644 --- a/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt +++ b/feature/network-status/src/main/java/com/jraska/github/client/networkstatus/internal/NetworkStatusDisplayer.kt @@ -3,33 +3,40 @@ package com.jraska.github.client.networkstatus.internal import android.app.Activity import android.view.View import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity import androidx.coordinatorlayout.widget.CoordinatorLayout +import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar import com.jraska.github.client.core.android.DefaultActivityCallbacks +import com.jraska.github.client.coroutines.AppDispatchers import com.jraska.github.client.networkstatus.R -import com.jraska.github.client.rx.AppSchedulers -import io.reactivex.rxjava3.disposables.CompositeDisposable +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.withContext import timber.log.Timber import javax.inject.Inject internal class NetworkStatusDisplayer @Inject constructor( - private val networkObservable: NetworkObservable, - private val appSchedulers: AppSchedulers + private val networkFlow: NetworkFlow, + private val appDispatchers: AppDispatchers ) { - private val compositeDisposable = CompositeDisposable() private var offlineSnackbar: Snackbar? = null fun onActivityResumed(activity: Activity) { - networkObservable.connectedObservable() - .observeOn(appSchedulers.mainThread) - .subscribe { showState(activity, it) } - .also { compositeDisposable.add(it) } + if (activity is AppCompatActivity) { + activity.lifecycleScope.launchWhenResumed { + networkFlow.connectedFlow() + .collect { + withContext(appDispatchers.main) { + showState(activity, it) + } + } + } + } } fun onActivityPaused() { dismissAnySnackbar() - compositeDisposable.clear() } private fun dismissAnySnackbar() { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt index 20ea091c..54856f9d 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/UsersModule.kt @@ -81,7 +81,7 @@ object UsersModule { @IntoSet internal fun prepareHttpClient(usersRepositoryProvider: Provider): OnAppCreateAsync { return object : OnAppCreateAsync { - override fun onCreateAsync(app: Application) { + override suspend fun onCreateAsync(app: Application) { usersRepositoryProvider.get() // setups asynchronously the rest client } } From 27a2aac1ce9bfc517554875e17ff88fed2fdf03d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 Sep 2021 14:48:30 +0000 Subject: [PATCH 147/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e8d6ea30..fce0593c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.33.8' - versionCode 129 + versionName '0.34.0' + versionCode 130 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From b2a86551ed483e93e19177373d64bc8003fe2930 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 18 Sep 2021 17:33:14 +0200 Subject: [PATCH 148/621] Remove rootProject.ext, exact instrumented testing dpendncies (#608) --- app-partial-users/build.gradle | 10 ++++---- app/build.gradle | 25 +++++++++---------- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 10 ++++---- core-api/build.gradle | 2 +- core-testing/build.gradle | 8 +++--- core/build.gradle | 12 ++++----- dependencies.gradle | 9 +++++++ feature/about/build.gradle | 10 ++++---- feature/chrome-custom-tabs/build.gradle | 6 ++--- feature/config-debug/build.gradle | 4 +-- feature/identity/build.gradle | 4 +-- feature/in-app-update/build.gradle | 4 +-- feature/network-status/build.gradle | 4 +-- feature/push/build.gradle | 6 ++--- feature/repo/build.gradle | 12 ++++----- .../client/repo/RepoDetailViewModelTest.kt | 2 -- feature/settings/build.gradle | 6 ++--- feature/shortcuts/build.gradle | 6 ++--- feature/users/build.gradle | 21 ++++++++-------- navigation-api/build.gradle | 2 +- 21 files changed, 85 insertions(+), 80 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 941e609d..5f7ef1e0 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -46,17 +46,17 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation rootProject.ext.retrofit + implementation retrofit implementation 'com.jakewharton.timber:timber:5.0.1' - implementation rootProject.ext.fresco + implementation fresco implementation 'com.airbnb.android:epoxy:4.6.2' - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' - implementation rootProject.ext.okHttpLoggingInterceptor + implementation okHttpLoggingInterceptor } diff --git a/app/build.gradle b/app/build.gradle index fce0593c..687973b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,7 +58,6 @@ android { debug { signingConfig signingConfigs.debug minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' applicationIdSuffix '.dev' versionNameSuffix '-dev' } @@ -132,35 +131,35 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation rootProject.ext.fresco + implementation fresco implementation 'com.airbnb.android:epoxy:4.6.2' - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger - implementation rootProject.ext.retrofit + implementation retrofit implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' - implementation rootProject.ext.okHttpLoggingInterceptor + implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.code.gson:gson:2.8.8' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.4.0' - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test:rules:1.4.0' + androidTestImplementation espressoCore + androidTestImplementation espressoIdlingResource + androidTestImplementation androidTestRunner + androidTestImplementation androidTestRules androidTestImplementation 'org.assertj:assertj-core:3.20.2' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation coroutinesJvm - androidTestImplementation rootProject.ext.retrofit - androidTestImplementation rootProject.ext.retrofitGsonConverter + androidTestImplementation retrofit + androidTestImplementation retrofitGsonConverter androidTestImplementation okHttpMockWebServer - kaptAndroidTest rootProject.ext.daggerAnnotationProcessor + kaptAndroidTest daggerAnnotationProcessor } apply plugin: 'com.jraska.module.graph.assertion' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 741c0152..1594fde4 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -22,6 +22,6 @@ dependencies { implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation rootProject.ext.okHttp + implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 8114ff49..df22424d 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -22,15 +22,15 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation coroutinesJvm - implementation 'androidx.test.espresso:espresso-idling-resource:3.4.0' - implementation 'androidx.test:monitor:1.4.0' + implementation espressoIdlingResource + implementation androidTestMonitor implementation okHttpMockWebServer - implementation rootProject.ext.okHttp + implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' } diff --git a/core-api/build.gradle b/core-api/build.gradle index 07f4e000..a9165972 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -7,7 +7,7 @@ dependencies { implementation coroutinesJvm implementation retrofit - implementation rootProject.ext.okHttp + implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 6be5305d..32ccbcad 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -18,14 +18,14 @@ dependencies { implementation project(':core-api') implementation project(':navigation-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'junit:junit:4.13.2' implementation coroutinesTest - implementation rootProject.ext.retrofit - implementation rootProject.ext.retrofitGsonConverter + implementation retrofit + implementation retrofitGsonConverter implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor diff --git a/core/build.gradle b/core/build.gradle index 193caf7d..5546a1a9 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,20 +32,20 @@ dependencies { implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' - implementation rootProject.ext.fresco + implementation fresco - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' - implementation rootProject.ext.retrofit - implementation rootProject.ext.retrofitGsonConverter + implementation retrofit + implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.8.8' - implementation rootProject.ext.okHttpLoggingInterceptor + implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.20.2' diff --git a/dependencies.gradle b/dependencies.gradle index 846843af..8b82e9e3 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -20,4 +20,13 @@ ext { frescoVesion = '2.5.0' fresco = "com.facebook.fresco:fresco:$frescoVesion" frescoDrawee = "com.facebook.fresco:drawee:$frescoVesion" + + espressoVersion = '3.4.0' + espressoCore = "androidx.test.espresso:espresso-core:$espressoVersion" + espressoIdlingResource = "androidx.test.espresso:espresso-idling-resource:$espressoVersion" + + androidTestVersion = '1.4.0' + androidTestRunner = "androidx.test:runner:$androidTestVersion" + androidTestRules = "androidx.test:rules:$androidTestVersion" + androidTestMonitor = "androidx.test:monitor:$androidTestVersion" } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 46f05ce9..21f88e00 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -24,16 +24,16 @@ dependencies { implementation project(':feature:identity-api') implementation project(':feature:ui-common-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'com.airbnb.android:epoxy:4.6.2' - implementation rootProject.ext.okHttp - implementation rootProject.ext.frescoDrawee + implementation okHttp + implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' androidTestImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation espressoCore androidTestImplementation 'org.assertj:assertj-core:3.20.2' } diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index 8e600bd1..7fe82322 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -17,10 +17,10 @@ android { dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation rootProject.ext.okHttp + implementation okHttp - implementation rootProject.ext.dagger - kapt rootProject.ext.daggerAnnotationProcessor + implementation dagger + kapt daggerAnnotationProcessor implementation 'androidx.browser:browser:1.3.0' testImplementation 'junit:junit:4.13.2' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index ba063757..3b3a73ee 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -20,8 +20,8 @@ dependencies { implementation project(':feature:config-debug-api') implementation project(':feature:ui-common-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index bfbc0450..933027fb 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -10,8 +10,8 @@ dependencies { implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.20.2' diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index cbf763ff..6bdcf4c1 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -19,8 +19,8 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:config-debug-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'com.google.android.play:core:1.10.1' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 852a1727..3ed11e9c 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -18,8 +18,8 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 5deb9cbc..c2e45491 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -23,11 +23,11 @@ dependencies { implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' - implementation rootProject.ext.dagger - kapt rootProject.ext.daggerAnnotationProcessor + implementation dagger + kapt daggerAnnotationProcessor implementation 'com.jakewharton.timber:timber:5.0.1' - implementation rootProject.ext.okHttp + implementation okHttp implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index ac180077..53872e4a 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -24,20 +24,20 @@ dependencies { implementation project(':feature:ui-common-api') implementation project(':navigation-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger implementation coroutinesAndroid implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" - implementation rootProject.ext.retrofit - implementation rootProject.ext.retrofitGsonConverter + implementation retrofit + implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' - implementation rootProject.ext.fresco + implementation fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' testImplementation okHttpMockWebServer @@ -48,5 +48,5 @@ dependencies { testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation coroutinesTest - kaptTest rootProject.ext.daggerAnnotationProcessor + kaptTest daggerAnnotationProcessor } diff --git a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt index 590237ad..8d01739c 100644 --- a/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt +++ b/feature/repo/src/test/java/com/jraska/github/client/repo/RepoDetailViewModelTest.kt @@ -7,8 +7,6 @@ import com.jraska.github.client.repo.di.DaggerTestRepoComponent import com.jraska.github.client.repo.di.TestRepoComponent import com.jraska.github.client.repo.model.GitHubApiRepoRepositoryTest import com.jraska.livedata.test -import kotlinx.coroutines.flow.toCollection -import kotlinx.coroutines.runBlocking import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Before diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index b11e469f..dbebf1c7 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -27,10 +27,10 @@ dependencies { implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation 'com.jakewharton.timber:timber:5.0.1' - implementation rootProject.ext.okHttp + implementation okHttp - implementation rootProject.ext.dagger - kapt rootProject.ext.daggerAnnotationProcessor + implementation dagger + kapt daggerAnnotationProcessor testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.20.2' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 55803bad..1e6c5808 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -20,8 +20,8 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger - implementation rootProject.ext.okHttp + implementation okHttp } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 9b3752bb..96ab82b1 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -33,21 +33,20 @@ dependencies { implementation project(':feature:config-debug-api') implementation project(':feature:ui-common-api') - kapt rootProject.ext.daggerAnnotationProcessor - implementation rootProject.ext.dagger + kapt daggerAnnotationProcessor + implementation dagger - implementation rootProject.ext.retrofit - implementation rootProject.ext.retrofitGsonConverter + implementation retrofit + implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.8.8' implementation coroutinesJvm - implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jakewharton.timber:timber:5.0.1' - implementation rootProject.ext.fresco + implementation fresco implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" @@ -58,15 +57,15 @@ dependencies { testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation okHttpMockWebServer testImplementation project(':core-testing') - kaptTest rootProject.ext.daggerAnnotationProcessor + kaptTest daggerAnnotationProcessor androidTestImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation espressoCore androidTestImplementation 'org.assertj:assertj-core:3.20.2' - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test:rules:1.4.0' + androidTestImplementation androidTestRunner + androidTestImplementation androidTestRules - kaptAndroidTest rootProject.ext.daggerAnnotationProcessor + kaptAndroidTest daggerAnnotationProcessor androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation project(':core') diff --git a/navigation-api/build.gradle b/navigation-api/build.gradle index 2cb34cb3..c9e47c75 100644 --- a/navigation-api/build.gradle +++ b/navigation-api/build.gradle @@ -4,5 +4,5 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation rootProject.ext.okHttp + implementation okHttp } From eb04b9c548584d2412757187e7ba741ccfa70d52 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 18 Sep 2021 18:15:03 +0200 Subject: [PATCH 149/621] Bump threetenbp to 1.5.1 (#609) --- core-api/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/identity/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core-api/build.gradle b/core-api/build.gradle index a9165972..53d109dd 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -10,7 +10,7 @@ dependencies { implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation 'javax.inject:javax.inject:1' testImplementation 'junit:junit:4.13.2' diff --git a/core/build.gradle b/core/build.gradle index 5546a1a9..b8196b71 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -29,7 +29,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation fresco @@ -37,7 +37,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' + implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index 933027fb..3caed705 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -8,7 +8,7 @@ dependencies { implementation project(':core-api') implementation project(':feature:identity-api') - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' kapt daggerAnnotationProcessor implementation dagger diff --git a/feature/push/build.gradle b/feature/push/build.gradle index c2e45491..effd9f92 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation okHttp - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.20.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 53872e4a..2f1ba28d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' implementation fresco - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 96ab82b1..fc7a905e 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jakewharton.timber:timber:5.0.1' implementation fresco - implementation 'org.threeten:threetenbp:1.4.4:no-tzdb' + implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" From 8a4b99bfd8834618a898e0cce311ccdac325e10a Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 18 Sep 2021 22:09:57 +0200 Subject: [PATCH 150/621] Dependencies shaking to reduce duplicate artifacts (#610) --- app-partial-users/build.gradle | 11 +++++++++-- app/build.gradle | 17 ++++++++++------- core-android-api/build.gradle | 5 +++-- .../github/client/core/android/BaseActivity.kt | 5 ----- core-android-testing/build.gradle | 3 +++ core-testing/build.gradle | 1 + core/build.gradle | 3 +++ .../client/core/android/UriHandlerActivity.kt | 3 ++- dependencies.gradle | 1 + feature/about/build.gradle | 1 + .../jraska/github/client/about/AboutActivity.kt | 4 ++-- feature/chrome-custom-tabs/build.gradle | 2 +- feature/network-status/build.gradle | 6 +++++- feature/push/build.gradle | 4 ++++ feature/repo/build.gradle | 3 +++ .../github/client/repo/ui/RepoDetailActivity.kt | 4 ++-- feature/settings/build.gradle | 1 + .../github/client/settings/ConsoleActivity.kt | 4 ++-- .../github/client/settings/SettingsActivity.kt | 4 ++-- feature/shortcuts/build.gradle | 1 + .../client/shortcuts/ShortcutHandlerActivity.kt | 4 ++-- feature/ui-common-api/build.gradle | 3 ++- feature/users/build.gradle | 2 ++ .../client/users/ui/UserDetailActivity.kt | 4 ++-- .../github/client/users/ui/UsersActivity.kt | 4 ++-- navigation-api/build.gradle | 1 + 26 files changed, 67 insertions(+), 34 deletions(-) delete mode 100644 core-android-api/src/main/java/com/jraska/github/client/core/android/BaseActivity.kt diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 5f7ef1e0..aae203aa 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -40,11 +40,15 @@ dependencies { implementation project(':feature:users') implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" + implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' + implementation 'androidx.media:media:1.4.1' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' implementation retrofit implementation 'com.jakewharton.timber:timber:5.0.1' @@ -56,7 +60,10 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger + implementation coroutinesCore + implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation okHttpLoggingInterceptor + implementation 'com.squareup.okio:okio:2.10.0' } diff --git a/app/build.gradle b/app/build.gradle index 687973b0..bd5f35e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,12 +113,19 @@ dependencies { implementation project(':feature:config-debug-api') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.browser:browser:1.3.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.6.0' - implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' implementation 'androidx.media:media:1.4.1' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' + implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' + + implementation 'com.airbnb.android:epoxy:4.6.2' + + implementation 'com.google.android.material:material:1.4.0' implementation platform('com.google.firebase:firebase-bom:28.4.0') implementation 'com.google.firebase:firebase-core' @@ -129,12 +136,8 @@ dependencies { implementation 'com.google.firebase:firebase-inappmessaging-display' implementation 'com.google.firebase:firebase-database' - implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation fresco - implementation 'com.airbnb.android:epoxy:4.6.2' - kapt daggerAnnotationProcessor implementation dagger diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 1594fde4..55dbfd9e 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,9 +18,10 @@ android { } dependencies { - implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.annotation:annotation:1.2.0' - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.core:core:1.6.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1' + implementation 'androidx.fragment:fragment:1.3.6' implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' diff --git a/core-android-api/src/main/java/com/jraska/github/client/core/android/BaseActivity.kt b/core-android-api/src/main/java/com/jraska/github/client/core/android/BaseActivity.kt deleted file mode 100644 index 6e447ed1..00000000 --- a/core-android-api/src/main/java/com/jraska/github/client/core/android/BaseActivity.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.jraska.github.client.core.android - -import androidx.appcompat.app.AppCompatActivity - -abstract class BaseActivity : AppCompatActivity() diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index df22424d..83c2886c 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.core:core:1.6.0' implementation coroutinesJvm implementation espressoIdlingResource @@ -33,4 +34,6 @@ dependencies { implementation okHttpMockWebServer implementation okHttp implementation 'com.squareup.okio:okio:2.10.0' + + implementation 'junit:junit:4.13.2' } diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 32ccbcad..58e8ab7e 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -29,4 +29,5 @@ dependencies { implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor + implementation 'com.squareup.okio:okio:2.10.0' } diff --git a/core/build.gradle b/core/build.gradle index b8196b71..00de5e3c 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,6 +27,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.core:core:1.6.0' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' @@ -41,6 +42,8 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit implementation retrofitGsonConverter diff --git a/core/src/main/java/com/jraska/github/client/core/android/UriHandlerActivity.kt b/core/src/main/java/com/jraska/github/client/core/android/UriHandlerActivity.kt index 16cfd320..fb06f606 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/UriHandlerActivity.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/UriHandlerActivity.kt @@ -1,8 +1,9 @@ package com.jraska.github.client.core.android import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity -class UriHandlerActivity : BaseActivity() { +class UriHandlerActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/dependencies.gradle b/dependencies.gradle index 8b82e9e3..d762f3b9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,6 @@ ext { coroutinesVersion = "1.5.2" + coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" coroutinesTest = "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutinesVersion" diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 21f88e00..e89f8fe1 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,6 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt b/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt index d2a3c005..cb966da2 100644 --- a/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt +++ b/feature/about/src/main/java/com/jraska/github/client/about/AboutActivity.kt @@ -3,14 +3,14 @@ package com.jraska.github.client.about import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.airbnb.epoxy.EpoxyModel import com.airbnb.epoxy.SimpleEpoxyAdapter -import com.jraska.github.client.core.android.BaseActivity import com.jraska.github.client.core.android.viewModel -internal class AboutActivity : BaseActivity() { +internal class AboutActivity : AppCompatActivity() { private val viewModel: AboutViewModel by lazy { viewModel(AboutViewModel::class.java) } diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index 7fe82322..5cb724e5 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -22,6 +22,6 @@ dependencies { implementation dagger kapt daggerAnnotationProcessor implementation 'androidx.browser:browser:1.3.0' - + implementation 'androidx.core:core:1.6.0' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 3ed11e9c..ebdc3856 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,9 +21,13 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.core:core:1.6.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'com.google.android.material:material:1.4.0' implementation coroutinesJvm + implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' testImplementation 'junit:junit:4.13.2' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index effd9f92..daa09701 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,11 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') + implementation 'androidx.core:core:1.6.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation platform('com.google.firebase:firebase-bom:28.4.0') + implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 2f1ba28d..a4b43774 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -28,6 +28,8 @@ dependencies { implementation dagger implementation coroutinesAndroid + implementation coroutinesCore + implementation coroutinesJvm implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" implementation retrofit @@ -35,6 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.8' implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' implementation fresco diff --git a/feature/repo/src/main/java/com/jraska/github/client/repo/ui/RepoDetailActivity.kt b/feature/repo/src/main/java/com/jraska/github/client/repo/ui/RepoDetailActivity.kt index c404dadc..0f9febe3 100644 --- a/feature/repo/src/main/java/com/jraska/github/client/repo/ui/RepoDetailActivity.kt +++ b/feature/repo/src/main/java/com/jraska/github/client/repo/ui/RepoDetailActivity.kt @@ -3,12 +3,12 @@ package com.jraska.github.client.repo.ui import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.airbnb.epoxy.SimpleEpoxyAdapter import com.airbnb.epoxy.SimpleEpoxyModel import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.jraska.github.client.core.android.BaseActivity import com.jraska.github.client.core.android.viewModel import com.jraska.github.client.repo.R import com.jraska.github.client.repo.RepoDetailViewModel @@ -16,7 +16,7 @@ import com.jraska.github.client.repo.model.RepoDetail import com.jraska.github.client.users.ui.ErrorHandler import com.jraska.github.client.users.ui.SimpleTextModel -internal class RepoDetailActivity : BaseActivity() { +internal class RepoDetailActivity : AppCompatActivity() { private val viewModel: RepoDetailViewModel by lazy { viewModel(RepoDetailViewModel::class.java) } diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index dbebf1c7..1008bce3 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,6 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.airbnb.android:epoxy:4.6.2' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/ConsoleActivity.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/ConsoleActivity.kt index cbe75f70..0446f667 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/ConsoleActivity.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/ConsoleActivity.kt @@ -3,10 +3,10 @@ package com.jraska.github.client.settings import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import com.jraska.console.Console -import com.jraska.github.client.core.android.BaseActivity -internal class ConsoleActivity : BaseActivity() { +internal class ConsoleActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(Console(this)) diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt index f386b25a..a6687ad2 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt @@ -3,14 +3,14 @@ package com.jraska.github.client.settings import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.airbnb.epoxy.EpoxyModel import com.airbnb.epoxy.SimpleEpoxyAdapter -import com.jraska.github.client.core.android.BaseActivity import com.jraska.github.client.core.android.viewModel -internal class SettingsActivity : BaseActivity() { +internal class SettingsActivity : AppCompatActivity() { private val viewModel: SettingsViewModel by lazy { viewModel(SettingsViewModel::class.java) } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 1e6c5808..08875117 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -19,6 +19,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.core:core:1.6.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/feature/shortcuts/src/main/java/com/jraska/github/client/shortcuts/ShortcutHandlerActivity.kt b/feature/shortcuts/src/main/java/com/jraska/github/client/shortcuts/ShortcutHandlerActivity.kt index fbf5b95b..4394250a 100644 --- a/feature/shortcuts/src/main/java/com/jraska/github/client/shortcuts/ShortcutHandlerActivity.kt +++ b/feature/shortcuts/src/main/java/com/jraska/github/client/shortcuts/ShortcutHandlerActivity.kt @@ -1,11 +1,11 @@ package com.jraska.github.client.shortcuts import android.os.Bundle -import com.jraska.github.client.core.android.BaseActivity +import androidx.appcompat.app.AppCompatActivity import com.jraska.github.client.core.android.inputUrl import com.jraska.github.client.core.android.viewModel -internal class ShortcutHandlerActivity : BaseActivity() { +internal class ShortcutHandlerActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 6a2dbcc6..ad5dcfe7 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -18,7 +18,8 @@ android { } dependencies { - implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.core:core:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index fc7a905e..7555ba5c 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -40,8 +40,10 @@ dependencies { implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.8.8' implementation coroutinesJvm + implementation coroutinesCore implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.2' diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt index 9fdb3a97..add4d33c 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt @@ -3,6 +3,7 @@ package com.jraska.github.client.users.ui import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.airbnb.epoxy.EpoxyModel @@ -10,14 +11,13 @@ import com.airbnb.epoxy.SimpleEpoxyAdapter import com.airbnb.epoxy.SimpleEpoxyModel import com.facebook.drawee.view.SimpleDraweeView import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.jraska.github.client.core.android.BaseActivity import com.jraska.github.client.core.android.viewModel import com.jraska.github.client.users.R import com.jraska.github.client.users.UserDetailViewModel import com.jraska.github.client.users.model.RepoHeader import com.jraska.github.client.users.model.UserDetail -internal class UserDetailActivity : BaseActivity() { +internal class UserDetailActivity : AppCompatActivity() { private val userDetailViewModel: UserDetailViewModel by lazy { viewModel(UserDetailViewModel::class.java) } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt index 186d0aca..38d6e2fc 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt @@ -5,17 +5,17 @@ import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem +import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.airbnb.epoxy.SimpleEpoxyAdapter -import com.jraska.github.client.core.android.BaseActivity import com.jraska.github.client.core.android.viewModel import com.jraska.github.client.users.R import com.jraska.github.client.users.UsersViewModel import com.jraska.github.client.users.model.User -class UsersActivity : BaseActivity(), UserModel.UserListener { +class UsersActivity : AppCompatActivity(), UserModel.UserListener { private val usersViewModel: UsersViewModel by lazy { viewModel(UsersViewModel::class.java) } private val usersRecycler: RecyclerView get() = findViewById(R.id.users_recycler) diff --git a/navigation-api/build.gradle b/navigation-api/build.gradle index c9e47c75..5dc01923 100644 --- a/navigation-api/build.gradle +++ b/navigation-api/build.gradle @@ -5,4 +5,5 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation okHttp + implementation 'com.squareup.okio:okio:2.10.0' } From bcdd571dfcfcccef411dfd05bf9f6d60c472ec74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 18 Sep 2021 20:19:43 +0000 Subject: [PATCH 151/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bd5f35e1..b3168b1b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.34.0' - versionCode 130 + versionName '0.34.1' + versionCode 131 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 9bd60f7be36e8032b3e67eafd4fa512b7f256471 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:27:44 +0200 Subject: [PATCH 152/621] Bump kotlin_version from 1.5.30 to 1.5.31 (#612) Bumps `kotlin_version` from 1.5.30 to 1.5.31. Updates `kotlin-gradle-plugin` from 1.5.30 to 1.5.31 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Updates `kotlin-stdlib` from 1.5.30 to 1.5.31 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 00a7ebc8..e90ed135 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.30' + ext.kotlin_version = '1.5.31' repositories { google() mavenCentral() From 5d3f161ac78819bcb80f9c74f6e9e1d7b6adc24d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:27:56 +0200 Subject: [PATCH 153/621] Bump media from 1.4.1 to 1.4.2 (#613) Bumps media from 1.4.1 to 1.4.2. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index aae203aa..3b5951e8 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -44,7 +44,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation 'androidx.media:media:1.4.1' + implementation 'androidx.media:media:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.google.android.material:material:1.4.0' diff --git a/app/build.gradle b/app/build.gradle index b3168b1b..9783bffe 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.core:core:1.6.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation 'androidx.media:media:1.4.1' + implementation 'androidx.media:media:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' From c758e9b446dc5f32ae26b015a5a6b7087abece84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 10:28:10 +0200 Subject: [PATCH 154/621] Bump firebase-bom from 28.4.0 to 28.4.1 (#611) Bumps firebase-bom from 28.4.0 to 28.4.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9783bffe..2054de3e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -127,7 +127,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:28.4.0') + implementation platform('com.google.firebase:firebase-bom:28.4.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index daa09701..a8774bf6 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.4.0') + implementation platform('com.google.firebase:firebase-bom:28.4.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 91c8d35a4d6461d802540fa85e3a5054607e0354 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 10:20:46 +0200 Subject: [PATCH 155/621] Bump epoxy from 4.6.2 to 4.6.4 (#615) Bumps [epoxy](https://github.com/airbnb/epoxy) from 4.6.2 to 4.6.4. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits) --- updated-dependencies: - dependency-name: com.airbnb.android:epoxy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 3b5951e8..0c5a6df8 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation fresco - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' kapt daggerAnnotationProcessor implementation dagger diff --git a/app/build.gradle b/app/build.gradle index 2054de3e..aa0e6767 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -123,7 +123,7 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.google.android.material:material:1.4.0' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index e89f8fe1..4049ee9a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 3b3a73ee..43913752 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index a4b43774..ce863555 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 1008bce3..a3402e04 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index ad5dcfe7..c50bb646 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -21,5 +21,5 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.core:core:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 7555ba5c..59309e44 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.2' + implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jakewharton.timber:timber:5.0.1' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From bdbaf3b23b874443da3ef3d8794b315d741b1d2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 10:21:06 +0200 Subject: [PATCH 156/621] Bump assertj-core from 3.20.2 to 3.21.0 (#614) Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.20.2 to 3.21.0. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.20.2...assertj-core-3.21.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/identity/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index aa0e6767..9004b067 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -153,7 +153,7 @@ dependencies { androidTestImplementation espressoIdlingResource androidTestImplementation androidTestRunner androidTestImplementation androidTestRules - androidTestImplementation 'org.assertj:assertj-core:3.20.2' + androidTestImplementation 'org.assertj:assertj-core:3.21.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation coroutinesJvm diff --git a/core/build.gradle b/core/build.gradle index 00de5e3c..2d03c8d5 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -51,5 +51,5 @@ dependencies { implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 4049ee9a..3f1c712e 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -36,5 +36,5 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore - androidTestImplementation 'org.assertj:assertj-core:3.20.2' + androidTestImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 43913752..8068f566 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -29,5 +29,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index 3caed705..e878da0f 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -14,5 +14,5 @@ dependencies { implementation dagger testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index a8774bf6..dd72b7ba 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -35,5 +35,5 @@ dependencies { implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index ce863555..c816ceef 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -46,7 +46,7 @@ dependencies { testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index a3402e04..b0a17bd4 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -34,5 +34,5 @@ dependencies { kapt daggerAnnotationProcessor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 59309e44..714165c6 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -55,7 +55,7 @@ dependencies { testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation okHttpMockWebServer testImplementation project(':core-testing') From f747f1cc12ea7cf17dfec52e03ba04b4499809a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 10:27:30 +0200 Subject: [PATCH 157/621] Bump core from 1.10.1 to 1.10.2 (#616) Bumps core from 1.10.1 to 1.10.2. --- updated-dependencies: - dependency-name: com.google.android.play:core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- feature/in-app-update/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 6bdcf4c1..e7183b4e 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -22,7 +22,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.google.android.play:core:1.10.1' + implementation 'com.google.android.play:core:1.10.2' implementation 'com.jakewharton.timber:timber:5.0.1' From 46c366f583f5305f267cb63c90da0e078cbc1cc2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 27 Sep 2021 08:31:14 +0000 Subject: [PATCH 158/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9004b067..0c1631d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 30 - versionName '0.34.1' - versionCode 131 + versionName '0.34.2' + versionCode 132 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 90a7890067907a85204ec776b6350474978fb68d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:24:35 +0200 Subject: [PATCH 159/621] Bump daggerVersion from 2.38.1 to 2.39.1 (#618) Bumps `daggerVersion` from 2.38.1 to 2.39.1. Updates `dagger-compiler` from 2.38.1 to 2.39.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.38.1...dagger-2.39.1) Updates `dagger` from 2.38.1 to 2.39.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.38.1...dagger-2.39.1) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index d762f3b9..ef39e8e5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.38.1' + daggerVersion = '2.39.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 7651c4b19f6eca4bedd27233537ee926f5783549 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:25:14 +0200 Subject: [PATCH 160/621] Bump okHttpVersion from 4.9.1 to 4.9.2 (#617) Bumps `okHttpVersion` from 4.9.1 to 4.9.2. Updates `okhttp` from 4.9.1 to 4.9.2 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.1...parent-4.9.2) Updates `logging-interceptor` from 4.9.1 to 4.9.2 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.1...parent-4.9.2) Updates `mockwebserver` from 4.9.1 to 4.9.2 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.1...parent-4.9.2) --- updated-dependencies: - dependency-name: com.squareup.okhttp3:okhttp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.squareup.okhttp3:logging-interceptor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.squareup.okhttp3:mockwebserver dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index ef39e8e5..3b5631f8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -13,7 +13,7 @@ ext { daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" - okHttpVersion = '4.9.1' + okHttpVersion = '4.9.2' okHttp = "com.squareup.okhttp3:okhttp:$okHttpVersion" okHttpLoggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okHttpVersion" okHttpMockWebServer = "com.squareup.okhttp3:mockwebserver:$okHttpVersion" From 6665b4f8002bae505a34458158d5b1f1994b11c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Oct 2021 06:49:25 +0000 Subject: [PATCH 161/621] Bump firebase-bom from 28.4.1 to 28.4.2 (#619) Bumps firebase-bom from 28.4.1 to 28.4.2. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0c1631d6..6f3dffc9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -127,7 +127,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:28.4.1') + implementation platform('com.google.firebase:firebase-bom:28.4.2') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index dd72b7ba..3d8c15b3 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.4.1') + implementation platform('com.google.firebase:firebase-bom:28.4.2') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 76a43e945b9ada102e1efcb4e33e4df858e2b341 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 16 Oct 2021 14:36:27 +0100 Subject: [PATCH 162/621] Synchronize idling dispatcher as the modifications are concurrent (#620) --- .../github/client/android/test/IdlingDispatcher.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt b/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt index ddfc2b19..a1e5d8a1 100644 --- a/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt +++ b/core-android-testing/src/main/java/com/jraska/github/client/android/test/IdlingDispatcher.kt @@ -18,8 +18,10 @@ class IdlingDispatcher( override fun getName() = "Coroutines IdlingDispatcher" override fun isIdleNow(): Boolean { - jobs.removeAll { !it.isActive } - return jobs.isEmpty() + synchronized(jobs) { + jobs.removeAll { !it.isActive } + return jobs.isEmpty() + } } override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { @@ -44,7 +46,10 @@ class IdlingDispatcher( private fun addNewJob(job: Job) { job.invokeOnCompletion { onJobComplete() } - jobs.add(job) + + synchronized(jobs) { + jobs.add(job) + } } private fun onJobComplete() { From 60fd5c1fc1a029ba2bf7ca82d6a6636f87859807 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 16 Oct 2021 14:41:30 +0100 Subject: [PATCH 163/621] Bump com.jraska.module.graph.assertion to version 1.6.0 (#621) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 6f3dffc9..39fa19a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "1.5.1" + id "com.jraska.module.graph.assertion" version "1.6.0" id "com.github.triplet.play" version "3.6.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' From de8ed466b82d71fb8f61e6d13e65190b500cbf10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Oct 2021 20:09:58 +0200 Subject: [PATCH 164/621] Bump gradle from 7.0.2 to 7.0.3 (#623) Bumps gradle from 7.0.2 to 7.0.3. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e90ed135..bcf1dbb3 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.2' + classpath 'com.android.tools.build:gradle:7.0.3' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' classpath 'com.google.gms:google-services:4.3.8' From a3d699ed4177fff4bd250c9fbe6d49261a833d6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Oct 2021 20:10:08 +0200 Subject: [PATCH 165/621] Bump frescoVesion from 2.5.0 to 2.6.0 (#624) Bumps `frescoVesion` from 2.5.0 to 2.6.0. Updates `fresco` from 2.5.0 to 2.6.0 - [Release notes](https://github.com/facebook/fresco/releases) - [Commits](https://github.com/facebook/fresco/compare/v2.5.0...v2.6.0) Updates `drawee` from 2.5.0 to 2.6.0 - [Release notes](https://github.com/facebook/fresco/releases) - [Commits](https://github.com/facebook/fresco/compare/v2.5.0...v2.6.0) --- updated-dependencies: - dependency-name: com.facebook.fresco:fresco dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.facebook.fresco:drawee dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 3b5631f8..de17a559 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -18,7 +18,7 @@ ext { okHttpLoggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okHttpVersion" okHttpMockWebServer = "com.squareup.okhttp3:mockwebserver:$okHttpVersion" - frescoVesion = '2.5.0' + frescoVesion = '2.6.0' fresco = "com.facebook.fresco:fresco:$frescoVesion" frescoDrawee = "com.facebook.fresco:drawee:$frescoVesion" From 26391275808d02dcb829e34fd7b51f9a15131d91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Oct 2021 20:10:18 +0200 Subject: [PATCH 166/621] Bump media from 1.4.2 to 1.4.3 (#622) Bumps media from 1.4.2 to 1.4.3. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 0c5a6df8..01a28446 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -44,7 +44,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation 'androidx.media:media:1.4.2' + implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.google.android.material:material:1.4.0' diff --git a/app/build.gradle b/app/build.gradle index 39fa19a3..2911fbf8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.core:core:1.6.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' - implementation 'androidx.media:media:1.4.2' + implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' From 0460e7e0a4e8bbeae9e18ac4c7e0e73d06ea8599 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 26 Oct 2021 22:39:00 +0200 Subject: [PATCH 167/621] Target SDK=31 (#625) --- app-partial-users/build.gradle | 4 ++-- app/build.gradle | 4 ++-- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 17 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 01a28446..7f9bde7b 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { applicationId "com.jraska.github.client.users" minSdkVersion 24 - targetSdkVersion 30 + targetSdkVersion 31 versionName '0.1.0' versionCode 1 diff --git a/app/build.gradle b/app/build.gradle index 2911fbf8..a373409f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,12 +19,12 @@ if (System.getenv("CI") == "true") { apply plugin: 'com.google.firebase.crashlytics' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { applicationId "com.jraska.github.client" minSdkVersion 24 - targetSdkVersion 30 + targetSdkVersion 31 versionName '0.34.2' versionCode 132 multiDexEnabled true diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 55dbfd9e..52cc99d6 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 83c2886c..2e5cf728 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 58e8ab7e..b2d255fa 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/core/build.gradle b/core/build.gradle index 2d03c8d5..092679af 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 3f1c712e..d94d70a6 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index 5cb724e5..af5d1e9f 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 8068f566..a1bdab8d 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index e7183b4e..becbb858 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index ebdc3856..b25c1d37 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 3d8c15b3..e471791f 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index c816ceef..f6ea2af6 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index b0a17bd4..17d8a94a 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 08875117..890e5476 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index c50bb646..8f3e1568 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 714165c6..65e46832 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion 24 From ea7c7e7205b42594f52fabe00c4c405c8dff9118 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Oct 2021 21:21:13 +0000 Subject: [PATCH 168/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a373409f..1e1050c1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.34.2' - versionCode 132 + versionName '0.34.3' + versionCode 133 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From aebc7d7f5e542a0331117146388f51ee77e23037 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 29 Oct 2021 00:21:14 +0200 Subject: [PATCH 169/621] Measure configuration time separately (#626) --- .../java/com/jraska/gradle/buildtime/BuildDataFactory.kt | 8 ++++++-- .../java/com/jraska/gradle/buildtime/BuildTimeListener.kt | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt index b9695f66..272f090d 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildDataFactory.kt @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit object BuildDataFactory { @Suppress("UnstableApiUsage") - fun buildData(result: BuildResult, statistics: TaskExecutionStatistics): BuildData { + fun buildData(result: BuildResult, statistics: TaskExecutionStatistics, configuredTimestamp: Long): BuildData { val start = nowMillis() val gradle = result.gradle as DefaultGradle @@ -24,6 +24,8 @@ object BuildDataFactory { val startTime = services[BuildStartedTime::class.java].startTime val totalTime = services[Clock::class.java].currentTime - startTime + val configurationTime = configuredTimestamp - startTime + val executionTime = totalTime - configurationTime val daemonInfo = services[DaemonScanInfo::class.java] val startParameter = gradle.startParameter @@ -46,7 +48,9 @@ object BuildDataFactory { "isConfigureOnDemand" to startParameter.isConfigureOnDemand, "isConfigurationCache" to startParameter.isConfigurationCache, "isBuildCacheEnabled" to startParameter.isBuildCacheEnabled, - "maxWorkers" to startParameter.maxWorkerCount + "maxWorkers" to startParameter.maxWorkerCount, + "configurationTime" to configurationTime, + "executionTime" to executionTime ).apply { putAll(startParameter.systemPropertiesArgs) }, gitInfo = GitInfoProvider.gitInfo(gradle.rootProject), ciInfo = ciInfo, diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt index 5b0125eb..007fefac 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt @@ -6,6 +6,7 @@ import org.gradle.api.initialization.Settings import org.gradle.api.internal.tasks.execution.statistics.TaskExecutionStatisticsEventAdapter import org.gradle.api.invocation.Gradle import org.gradle.internal.event.ListenerManager +import org.gradle.internal.time.Clock import org.gradle.invocation.DefaultGradle internal class BuildTimeListener( @@ -13,16 +14,19 @@ internal class BuildTimeListener( private val buildReporter: BuildReporter ) : BuildListener { private val taskExecutionStatisticsEventAdapter = TaskExecutionStatisticsEventAdapter() + private var configuredTime: Long = 0 override fun settingsEvaluated(gradle: Settings) = Unit override fun projectsLoaded(gradle: Gradle) = Unit override fun projectsEvaluated(gradle: Gradle) { val listenerManager = (gradle as DefaultGradle).services[ListenerManager::class.java] listenerManager.addListener(taskExecutionStatisticsEventAdapter) + + configuredTime = gradle.services[Clock::class.java].currentTime } override fun buildFinished(result: BuildResult) { - val buildData = buildDataFactory.buildData(result, taskExecutionStatisticsEventAdapter.statistics) + val buildData = buildDataFactory.buildData(result, taskExecutionStatisticsEventAdapter.statistics, configuredTime) println("Build data collected in ${buildData.buildDataCollectionOverhead} ms") From 805e1585cd4b367ac4f99e8dde57159231930549 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 29 Oct 2021 10:34:39 +0200 Subject: [PATCH 170/621] Configure Crashlytics only when needed (#627) --- app/build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1e1050c1..033affbd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -189,10 +189,10 @@ project.afterEvaluate { } buildDir.mkdir() new File("$buildDir/play-publish-key.json").write(credentials) - } - // https://github.com/Triple-T/gradle-play-publisher/issues/859 - tasks.named("publishBundle").configure { - it.dependsOn("uploadCrashlyticsMappingFileRelease") + // https://github.com/Triple-T/gradle-play-publisher/issues/859 + tasks.named("publishBundle").configure { + it.dependsOn("uploadCrashlyticsMappingFileRelease") + } } } From ec98422ee8f9e8bad8556ea42f89586be1be769d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 1 Nov 2021 00:36:15 +0100 Subject: [PATCH 171/621] Add launch time reporting (#628) * Add launch time reporting * Let's call it warm as docs say --- .../java/com/jraska/github/client/Owner.kt | 1 + .../client/core/android/CoreAndroidModule.kt | 3 +- .../github/client/startup/AppStartupModule.kt | 20 +++++++ .../startup/StartupAnalyticsReporter.kt | 50 +++++++++++++++++ .../client/startup/StartupTimeMetric.kt | 56 +++++++++++++++++++ 5 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt create mode 100644 core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt create mode 100644 core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt diff --git a/core-api/src/main/java/com/jraska/github/client/Owner.kt b/core-api/src/main/java/com/jraska/github/client/Owner.kt index 10f521e7..c4bd27d8 100644 --- a/core-api/src/main/java/com/jraska/github/client/Owner.kt +++ b/core-api/src/main/java/com/jraska/github/client/Owner.kt @@ -16,5 +16,6 @@ package com.jraska.github.client enum class Owner { CORE_TEAM, USERS_TEAM, + PERFORMANCE_TEAM, UNKNOWN_STALE // Stale! Can be deleted at any moment during resource key audit. } diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index 1423ed9b..cec8e1fe 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -12,6 +12,7 @@ import com.jraska.github.client.Owner import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.core.android.logging.SetupLogging +import com.jraska.github.client.startup.AppStartupModule import com.jraska.github.client.time.DateTimeProvider import com.jraska.github.client.time.RealDateTimeProvider import com.jraska.github.client.time.RealTimeProvider @@ -26,7 +27,7 @@ import dagger.multibindings.IntoSet import javax.inject.Provider import javax.inject.Singleton -@Module +@Module(includes = [AppStartupModule::class]) object CoreAndroidModule { @Provides @Singleton diff --git a/core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt b/core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt new file mode 100644 index 00000000..c43663a6 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt @@ -0,0 +1,20 @@ +package com.jraska.github.client.startup + +import com.jraska.github.client.core.android.OnAppCreate +import dagger.Module +import dagger.Provides +import dagger.multibindings.IntoSet +import javax.inject.Singleton + +@Module +object AppStartupModule { + @Provides + @IntoSet + internal fun registerStartupCallbacks(create: StartupTimeMetric.RegisterStartupCallbacks): OnAppCreate = create + + @Provides + @Singleton + internal fun startupTimeMetric(reporter: StartupAnalyticsReporter): StartupTimeMetric { + return StartupTimeMetric(reporter) + } +} diff --git a/core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt b/core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt new file mode 100644 index 00000000..df715929 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt @@ -0,0 +1,50 @@ +package com.jraska.github.client.startup + +import android.os.Process +import android.os.SystemClock +import com.jraska.github.client.Owner +import com.jraska.github.client.analytics.AnalyticsEvent +import com.jraska.github.client.analytics.EventAnalytics +import timber.log.Timber +import javax.inject.Inject + +class StartupAnalyticsReporter @Inject constructor( + private val eventAnalytics: EventAnalytics +) { + fun reportForegroundLaunch(launchedActivity: String, startupSavedStatePresent: Boolean) { + val launchTimeNow = launchTimeNow() + Timber.d("AppStartup is %s ms, activity: %s, savedState: %s", launchTimeNow, launchedActivity, startupSavedStatePresent) + + val eventBuilder = if (startupSavedStatePresent) { + AnalyticsEvent.builder(ANALYTICS_AFTER_KILL_START) + } else { + AnalyticsEvent.builder(ANALYTICS_COLD_START) + } + + eventBuilder.addProperty("time", launchTimeNow) + eventBuilder.addProperty("activity", launchedActivity) + + eventAnalytics.report(eventBuilder.build()) + } + + fun reportBackgroundLaunch() { + Timber.d("AppStartup in the background") + + eventAnalytics.report(AnalyticsEvent.create(ANALYTICS_BACKGROUND_START)) + } + + fun reportForegroundLaunchWithoutActivity() { + Timber.d("App started as foreground, but post ran before any Activity onCreate()") + + eventAnalytics.report(AnalyticsEvent.create(ANALYTICS_UNDEFINED)) + } + + private fun launchTimeNow() = SystemClock.uptimeMillis() - Process.getStartUptimeMillis() + + companion object { + val ANALYTICS_COLD_START = AnalyticsEvent.Key("start_cold", Owner.PERFORMANCE_TEAM) + val ANALYTICS_AFTER_KILL_START = AnalyticsEvent.Key("start_warm_after_kill", Owner.PERFORMANCE_TEAM) + val ANALYTICS_BACKGROUND_START = AnalyticsEvent.Key("start_background", Owner.PERFORMANCE_TEAM) + val ANALYTICS_UNDEFINED = AnalyticsEvent.Key("start_foreground_undefined", Owner.PERFORMANCE_TEAM) + } +} diff --git a/core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt b/core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt new file mode 100644 index 00000000..2e223fee --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt @@ -0,0 +1,56 @@ +package com.jraska.github.client.startup + +import android.app.Activity +import android.app.ActivityManager +import android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND +import android.app.Application +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import com.jraska.github.client.core.android.DefaultActivityCallbacks +import com.jraska.github.client.core.android.OnAppCreate +import javax.inject.Inject + +class StartupTimeMetric( + private val reporter: StartupAnalyticsReporter +) { + + private var hadSavedState = false + private var firstActivityCreated: String? = null + + private fun onAppCreate(app: Application) { + if (isForegroundProcess()) { + app.registerActivityLifecycleCallbacks(object : DefaultActivityCallbacks() { + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + if (firstActivityCreated == null) { + firstActivityCreated = activity::class.simpleName + hadSavedState = savedInstanceState != null + activity.application.unregisterActivityLifecycleCallbacks(this) + } + } + }) + + Handler(Looper.getMainLooper()).post { + if (firstActivityCreated != null) { + reporter.reportForegroundLaunch(firstActivityCreated!!, hadSavedState) + } else { + reporter.reportForegroundLaunchWithoutActivity() + } + } + } else { + reporter.reportBackgroundLaunch() + } + } + + private fun isForegroundProcess(): Boolean { + val processInfo = ActivityManager.RunningAppProcessInfo() + ActivityManager.getMyMemoryState(processInfo) + return processInfo.importance == IMPORTANCE_FOREGROUND + } + + internal class RegisterStartupCallbacks @Inject constructor(private val startupTimeMetric: StartupTimeMetric) : OnAppCreate { + override fun onCreate(app: Application) { + startupTimeMetric.onAppCreate(app) + } + } +} From 1160f34bb321ab024bd56cf72830e033cf0b74b9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 31 Oct 2021 23:44:01 +0000 Subject: [PATCH 172/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 033affbd..550f1bdb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.34.3' - versionCode 133 + versionName '0.34.4' + versionCode 134 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From e1ea0f01147ba85bdc1d2baf0e87d17bcc27b7ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 08:00:27 +0000 Subject: [PATCH 173/621] Bump lifecycle-viewmodel from 2.3.1 to 2.4.0 (#631) Bumps lifecycle-viewmodel from 2.3.1 to 2.4.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-viewmodel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 52cc99d6..8e451bb3 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -20,7 +20,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.core:core:1.6.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' implementation 'androidx.fragment:fragment:1.3.6' implementation okHttp From e653338e4d0951576b73270963ac40667af6bc27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 09:02:10 +0100 Subject: [PATCH 174/621] Bump daggerVersion from 2.39.1 to 2.40 (#630) Bumps `daggerVersion` from 2.39.1 to 2.40. Updates `dagger-compiler` from 2.39.1 to 2.40 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.39.1...dagger-2.40) Updates `dagger` from 2.39.1 to 2.40 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.39.1...dagger-2.40) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index de17a559..96e61b10 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.39.1' + daggerVersion = '2.40' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From bdd9e2da89f3f7dcfaecd7184975ae9ef9682c1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 09:02:25 +0100 Subject: [PATCH 175/621] Bump gson from 2.8.8 to 2.8.9 (#629) Bumps [gson](https://github.com/google/gson) from 2.8.8 to 2.8.9. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.8.8...gson-parent-2.8.9) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 550f1bdb..2d81e04b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,7 +147,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.code.gson:gson:2.8.8' + implementation 'com.google.code.gson:gson:2.8.9' androidTestImplementation espressoCore androidTestImplementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index 092679af..44f3fb03 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.8' + implementation 'com.google.code.gson:gson:2.8.9' implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index f6ea2af6..f804c41d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.8' + implementation 'com.google.code.gson:gson:2.8.9' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.appcompat:appcompat:1.3.1' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 65e46832..889b7ca8 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.8' + implementation 'com.google.code.gson:gson:2.8.9' implementation coroutinesJvm implementation coroutinesCore From f3e5b2d6f13b4cc8be575fbc05663492ff17f030 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 09:59:11 +0100 Subject: [PATCH 176/621] Bump firebase-bom from 28.4.2 to 29.0.0 (#634) Bumps firebase-bom from 28.4.2 to 29.0.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2d81e04b..901510ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -127,7 +127,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:28.4.2') + implementation platform('com.google.firebase:firebase-bom:29.0.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index e471791f..418e37dd 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.1' - implementation platform('com.google.firebase:firebase-bom:28.4.2') + implementation platform('com.google.firebase:firebase-bom:29.0.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From c6071592d25a9050255a826154f7c45e1d485f05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 09:59:22 +0100 Subject: [PATCH 177/621] Bump lifecycle-runtime from 2.3.1 to 2.4.0 (#633) Bumps lifecycle-runtime from 2.3.1 to 2.4.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 7f9bde7b..60c0a80b 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" - implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' + implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' diff --git a/app/build.gradle b/app/build.gradle index 901510ae..9d881210 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.6.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-runtime:2.3.1' + implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From af156560be7198b4aa66e3b6128b7e492d8102ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:57:53 +0100 Subject: [PATCH 178/621] Bump lifecycle-livedata-ktx from 2.3.1 to 2.4.0 (#635) Bumps lifecycle-livedata-ktx from 2.3.1 to 2.4.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-livedata-ktx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 60c0a80b..49f9b664 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index f804c41d..f0908a4d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation coroutinesAndroid implementation coroutinesCore implementation coroutinesJvm - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" implementation retrofit implementation retrofitGsonConverter diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 889b7ca8..84ce9dae 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' From a60f0b616f3489160887fe2a5c4934ac423b432a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:58:17 +0100 Subject: [PATCH 179/621] Bump core from 1.6.0 to 1.7.0 (#636) Bumps core from 1.6.0 to 1.7.0. --- updated-dependencies: - dependency-name: androidx.core:core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9d881210..60d31d17 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -115,7 +115,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.browser:browser:1.3.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' implementation 'androidx.media:media:1.4.3' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 8e451bb3..4c69f900 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.2.0' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' implementation 'androidx.fragment:fragment:1.3.6' diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 2e5cf728..f1225b06 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation coroutinesJvm implementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index 44f3fb03..fbfd7353 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,7 +27,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.annotation:annotation:1.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index af5d1e9f..47d78cad 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -22,6 +22,6 @@ dependencies { implementation dagger kapt daggerAnnotationProcessor implementation 'androidx.browser:browser:1.3.0' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index b25c1d37..d76b1128 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation dagger implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 418e37dd..d07268da 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation platform('com.google.firebase:firebase-bom:29.0.0') diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 890e5476..bf9c6303 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 8f3e1568..0faffb15 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.core:core:1.6.0' + implementation 'androidx.core:core:1.7.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' } From aeae65867356efb3e65d910ae3fa3b849c2d7f39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:06:13 +0000 Subject: [PATCH 180/621] Bump okio from 2.10.0 to 3.0.0 (#632) Bumps [okio](https://github.com/square/okio) from 2.10.0 to 3.0.0. - [Release notes](https://github.com/square/okio/releases) - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okio/compare/parent-2.10.0...parent-3.0.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- navigation-api/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 49f9b664..0a532fef 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -64,6 +64,6 @@ dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' } diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 4c69f900..d9384286 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -24,5 +24,5 @@ dependencies { implementation 'androidx.fragment:fragment:1.3.6' implementation okHttp - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index f1225b06..555b6d98 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation androidTestMonitor implementation okHttpMockWebServer implementation okHttp - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' implementation 'junit:junit:4.13.2' } diff --git a/core-api/build.gradle b/core-api/build.gradle index 53d109dd..03a205c0 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -8,7 +8,7 @@ dependencies { implementation coroutinesJvm implementation retrofit implementation okHttp - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation 'javax.inject:javax.inject:1' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index b2d255fa..3e9783c9 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -29,5 +29,5 @@ dependencies { implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' } diff --git a/navigation-api/build.gradle b/navigation-api/build.gradle index 5dc01923..aec0857c 100644 --- a/navigation-api/build.gradle +++ b/navigation-api/build.gradle @@ -5,5 +5,5 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation okHttp - implementation 'com.squareup.okio:okio:2.10.0' + implementation 'com.squareup.okio:okio:3.0.0' } From a6c6130bcc9caa6e4ed0ee8b6c65f2f37c51a600 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:14:24 +0000 Subject: [PATCH 181/621] Bump lifecycle-runtime-ktx from 2.3.1 to 2.4.0 (#638) Bumps lifecycle-runtime-ktx from 2.3.1 to 2.4.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime-ktx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/network-status/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index d76b1128..9e053bd2 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.core:core:1.7.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' implementation coroutinesJvm From 41f7f5aa9f58ae24cded969c245d3226cf5917a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 15:57:31 +0100 Subject: [PATCH 182/621] Bump firebase-crashlytics-gradle from 2.6.1 to 2.8.0 (#637) Bumps firebase-crashlytics-gradle from 2.6.1 to 2.8.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bcf1dbb3..2903680d 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.0.3' classpath 'com.google.firebase:perf-plugin:1.4.0' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From 4a9c64166588ffca1accbb32c215ce71ab69434a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Nov 2021 14:59:32 +0000 Subject: [PATCH 183/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 60d31d17..6bbeaba9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.34.4' - versionCode 134 + versionName '0.35.0' + versionCode 135 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From dfa65a0c9ab17f4c497f1b74fab4f50468968826 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 1 Nov 2021 18:28:11 +0100 Subject: [PATCH 184/621] Move Google Play Services on top of Firebase plugins (#639) --- app/build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6bbeaba9..49d5576e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,6 +11,7 @@ plugins { apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'com.google.gms.google-services' if (System.getenv("CI") == "true") { println("Applying 'com.google.firebase.firebase-perf'") apply plugin: 'com.google.firebase.firebase-perf' @@ -174,8 +175,6 @@ moduleGraphAssert { restricted = [":feature:\\S* -X> :not-wanted-module-example"] } -apply plugin: 'com.google.gms.google-services' - play { track = 'internal' serviceAccountCredentials = file("$buildDir/play-publish-key.json") From 3ce403979231e61b08bd25246b9e11723a9bde33 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Nov 2021 17:30:07 +0000 Subject: [PATCH 185/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 49d5576e..e1ae8239 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.35.0' - versionCode 135 + versionName '0.36.0' + versionCode 136 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 69133cfed184a4078538e4e994a3504140d38cd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 10:28:38 +0100 Subject: [PATCH 186/621] Bump browser from 1.3.0 to 1.4.0 (#640) Bumps browser from 1.3.0 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.browser:browser dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e1ae8239..831ee942 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,7 +114,7 @@ dependencies { implementation project(':feature:config-debug-api') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'androidx.browser:browser:1.3.0' + implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index 47d78cad..73ae1f33 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation dagger kapt daggerAnnotationProcessor - implementation 'androidx.browser:browser:1.3.0' + implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.core:core:1.7.0' testImplementation 'junit:junit:4.13.2' } From add17117d193cf66d6bd1927ddfd1db866b1b1bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 10:28:47 +0100 Subject: [PATCH 187/621] Bump annotation from 1.2.0 to 1.3.0 (#641) Bumps annotation from 1.2.0 to 1.3.0. --- updated-dependencies: - dependency-name: androidx.annotation:annotation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- core/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index d9384286..7a97d097 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.2.0' + implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' implementation 'androidx.fragment:fragment:1.3.6' diff --git a/core/build.gradle b/core/build.gradle index fbfd7353..5e76f3dc 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.core:core:1.7.0' - implementation 'androidx.annotation:annotation:1.2.0' + implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From 9b78b29ae1de2094b79399a0f89236aaf547b1ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 11 Nov 2021 15:25:41 +0000 Subject: [PATCH 188/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 831ee942..9172af24 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.36.0' - versionCode 136 + versionName '0.36.1' + versionCode 137 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 7cdfc9a2598bf88e636cce976e35b94d54efbe5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 23:18:31 +0100 Subject: [PATCH 189/621] Bump daggerVersion from 2.40 to 2.40.1 (#643) Bumps `daggerVersion` from 2.40 to 2.40.1. Updates `dagger-compiler` from 2.40 to 2.40.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40...dagger-2.40.1) Updates `dagger` from 2.40 to 2.40.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40...dagger-2.40.1) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 96e61b10..27b69541 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.40' + daggerVersion = '2.40.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 0310486a612c6963175cf68f2d101ea07c8e506c Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 20 Nov 2021 11:44:35 +0100 Subject: [PATCH 190/621] Migrate to com.jraska.module.graph.assertion version 1.7.0 (#644) --- app/build.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9172af24..e3b7ab72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "1.6.0" + id "com.jraska.module.graph.assertion" version "1.7.0" id "com.github.triplet.play" version "3.6.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' @@ -170,8 +170,7 @@ apply plugin: 'com.jraska.module.graph.assertion' moduleGraphAssert { maxHeight = 2 - moduleLayers = ["[\\S:]*(? [\\S:]*"] + allowed = [":app -> .*", ".* -> [\\S:]*-api"] restricted = [":feature:\\S* -X> :not-wanted-module-example"] } From 789231ab790987482ba5f8caf7aa591e69cfd3b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 01:14:39 +0100 Subject: [PATCH 191/621] Bump appcompat from 1.3.1 to 1.4.0 (#646) Bumps appcompat from 1.3.1 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/users/build.gradle | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 0a532fef..2adaee35 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" diff --git a/app/build.gradle b/app/build.gradle index e3b7ab72..bccd777d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,7 +113,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.7.0' diff --git a/core/build.gradle b/core/build.gradle index 5e76f3dc..39e5c6ee 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -42,7 +42,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index d94d70a6..49d9cfe3 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index a1bdab8d..4efeb87c 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 9e053bd2..be9598c4 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index d07268da..4a61f1a1 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation project(':feature:identity-api') implementation 'androidx.core:core:1.7.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation platform('com.google.firebase:firebase-bom:29.0.0') implementation 'com.google.firebase:firebase-perf' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index f0908a4d..ef8e0f52 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.9' implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 17d8a94a..17b8f002 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index bf9c6303..d11a362d 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.core:core:1.7.0' kapt daggerAnnotationProcessor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 84ce9dae..f3dadcbf 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation coroutinesCore implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' From 06caed7182b06c3aa4245a35de263f98f2cb9c4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 00:19:42 +0000 Subject: [PATCH 192/621] Bump fragment from 1.3.6 to 1.4.0 (#645) Bumps fragment from 1.3.6 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 7a97d097..396f7552 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' - implementation 'androidx.fragment:fragment:1.3.6' + implementation 'androidx.fragment:fragment:1.4.0' implementation okHttp implementation 'com.squareup.okio:okio:3.0.0' From 02d3bb93a0df6396c753a365a61a8828f5b6000a Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 24 Nov 2021 00:09:04 +0100 Subject: [PATCH 193/621] Update Module Graph Assert plugin to version 2.0.0 (#647) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index bccd777d..9363fba6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "1.7.0" + id "com.jraska.module.graph.assertion" version "2.0.0" id "com.github.triplet.play" version "3.6.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' From 968a3edef55a40d092f4cb0954671f2801aea0cd Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 27 Nov 2021 21:31:19 +0100 Subject: [PATCH 194/621] Kotlin version 1.6.0 (#648) * Bump kotlin_version from 1.5.31 to 1.6.0 Bumps `kotlin_version` from 1.5.31 to 1.6.0. Updates `kotlin-gradle-plugin` from 1.5.31 to 1.6.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Updates `kotlin-stdlib` from 1.5.31 to 1.6.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Extract separate method to annotate Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- .../github/client/core/android/OnAppCreateAsyncExecutor.kt | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 2903680d..ca2b8a59 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.5.31' + ext.kotlin_version = '1.6.0' repositories { google() mavenCentral() diff --git a/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt index 8799968a..18b0a440 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/OnAppCreateAsyncExecutor.kt @@ -14,8 +14,12 @@ class OnAppCreateAsyncExecutor @Inject constructor( private val appDispatchers: AppDispatchers ) : OnAppCreate { - @DelicateCoroutinesApi // this is app init override fun onCreate(app: Application) { + startInGlobalScope(app) + } + + @DelicateCoroutinesApi // this is app init + private fun startInGlobalScope(app: Application) { GlobalScope.launch(appDispatchers.io) { asyncActions.map { async { it.execute(app) } From a69973c4fcd63f18ed2f10026c8df7386bca6f03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:42:24 +0100 Subject: [PATCH 195/621] Bump daggerVersion from 2.40.1 to 2.40.2 (#650) Bumps `daggerVersion` from 2.40.1 to 2.40.2. Updates `dagger-compiler` from 2.40.1 to 2.40.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.1...dagger-2.40.2) Updates `dagger` from 2.40.1 to 2.40.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.1...dagger-2.40.2) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 27b69541..e6819f91 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.40.1' + daggerVersion = '2.40.2' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 971946ba218e1a3cce31fe17ab3b19917fe9fb8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:42:33 +0100 Subject: [PATCH 196/621] Bump okHttpVersion from 4.9.2 to 4.9.3 (#649) Bumps `okHttpVersion` from 4.9.2 to 4.9.3. Updates `okhttp` from 4.9.2 to 4.9.3 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.2...parent-4.9.3) Updates `logging-interceptor` from 4.9.2 to 4.9.3 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.2...parent-4.9.3) Updates `mockwebserver` from 4.9.2 to 4.9.3 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.2...parent-4.9.3) --- updated-dependencies: - dependency-name: com.squareup.okhttp3:okhttp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.squareup.okhttp3:logging-interceptor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.squareup.okhttp3:mockwebserver dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index e6819f91..8d486ad9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -13,7 +13,7 @@ ext { daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" - okHttpVersion = '4.9.2' + okHttpVersion = '4.9.3' okHttp = "com.squareup.okhttp3:okhttp:$okHttpVersion" okHttpLoggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okHttpVersion" okHttpMockWebServer = "com.squareup.okhttp3:mockwebserver:$okHttpVersion" From ceeed3cd459f64d1d4d45304e6d87df8a92d2e26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 09:48:23 +0000 Subject: [PATCH 197/621] Bump com.github.triplet.play from 3.6.0 to 3.7.0 (#651) Bumps com.github.triplet.play from 3.6.0 to 3.7.0. --- updated-dependencies: - dependency-name: com.github.triplet.play dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 9363fba6..2180df07 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,6 @@ plugins { id "com.jraska.module.graph.assertion" version "2.0.0" - id "com.github.triplet.play" version "3.6.0" + id "com.github.triplet.play" version "3.7.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' id 'com.jraska.github.client.release' From 77503cc15092ff90b6017e557392a03b6220fab4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 29 Nov 2021 10:44:08 +0000 Subject: [PATCH 198/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2180df07..d32cf255 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.36.1' - versionCode 137 + versionName '0.36.2' + versionCode 138 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 1e016cbb14ebe0a3a6ce2ff61f0d19287d1255fa Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 3 Dec 2021 23:31:28 +0100 Subject: [PATCH 199/621] Gradle to 7.3.1 (#652) --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++++++------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 155 insertions(+), 106 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a25..84d1f85f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 744e882e..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MSYS* | MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index ffed3a25..84d1f85f 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From a977293706033ba2dd6a5ce20aaf99e0ee20a742 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:43:39 +0100 Subject: [PATCH 200/621] Bump firebase-crashlytics-gradle from 2.8.0 to 2.8.1 (#654) Bumps firebase-crashlytics-gradle from 2.8.0 to 2.8.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ca2b8a59..a753c126 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.0.3' classpath 'com.google.firebase:perf-plugin:1.4.0' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From 4f5e4520c279b78a1b050dce9a9535300cd5de19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 13:43:52 +0100 Subject: [PATCH 201/621] Bump firebase-bom from 29.0.0 to 29.0.1 (#655) Bumps firebase-bom from 29.0.0 to 29.0.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d32cf255..48f2d149 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.0') + implementation platform('com.google.firebase:firebase-bom:29.0.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4a61f1a1..2a6ee2da 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.0') + implementation platform('com.google.firebase:firebase-bom:29.0.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 4c10f3dbc39e0123dbb6754273b27bdf58c99606 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 12:49:10 +0000 Subject: [PATCH 202/621] Bump daggerVersion from 2.40.2 to 2.40.4 (#653) Bumps `daggerVersion` from 2.40.2 to 2.40.4. Updates `dagger-compiler` from 2.40.2 to 2.40.4 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.2...dagger-2.40.4) Updates `dagger` from 2.40.2 to 2.40.4 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.2...dagger-2.40.4) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 8d486ad9..f188f360 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.40.2' + daggerVersion = '2.40.4' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From a4f040b3ed06a84c4f777fbfddaf2a5b41528f14 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Dec 2021 21:00:28 +0000 Subject: [PATCH 203/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48f2d149..64816343 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.36.2' - versionCode 138 + versionName '0.36.3' + versionCode 139 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From de59236f1c13d84b4e8544138d02322144f746d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Dec 2021 10:51:24 +0100 Subject: [PATCH 204/621] Bump daggerVersion from 2.40.4 to 2.40.5 (#658) Bumps `daggerVersion` from 2.40.4 to 2.40.5. Updates `dagger-compiler` from 2.40.4 to 2.40.5 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.4...dagger-2.40.5) Updates `dagger` from 2.40.4 to 2.40.5 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.4...dagger-2.40.5) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index f188f360..65e55225 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.40.4' + daggerVersion = '2.40.5' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 31c33baa727673efc260e9f7c491aeb93920980b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Dec 2021 10:51:38 +0100 Subject: [PATCH 205/621] Bump gradle from 7.0.3 to 7.0.4 (#656) Bumps gradle from 7.0.3 to 7.0.4. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a753c126..32e05f2b 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.3' + classpath 'com.android.tools.build:gradle:7.0.4' classpath 'com.google.firebase:perf-plugin:1.4.0' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' From 9f608d22da85b7e19fd63c5ddccbf749119eea0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Dec 2021 09:57:09 +0000 Subject: [PATCH 206/621] Bump firebase-bom from 29.0.1 to 29.0.2 (#657) Bumps firebase-bom from 29.0.1 to 29.0.2. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 64816343..7d3dc21b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.1') + implementation platform('com.google.firebase:firebase-bom:29.0.2') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 2a6ee2da..7da4fb94 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.1') + implementation platform('com.google.firebase:firebase-bom:29.0.2') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From d17635b58e57c0a31471e56b634972bb3f16d6a2 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 15 Dec 2021 13:50:57 +0100 Subject: [PATCH 207/621] Module Graph Assert to version 2.1.0 (#659) --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 7d3dc21b..8c6dbb60 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "2.0.0" + id "com.jraska.module.graph.assertion" version "2.1.0" id "com.github.triplet.play" version "3.7.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' From 8710f79284299609083ed1ba8f0250ed4cb5e84b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Dec 2021 01:59:30 +0100 Subject: [PATCH 208/621] Bump kotlin_version from 1.6.0 to 1.6.10 (#661) Bumps `kotlin_version` from 1.6.0 to 1.6.10. Updates `kotlin-gradle-plugin` from 1.6.0 to 1.6.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10) Updates `kotlin-stdlib` from 1.6.0 to 1.6.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.0...v1.6.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 32e05f2b..618a0512 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.6.10' repositories { google() mavenCentral() From ee4ae020a848ccb219ad27463ffeb4fa7958a772 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Dec 2021 01:06:31 +0000 Subject: [PATCH 209/621] Bump firebase-bom from 29.0.2 to 29.0.3 (#660) Bumps firebase-bom from 29.0.2 to 29.0.3. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8c6dbb60..be2a7bb5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.2') + implementation platform('com.google.firebase:firebase-bom:29.0.3') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 7da4fb94..96cedd97 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.0' - implementation platform('com.google.firebase:firebase-bom:29.0.2') + implementation platform('com.google.firebase:firebase-bom:29.0.3') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 26440621778031011d3df55e460077ab11b80acc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Dec 2021 09:52:11 +0100 Subject: [PATCH 210/621] Bump coroutinesVersion from 1.5.2 to 1.6.0 (#662) Bumps `coroutinesVersion` from 1.5.2 to 1.6.0. Updates `kotlinx-coroutines-core` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) Updates `kotlinx-coroutines-core-jvm` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) Updates `kotlinx-coroutines-android` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) Updates `kotlinx-coroutines-test` from 1.5.2 to 1.6.0 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 65e55225..5d52910b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,5 @@ ext { - coroutinesVersion = "1.5.2" + coroutinesVersion = "1.6.0" coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" From c3a67432ce18f02b97e3d71103067cbef163c7bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 9 Jan 2022 18:56:15 -0600 Subject: [PATCH 211/621] Bump assertj-core from 3.21.0 to 3.22.0 (#663) Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.21.0 to 3.22.0. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.21.0...assertj-core-3.22.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/identity/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 4 ++-- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index be2a7bb5..2a963622 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -154,7 +154,7 @@ dependencies { androidTestImplementation espressoIdlingResource androidTestImplementation androidTestRunner androidTestImplementation androidTestRules - androidTestImplementation 'org.assertj:assertj-core:3.21.0' + androidTestImplementation 'org.assertj:assertj-core:3.22.0' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation coroutinesJvm diff --git a/core/build.gradle b/core/build.gradle index 39e5c6ee..4e6e3355 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -51,5 +51,5 @@ dependencies { implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 49d9cfe3..b8f2ff9a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -36,5 +36,5 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore - androidTestImplementation 'org.assertj:assertj-core:3.21.0' + androidTestImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 4efeb87c..98b4c986 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -29,5 +29,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index e878da0f..d97b26e7 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -14,5 +14,5 @@ dependencies { implementation dagger testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 96cedd97..ad15dc73 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -35,5 +35,5 @@ dependencies { implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index ef8e0f52..812211bb 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -46,7 +46,7 @@ dependencies { testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 17b8f002..02a2b2e9 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -34,5 +34,5 @@ dependencies { kapt daggerAnnotationProcessor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index f3dadcbf..8606e280 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -55,7 +55,7 @@ dependencies { testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.21.0' + testImplementation 'org.assertj:assertj-core:3.22.0' testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation okHttpMockWebServer testImplementation project(':core-testing') @@ -63,7 +63,7 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore - androidTestImplementation 'org.assertj:assertj-core:3.20.2' + androidTestImplementation 'org.assertj:assertj-core:3.22.0' androidTestImplementation androidTestRunner androidTestImplementation androidTestRules From 092ba40748696cef3b5bb3a66dbc25e8a4121657 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jan 2022 11:06:55 +0100 Subject: [PATCH 212/621] Bump material from 1.4.0 to 1.5.0 (#666) Bumps [material](https://github.com/material-components/material-components-android) from 1.4.0 to 1.5.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.4.0...1.5.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 2adaee35..cfb05a0c 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation retrofit diff --git a/app/build.gradle b/app/build.gradle index 2a963622..a52d5eeb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -126,7 +126,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.4' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation platform('com.google.firebase:firebase-bom:29.0.3') implementation 'com.google.firebase:firebase-core' diff --git a/core/build.gradle b/core/build.gradle index 4e6e3355..7cef0fe6 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index b8f2ff9a..59a78987 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.0' androidTestImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index be9598c4..0cbb0d63 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation coroutinesJvm implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 812211bb..d4987a1d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -36,7 +36,7 @@ dependencies { implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.8.9' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 02a2b2e9..3d4aa5f0 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':feature:ui-common-api') implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 8606e280..f66849dd 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation coroutinesJvm implementation coroutinesCore - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' From b73854f58ee7125226001164fa633823e61120e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jan 2022 10:13:20 +0000 Subject: [PATCH 213/621] Bump core from 1.10.2 to 1.10.3 (#665) Bumps core from 1.10.2 to 1.10.3. --- updated-dependencies: - dependency-name: com.google.android.play:core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/in-app-update/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index becbb858..2a6e72e9 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -22,7 +22,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.google.android.play:core:1.10.2' + implementation 'com.google.android.play:core:1.10.3' implementation 'com.jakewharton.timber:timber:5.0.1' From ebe8f7c065beac0e1aea5b66c44cf5f49edab0d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jan 2022 10:19:53 +0000 Subject: [PATCH 214/621] Bump appcompat from 1.4.0 to 1.4.1 (#664) Bumps appcompat from 1.4.0 to 1.4.1. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/users/build.gradle | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index cfb05a0c..09df730a 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" diff --git a/app/build.gradle b/app/build.gradle index a52d5eeb..f872a874 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,7 +113,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.7.0' diff --git a/core/build.gradle b/core/build.gradle index 7cef0fe6..1959a64c 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.core:core:1.7.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -42,7 +42,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 59a78987..18bd880a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 98b4c986..2831461f 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 0cbb0d63..4f8e0576 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index ad15dc73..2d0ebe51 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation project(':feature:identity-api') implementation 'androidx.core:core:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation platform('com.google.firebase:firebase-bom:29.0.3') implementation 'com.google.firebase:firebase-perf' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index d4987a1d..444c046d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.9' implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 3d4aa5f0..243a4b27 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index d11a362d..7ffc8206 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.core:core:1.7.0' kapt daggerAnnotationProcessor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index f66849dd..32f104d2 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation coroutinesCore implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.0' + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' From 33a863017082aecf1cd089919c35d64ab78053d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 17 Jan 2022 22:35:40 +0000 Subject: [PATCH 215/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f872a874..ce311102 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.36.3' - versionCode 139 + versionName '0.36.4' + versionCode 140 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 1ce9db152a745035585aeb88a71377968b60cdaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 01:12:39 +0100 Subject: [PATCH 216/621] Bump com.jraska.module.graph.assertion from 2.1.0 to 2.2.0 (#667) Bumps com.jraska.module.graph.assertion from 2.1.0 to 2.2.0. --- updated-dependencies: - dependency-name: com.jraska.module.graph.assertion dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ce311102..b8c585cc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "2.1.0" + id "com.jraska.module.graph.assertion" version "2.2.0" id "com.github.triplet.play" version "3.7.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' From c72988667e23ac359ced3ad9c258c5366505039b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 01:01:36 +0000 Subject: [PATCH 217/621] Bump firebase-bom from 29.0.3 to 29.0.4 (#669) Bumps firebase-bom from 29.0.3 to 29.0.4. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b8c585cc..61efd629 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' - implementation platform('com.google.firebase:firebase-bom:29.0.3') + implementation platform('com.google.firebase:firebase-bom:29.0.4') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 2d0ebe51..f6a073c2 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.0.3') + implementation platform('com.google.firebase:firebase-bom:29.0.4') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 1f6d5fe3c6a04e9cc44f76796246b5d2e97cd4d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jan 2022 01:21:35 +0000 Subject: [PATCH 218/621] Bump perf-plugin from 1.4.0 to 1.4.1 (#668) Bumps perf-plugin from 1.4.0 to 1.4.1. --- updated-dependencies: - dependency-name: com.google.firebase:perf-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 618a0512..39f97b1c 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:7.0.4' - classpath 'com.google.firebase:perf-plugin:1.4.0' + classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" From 299a1ee4d0f4357c321e446131b81d1b4a5d5ced Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 10:06:32 +0100 Subject: [PATCH 219/621] Bump gradle from 7.0.4 to 7.1.0 (#670) Bumps gradle from 7.0.4 to 7.1.0. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 39f97b1c..4f953d53 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.4' + classpath 'com.android.tools.build:gradle:7.1.0' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' From 55d19289fb24cce4fe893b1968302d05af6b0d8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:17:15 +0000 Subject: [PATCH 220/621] Bump fragment from 1.4.0 to 1.4.1 (#671) Bumps fragment from 1.4.0 to 1.4.1. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 396f7552..0b098036 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' - implementation 'androidx.fragment:fragment:1.4.0' + implementation 'androidx.fragment:fragment:1.4.1' implementation okHttp implementation 'com.squareup.okio:okio:3.0.0' From 2d58176af454257fdef3c04cecbcaca0f2614223 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Mon, 31 Jan 2022 10:51:01 +0100 Subject: [PATCH 221/621] Gradle to 7.3.3 (#672) --- gradle/wrapper/gradle-wrapper.properties | 2 +- plugins/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85f..2e6e5897 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index 84d1f85f..2e6e5897 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 5aba215334781baaac8dbbab9add8043eec14ff6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 31 Jan 2022 10:22:04 +0000 Subject: [PATCH 222/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 61efd629..0d523f5a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 24 targetSdkVersion 31 - versionName '0.36.4' - versionCode 140 + versionName '0.36.5' + versionCode 141 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 3f3751751c4445a331ebeb2269be95ecced55070 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Feb 2022 09:12:25 +0100 Subject: [PATCH 223/621] Bump gradle from 7.1.0 to 7.1.1 (#673) Bumps gradle from 7.1.0 to 7.1.1. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4f953d53..80c21514 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.0' + classpath 'com.android.tools.build:gradle:7.1.1' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' From ba9ddccd81232ae5bb4e7d379d5c6a5f784974ac Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 9 Feb 2022 23:47:17 +0100 Subject: [PATCH 224/621] Gradle 7.4 (#674) * Gradle 7.4 * Update gradle-wrapper.properties --- gradle/wrapper/gradle-wrapper.properties | 2 +- plugins/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e6e5897..41dfb879 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index 2e6e5897..41dfb879 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 0f54111350677ac2f4a0ef325059b276239c9be5 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 13 Feb 2022 20:52:53 +0100 Subject: [PATCH 225/621] Min SDK to 26 (#675) * Min SDK to 26 * Min SDK to 26 --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- .../java/com/jraska/github/client/push/NotificationSetup.kt | 4 ---- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 18 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 09df730a..0014a159 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -7,7 +7,7 @@ android { defaultConfig { applicationId "com.jraska.github.client.users" - minSdkVersion 24 + minSdkVersion 26 targetSdkVersion 31 versionName '0.1.0' versionCode 1 diff --git a/app/build.gradle b/app/build.gradle index 0d523f5a..c4da0c02 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,7 +24,7 @@ android { defaultConfig { applicationId "com.jraska.github.client" - minSdkVersion 24 + minSdkVersion 26 targetSdkVersion 31 versionName '0.36.5' versionCode 141 diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 0b098036..1b8f2416 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 555b6d98..6adad13b 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 3e9783c9..bf65e07f 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/core/build.gradle b/core/build.gradle index 1959a64c..c066389d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 18bd880a..8d1de089 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index 73ae1f33..e25c93e5 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 2831461f..d6e72a6d 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 2a6e72e9..1ed113b5 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 4f8e0576..d5f12d83 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/push/build.gradle b/feature/push/build.gradle index f6a073c2..4660cd68 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/push/src/main/java/com/jraska/github/client/push/NotificationSetup.kt b/feature/push/src/main/java/com/jraska/github/client/push/NotificationSetup.kt index 6656a3dc..e4e843e6 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/NotificationSetup.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/NotificationSetup.kt @@ -19,10 +19,6 @@ internal class NotificationSetup @Inject constructor( } private fun setupChannels() { - if (Build.VERSION.SDK_INT < 26) { - return - } - val name = context.getString(R.string.channel_name_push) val description = context.getString(R.string.channel_description_push) val channel = NotificationChannel(PUSH_CHANNEL_ID, name, diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 444c046d..1b609a3c 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 243a4b27..05a905e5 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 7ffc8206..a782cba3 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 0faffb15..198e68f7 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 } compileOptions { diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 32f104d2..e4eea1b3 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' android { compileSdkVersion 31 defaultConfig { - minSdkVersion 24 + minSdkVersion 26 testInstrumentationRunner "com.jraska.github.client.users.test.TestRunner" } From 3407c805bd597b12d9c7f11a8e746bbfaab65ea9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Feb 2022 22:21:11 +0100 Subject: [PATCH 226/621] Bump firebase-bom from 29.0.4 to 29.1.0 (#676) Bumps firebase-bom from 29.0.4 to 29.1.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c4da0c02..8800eb5e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' - implementation platform('com.google.firebase:firebase-bom:29.0.4') + implementation platform('com.google.firebase:firebase-bom:29.1.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4660cd68..ff6a4292 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.0.4') + implementation platform('com.google.firebase:firebase-bom:29.1.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 413e0fe33fa0c99680a2e7ae544ff153e8fe85e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Feb 2022 21:27:42 +0000 Subject: [PATCH 227/621] Bump lifecycle-viewmodel from 2.4.0 to 2.4.1 (#677) Bumps lifecycle-viewmodel from 2.4.0 to 2.4.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-viewmodel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 1b8f2416..3b2ce55f 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -20,7 +20,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.core:core:1.7.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.1' implementation 'androidx.fragment:fragment:1.4.1' implementation okHttp From e2ccbb1c344b4de31df4c637e6ea1d0c4cdd5f9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Feb 2022 21:43:53 +0000 Subject: [PATCH 228/621] Bump gson from 2.8.9 to 2.9.0 (#678) Bumps [gson](https://github.com/google/gson) from 2.8.9 to 2.9.0. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.8.9...gson-parent-2.9.0) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8800eb5e..649c021c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.code.gson:gson:2.8.9' + implementation 'com.google.code.gson:gson:2.9.0' androidTestImplementation espressoCore androidTestImplementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index c066389d..01b5c2da 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.9' + implementation 'com.google.code.gson:gson:2.9.0' implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 1b609a3c..08d659d1 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.9' + implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.android.material:material:1.5.0' implementation 'androidx.appcompat:appcompat:1.4.1' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index e4eea1b3..e6f9bd4d 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.8.9' + implementation 'com.google.code.gson:gson:2.9.0' implementation coroutinesJvm implementation coroutinesCore From e6ac53bd0370e4e4b73056cf854409434c0116bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 02:13:46 +0100 Subject: [PATCH 229/621] Bump lifecycle-runtime from 2.4.0 to 2.4.1 (#681) Bumps lifecycle-runtime from 2.4.0 to 2.4.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 0014a159..c782c273 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" - implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' diff --git a/app/build.gradle b/app/build.gradle index 649c021c..6b5dbe56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.7.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From bb9e7f1fe2b70bb68e38d8c8e1e646bd10973fb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 02:14:12 +0100 Subject: [PATCH 230/621] Bump lifecycle-runtime-ktx from 2.4.0 to 2.4.1 (#680) Bumps lifecycle-runtime-ktx from 2.4.0 to 2.4.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime-ktx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/network-status/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index d5f12d83..c5dbddf4 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.core:core:1.7.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.5.0' implementation coroutinesJvm From 2705026a745cca3a894358eff5c8119506b7e2a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 02:17:07 +0100 Subject: [PATCH 231/621] Bump lifecycle-livedata-ktx from 2.4.0 to 2.4.1 (#682) Bumps lifecycle-livedata-ktx from 2.4.0 to 2.4.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-livedata-ktx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index c782c273..9c09a1b0 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' implementation 'androidx.media:media:1.4.3' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 08d659d1..df388435 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation coroutinesAndroid implementation coroutinesCore implementation coroutinesJvm - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" implementation retrofit implementation retrofitGsonConverter diff --git a/feature/users/build.gradle b/feature/users/build.gradle index e6f9bd4d..b4dfb2c0 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' From e5f0f9bdacd5c57f1dc5c311ffe87bbac212b035 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 01:23:13 +0000 Subject: [PATCH 232/621] Bump media from 1.4.3 to 1.5.0 (#679) Bumps media from 1.4.3 to 1.5.0. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 9c09a1b0..054de33e 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -44,7 +44,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' - implementation 'androidx.media:media:1.4.3' + implementation 'androidx.media:media:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.google.android.material:material:1.5.0' diff --git a/app/build.gradle b/app/build.gradle index 6b5dbe56..c1a15f5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' - implementation 'androidx.media:media:1.4.3' + implementation 'androidx.media:media:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' From b2558447aaaffa56e9c6d3a43e076556b71740d4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Feb 2022 01:26:33 +0000 Subject: [PATCH 233/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c1a15f5b..3046c39c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.36.5' - versionCode 141 + versionName '0.37.0' + versionCode 142 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 391c830b314e67a12082436d07a6d8dcead30283 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Feb 2022 09:02:51 +0100 Subject: [PATCH 234/621] Bump daggerVersion from 2.40.5 to 2.41 (#683) Bumps `daggerVersion` from 2.40.5 to 2.41. Updates `dagger-compiler` from 2.40.5 to 2.41 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41) Updates `dagger` from 2.40.5 to 2.41 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.40.5...dagger-2.41) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 5d52910b..d245debe 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.40.5' + daggerVersion = '2.41' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 8e8f141e363a01a0602b86a8cf31f29f353db18e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Mar 2022 10:55:57 +0100 Subject: [PATCH 235/621] Bump gradle from 7.1.1 to 7.1.2 (#684) Bumps gradle from 7.1.1 to 7.1.2. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 80c21514..64c9690d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.1' + classpath 'com.android.tools.build:gradle:7.1.2' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.8' From c04f860d8369491fa527853467dd5dbdfb75df4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Mar 2022 01:13:31 +0100 Subject: [PATCH 236/621] Bump firebase-bom from 29.1.0 to 29.2.1 (#686) Bumps firebase-bom from 29.1.0 to 29.2.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3046c39c..7990124d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' - implementation platform('com.google.firebase:firebase-bom:29.1.0') + implementation platform('com.google.firebase:firebase-bom:29.2.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index ff6a4292..4df34f13 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.1.0') + implementation platform('com.google.firebase:firebase-bom:29.2.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From d5169934bcc3df1fbd7afaf13f52a05144c1950f Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 25 Mar 2022 01:21:55 +0100 Subject: [PATCH 237/621] Non trasitive R class (#687) --- .../java/com/jraska/github/client/DeepLinkLaunchTest.kt | 3 ++- .../com/jraska/github/client/users/UsersActivityFlowTest.kt | 2 +- .../com/jraska/github/client/users/ui/UserDetailActivity.kt | 3 ++- gradle.properties | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt b/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt index ff5559a7..a1c76a20 100644 --- a/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/DeepLinkLaunchTest.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.net.Uri import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click +import com.jraska.github.client.repo.R as RepoR import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withId @@ -54,7 +55,7 @@ class DeepLinkLaunchTest { onView(withText(Matchers.containsString("Language: Java"))) .check(matches(isDisplayed())) - onView(withId(R.id.repo_detail_github_fab)).perform(click()) + onView(withId(RepoR.id.repo_detail_github_fab)).perform(click()) onView(withText("Open")) .check(matches(isDisplayed())) } diff --git a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt index 277703d3..bd42e18d 100644 --- a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt @@ -13,13 +13,13 @@ import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.rule.ActivityTestRule import com.google.firebase.analytics.FirebaseAnalytics import com.jraska.github.client.EnableConfigRule -import com.jraska.github.client.R import com.jraska.github.client.android.test.http.assetJson import com.jraska.github.client.espressox.LongClickPatch import com.jraska.github.client.http.MockWebServerInterceptorRule import com.jraska.github.client.http.onUrlPartReturn import com.jraska.github.client.http.onUrlReturn import com.jraska.github.client.recordedEvents +import com.jraska.github.client.users.R import com.jraska.github.client.users.ui.UsersActivity import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt index add4d33c..2e1a54f9 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UserDetailActivity.kt @@ -82,7 +82,8 @@ internal class UserDetailActivity : AppCompatActivity() { } private fun showLoading() { - findViewById(R.id.user_detail_recycler).adapter = SimpleEpoxyAdapter().apply { addModels(SimpleEpoxyModel(R.layout.item_loading)) } + findViewById(R.id.user_detail_recycler).adapter = SimpleEpoxyAdapter().apply { addModels(SimpleEpoxyModel( + com.jraska.github.client.ui.R.layout.item_loading)) } } private fun showError(error: Throwable) { diff --git a/gradle.properties b/gradle.properties index b0fdba79..949f1023 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,4 +8,5 @@ kapt.incremental.apt=true kapt.use.worker.api=true org.gradle.caching=true org.gradle.configureondemand=true +android.nonTransitiveRClass=true From ee5da2aae2b7154bd135cc64212aff9d88d1de10 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 25 Mar 2022 01:31:43 +0100 Subject: [PATCH 238/621] Bump Google-services to 4.3.10 (#688) --- build.gradle | 2 +- plugins/build.gradle | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 64c9690d..75cf94e3 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { classpath 'com.android.tools.build:gradle:7.1.2' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' - classpath 'com.google.gms:google-services:4.3.8' + classpath 'com.google.gms:google-services:4.3.10' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/plugins/build.gradle b/plugins/build.gradle index ccdb2fd8..3d6e2b38 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" } } @@ -17,7 +17,7 @@ repositories { dependencies { implementation gradleApi() - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.21" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.10" implementation 'com.mixpanel:mixpanel-java:1.4.4' implementation retrofit @@ -26,7 +26,7 @@ dependencies { implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.20.2' + testImplementation 'org.assertj:assertj-core:3.22.0' testImplementation okHttpMockWebServer } From 516891fa7244498fad865018c5caf4c73a42b05c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 25 Mar 2022 00:34:42 +0000 Subject: [PATCH 239/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7990124d..378ba400 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.37.0' - versionCode 142 + versionName '0.38.0' + versionCode 143 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 14e86f47ab2fe891693db8b717f2d0bec2e6469f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 22:27:51 +0100 Subject: [PATCH 240/621] Bump firebase-bom from 29.2.1 to 29.3.0 (#690) Bumps firebase-bom from 29.2.1 to 29.3.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 378ba400..d68ca603 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' - implementation platform('com.google.firebase:firebase-bom:29.2.1') + implementation platform('com.google.firebase:firebase-bom:29.3.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4df34f13..6bda9353 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.2.1') + implementation platform('com.google.firebase:firebase-bom:29.3.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 930fda89e93ea6d15a697c89140d5f63f7c5acdf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 21:37:40 +0000 Subject: [PATCH 241/621] Bump threetenabp from 1.3.1 to 1.4.0 (#689) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.3.1 to 1.4.0. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.3.1...1.4.0) --- updated-dependencies: - dependency-name: com.jakewharton.threetenabp:threetenabp dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 054de33e..2b991a1a 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation coroutinesCore - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' implementation okHttpLoggingInterceptor implementation 'com.squareup.okio:okio:3.0.0' diff --git a/app/build.gradle b/app/build.gradle index d68ca603..fff536f6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -143,7 +143,7 @@ dependencies { implementation dagger implementation retrofit - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/core/build.gradle b/core/build.gradle index 01b5c2da..2c0c3734 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.3.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' implementation fresco kapt daggerAnnotationProcessor From b159cd5ff4005e2d4c1da1dca3ea8440f1a23eba Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 29 Mar 2022 22:50:05 +0100 Subject: [PATCH 242/621] Add pull_request_target on build to be triggered from forked repos (#692) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e2eada4..8653b7ae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ name: Build -on: [push] +on: [push, pull_request_target] env: GITHUB_CLIENT_MIXPANEL_API_KEY: ${{ secrets.MIXPANEL_KEY }} jobs: From 9101ce417bbc9e5f4af66e8bf6e19b6ab482edd0 Mon Sep 17 00:00:00 2001 From: Jonathan Caley Date: Tue, 29 Mar 2022 22:53:54 +0100 Subject: [PATCH 243/621] Fix build.gradle error causing projectsEvaluated to never run (#691) --- .../com/jraska/gradle/buildtime/BuildTimeListener.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt index 007fefac..10349ad5 100644 --- a/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt +++ b/plugins/src/main/java/com/jraska/gradle/buildtime/BuildTimeListener.kt @@ -14,7 +14,7 @@ internal class BuildTimeListener( private val buildReporter: BuildReporter ) : BuildListener { private val taskExecutionStatisticsEventAdapter = TaskExecutionStatisticsEventAdapter() - private var configuredTime: Long = 0 + private var configuredTime: Long? = null override fun settingsEvaluated(gradle: Settings) = Unit override fun projectsLoaded(gradle: Gradle) = Unit @@ -26,7 +26,13 @@ internal class BuildTimeListener( } override fun buildFinished(result: BuildResult) { - val buildData = buildDataFactory.buildData(result, taskExecutionStatisticsEventAdapter.statistics, configuredTime) + if (configuredTime == null) { + val gradle = result.gradle as DefaultGradle + val services = gradle.services + + configuredTime = services[Clock::class.java].currentTime + } + val buildData = buildDataFactory.buildData(result, taskExecutionStatisticsEventAdapter.statistics, configuredTime!!) println("Build data collected in ${buildData.buildDataCollectionOverhead} ms") From 470b0340394dd426cbc2dcc8e03f19f5df4cc15b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Mar 2022 22:03:04 +0000 Subject: [PATCH 244/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fff536f6..badc1859 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.38.0' - versionCode 143 + versionName '0.38.1' + versionCode 144 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From f6e29a595438ee70ccbf0e32c716a8bbb0a2cc66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Apr 2022 10:38:49 +0200 Subject: [PATCH 245/621] Bump kotlin_version from 1.6.10 to 1.6.20 (#693) Bumps `kotlin_version` from 1.6.10 to 1.6.20. Updates `kotlin-gradle-plugin` from 1.6.10 to 1.6.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Updates `kotlin-stdlib` from 1.6.10 to 1.6.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 75cf94e3..b8ac84e8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.6.20' repositories { google() mavenCentral() From 8217f71ed1bd7ff1cb9f60578a3cd720b536d42a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Apr 2022 08:50:24 +0200 Subject: [PATCH 246/621] Bump coroutinesVersion from 1.6.0 to 1.6.1 (#694) Bumps `coroutinesVersion` from 1.6.0 to 1.6.1. Updates `kotlinx-coroutines-core` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) Updates `kotlinx-coroutines-core-jvm` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) Updates `kotlinx-coroutines-android` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) Updates `kotlinx-coroutines-test` from 1.6.0 to 1.6.1 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index d245debe..5f39c3ac 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,5 @@ ext { - coroutinesVersion = "1.6.0" + coroutinesVersion = "1.6.1" coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" From 14d36e7a2de71f893222741d55f37b70856e0eb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Apr 2022 06:59:42 +0000 Subject: [PATCH 247/621] Bump gradle from 7.1.2 to 7.1.3 (#695) Bumps gradle from 7.1.2 to 7.1.3. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b8ac84e8..bd724942 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.10' From fb0c81fa1d0d5b3b36174db54385f7ca3b540a2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Apr 2022 09:35:00 +0200 Subject: [PATCH 248/621] Bump firebase-bom from 29.3.0 to 29.3.1 (#696) Bumps firebase-bom from 29.3.0 to 29.3.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index badc1859..63a09d5a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.5.0' - implementation platform('com.google.firebase:firebase-bom:29.3.0') + implementation platform('com.google.firebase:firebase-bom:29.3.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 6bda9353..d6400eca 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.3.0') + implementation platform('com.google.firebase:firebase-bom:29.3.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 0d901b089ad0ac902b8b075a97c520ce8647e31a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 11:04:03 +0200 Subject: [PATCH 249/621] Bump okio from 3.0.0 to 3.1.0 (#699) Bumps [okio](https://github.com/square/okio) from 3.0.0 to 3.1.0. - [Release notes](https://github.com/square/okio/releases) - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okio/compare/parent-3.0.0...parent-3.1.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- navigation-api/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 2b991a1a..729e6247 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -64,6 +64,6 @@ dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' } diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 3b2ce55f..b32ae561 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -24,5 +24,5 @@ dependencies { implementation 'androidx.fragment:fragment:1.4.1' implementation okHttp - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 6adad13b..62211251 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation androidTestMonitor implementation okHttpMockWebServer implementation okHttp - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' implementation 'junit:junit:4.13.2' } diff --git a/core-api/build.gradle b/core-api/build.gradle index 03a205c0..e70ea322 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -8,7 +8,7 @@ dependencies { implementation coroutinesJvm implementation retrofit implementation okHttp - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation 'javax.inject:javax.inject:1' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index bf65e07f..fe2d701c 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -29,5 +29,5 @@ dependencies { implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' } diff --git a/navigation-api/build.gradle b/navigation-api/build.gradle index aec0857c..ea0b826f 100644 --- a/navigation-api/build.gradle +++ b/navigation-api/build.gradle @@ -5,5 +5,5 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation okHttp - implementation 'com.squareup.okio:okio:3.0.0' + implementation 'com.squareup.okio:okio:3.1.0' } From 1b7f17aab235b43795acb49567ee33752fd9ea16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 09:10:27 +0000 Subject: [PATCH 250/621] Bump kotlin_version from 1.6.20 to 1.6.21 (#697) Bumps `kotlin_version` from 1.6.20 to 1.6.21. Updates `kotlin-gradle-plugin` from 1.6.20 to 1.6.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.20...v1.6.21) Updates `kotlin-stdlib` from 1.6.20 to 1.6.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.6.21/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.6.20...v1.6.21) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bd724942..eb7e1f79 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.20' + ext.kotlin_version = '1.6.21' repositories { google() mavenCentral() From 2fc042b31cd9efbd73208fe046544beaba5de923 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Apr 2022 09:17:18 +0000 Subject: [PATCH 251/621] Bump media from 1.5.0 to 1.6.0 (#698) Bumps media from 1.5.0 to 1.6.0. --- updated-dependencies: - dependency-name: androidx.media:media dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 729e6247..d2859e50 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -44,7 +44,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' - implementation 'androidx.media:media:1.5.0' + implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.google.android.material:material:1.5.0' diff --git a/app/build.gradle b/app/build.gradle index 63a09d5a..1b9e5831 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -119,7 +119,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' - implementation 'androidx.media:media:1.5.0' + implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' From 272dcff1aa8ab1a0824dd681d22c3eb4218ac064 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 15:39:21 +0100 Subject: [PATCH 252/621] Bump daggerVersion from 2.41 to 2.42 (#703) Bumps `daggerVersion` from 2.41 to 2.42. Updates `dagger-compiler` from 2.41 to 2.42 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.41...dagger-2.42) Updates `dagger` from 2.41 to 2.42 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.41...dagger-2.42) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 5f39c3ac..717c64f8 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.41' + daggerVersion = '2.42' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 18a77f4167ef08a6786ad2356f5fd3178584d5a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 14:46:21 +0000 Subject: [PATCH 253/621] Bump material from 1.5.0 to 1.6.0 (#700) Bumps [material](https://github.com/material-components/material-components-android) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.5.0...1.6.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index d2859e50..310a6230 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation retrofit diff --git a/app/build.gradle b/app/build.gradle index 1b9e5831..3dbd9c6b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -126,7 +126,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.4' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation platform('com.google.firebase:firebase-bom:29.3.1') implementation 'com.google.firebase:firebase-core' diff --git a/core/build.gradle b/core/build.gradle index 2c0c3734..951d9ad1 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 8d1de089..d48d089a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.appcompat:appcompat:1.4.1' androidTestImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index c5dbddf4..77beeef7 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation coroutinesJvm implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index df388435..243a5e1b 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -36,7 +36,7 @@ dependencies { implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.9.0' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 05a905e5..23c54fca 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':feature:ui-common-api') implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index b4dfb2c0..437ee314 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation coroutinesJvm implementation coroutinesCore - implementation 'com.google.android.material:material:1.5.0' + implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' From 8ea2b532ef8f6c25d1704838ed88779f681b8161 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 May 2022 08:37:10 +0000 Subject: [PATCH 254/621] Bump gradle from 7.1.3 to 7.2.0 (#704) Bumps gradle from 7.1.3 to 7.2.0. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index eb7e1f79..fc994e64 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.3' + classpath 'com.android.tools.build:gradle:7.2.0' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.10' From 909dd2db370bf228e3d665787b0bf83e40f11f3f Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 26 May 2022 00:51:19 +0200 Subject: [PATCH 255/621] Revert "Add pull_request_target on build to be triggered from forked repos (#692)" (#706) This reverts commit b159cd5ff4005e2d4c1da1dca3ea8440f1a23eba. --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8653b7ae..7e2eada4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,5 @@ name: Build -on: [push, pull_request_target] +on: [push] env: GITHUB_CLIENT_MIXPANEL_API_KEY: ${{ secrets.MIXPANEL_KEY }} jobs: From 2b21c3fa417cdb281016ef53807c289c29baf960 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 May 2022 23:00:34 +0000 Subject: [PATCH 256/621] Bump firebase-bom from 29.3.1 to 30.0.1 (#702) Bumps firebase-bom from 29.3.1 to 30.0.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- .../com/jraska/github/client/users/UsersActivityFlowTest.kt | 2 +- feature/push/build.gradle | 2 +- .../java/com/jraska/github/client/settings/SettingsViewModel.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3dbd9c6b..daa177b8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.0' - implementation platform('com.google.firebase:firebase-bom:29.3.1') + implementation platform('com.google.firebase:firebase-bom:30.0.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt index bd42e18d..39c597db 100644 --- a/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/users/UsersActivityFlowTest.kt @@ -62,7 +62,7 @@ class UsersActivityFlowTest { onView(withHint("Value")).perform(ViewActions.typeText("0.01")) onView(withText("Purchase")).perform(click()) - val event = recordedEvents().findLast { event -> event.name == FirebaseAnalytics.Event.ECOMMERCE_PURCHASE } + val event = recordedEvents().findLast { event -> event.name == FirebaseAnalytics.Event.PURCHASE } assertThat(event).isNotNull assertThat(event!!.properties[FirebaseAnalytics.Param.VALUE]).isEqualTo(0.01) } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index d6400eca..5a9ede7c 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:29.3.1') + implementation platform('com.google.firebase:firebase-bom:30.0.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt index 7f3a1073..e480ad6c 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt @@ -32,6 +32,6 @@ internal class SettingsViewModel @Inject constructor( } companion object { - val ANALYTICS_ECOMMERCE_PURCHASE = AnalyticsEvent.Key("ecommerce_purchase", Owner.USERS_TEAM) + val ANALYTICS_ECOMMERCE_PURCHASE = AnalyticsEvent.Key("purchase", Owner.USERS_TEAM) } } From d7cbbc3bcb21c983c7c187a6acaf839d15e28fff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 May 2022 01:09:03 +0200 Subject: [PATCH 257/621] Bump firebase-bom from 30.0.1 to 30.0.2 (#708) Bumps firebase-bom from 30.0.1 to 30.0.2. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index daa177b8..0d7e0641 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.0' - implementation platform('com.google.firebase:firebase-bom:30.0.1') + implementation platform('com.google.firebase:firebase-bom:30.0.2') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 5a9ede7c..ae0493c3 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:30.0.1') + implementation platform('com.google.firebase:firebase-bom:30.0.2') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 83ec8096075fae4eaa206e009de520b66bdcc5f8 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 26 May 2022 01:17:43 +0200 Subject: [PATCH 258/621] Bump Gradle to 7.4.2 (#709) --- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 59821 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 178 +++++++++++------------ 3 files changed, 90 insertions(+), 90 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..41d9927a4d4fb3f96a785543079b8df6723c946b 100644 GIT binary patch delta 8958 zcmY+KWl$VIlZIh&f(Hri?gR<$?iyT!TL`X;1^2~W7YVSq1qtqM!JWlDxLm%}UESUM zndj}Uny%^UnjhVhFb!8V3s(a#fIy>`VW15{5nuy;_V&a5O#0S&!a4dSkUMz_VHu3S zGA@p9Q$T|Sj}tYGWdjH;Mpp8m&yu&YURcrt{K;R|kM~(*{v%QwrBJIUF+K1kX5ZmF zty3i{d`y0;DgE+de>vN@yYqFPe1Ud{!&G*Q?iUc^V=|H%4~2|N zW+DM)W!`b&V2mQ0Y4u_)uB=P@-2`v|Wm{>CxER1P^ z>c}ZPZ)xxdOCDu59{X^~2id7+6l6x)U}C4Em?H~F`uOxS1?}xMxTV|5@}PlN%Cg$( zwY6c}r60=z5ZA1L zTMe;84rLtYvcm?M(H~ZqU;6F7Evo{P7!LGcdwO|qf1w+)MsnvK5^c@Uzj<{ zUoej1>95tuSvDJ|5K6k%&UF*uE6kBn47QJw^yE&#G;u^Z9oYWrK(+oL97hBsUMc_^ z;-lmxebwlB`Er_kXp2$`&o+rPJAN<`WX3ws2K{q@qUp}XTfV{t%KrsZ5vM!Q#4{V& zq>iO$MCiLq#%wXj%`W$_%FRg_WR*quv65TdHhdpV&jlq<=K^K`&!Kl5mA6p4n~p3u zWE{20^hYpn1M}}VmSHBXl1*-)2MP=0_k)EPr#>EoZukiXFDz?Di1I>2@Z^P$pvaF+ zN+qUy63jek2m59;YG)`r^F3-O)0RDIXPhf)XOOdkmu`3SMMSW(g+`Ajt{=h1dt~ks ztrhhP|L4G%5x79N#kwAHh5N){@{fzE7n&%dnisCm65Za<8r_hKvfx4Bg*`%-*-Mvn zFvn~)VP@}1sAyD+B{{8l{EjD10Av&Mz9^Xff*t`lU=q=S#(|>ls520;n3<}X#pyh& z*{CJf7$*&~!9jMnw_D~ikUKJ2+UnXmN6qak{xx%W;BKuXt7@ky!LPI1qk?gDwG@@o zkY+BkIie>{{q==5)kXw(*t#I?__Kwi>`=+s?Gq6X+vtSsaAO&Tf+Bl$vKnzc&%BHM z=loWOQq~n}>l=EL(5&6((ESsQC3^@4jlO5Od{qN#sWV)vqXw}aA>*uvwZopNN(|-T zRTF%5Y_k1R$;(d-)n;hWex{;7b6KgdAVE@&0pd(*qDzBO#YZV%kh%pYt1`hnQ(Fa& zYiDrOTDqk5M7hzp9kI2h!PxNnuJ&xl*zF8sx6!67bA49R1bmUF5bpK&&{eI0U~cH}PM z3aW1$lRb|ItkG5~_eBNu$|I|vYIdAA9a!pVq<+UTx*M}fG`23zxXp&E=FfnY- zEzKj;Cu_s4v>leO7M2-mE(UzKHL4c$c`3dS*19OpLV^4NI*hWWnJQ9lvzP4c;c?do zqrcsKT*i~eIHl0D3r4N{)+RsB6XhrC^;sp2cf_Eq#6*CV;t8v=V!ISe>>9kPgh}NI z=1UZutslxcT$Ad;_P^;Oouoa(cs!Ctpvi>%aQ+Zp=1d|h{W9Wmf7JWxa(~<#tSZ?C%wu4_5F!fc!<@PIBeJ)Nr^$bB6!_Gic_7}c3J{QI~Gg5g5jTp9}V6KYgrgaX>pJt}7$!wOht&KO|+z{Iw@YL|@~D zMww}+lG}rm2^peNx>58ME||ZQxFQeVSX8iogHLq_vXb`>RnoEKaTWBF-$JD#Q4BMv zt2(2Qb*x-?ur1Y(NsW8AdtX0#rDB?O(Vs4_xA(u-o!-tBG03OI!pQD+2UytbL5>lG z*(F)KacHqMa4?dxa(Vcrw>IIAeB$3cx#;;5r2X;HE8|}eYdAgCw#tpXNy7C3w1q`9 zGxZ6;@1G%8shz9e+!K2MO*{_RjO}Jo6eL3{TSZ>nY7)Qs`Dhi5><@oh0r)gT7H-?3 zLDsd^@m%JvrS8sta5`QiZNs^*GT}Hiy^zjK2^Ni%`Z|ma)D2 zuyumbvw$M8$haCTI~6M%d4+P)uX%u{Sfg4Al+F7c6;O-*)DKI7E8izSOKB#FcV{M+ zEvY0FBkq!$J0EW$Cxl}3{JwV^ki-T?q6C30Y5e&p@8Rd?$ST-Ghn*-`tB{k54W<>F z5I)TFpUC!E9298=sk>m#FI4sUDy_!8?51FqqW!9LN1(zuDnB3$!pEUjL>N>RNgAG~-9Xm|1lqHseW(%v&6K(DZ3Pano(1-Qe?3%J&>0`~w^Q-p&@ zg@HjvhJk?*hpF7$9P|gkzz`zBz_5Z!C4_-%fCcAgiSilzFQef!@amHDrW!YZS@?7C zs2Y9~>yqO+rkih?kXztzvnB^6W=f52*iyuZPv$c42$WK7>PHb z6%MYIr5D32KPdwL1hJf{_#jn?`k(taW?mwmZVvrr=y~fNcV$`}v(8};o9AjOJumS4 z`889O91^pkF+|@$d9wVoZ3;^j;^sUs&Ubo_qD&MTL%O z&*SE0ujG~zm;?x)8TLC&ft))nyI zcg44@*Q{cYT+qGrA=In_X{NNCD+B0w#;@g)jvBU;_8od6U>;7HIo@F*=g8CQUo(u^ z3r4FJ7#<@)MXO&5+DgKE&^>^`r!loe7CWE*1k0*0wLFzSOV8jvlX~WOQ?$1v zk$Or}!;ix0g78^6W;+<=J>z@CBs!<<)HvF(Ls-&`matpesJ5kkjC)6nGB@b{ii6-Uoho$BT%iJgugTOeZ$5Xo4D7Pd< zC*LJh5V@2#5%aBZCgzlQi3@<_!VfiL07ywc)ZbwKPfcR|ElQoS(8x|a7#IR}7#Io= zwg4$8S{egr-NffD)Fg&X9bJSoM25pF&%hf>(T&9bI}=#dPQyNYz;ZZ7EZ=u1n701SWKkZ9n(-qU ztN`sdWL1uxQ1mKS@x11;O|@^AD9!NeoPx}?EKIr!2>1Qq4gjfGU)tr6?Z5l7JAS3j zZeq{vG{rb%DFE4%$szK}d2UzB{4>L?Tv+NAlE*&Nq6g+XauaSI+N2Y8PJLw+aNg1p zbxr|hI8wcMP&&+(Cu|%+Jq|r>+BHk@{AvfBXKiVldN)@}TBS0LdIpnANCVE26WL-} zV}HJ^?m&$Rkq;Zf*i-hoasnpJVyTH__dbGWrB_R55d*>pTyl6(?$EO@>RCmTX1Hzr zT2)rOng?D4FfZ_C49hjMV*UonG2DlG$^+k=Y%|?Dqae4}JOU=8=fgY4Uh!pa9eEqf zFX&WLPu!jArN*^(>|H>dj~g`ONZhaaD%h_HHrHkk%d~TR_RrX{&eM#P@3x=S^%_6h zh=A)A{id16$zEFq@-D7La;kTuE!oopx^9{uA3y<}9 z^bQ@U<&pJV6kq7LRF47&!UAvgkBx=)KS_X!NY28^gQr27P=gKh0+E>$aCx&^vj2uc}ycsfSEP zedhTgUwPx%?;+dESs!g1z}5q9EC+fol}tAH9#fhZQ?q1GjyIaR@}lGCSpM-014T~l zEwriqt~ftwz=@2tn$xP&-rJt?nn5sy8sJ5Roy;pavj@O+tm}d_qmAlvhG(&k>(arz z;e|SiTr+0<&6(-An0*4{7akwUk~Yf4M!!YKj^swp9WOa%al`%R>V7mi z+5+UodFAaPdi4(8_FO&O!Ymb#@yxkuVMrog(7gkj$G@FLA#ENMxG)4f<}S%Fn?Up$+C%{02AgMKa^ z4SFGWp6U>{Q6VRJV}yjxXT*e`1XaX}(dW1F&RNhpTzvCtzuu;LMhMfJ2LBEy?{^GHG!OF!! zDvs64TG)?MX&9NCE#H3(M0K>O>`ca0WT2YR>PTe&tn?~0FV!MRtdb@v?MAUG&Ef7v zW%7>H(;Mm)RJkt18GXv!&np z?RUxOrCfs;m{fBz5MVlq59idhov21di5>WXWD-594L-X5;|@kyWi@N+(jLuh=o+5l zGGTi~)nflP_G}Yg5Pi%pl88U4+^*ihDoMP&zA*^xJE_X*Ah!jODrijCqQ^{=&hD7& z^)qv3;cu?olaT3pc{)Kcy9jA2E8I)#Kn8qO>70SQ5P8YSCN=_+_&)qg)OYBg|-k^d3*@jRAeB?;yd-O1A0wJ z?K*RDm|wE<(PBz~+C%2CTtzCTUohxP2*1kE8Of~{KRAvMrO_}NN&@P7SUO{;zx0iK z@or9R8ydYOFZf(cHASCAatL%;62IL27~SmASr(7F&NMr+#gNw@z1VM z_ALFwo3)SoANEwRerBdRV`>y`t72#aF2ConmWQp(Xy|msN9$yxhZ1jAQ67lq{vbC5 zujj|MlGo`6Bfn0TfKgi(k=gq0`K~W+X(@GzYlPI4g0M;owH3yG14rhK>lG8lS{`!K z+Nc@glT-DGz?Ym?v#Hq|_mEdPAlHH5jZuh*6glq!+>Lk$S%ED2@+ea6CE@&1-9a?s znglt|fmIK}fg<9@XgHe4*q!aO<-;Xj$T?IzB-{&2`#eA6rdtCi80mpP&vw(Uytxu$#YzNI_cB>LS zmim>ys;ir;*Dzbr22ZDxO2s;671&J0U<9(n1yj)J zHFNz=ufPcQVEG+ePjB<5C;=H0{>Mi*xD>hQq8`Vi7TjJ$V04$`h3EZGL|}a07oQdR z?{cR(z+d>arn^AUug&voOzzi$ZqaS)blz-z3zr;10x;oP2)|Cyb^WtN2*wNn`YX!Y z+$Pji<7|!XyMCEw4so}xXLU)p)BA~2fl>y2Tt}o9*BPm?AXA8UE8a;>rOgyCwZBFa zyl42y`bc3}+hiZL_|L_LY29vVerM+BVE@YxK>TGm@dHi@Uw*7AIq?QA9?THL603J% zIBJ4y3n8OFzsOI;NH%DZ!MDwMl<#$)d9eVVeqVl(5ZX$PPbt*p_(_9VSXhaUPa9Qu z7)q4vqYKX7ieVSjOmVEbLj4VYtnDpe*0Y&+>0dS^bJ<8s*eHq3tjRAw^+Mu4W^-E= z4;&namG4G;3pVDyPkUw#0kWEO1;HI6M51(1<0|*pa(I!sj}F^)avrE`ShVMKBz}nE zzKgOPMSEp6M>hJzyTHHcjV%W*;Tdb}1xJjCP#=iQuBk_Eho6yCRVp&e!}4IBJ&?ksVc&u#g3+G$oNlJ?mWfADjeBS-Ph3`DKk-~Z70XugH8sq2eba@4 zIC1H_J$`9b$K`J)sGX3d!&>OmC@@rx1TL~NinQOYy72Q_+^&Mg>Ku(fTgaXdr$p_V z#gav1o{k~c>#)u3r@~6v^o)Lf=C{rAlL@!s457pq)pO;Cojx7U{urO4cvXP|E>+dV zmr2?!-5)tk-&*ap^D^2x7NG6nOop2zNFQ9v8-EZ{WCz-h36C)<^|f{V#R_WE^@(T0+d-at5hXX{U?zak*ac-XnyINo+yBD~~3O1I=a z99|CI>502&s-Qi5bv>^2#cQ%ut<4d7KgQ^kE|=%6#VlGiY8$rdJUH{sra;P~cyb_i zeX(kS%w0C?mjhJl9TZp8RS;N~y3(EXEz13oPhOSE4WaTljGkVXWd~|#)vsG6_76I)Kb z8ro?;{j^lxNsaxE-cfP;g(e;mhh3)&ba}li?woV2#7ByioiD>s%L_D;?#;C#z;a(N z-_WY<=SH42m9bFQ>Nb z@4K$@4l8pD7AKxCR>t0%`Qoy9=hA?<<^Vcj8;-E+oBe3ReW1`el8np8E$k{LgFQ}2 z2t8a`wOXFdJ9!5$&mEfD1CnJ)TB+RJih88-Zos9@HZ# zL#{qfbF0ARTXkR@G{lwlOH~nnL)1jcyu!qv2`57S&%oKz0}r{~l9U_UHaJ5!8#nrs z?2FrL`mxnzu&{bweD&62)ilz*?pYIvt`T!XFVVA78})p1YEy7 z8fK#s?b~Yo$n7&_a?EBdXH-_W)Z44?!;DFx6pZ?~RArtBI*Qm4~6nX6Z_T*i$bQPE;Qz?DAPstpGSqr-AJ zo%m9cA`oDDm?&dTaoh_>@F>a?!y4qt_;NGN9Z<%SS;fX-cSu|>+Pba22`CRb#|HZa z;{)yHE>M-pc1C0mrnT~80!u&dvVTYFV8xTQ#g;6{c<9d!FDqU%TK5T6h*w*p980D~ zUyCb`y3{-?(mJFP)0*-Nt;mI$-gc4VQumh|rs&j_^R{sgTPF`1Xja2YWstsKFuQ(d zmZMxV$p$|qQUXchu&8%J(9|)B?`~rIx&)LqDS>ob5%gTeTP#Sbny#y*rnJ&?(l=!( zoV~}LJ1DPLnF8oyM(2ScrQ0{Q4m4-BWnS4wilgCW-~~;}pw=&<+HggRD_3c@3RQIr z9+-%!%}u_{`YS=&>h%kPO3ce}>y!d-zqiniNR-b5r97u;+K6HA2tS>Z#cV{+eFI`* zd8RMGAUtX1KWfPV;q<-5JAykS+2sY$2~UX+4461a(%{P#{rwFPu0xpIuYlbgD{C7C z=U{FUarVTYX6ZUq3wE@G^QT4H2Re;n$Fz9cJ>hABl)9T8pozqbA1)H-%1=WKm^QMu zjnUZ&Pu>q+X&6Co*y#@pxc-4waKMInEPGmE_>3@Ym3S*dedSradmc5mlJn`i0vMW6 zhBnGQD^Z;&S0lnS0curqDO@({J7kTtRE+Ra?nl^HP9<)W&C>~`!258f$XDbyQOQXG zP8hhySnarOpgu8xv8@WlXnm(Uk~)_3$Sg0vTbU3 z{W!5B(L3{Yy3K5PN<@jEarAtja`}@KYva&zFRF*s+_%jIXh$T(S=an8?=Ry3H*NRqWgsM`&!#|@kf1>=4q%bFw7^Rhz!z5I zyI^zU8_R1WN9`88Z=n>pIZQ`Ixr~_9G%Q}@A7rd#*%y7G zXl^Id=^ZL?Rx}}gWXCqzj9C6;x(~mAH|$JteXa1MH<6UQig@!Hf~t}B%tP0I|H&;y zO6N0}svOa1a^PyP9N5?4W6VF%=Bj{qHUgc8@siw4bafT=UPFSoQqKgyUX>sXTBZ=x zOh^Ad!{kOM9v{%5y}`-8u*T&C7Vq6mD%GR}UeU(*epO&qgC-CkD;%=l)ZuinSzHM` z{@`j&_vC6dDe{Yb9k@1zeV_K6!l(@=6ucoI=R^cH=6{i71%4W3$J-?<8Qn#$-DMtA z6Qqi)t?4ifrt%3jSA#6ji#{f(($KBL-iQh-xrC||3U3lq`9>r)>X%oLvtimuHW-)} zy}>9~|M>w4eES`g7;iBM%Se5-OP%1U6gNWp3AZqT8C6OlFFfQ$|7LL;tBV)(qlp4K zruar^K8FnJN3@_}B;G`a~H`t|3+6d>q3#`ctTkE-D^1#d9NalQ04lH*qUW2!V zhk7#z8OwHhSl8w14;KctfO8ubZJ4$dEdpXE78wABz=n5*=q9ex3S}`e7x~~V-jmHOhtX2*n+pBslo3uosdE7xABK=V#-t{1Hd~?i z{i~%Bw6NYF+F$aK$M`r#xe=NxhA5=p%i7!$);sd>Q}#`G?Q~fygrMXmZw?0#5#17W}6Tj+&kFexG{!mYl5FoA99}3G9l;3lVQ^ z48^~gsVppE*x91WheqI(A%F0Z#$#1UJP1R12Mj9r)y(A?a+iquX+d8WD4WAQJ_!oq z9rTISr7bPd(GTP57xm$}C}&kjMivi;zi^Y9g3&X0A;ovdJ?{%_wHgt%%9P&N4H z^XzV(uNA4 zAP`hgP6BEN5`YXh|DF~6Pud?~gWfhUKoPX4>z|}0aocC&K+AoV%|SX*N!wGq3|y< zg4lP(04XIPmt6}$N!dTk+pZv>u;MTB{L4hp9uXk7>aS!6jqM2lVr%{)H3$O127TSZ z0x9hi0k-P?nWFdQ0K`pykqUIT&jD~B0tHP{ffS(}fZ(aW$oBWTSfHO!A^><6vA?qar%tzN-5NQO zL&|F{nGiQyzNJ+bM$Y`n=Lx^3wTG^o2bGB@cwr1eb+6c-1tN=U+Db;bc~eJ!hwM{SbI=#g?$!PjDB+) zPgU_2EIxocr*EOJG52-~!gml&|D|C2OQ3Y(zAhL}iae4-Ut0F*!z!VEdfw8#`LAi# zhJ_EM*~;S|FMV6y%-SduHjPOI3cFM(GpH|HES<}*=vqY+64%dJYc|k?n6Br7)D#~# zEqO(xepfaf2F{>{E2`xb=AO%A<7RtUq6kU_Iu0m?@0K(+<}u3gVw5fy=Y4CC*{IE3 zLP3YBJ7x+U(os5=&NT%gKi23bbaZ`@;%ln)wp4GpDUT$J8NtFDHJzIe_-t}{!HAsh zJ4<^WovY};)9IKAskSebdQiXv$y5}THuJZ}ouoElIZRui=6lrupV|_Jz=9^&;@HwL;J#@23k?A;k`0Bgf;ioO>W`IQ+4? z7A)eKoY4%+g%=w;=Vm8}H>@U*=*AWNtPqgWRqib#5RTGA@Q=43FrQn3J`GkTUV5yp0U`EOTqjfp+-9;0F8!dMEwwcK%(6`8sDD^aR04 zd6O5vh|Xk?&3dy4f|1QK&Ulf{h6Iq;d-&*ti#Ck>wZFG;GHwc?b;X~eBITx49>2d8 z4HcK&1&DvEGT6kXdzAm4oO8%c}8OBt~8H956_;YP-ss*uMf==a+%w~F>Qkm7r)IAuxuoX}h92$gHqbFUun#8m zWHdy`Zrm#=Pa98x8cO0vd@Tgkr*lm0{dky+Gocr0P8y%HGEI#c3qLqIRc`Oq_C%*; zG+QTr(#Q|yHKv6R@!DmLlwJQ3FAB)Yor-I4zyDyqM4yp5n2TrQH>gRt*Zw0+WI-Sj`EgmYHh=t9! zF6lz^xpqGGpo6!5`sc0a^FVhy_Uxq|@~(1@IIzV)nTpY9sY`CV!?8e&bB8=M&sYEb z2i}fvKdhp9Hs68Y-!QJ<=wE(iQ5+49tqt;Rh|jhYrI5VW-mIz|UY{h8E=rC5sh#DU z?wGgk-Tn!I?+Zer7pHlF_Z^!Kd1qkS3&lv#%s6-<5Y%jQL${cge5=G5Ab?D&|9$Y~ zf%rJC2+=2vg;y0-SJb3<@3%}BO$T$C66q$L_H33a`VUbgW~N(4B=v5(<=My|#|J7q z*Ox4wL4kbJd_~EjLTABSu4U7Jk#`y(6O*U6(k6XxM}CtGZB(H@3~kh*zaGRXM}Iwp zQ%xFk2>@wiZrVCV_G4G~v;NebCQ%T7{SDyPpSv&dT@Cn)Mx@IK*IdNrj{*4pkV4wv z)y0J538h>cpB7iPSzA~x24T`{dzNkpvGIqvt1Dvdq@o-`B=$hkczX8$yFMhsWNK-X zxr$kR$tMD0@W)Vxe1^t9qVmsg&K^F@u84)(n2dttIEAZFN6VD$&tskpG%SI7whGL3 z)DeRiwe&?8m7U{G`oW8!SCi*dM>oYL%UKQnKxV_0RXAEBQg1kStExGEUVwLJ0orGGwb7uv+kPDl7_E2*iD|J*=8A@;XCvwq0aw5oJYN*Yh&o=l} z2z8YKb-fIAH5spql4eXqp*)o2*b>#1@DSt?zZi{GPj0gH&Nm+EI<3^z0w%YTEV4xw zI6$+=Faa|Y4o5i0zm5lOg|&tmnJ806DBovU@Ll6XsA;NRrTK~t*AAJIAS=v-UZ%Pr z$oddI@NRir&erzCwq|)ciJemr-E061j{0Vc@Ys7K(mW|JYj*$+i1Q8XlIK8T?TYS(AXu$`2U zQ@fHxc=AVHl_}cRZQ)w0anMEoqRKKIvS^`<-aMf*FM`NsG&Uowneo+Ji$7DUDYc7*Hjg;-&aHM%3 zXO6cz$$G};Uqh+iY7Wpme>PHG4cu(q;xyskNLs$^uRRMfEg?8Cj~aE-ajM%CXkx0F z>C?g3tIA#9sBQOpe`J+04{q7^TqhFk^F1jFtk4JDRO*`d-fx`GYHb=&(JiaM1b?Y^ zO3Kj3sj76ieol|N$;>j@t#tKj=@*gP+mv}KwlTcPYgR$+)2(gk)2JNE=jSauPq!$< z<|?Sb%W)wS)b>b6i{8!x!^!xIdU3{CJFVnTcw0j{M%DUCF=_>eYYEUWnA-|B(+KYL z_W_`JI&&u^@t0})@DH^1LDuT0s3dMpCHIbYBgOT4Zh_4yHbSqRbtIKndeT4Q*Jg91 z@>rO!^t-G~*AIW;FQ$3J=b;oGg8?CTa~qNCb>&cgp@e;?0AqA&paz~(%PYO+QBo4( zp?}ZdSMWx0iJm7HVNk9A#^9Osa#GPJ!_pYEW}($8>&2}fbr@&ygZ?${A7_9?X$(&5 z#~-hxdPQwCNEpf=^+WH-3`2LxrrBMTa}~qJC9S;VzhG!On^JLyW6WkF{8aAE$sM+( zxr8xLW(KIjI`Rm(24r3OJBk<3GF=G!uSP0-G&AY32mLm8q=#Xom&Pqv=1C{d3>1^ zAjsmV@XZ%BKq^eUfBpa8KvO8ob|F3hAjJv*yo2Bhl0)KUus{qA9m8jf)KnOGGTa6~4>3@J_VzkL|vYPl*uL+Ot*Q7W!f5rJw5+AsjP_IfL+-S*2p| zB7!FhjvkUTxQkGWGSg{X;h~dK>gAJivW?88Nu!3o>ySDaABn$rAYt086#27fbjPQS zhq>55ASvm*60qRdVOY9=bU^+{Pi#!OaZwENN;zy5?EztOHK-Q5;rCuiFl}BSc1YaQ zC-S{=KsGDz@Ji9O5W;XxE0xI|@3o6(2~i4b8Ii9VT;^G$*dRw(V?=br)D&q^XkeBX z+gl~+R@rVD-Hwv@7RHV?Bip5KMI)aV^&snt?H<$Nt=OPx#VxF&BGi?2A2+lNOYywNUGMeGL;|(=UjGDtLG0sN&LpGx;|U;xa13s z;W_|SPk^G}!M9_^pO zA3bt3-tca%^42sHeDtfcC0S3w3H1ny!Bxpa=*k?XRPpx9Bb-gx1J9Yvx)4J(8cG+q z(iCPZ9dsf3#QVyZgD_MW#G#qgV)olu$59&3(PzQfw@%4uZ~<5J=ABvdY43(Qnp{;G zHg3>@T#>DbTuhFl3)fb3TFqdh)V2aq7!;&JOHseTWukvA7}(iGUq;v-{2J0iHSNHq z;+)h!p6Ok^+Sp8-jgL($n6Qu47xyE`cFO5SdZR6;R!FET`tm#0D37z339Suxjpv+s z*=%2-N$N?X&0?x_uut3erF@aBGj;9$k9?3FlbDO{RQa1_qtxrh4!4#fjp4x~akvdTp@ zos?^Q&XE;3N93s4rHQGPrV7+au1$$aB6$hLy*Yz_kN$~dweb9PcB!eYVQTGjFuJP> zZCEwBtb>TIgIO^qAzq@Bv-qud_ZD-2W<_at&ml-gv`tPt$@DF5`HlA zM>DmmMkpv&Zm-8)Y#0bLQf4MpD4_-7M8eu6rh(tL8dq8onHs#R9J~dGd2IaXXMC~h z91pKhnQa%Fsn29nAA1;x(%oC zhca~qQDJaMf?wFrl-Pj;e$bZMYmMF!Y3Lv&Sb?Sjn#!NVx&NDyc^$b4uYyo2OmERa zRz;yDGd@JTykzFLe|Wk-y7#3x`6$wt$zR8r48mdUvfbeL+4D|Z``~7$PrE@qc7rZe zVsIoIbCwzjLZ@_M1*bD{HaYn();Z1-q*-I{tEnTZ(}Zmk&%MXSNBX>o| z-u*RNkAyKC-Srp7c-=@5f)xMWg>o2WWl}j6j9=8+D8;T z>0*0q#;qw8%U8i;6s0fu#I*%(g*@@a2Er@@nyI}{=@W{Z-;`=wN4N~>6Xrh&z#g}l zN1g5}0-#(nHUTv_rl2{yUZ;h#t&Fd?tY!7L%ClY)>uH-Ny2ET$lW$S)IQiN79H)D^ zb&0AXYkupy0~w8)*>Sj_p9}4L?lGTq%VG|2p`nWGhnM^!g|j-|O{%9Q%swOq63|*W zw$(N_laI}`ilB+o!a-wl?er~;;3+)$_akSQ!8YO_&-e*SI7n^(QQ;X0ZE`{4f!gAl z5$d+9CKVNonM!NO_frREICIAxOv)wm>}-k?iRisM`R7;=lyo|E_YR~FpS&PS`Lg0f zl-ON<0S%Uix8J%#yZdkCz4YNhcec<|7*P(JsM#>-L>+tYg_71q9~70FAc^6KW5jql zw!crdgVLH1G_eET=|SEc977;)ezVC|{PJZfra|}@rD;0s&@61mTEBJtILllg{%{vN zfhb&lq0yChaLhnJ-Qb62MB7`>M;|_ceHKZAeeh@#8tbrK!ArP6oXIhMK;dhEJTY`@ z0Tq>MIe0`7tGv)N*F0IGYSJv0vN?Az8g+4K9S!pW2~9F4W(_U_T=jCZrzuZ3*|__T zONp_UWmyePv8C~rckc?Xji;Z5OEqg zC*Um)i;Wh4TEwqReQdVVbUKT^2>Tpi6z_^-uF*adUFug4i@JhzpWT^Sk&E>CyP2?H zWf6x}ehuTs6wvzCnTU&gYzT029Nz19(In1WC z`(1IGmi!O%2AR|BjQa4Q0~u)kM%}?xQyjWuQ16^Gp++;`vr7!k--UZWM*~7Zl|ceO@I3`OpaRhD;YoCuo5IC0uHx>9 z478hu@H|e0Zlo)Zj@01#;8BDs@991xe~^9uG2}UXLM(m7fa}AMwX*tjioBeV&Q8Gx zSq$6wZFkRBK`cMI>R(@W@+lo2t)L+4q-negWRLWZBz*|%=W4v62JrmzNuOtA*x)QE z5L%=OH#@KMdB%Jp^r?0tE}5-*6oP`-lO7Sf)0)n*e<{HA=&qhLR)oD8-+V}Z4=md) z+k9lKf64DB2hAT)UaCP~di?-V3~JBH7itYyk~L6hrnxM%?RKntqd`=!b|e7eFnAcu z3*V;g{xr7TSTm$}DY%~SMpl>m{Sj!We+WfxSEor?YeiAxYUy25pn(?T()E>ByP^c@ zipwvWrhIK((R((VU+;@LmOnDu)ZXB3YArzzin!Z^0;PyJWnlfflo|q8(QY;o1*5CO z##hnkO{uynTMdk`~DOC#1 zdiYxQoy}=@7(ke#A8$YZZVtk4wo$8x28&I;cY3Ro-|kW=*yiiHgCLZeAr)UtVx>Tu z|LvL0hq|1-jC0I4x#>&QZCfrVB=zT!nR|~Uz`9%~2 znl{uZ{VEszW`Fad^q_HB!K9*|U-stK%?~;g?&&+12A}Rq$z($Bzuk^2X(Y=hF?-dQ ztc3DsQKI;qhWIV`99Q#R3xnU0AvY!i*BECj-z9l74|%O=V@nlv|qqC^r^-~C?E zGW%c|uYgnfJ(gjsTm_cIqcv*mYM{+i+&@F@+69ZQOK&u#v4oxUSQJ=tvqQ3W=*m;| z>SkBi8LYb-qRY7Sthh*0%3XAC%$z1rhOJzuX=PkTOa=DlocZUpE#KxVNH5)_4n=T( zGi3YrH7e~sPNYVBd~Grcq#CF~rN{p9Zza-Ntnwfma@TB)=3g36*0lSZg#ixEjFe%+ zX=&LDZ5zqculZ`=RYc^ln(~;nN|Qh6gN=!6f9-N2h+3NWbIxYud&;4SX*tWf5slk4 z{q@@l71UAZgj~*6edXb57fBUxvAS7s(RI=X868JM0+^DCn2yC>;v%S;qPOjB>YVsz(Zx9a>>BK&M zIQK>7_n)4ud0X5YM}^i*keH{ehLsiy9@NvOpsFeQjdI6anLGvVbBw_*fU1TzdVS$i z*4j7z!I5RF#rSz|8ibi$;qE{4`aqWYik7QB5U&F5C*;TO_x+gtzPGpzNt!7~nsBT7)Ckc(K~%uv&{{6A`mmBJVAk-{s~52Vu|HbCH7_W1~ZCX^RflOakGg=jo2Z z<*s;5-J+2@^LRDZ-7EV&Pq+FTErw@pfFqvx^i%E7Fx#^n(E`m2(c>K-O5`M`Yek9el zzTGs5qD6*G;y#~xu3>qWuO?-amKYtvRA}I9z#UspEeM;wOERYeot_n_EUMJf$4_u?E!6X~?q)tPoZb^_;8Y_Ox2h1m<+Le-fsRd|T8db<8#$bqez zua^Z|>h%zdnuU^ww$#-dZ9NTM`FN+!IlLkz*FqWb!x^Z|C{KyGjZ+>G;;7Mb@LY|H zc+Gp`L((Dw7pnDlHNm&;SfHedhx*kad$I^uGz{`0BYelq0yEUHpNKSkvj$|dpvY3{7*YGyhXA^LP0&wOw9oNoC=QoVx1<2Dne8qqZL zm>nFh5DX(-RnQwvHCZQwn^#Z=E!SPVlaRJ78Bo@}!!9dRt^qZy?-*`Pt4WSmgucJv zV1yFkcjlEM^uz-;b#Q7ZCP@Lk)m}uPX={R4B=56k7WNh11BN~0T*vr@!!ow^B0hOR zQ)4)&(e%>bNNL%bm<&8H{*l_L7s0$2GUgX2Vd;=4d9Dm2v3TaL+;L>{K7h7 zV#k?xDPm(NDE31$ z<}|X)pEY6myjK+^gaIMk&Yj2~F0rSKemNqlsVm4c|N7mp_C*L01s;GNx#D-*&gk!qQr}^?_r@q!8fuXw!)fA7xkd} zb>vHvdx~H$5qqAWrow7}+8zBM65-JOt5z za=T6f7MK`XJuQog8kIEboPdhcaVJeHy)5z7EBLK5NRr()E|#K0L0N^JD@pUA^Czb` zbUZ_558y+vqAGeyHCbrvOvLD67Ph}06959VzQ_|>RrXQAqE+AQ(-AaKdxoWaF8hdt z{O3W@b^*o#-f1VuU>YMV03ELF7zkCN4Q&b#prz%3Nne0lSbRo@@ z^ihv%oIl~Qyl6Q;a#$*jOC%x0_;eis*)J7=f@Ct*)xF5 zo}u~@-I}2|$b%5L7>@+Z?4o+1r&v6ceIy+vroK&jCQ<4q&45HP2wCol4hVm3pZtjf zHz1D7oyaSKJ~T{Gx}7ONLA)D5k(%%`WswrDyzX*rn}i}}TB4^y#@mAwPzoC)`?rYv zHgx|trUN#mu*VzUV~8TnJM2Qh*ZM5B{x&y>5An`(M7=Z*Q>TdiH@j*2=moNuOtvpz z+G`@~-`%~+AgPKgke@XiRPgndh@bp*-HRsh;HTtz@-y_uhb%7ylVOTqG0#u?Vn5c5 zEp*XRo|8hcgG^$#{$O9CJ&NE;TrfRpSnLmes&MO{m=N%zc`}gb!eQ7odl$oy1%PI} z#AIxx%oRVy&{O~9xnK4$EY>(eQj}!HKIV$Fz*H=-=Kn)N0D6u`(;iO|VraI4fu_W` z;b5{7;Lyx4za}DU#+U7}=H0dAS#YJJ&g2!P@Htu-AL&w=-)*%P9h2{wR|@?Ff9~)b z^+e_3Hetq7W%ls{!?<6&Y$Z;NNB41pvrv)|MET6AZXFXJeFqbFW5@i5WGzl?bP+~? z*&_puH;wKv2)9T_d+P`bLvJFqX#j&xa*-;0nGBbQf0DC>o~=J_Wmtf*2SZQr?{i~X z9-IbRH8{iy?<0v9Ir1?$66+igy|yDQ5J~A9sFX@Pe<*kCY8+MwH?I z`P}zfQ6l^AO8ehZ=l^ZR;R%uu4;BK*=?W9t|0{+-at(MQZ(CtG=EJFNaFMlKCMXu30(gJUqj5+ z`GM|!keqcj;FKTa_qq;{*dHRXAq157hlB@kL#8%yAm2AgfU|*rDKX@FLlp=HL8ddv zAWLCHe@DcDeB2}fl7#=0+#<05c3=VqM*O3bkr@9X4nO|)q0hU;Gye{L8ZN*NH8Id@mP-u;Fmb8YuorjLrW&ndip8CN%_qp982r w1WEnz9^$&s1hkp_3#lPJQ~!HI7WYYjA7>z!`?f%npAh2%rB@vD|Lau$2O)#1n*aa+ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb879..aa991fce 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew.bat b/gradlew.bat index 107acd32..ac1b06f9 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,89 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From d5d78faa61c4042567db7322151b54aa12404a1d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 May 2022 01:18:51 +0200 Subject: [PATCH 259/621] Bump gradle from 7.2.0 to 7.2.1 (#707) Bumps gradle from 7.2.0 to 7.2.1. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fc994e64..2496e403 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' + classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' classpath 'com.google.gms:google-services:4.3.10' From 02de7408f97c2e730b3aaf6c7a0a7a8ae0a9f4fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 25 May 2022 23:20:50 +0000 Subject: [PATCH 260/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0d7e0641..6585b9f5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.38.1' - versionCode 144 + versionName '0.39.0' + versionCode 145 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 619101699911a29dfc3339ee65d8702ff488e70e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jun 2022 09:30:32 +0200 Subject: [PATCH 261/621] Bump firebase-crashlytics-gradle from 2.8.1 to 2.9.0 (#711) Bumps firebase-crashlytics-gradle from 2.8.1 to 2.9.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2496e403..23ef8d34 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.firebase:perf-plugin:1.4.1' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0' classpath 'com.google.gms:google-services:4.3.10' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From 1680bcdd060fc71333e2d3aaec900310dac7174e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jun 2022 07:37:00 +0000 Subject: [PATCH 262/621] Bump coroutinesVersion from 1.6.1 to 1.6.2 (#710) Bumps `coroutinesVersion` from 1.6.1 to 1.6.2. Updates `kotlinx-coroutines-core` from 1.6.1 to 1.6.2 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2) Updates `kotlinx-coroutines-core-jvm` from 1.6.1 to 1.6.2 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2) Updates `kotlinx-coroutines-android` from 1.6.1 to 1.6.2 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2) Updates `kotlinx-coroutines-test` from 1.6.1 to 1.6.2 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 717c64f8..9bd03e45 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,5 @@ ext { - coroutinesVersion = "1.6.1" + coroutinesVersion = "1.6.2" coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" From e3a966ab1d0a6a621201cab9d5956abd294dd16e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jun 2022 23:26:46 +0000 Subject: [PATCH 263/621] Bump firebase-bom from 30.0.2 to 30.1.0 (#712) Bumps firebase-bom from 30.0.2 to 30.1.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6585b9f5..2bb56462 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.0' - implementation platform('com.google.firebase:firebase-bom:30.0.2') + implementation platform('com.google.firebase:firebase-bom:30.1.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index ae0493c3..4719ddf2 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.1' - implementation platform('com.google.firebase:firebase-bom:30.0.2') + implementation platform('com.google.firebase:firebase-bom:30.1.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 0007dcbb2bbe25dff5d76ed52eaf5543b53fb127 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 3 Jun 2022 01:34:31 +0200 Subject: [PATCH 264/621] kapt.use.worker.api removed (#713) --- gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 949f1023..991a48fd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,6 @@ org.gradle.daemon=true android.useAndroidX=true android.enableJetifier=true kapt.incremental.apt=true -kapt.use.worker.api=true org.gradle.caching=true org.gradle.configureondemand=true android.nonTransitiveRClass=true From abd6d83674819271d77695c9cef9f283df507643 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 3 Jun 2022 01:42:55 +0200 Subject: [PATCH 265/621] Disable Jetifier (#714) --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 991a48fd..7a27f7e0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3072m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro org.gradle.parallel=true org.gradle.daemon=true android.useAndroidX=true -android.enableJetifier=true +android.enableJetifier=false kapt.incremental.apt=true org.gradle.caching=true org.gradle.configureondemand=true From d439c598e0802dc57bbbad33bfe15833bd8d95f1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 2 Jun 2022 23:44:41 +0000 Subject: [PATCH 266/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2bb56462..362d5399 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.39.0' - versionCode 145 + versionName '0.39.1' + versionCode 146 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 2dde5e74dc20a9615214ed9af1f4be58bf2cf14b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jun 2022 11:04:49 +0200 Subject: [PATCH 267/621] Bump core from 1.7.0 to 1.8.0 (#715) Bumps core from 1.7.0 to 1.8.0. --- updated-dependencies: - dependency-name: androidx.core:core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 362d5399..5d4976ed 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -116,7 +116,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' implementation 'androidx.media:media:1.6.0' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index b32ae561..905791a8 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.3.0' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.1' implementation 'androidx.fragment:fragment:1.4.1' diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 62211251..320b4fdc 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation coroutinesJvm implementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index 951d9ad1..c172198f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,7 +27,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index e25c93e5..cb2a2068 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -22,6 +22,6 @@ dependencies { implementation dagger kapt daggerAnnotationProcessor implementation 'androidx.browser:browser:1.4.0' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 77beeef7..d203f996 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation dagger implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.0' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4719ddf2..d419d620 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.1' implementation platform('com.google.firebase:firebase-bom:30.1.0') diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index a782cba3..29474873 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 198e68f7..afa948cb 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.core:core:1.7.0' + implementation 'androidx.core:core:1.8.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' } From bc82f42ea364585a74df81aae4516d44e673e195 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jun 2022 09:11:36 +0000 Subject: [PATCH 268/621] Bump appcompat from 1.4.1 to 1.4.2 (#716) Bumps appcompat from 1.4.1 to 1.4.2. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/users/build.gradle | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 310a6230..74441995 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" diff --git a/app/build.gradle b/app/build.gradle index 5d4976ed..b2912e9b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,7 +113,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.8.0' diff --git a/core/build.gradle b/core/build.gradle index c172198f..2aadba90 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' implementation 'androidx.annotation:annotation:1.3.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -42,7 +42,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.6.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index d48d089a..1eaf70dc 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index d6e72a6d..1f0d8940 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index d203f996..bd6125c6 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index d419d620..f49b3b3d 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation project(':feature:identity-api') implementation 'androidx.core:core:1.8.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation platform('com.google.firebase:firebase-bom:30.1.0') implementation 'com.google.firebase:firebase-perf' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 243a5e1b..3676ab0d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.android.material:material:1.6.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 23c54fca..ae2f0fe7 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 29474873..30220ed3 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' kapt daggerAnnotationProcessor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 437ee314..e8a543e3 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation coroutinesCore implementation 'com.google.android.material:material:1.6.0' - implementation 'androidx.appcompat:appcompat:1.4.1' + implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' From b31620b912937d9e70a3b2df8c0e09f5b0ef539f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 9 Jun 2022 09:20:14 +0000 Subject: [PATCH 269/621] Bump material from 1.6.0 to 1.6.1 (#717) Bumps [material](https://github.com/material-components/material-components-android) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.6.0...1.6.1) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 74441995..63e511fc 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation retrofit diff --git a/app/build.gradle b/app/build.gradle index b2912e9b..f9a62b6d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -126,7 +126,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:4.6.4' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation platform('com.google.firebase:firebase-bom:30.1.0') implementation 'com.google.firebase:firebase-core' diff --git a/core/build.gradle b/core/build.gradle index 2aadba90..d3a51b7f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 1eaf70dc..0a5c1bbf 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' androidTestImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index bd6125c6..37809c87 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation coroutinesJvm implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 3676ab0d..38ef78f8 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -36,7 +36,7 @@ dependencies { implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.9.0' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index ae2f0fe7..68f79750 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':feature:ui-common-api') implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index e8a543e3..50d14f2d 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation coroutinesJvm implementation coroutinesCore - implementation 'com.google.android.material:material:1.6.0' + implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' From ba0e93fdbb0f8ca712bd11a60268f8f80dad2b8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 12 Jun 2022 13:47:12 +0000 Subject: [PATCH 270/621] Bump assertj-core from 3.22.0 to 3.23.1 (#719) Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.22.0 to 3.23.1. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.22.0...assertj-core-3.23.1) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/identity/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f9a62b6d..b26317a9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -154,7 +154,7 @@ dependencies { androidTestImplementation espressoIdlingResource androidTestImplementation androidTestRunner androidTestImplementation androidTestRules - androidTestImplementation 'org.assertj:assertj-core:3.22.0' + androidTestImplementation 'org.assertj:assertj-core:3.23.1' androidTestImplementation project(':core-testing') androidTestImplementation project(':core-android-testing') androidTestImplementation coroutinesJvm diff --git a/core/build.gradle b/core/build.gradle index d3a51b7f..73dcaaca 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -51,5 +51,5 @@ dependencies { implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 0a5c1bbf..08916eed 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -36,5 +36,5 @@ dependencies { androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore - androidTestImplementation 'org.assertj:assertj-core:3.22.0' + androidTestImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 1f0d8940..6cd3d28d 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -29,5 +29,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index d97b26e7..0f8e68d3 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -14,5 +14,5 @@ dependencies { implementation dagger testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index f49b3b3d..fc5d2356 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -35,5 +35,5 @@ dependencies { implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 38ef78f8..0565092d 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -46,7 +46,7 @@ dependencies { testImplementation okHttpMockWebServer testImplementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 68f79750..3b8919fc 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -34,5 +34,5 @@ dependencies { kapt daggerAnnotationProcessor testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 50d14f2d..81d895a8 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -55,7 +55,7 @@ dependencies { testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.22.0' + testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation 'androidx.arch.core:core-testing:2.1.0' testImplementation okHttpMockWebServer testImplementation project(':core-testing') From b43bf98e6b612caf52ad5388dbce7496eaeaee6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 12 Jun 2022 17:21:16 +0200 Subject: [PATCH 271/621] Bump kotlin_version from 1.6.21 to 1.7.0 (#718) * Bump kotlin_version from 1.6.21 to 1.7.0 Bumps `kotlin_version` from 1.6.21 to 1.7.0. Updates `kotlin-gradle-plugin` from 1.6.21 to 1.7.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) Updates `kotlin-stdlib` from 1.6.21 to 1.7.0 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/commits) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Add excessive when Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- .../java/com/jraska/github/client/users/ui/UsersActivity.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 23ef8d34..9e8372cf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.21' + ext.kotlin_version = '1.7.0' repositories { google() mavenCentral() diff --git a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt index 38d6e2fc..f9f992e1 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/ui/UsersActivity.kt @@ -31,7 +31,7 @@ class UsersActivity : AppCompatActivity(), UserModel.UserListener { showProgressIndicator() - usersViewModel.users().observe(this, { this.setState(it) }) + usersViewModel.users().observe(this) { this.setState(it) } } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -72,6 +72,7 @@ class UsersActivity : AppCompatActivity(), UserModel.UserListener { when (state) { is UsersViewModel.ViewState.Error -> showError(state.error) is UsersViewModel.ViewState.ShowUsers -> setUsers(state.users) + else -> return } } From f3db34de0eab546d8fb11b58f4fbf7e1c10614fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Jun 2022 15:23:18 +0000 Subject: [PATCH 272/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b26317a9..7643b637 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.39.1' - versionCode 146 + versionName '0.40.0' + versionCode 147 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From b58179059f107646fa9f105b8a4e5c08c307031e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 01:02:41 +0200 Subject: [PATCH 273/621] Bump okHttpVersion from 4.9.3 to 4.10.0 (#720) Bumps `okHttpVersion` from 4.9.3 to 4.10.0. Updates `okhttp` from 4.9.3 to 4.10.0 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.3...parent-4.10.0) Updates `logging-interceptor` from 4.9.3 to 4.10.0 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.3...parent-4.10.0) Updates `mockwebserver` from 4.9.3 to 4.10.0 - [Release notes](https://github.com/square/okhttp/releases) - [Changelog](https://github.com/square/okhttp/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okhttp/compare/parent-4.9.3...parent-4.10.0) --- updated-dependencies: - dependency-name: com.squareup.okhttp3:okhttp dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.squareup.okhttp3:logging-interceptor dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.squareup.okhttp3:mockwebserver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 9bd03e45..a3483a6c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -13,7 +13,7 @@ ext { daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" - okHttpVersion = '4.9.3' + okHttpVersion = '4.10.0' okHttp = "com.squareup.okhttp3:okhttp:$okHttpVersion" okHttpLoggingInterceptor = "com.squareup.okhttp3:logging-interceptor:$okHttpVersion" okHttpMockWebServer = "com.squareup.okhttp3:mockwebserver:$okHttpVersion" From 8d8dba2747e0f148070fb081f808e39a8aee486f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 23:10:07 +0000 Subject: [PATCH 274/621] Bump annotation from 1.3.0 to 1.4.0 (#721) Bumps annotation from 1.3.0 to 1.4.0. --- updated-dependencies: - dependency-name: androidx.annotation:annotation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- core/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 905791a8..5f682eea 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.3.0' + implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.1' implementation 'androidx.fragment:fragment:1.4.1' diff --git a/core/build.gradle b/core/build.gradle index 73dcaaca..9d0db14b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' - implementation 'androidx.annotation:annotation:1.3.0' + implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From b6612c45ecf1008935a6c1f88fe36ae02b0f8ca0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 23:33:37 +0200 Subject: [PATCH 275/621] Bump firebase-bom from 30.1.0 to 30.2.0 (#724) Bumps firebase-bom from 30.1.0 to 30.2.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7643b637..4dd25305 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.1.0') + implementation platform('com.google.firebase:firebase-bom:30.2.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index fc5d2356..0845de5a 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.2' - implementation platform('com.google.firebase:firebase-bom:30.1.0') + implementation platform('com.google.firebase:firebase-bom:30.2.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 965e6995d79328882d8c9aac9e9e99c3d4d1ea98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 23:33:49 +0200 Subject: [PATCH 276/621] Bump coroutinesVersion from 1.6.2 to 1.6.3 (#722) Bumps `coroutinesVersion` from 1.6.2 to 1.6.3. Updates `kotlinx-coroutines-core` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-core-jvm` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-android` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) Updates `kotlinx-coroutines-test` from 1.6.2 to 1.6.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index a3483a6c..0a8d91b1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,5 @@ ext { - coroutinesVersion = "1.6.2" + coroutinesVersion = "1.6.3" coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" From 955e5f1a1e1ff7617747d2d8592f040689d1e78b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 23:51:31 +0200 Subject: [PATCH 277/621] Bump lifecycle-viewmodel from 2.4.1 to 2.5.0 (#726) Bumps lifecycle-viewmodel from 2.4.1 to 2.5.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-viewmodel dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 5f682eea..f0d2cfed 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -20,7 +20,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.0' implementation 'androidx.fragment:fragment:1.4.1' implementation okHttp From e83a3837f68582ca7519a518f994a42aa868644d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 23:51:41 +0200 Subject: [PATCH 278/621] Bump lifecycle-runtime from 2.4.1 to 2.5.0 (#725) Bumps lifecycle-runtime from 2.4.1 to 2.5.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 63e511fc..fa953c6c 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" - implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' + implementation 'androidx.lifecycle:lifecycle-runtime:2.5.0' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' diff --git a/app/build.gradle b/app/build.gradle index 4dd25305..861ec759 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-runtime:2.4.1' + implementation 'androidx.lifecycle:lifecycle-runtime:2.5.0' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From f4bbf30d02def870a26892338266a60f1ead36e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 10 Jul 2022 21:58:11 +0000 Subject: [PATCH 279/621] Bump firebase-crashlytics-gradle from 2.9.0 to 2.9.1 (#723) Bumps firebase-crashlytics-gradle from 2.9.0 to 2.9.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-crashlytics-gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9e8372cf..852b7ccd 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath 'com.google.firebase:perf-plugin:1.4.1' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' classpath 'com.google.gms:google-services:4.3.10' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } From a300a3c935fda44b62886dd5fd52fb20ba32db7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 09:55:29 +0200 Subject: [PATCH 280/621] Bump okio from 3.1.0 to 3.2.0 (#727) Bumps [okio](https://github.com/square/okio) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/square/okio/releases) - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](https://github.com/square/okio/compare/parent-3.1.0...parent-3.2.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-api/build.gradle | 2 +- core-testing/build.gradle | 2 +- navigation-api/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index fa953c6c..a5f9c97d 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -64,6 +64,6 @@ dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' } diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index f0d2cfed..9fb5963d 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -24,5 +24,5 @@ dependencies { implementation 'androidx.fragment:fragment:1.4.1' implementation okHttp - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 320b4fdc..238df627 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation androidTestMonitor implementation okHttpMockWebServer implementation okHttp - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' implementation 'junit:junit:4.13.2' } diff --git a/core-api/build.gradle b/core-api/build.gradle index e70ea322..f8e8f54c 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -8,7 +8,7 @@ dependencies { implementation coroutinesJvm implementation retrofit implementation okHttp - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' implementation 'javax.inject:javax.inject:1' diff --git a/core-testing/build.gradle b/core-testing/build.gradle index fe2d701c..867f3ee3 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -29,5 +29,5 @@ dependencies { implementation okHttp implementation okHttpMockWebServer implementation okHttpLoggingInterceptor - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' } diff --git a/navigation-api/build.gradle b/navigation-api/build.gradle index ea0b826f..352179e9 100644 --- a/navigation-api/build.gradle +++ b/navigation-api/build.gradle @@ -5,5 +5,5 @@ apply plugin: 'kotlin' dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation okHttp - implementation 'com.squareup.okio:okio:3.1.0' + implementation 'com.squareup.okio:okio:3.2.0' } From 9c5758d257763841f759a851187d54025e550ccd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 09:55:38 +0200 Subject: [PATCH 281/621] Bump lifecycle-runtime-ktx from 2.4.1 to 2.5.0 (#728) Bumps lifecycle-runtime-ktx from 2.4.1 to 2.5.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime-ktx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/network-status/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 37809c87..ebe88b7f 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' implementation coroutinesJvm From a63c0fa80195f0ec467569f1555fdc2572b8800f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 08:01:06 +0000 Subject: [PATCH 282/621] Bump fragment from 1.4.1 to 1.5.0 (#729) Bumps fragment from 1.4.1 to 1.5.0. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 9fb5963d..a99df440 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.0' - implementation 'androidx.fragment:fragment:1.4.1' + implementation 'androidx.fragment:fragment:1.5.0' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From a8ea2dd07a07dde6216bee4e686d821e66b34de8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 15:17:00 +0200 Subject: [PATCH 283/621] Bump lifecycle-livedata-ktx from 2.4.1 to 2.5.0 (#731) Bumps lifecycle-livedata-ktx from 2.4.1 to 2.5.0. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-livedata-ktx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index a5f9c97d..430b5674 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" implementation 'androidx.lifecycle:lifecycle-runtime:2.5.0' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 0565092d..b4335c91 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation coroutinesAndroid implementation coroutinesCore implementation coroutinesJvm - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" implementation retrofit implementation retrofitGsonConverter diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 81d895a8..8598e536 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' From de298d668c889923e09b4bb1a86b688a71c38074 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jul 2022 15:08:35 +0200 Subject: [PATCH 284/621] Bump kotlin_version from 1.7.0 to 1.7.10 (#730) Bumps `kotlin_version` from 1.7.0 to 1.7.10. Updates `kotlin-gradle-plugin` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) Updates `kotlin-stdlib` from 1.7.0 to 1.7.10 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.10/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.0...v1.7.10) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 852b7ccd..bf4f585f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.7.0' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() From 812bc968b03ecc95387bc49a5801e4968e315ec4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 13 Jul 2022 13:10:37 +0000 Subject: [PATCH 285/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 861ec759..ecc2c60b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.40.0' - versionCode 147 + versionName '0.40.1' + versionCode 148 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 67e3cf2bb474f6ca61373ae4294e7b1b0dbe20d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 10:43:11 +0200 Subject: [PATCH 286/621] Bump coroutinesVersion from 1.6.3 to 1.6.4 (#732) Bumps `coroutinesVersion` from 1.6.3 to 1.6.4. Updates `kotlinx-coroutines-core` from 1.6.3 to 1.6.4 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4) Updates `kotlinx-coroutines-core-jvm` from 1.6.3 to 1.6.4 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4) Updates `kotlinx-coroutines-android` from 1.6.3 to 1.6.4 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4) Updates `kotlinx-coroutines-test` from 1.6.3 to 1.6.4 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-test dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 0a8d91b1..03cb5431 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,5 +1,5 @@ ext { - coroutinesVersion = "1.6.3" + coroutinesVersion = "1.6.4" coroutinesCore = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion" coroutinesJvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:$coroutinesVersion" coroutinesAndroid = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" From 4cff34cd5c20bf94a5e16907320932fc786c99c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 08:48:37 +0000 Subject: [PATCH 287/621] Bump firebase-bom from 30.2.0 to 30.3.0 (#733) Bumps firebase-bom from 30.2.0 to 30.3.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ecc2c60b..8b193ab3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.2.0') + implementation platform('com.google.firebase:firebase-bom:30.3.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 0845de5a..ec676f88 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.2' - implementation platform('com.google.firebase:firebase-bom:30.2.0') + implementation platform('com.google.firebase:firebase-bom:30.3.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From b39aeb8bebe67b52ae9794a9a5a9beeb4398d34e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:22:12 +0200 Subject: [PATCH 288/621] Bump daggerVersion from 2.42 to 2.43 (#734) Bumps `daggerVersion` from 2.42 to 2.43. Updates `dagger-compiler` from 2.42 to 2.43 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.42...dagger-2.43) Updates `dagger` from 2.42 to 2.43 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.42...dagger-2.43) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 03cb5431..815bf331 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.42' + daggerVersion = '2.43' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From 48e7faf6d318f3713169d0e1f1cedd67deedcd56 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Jul 2022 15:24:17 +0000 Subject: [PATCH 289/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8b193ab3..e4699844 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.40.1' - versionCode 148 + versionName '0.40.2' + versionCode 149 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From f7ccc1cb7aedb04c36da7ccfb0563515b43913b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:02:10 +0200 Subject: [PATCH 290/621] Bump firebase-bom from 30.3.0 to 30.3.1 (#735) Bumps firebase-bom from 30.3.0 to 30.3.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index e4699844..dbf3ee8d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.3.0') + implementation platform('com.google.firebase:firebase-bom:30.3.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index ec676f88..7e2b955f 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.2' - implementation platform('com.google.firebase:firebase-bom:30.3.0') + implementation platform('com.google.firebase:firebase-bom:30.3.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From eff463eb714499aecdc2d62251ec0e344e78898f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 09:02:36 +0200 Subject: [PATCH 291/621] Bump daggerVersion from 2.43 to 2.43.1 (#737) Bumps `daggerVersion` from 2.43 to 2.43.1. Updates `dagger-compiler` from 2.43 to 2.43.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43...dagger-2.43.1) Updates `dagger` from 2.43 to 2.43.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43...dagger-2.43.1) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 815bf331..f09fcd8b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.43' + daggerVersion = '2.43.1' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From e5109c1cff4b4939d90ec53fde8410a62d3c862b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:08:18 +0000 Subject: [PATCH 292/621] Bump gson from 2.9.0 to 2.9.1 (#736) Bumps [gson](https://github.com/google/gson) from 2.9.0 to 2.9.1. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.9.0...gson-parent-2.9.1) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index dbf3ee8d..3c259e00 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,7 +148,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.9.1' androidTestImplementation espressoCore androidTestImplementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index 9d0db14b..f8fc5396 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.9.1' implementation okHttpLoggingInterceptor testImplementation 'junit:junit:4.13.2' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index b4335c91..1f75761e 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.9.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.4.2' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 8598e536..ad6eb295 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.9.1' implementation coroutinesJvm implementation coroutinesCore From 2a9016b050f3e1e7ba4a46da0a5ed47a046ed1af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:13:58 +0000 Subject: [PATCH 293/621] Bump fragment from 1.5.0 to 1.5.1 (#738) Bumps fragment from 1.5.0 to 1.5.1. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index a99df440..14816ea6 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.0' - implementation 'androidx.fragment:fragment:1.5.0' + implementation 'androidx.fragment:fragment:1.5.1' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From 897a9df8b89811c659339c6492edfa3f60c032dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:19:11 +0000 Subject: [PATCH 294/621] Bump lifecycle-runtime-ktx from 2.5.0 to 2.5.1 (#739) Bumps lifecycle-runtime-ktx from 2.5.0 to 2.5.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime-ktx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- feature/network-status/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index ebe88b7f..9eb9d7f8 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.core:core:1.8.0' - implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' implementation coroutinesJvm From f0620f30cad4d0557e9b12fb3f4c7511bf78b0a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:23:25 +0000 Subject: [PATCH 295/621] Bump lifecycle-runtime from 2.5.0 to 2.5.1 (#741) Bumps lifecycle-runtime from 2.5.0 to 2.5.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 430b5674..e9759c20 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" - implementation 'androidx.lifecycle:lifecycle-runtime:2.5.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.5.1' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' diff --git a/app/build.gradle b/app/build.gradle index 3c259e00..fa88e2f1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -118,7 +118,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-runtime:2.5.0' + implementation 'androidx.lifecycle:lifecycle-runtime:2.5.1' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' From 89baef7d33aa8e9eb8a5aa0bd3490f208fa7c92d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:28:34 +0000 Subject: [PATCH 296/621] Bump lifecycle-viewmodel from 2.5.0 to 2.5.1 (#740) Bumps lifecycle-viewmodel from 2.5.0 to 2.5.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-viewmodel dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 14816ea6..16118417 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -20,7 +20,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.0' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' implementation 'androidx.fragment:fragment:1.5.1' implementation okHttp From d1dacc155a3ffac07f147e9ae47334344f0e047a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:34:05 +0000 Subject: [PATCH 297/621] Bump lifecycle-livedata-ktx from 2.5.0 to 2.5.1 (#742) Bumps lifecycle-livedata-ktx from 2.5.0 to 2.5.1. --- updated-dependencies: - dependency-name: androidx.lifecycle:lifecycle-livedata-ktx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index e9759c20..61ccc9fc 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.2' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" implementation 'androidx.lifecycle:lifecycle-runtime:2.5.1' implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 1f75761e..ab98bf30 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation coroutinesAndroid implementation coroutinesCore implementation coroutinesJvm - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" implementation retrofit implementation retrofitGsonConverter diff --git a/feature/users/build.gradle b/feature/users/build.gradle index ad6eb295..af56c2cc 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -51,7 +51,7 @@ dependencies { implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' testImplementation 'junit:junit:4.13.2' From 28328135bd00f95b85a0891072c57775fdb7e5da Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Aug 2022 07:44:29 +0000 Subject: [PATCH 298/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fa88e2f1..cded71c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 31 - versionName '0.40.2' - versionCode 149 + versionName '0.40.3' + versionCode 150 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From ced0409b3a2d6fb12fe7e30eeea57361a3c83ac8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 09:40:45 +0200 Subject: [PATCH 299/621] Bump gradle from 7.2.1 to 7.2.2 (#745) Bumps gradle from 7.2.1 to 7.2.2. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bf4f585f..e950155e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.1' + classpath 'com.android.tools.build:gradle:7.2.2' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' classpath 'com.google.gms:google-services:4.3.10' From 391bebdc423ab9de1bf23aa182d98d9beeb1eca5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:46:51 +0000 Subject: [PATCH 300/621] Bump firebase-bom from 30.3.1 to 30.3.2 (#744) Bumps firebase-bom from 30.3.1 to 30.3.2. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cded71c8..d7700e0c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.3.1') + implementation platform('com.google.firebase:firebase-bom:30.3.2') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 7e2b955f..86c3cb32 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.4.2' - implementation platform('com.google.firebase:firebase-bom:30.3.1') + implementation platform('com.google.firebase:firebase-bom:30.3.2') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 7c5043c31865694c5436f819e964d44659f4146b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:53:00 +0000 Subject: [PATCH 301/621] Bump daggerVersion from 2.43.1 to 2.43.2 (#743) Bumps `daggerVersion` from 2.43.1 to 2.43.2. Updates `dagger-compiler` from 2.43.1 to 2.43.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43.1...dagger-2.43.2) Updates `dagger` from 2.43.1 to 2.43.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43.1...dagger-2.43.2) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index f09fcd8b..1ba161e3 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.43.1' + daggerVersion = '2.43.2' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From a89cce8fc04c173259a6a7a1261c88234a473d51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 13:08:18 +0200 Subject: [PATCH 302/621] Bump fragment from 1.5.1 to 1.5.2 (#746) Bumps fragment from 1.5.1 to 1.5.2. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 16118417..f74d2a90 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' - implementation 'androidx.fragment:fragment:1.5.1' + implementation 'androidx.fragment:fragment:1.5.2' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From 3e77091b746939ca4de6abea90b768b7f1c08b88 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:19:48 +0200 Subject: [PATCH 303/621] Android 13 (#749) --- app-partial-users/build.gradle | 4 ++-- app/build.gradle | 4 ++-- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- settings.gradle | 1 + 18 files changed, 20 insertions(+), 19 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 61ccc9fc..7c92ba88 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { applicationId "com.jraska.github.client.users" minSdkVersion 26 - targetSdkVersion 31 + targetSdkVersion 32 versionName '0.1.0' versionCode 1 diff --git a/app/build.gradle b/app/build.gradle index d7700e0c..9bbed55f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,12 +20,12 @@ if (System.getenv("CI") == "true") { apply plugin: 'com.google.firebase.crashlytics' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { applicationId "com.jraska.github.client" minSdkVersion 26 - targetSdkVersion 31 + targetSdkVersion 32 versionName '0.40.3' versionCode 150 multiDexEnabled true diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index f74d2a90..4b5f3c6b 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 238df627..592f9c33 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/core-testing/build.gradle b/core-testing/build.gradle index 867f3ee3..a13cf4d4 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/core/build.gradle b/core/build.gradle index f8fc5396..8a65b491 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 08916eed..4c2de934 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index cb2a2068..a846856c 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 6cd3d28d..21e0ae74 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 1ed113b5..3cba06d2 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 9eb9d7f8..2b243aa1 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 86c3cb32..581bb73c 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index ab98bf30..a3fbc233 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 3b8919fc..d28d3bee 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 30220ed3..fe2c35d5 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index afa948cb..1de698e5 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index af56c2cc..cbe365de 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 31 + compileSdkVersion 32 defaultConfig { minSdkVersion 26 diff --git a/settings.gradle b/settings.gradle index 16d4a007..1a0773ae 100644 --- a/settings.gradle +++ b/settings.gradle @@ -33,6 +33,7 @@ buildCache { allowUntrustedServer = true allowInsecureProtocol = true push = (System.getenv("CI") == "true") + enabled = (System.getenv("CI") == "true") // the pulls on different networks are so problematic and project so small that we keep CI only } local { From 358a38fb0e7e646af8af9200e206ca6851d9a85d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Aug 2022 14:27:13 +0000 Subject: [PATCH 304/621] Bump appcompat from 1.4.2 to 1.5.0 (#747) Bumps appcompat from 1.4.2 to 1.5.0. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/users/build.gradle | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 7c92ba88..936ff976 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" diff --git a/app/build.gradle b/app/build.gradle index 9bbed55f..ae942dba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,7 +113,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.8.0' diff --git a/core/build.gradle b/core/build.gradle index 8a65b491..51a21f8c 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -42,7 +42,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 4c2de934..f0a8ac66 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 21e0ae74..9e55bb4b 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 2b243aa1..c5e79492 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 581bb73c..049b9923 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation project(':feature:identity-api') implementation 'androidx.core:core:1.8.0' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation platform('com.google.firebase:firebase-bom:30.3.2') implementation 'com.google.firebase:firebase-perf' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index a3fbc233..42ab2276 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index d28d3bee..fa664544 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index fe2c35d5..9055700f 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.core:core:1.8.0' kapt daggerAnnotationProcessor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index cbe365de..5fe7593f 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation coroutinesCore implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.4.2' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' From 0d4979ac67839394316a13e5cf20baedfc305d3d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sat, 3 Sep 2022 02:21:14 +0200 Subject: [PATCH 305/621] Bump module-graph-assert plugin to version 2.3.0 (#750) --- app/build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ae942dba..0359987d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.jraska.module.graph.assertion" version "2.2.0" + id "com.jraska.module.graph.assertion" version "2.3.0" id "com.github.triplet.play" version "3.7.0" id "com.jraska.github.client.firebase" id 'com.jraska.gradle.buildtime' @@ -172,6 +172,7 @@ moduleGraphAssert { maxHeight = 2 allowed = [":app -> .*", ".* -> [\\S:]*-api"] restricted = [":feature:\\S* -X> :not-wanted-module-example"] + assertOnAnyBuild = true } play { From 50fe3fa651dfa0aa7cef0cf00db5e64603a1123c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 4 Sep 2022 21:14:58 +0000 Subject: [PATCH 306/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0359987d..b2bf5158 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 32 - versionName '0.40.3' - versionCode 150 + versionName '0.40.4' + versionCode 151 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 08d3fa42e72e976d754eb201419bbbb9a028df86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Sep 2022 18:18:41 +0200 Subject: [PATCH 307/621] Bump firebase-bom from 30.3.2 to 30.4.0 (#751) Bumps firebase-bom from 30.3.2 to 30.4.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b2bf5158..ded3fa79 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,7 +128,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.3.2') + implementation platform('com.google.firebase:firebase-bom:30.4.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 049b9923..49902052 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.5.0' - implementation platform('com.google.firebase:firebase-bom:30.3.2') + implementation platform('com.google.firebase:firebase-bom:30.4.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 3d3f58c4b04ff0ee89962bb6bd88284a42a4b3c9 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:41:51 +0200 Subject: [PATCH 308/621] Add performance module - move app startup measurement into performance module (#753) --- app/build.gradle | 1 + .../com/jraska/github/client/AppComponent.kt | 2 ++ .../client/core/android/CoreAndroidModule.kt | 9 ++--- feature/performance/.gitignore | 1 + feature/performance/build.gradle | 36 +++++++++++++++++++ .../performance/src/main/AndroidManifest.xml | 1 + .../client/performance/PerformanceModule.kt | 6 ++-- .../startup/StartupAnalyticsReporter.kt | 2 +- .../performance}/startup/StartupTimeMetric.kt | 2 +- settings.gradle | 2 +- 10 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 feature/performance/.gitignore create mode 100644 feature/performance/build.gradle create mode 100644 feature/performance/src/main/AndroidManifest.xml rename core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt => feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt (68%) rename {core/src/main/java/com/jraska/github/client => feature/performance/src/main/java/com/jraska/github/client/performance}/startup/StartupAnalyticsReporter.kt (97%) rename {core/src/main/java/com/jraska/github/client => feature/performance/src/main/java/com/jraska/github/client/performance}/startup/StartupTimeMetric.kt (97%) diff --git a/app/build.gradle b/app/build.gradle index ded3fa79..7dfecca5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -102,6 +102,7 @@ dependencies { implementation project(':feature:identity') implementation project(':feature:identity-api') implementation project(':feature:network-status') + implementation project(':feature:performance') implementation project(':feature:push') implementation project(':feature:users') implementation project(':feature:repo') diff --git a/app/src/main/java/com/jraska/github/client/AppComponent.kt b/app/src/main/java/com/jraska/github/client/AppComponent.kt index 930ea52c..f08a9449 100644 --- a/app/src/main/java/com/jraska/github/client/AppComponent.kt +++ b/app/src/main/java/com/jraska/github/client/AppComponent.kt @@ -10,6 +10,7 @@ import com.jraska.github.client.http.HttpModule import com.jraska.github.client.identity.IdentityModule import com.jraska.github.client.inappupdate.InAppUpdateModule import com.jraska.github.client.networkstatus.NetworkStatusModule +import com.jraska.github.client.performance.PerformanceModule import com.jraska.github.client.push.PushModule import com.jraska.github.client.repo.RepoModule import com.jraska.github.client.settings.SettingsModule @@ -40,6 +41,7 @@ interface AppComponent : AppBaseComponent { IdentityModule::class, NetworkStatusModule::class, InAppUpdateModule::class, + PerformanceModule::class, UsersModule::class, RepoModule::class, PushModule::class, diff --git a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt index cec8e1fe..8067f14d 100644 --- a/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/CoreAndroidModule.kt @@ -12,7 +12,6 @@ import com.jraska.github.client.Owner import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.core.android.logging.SetupLogging -import com.jraska.github.client.startup.AppStartupModule import com.jraska.github.client.time.DateTimeProvider import com.jraska.github.client.time.RealDateTimeProvider import com.jraska.github.client.time.RealTimeProvider @@ -27,7 +26,7 @@ import dagger.multibindings.IntoSet import javax.inject.Provider import javax.inject.Singleton -@Module(includes = [AppStartupModule::class]) +@Module object CoreAndroidModule { @Provides @Singleton @@ -63,7 +62,8 @@ object CoreAndroidModule { } @Provides - internal fun topActivityProvider(implementation: TopActivityProviderImpl): TopActivityProvider = implementation + internal fun topActivityProvider(implementation: TopActivityProviderImpl): TopActivityProvider = + implementation @Provides @IntoSet @@ -85,7 +85,8 @@ object CoreAndroidModule { @Provides @Singleton - internal fun deepLinkHandler(implementation: DeepLinkHandlerImpl): DeepLinkHandler = implementation + internal fun deepLinkHandler(implementation: DeepLinkHandlerImpl): DeepLinkHandler = + implementation @Provides @IntoSet diff --git a/feature/performance/.gitignore b/feature/performance/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/feature/performance/.gitignore @@ -0,0 +1 @@ +/build diff --git a/feature/performance/build.gradle b/feature/performance/build.gradle new file mode 100644 index 00000000..74eab66f --- /dev/null +++ b/feature/performance/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion 32 + defaultConfig { + minSdkVersion 26 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + + testOptions { + unitTests.returnDefaultValues = true + } +} + +dependencies { + implementation project(':core-api') + implementation project(':core-android-api') + + kapt daggerAnnotationProcessor + implementation dagger + + implementation 'com.jakewharton.timber:timber:5.0.1' + + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.assertj:assertj-core:3.23.1' +} diff --git a/feature/performance/src/main/AndroidManifest.xml b/feature/performance/src/main/AndroidManifest.xml new file mode 100644 index 00000000..97688076 --- /dev/null +++ b/feature/performance/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt similarity index 68% rename from core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt rename to feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt index c43663a6..651914b8 100644 --- a/core/src/main/java/com/jraska/github/client/startup/AppStartupModule.kt +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt @@ -1,13 +1,15 @@ -package com.jraska.github.client.startup +package com.jraska.github.client.performance import com.jraska.github.client.core.android.OnAppCreate +import com.jraska.github.client.performance.startup.StartupAnalyticsReporter +import com.jraska.github.client.performance.startup.StartupTimeMetric import dagger.Module import dagger.Provides import dagger.multibindings.IntoSet import javax.inject.Singleton @Module -object AppStartupModule { +object PerformanceModule { @Provides @IntoSet internal fun registerStartupCallbacks(create: StartupTimeMetric.RegisterStartupCallbacks): OnAppCreate = create diff --git a/core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupAnalyticsReporter.kt similarity index 97% rename from core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt rename to feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupAnalyticsReporter.kt index df715929..47ef091b 100644 --- a/core/src/main/java/com/jraska/github/client/startup/StartupAnalyticsReporter.kt +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupAnalyticsReporter.kt @@ -1,4 +1,4 @@ -package com.jraska.github.client.startup +package com.jraska.github.client.performance.startup import android.os.Process import android.os.SystemClock diff --git a/core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupTimeMetric.kt similarity index 97% rename from core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt rename to feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupTimeMetric.kt index 2e223fee..3deb47b5 100644 --- a/core/src/main/java/com/jraska/github/client/startup/StartupTimeMetric.kt +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/startup/StartupTimeMetric.kt @@ -1,4 +1,4 @@ -package com.jraska.github.client.startup +package com.jraska.github.client.performance.startup import android.app.Activity import android.app.ActivityManager diff --git a/settings.gradle b/settings.gradle index 1a0773ae..6df05770 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ include ':app', ':feature:in-app-update', ':feature:config-debug-api', ':feature:config-debug', - + ':feature:performance', ':feature:users', ':feature:repo', ':feature:push', From b22f2a376f2c338d0e4bd2c20b431f2e395f06a0 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 7 Sep 2022 23:53:21 +0200 Subject: [PATCH 309/621] Add Jank performance measurement (#754) --- feature/performance/build.gradle | 1 + .../client/performance/PerformanceModule.kt | 5 ++ .../performance/jank/JankAnalyticsReporter.kt | 37 ++++++++++++++ .../client/performance/jank/JankMetric.kt | 51 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankAnalyticsReporter.kt create mode 100644 feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankMetric.kt diff --git a/feature/performance/build.gradle b/feature/performance/build.gradle index 74eab66f..e7daab67 100644 --- a/feature/performance/build.gradle +++ b/feature/performance/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation dagger implementation 'com.jakewharton.timber:timber:5.0.1' + implementation "androidx.metrics:metrics-performance:1.0.0-alpha03" testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.23.1' diff --git a/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt index 651914b8..9ec3a3f2 100644 --- a/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/PerformanceModule.kt @@ -1,6 +1,7 @@ package com.jraska.github.client.performance import com.jraska.github.client.core.android.OnAppCreate +import com.jraska.github.client.performance.jank.JankMetric import com.jraska.github.client.performance.startup.StartupAnalyticsReporter import com.jraska.github.client.performance.startup.StartupTimeMetric import dagger.Module @@ -19,4 +20,8 @@ object PerformanceModule { internal fun startupTimeMetric(reporter: StartupAnalyticsReporter): StartupTimeMetric { return StartupTimeMetric(reporter) } + + @Provides + @IntoSet + internal fun startupJank(create: JankMetric.StartupOnCreate): OnAppCreate = create } diff --git a/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankAnalyticsReporter.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankAnalyticsReporter.kt new file mode 100644 index 00000000..6cf249c6 --- /dev/null +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankAnalyticsReporter.kt @@ -0,0 +1,37 @@ +package com.jraska.github.client.performance.jank + +import androidx.metrics.performance.FrameData +import com.jraska.github.client.Owner +import com.jraska.github.client.analytics.AnalyticsEvent +import com.jraska.github.client.analytics.EventAnalytics +import timber.log.Timber +import java.util.concurrent.TimeUnit.MILLISECONDS +import java.util.concurrent.TimeUnit.NANOSECONDS +import javax.inject.Inject + +private val TOO_LARGE_JANK_NANOS = NANOSECONDS.convert(3 * 16, MILLISECONDS) +private val JANK_ANALYTICS_NAME = AnalyticsEvent.Key("performance_ui_jank", Owner.PERFORMANCE_TEAM) +private const val JANK_TIME_PROPERTY = "value" + +class JankAnalyticsReporter @Inject constructor( + private val eventAnalytics: EventAnalytics +) { + fun reportJank(frame: FrameData) { + Timber.v("Jank of %s", frame) + + if (frame.frameDurationUiNanos >= TOO_LARGE_JANK_NANOS) { + reportJankToAnalytics(frame) + } + } + + private fun reportJankToAnalytics(frame: FrameData) { + val jankMs = NANOSECONDS.toMillis(frame.frameDurationUiNanos) + + val event = AnalyticsEvent.builder(JANK_ANALYTICS_NAME) + .addProperty(JANK_TIME_PROPERTY, jankMs) + .build() + + eventAnalytics.report(event) + Timber.d("Jank of %s ms reported to analytics", jankMs) + } +} diff --git a/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankMetric.kt b/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankMetric.kt new file mode 100644 index 00000000..3e12b1bd --- /dev/null +++ b/feature/performance/src/main/java/com/jraska/github/client/performance/jank/JankMetric.kt @@ -0,0 +1,51 @@ +package com.jraska.github.client.performance.jank + +import android.app.Activity +import android.app.Application +import android.os.Bundle +import androidx.metrics.performance.FrameData +import androidx.metrics.performance.JankStats +import com.jraska.github.client.core.android.DefaultActivityCallbacks +import com.jraska.github.client.core.android.OnAppCreate +import javax.inject.Inject + +internal class JankMetric @Inject constructor( + private val jankAnalyticsReporter: JankAnalyticsReporter +) : DefaultActivityCallbacks() { + private val onFrameListener = JankStats.OnFrameListener { onFrame(it) } + + private fun onAppCreate(app: Application) { + app.registerActivityLifecycleCallbacks(object : DefaultActivityCallbacks() { + private var creatingActivity: Activity? = + null // store this as we cannot call `createAndTrack` in onActivityCreated and `onActivityStarted` will be called multiple times + + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + super.onActivityCreated(activity, savedInstanceState) + creatingActivity = activity + } + + override fun onActivityStarted(activity: Activity) { + super.onActivityStarted(activity) + + if (creatingActivity == activity) { + JankStats.createAndTrack(activity.window, onFrameListener) + } + creatingActivity = null + } + }) + } + + private fun onFrame(frameData: FrameData) { + if (frameData.isJank) { + jankAnalyticsReporter.reportJank(frameData) + } + } + + internal class StartupOnCreate @Inject constructor( + private val jankMetric: JankMetric + ) : OnAppCreate { + override fun onCreate(app: Application) { + jankMetric.onAppCreate(app) + } + } +} From 52a1de02ca057b369114dc674a96dc9fac4a4e88 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 7 Sep 2022 21:55:26 +0000 Subject: [PATCH 310/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7dfecca5..3bb3fdb6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 32 - versionName '0.40.4' - versionCode 151 + versionName '0.41.0' + versionCode 152 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 289e0026f356ebc0559f4f870aa8071b0f22aa7e Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 9 Sep 2022 10:26:58 +0200 Subject: [PATCH 311/621] Breaking master change to demonstrate CI metrics (#755) --- .../src/main/java/com/jraska/github/client/about/AboutModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt b/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt index 500b9893..2ba85aaa 100644 --- a/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt +++ b/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt @@ -9,7 +9,7 @@ import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet @Module -abstract class AboutModule { +abstract class AboutBreakingMasterModule { @Binds @IntoMap From f35e57b0dc30607bdde790107163810136209c3d Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Fri, 9 Sep 2022 10:38:16 +0200 Subject: [PATCH 312/621] Revert "Breaking master change to demonstrate CI metrics (#755)" (#756) This reverts commit 289e0026f356ebc0559f4f870aa8071b0f22aa7e. --- .../src/main/java/com/jraska/github/client/about/AboutModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt b/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt index 2ba85aaa..500b9893 100644 --- a/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt +++ b/feature/about/src/main/java/com/jraska/github/client/about/AboutModule.kt @@ -9,7 +9,7 @@ import dagger.multibindings.IntoMap import dagger.multibindings.IntoSet @Module -abstract class AboutBreakingMasterModule { +abstract class AboutModule { @Binds @IntoMap From 1ec33fb1640afb46ad1a75a1d7ab1deb29c6fd0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 10:22:55 +0200 Subject: [PATCH 313/621] Bump firebase-bom from 30.4.0 to 30.4.1 (#758) Bumps firebase-bom from 30.4.0 to 30.4.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3bb3fdb6..9e0c4a6b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.4.0') + implementation platform('com.google.firebase:firebase-bom:30.4.1') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 49902052..701f0cc0 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.8.0' implementation 'androidx.appcompat:appcompat:1.5.0' - implementation platform('com.google.firebase:firebase-bom:30.4.0') + implementation platform('com.google.firebase:firebase-bom:30.4.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From e93e4a6611e0227151eaa184d87927584069913d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 08:30:10 +0000 Subject: [PATCH 314/621] Bump appcompat from 1.5.0 to 1.5.1 (#759) Bumps appcompat from 1.5.0 to 1.5.1. --- updated-dependencies: - dependency-name: androidx.appcompat:appcompat dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 4 ++-- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/users/build.gradle | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 936ff976..9b757439 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':core-testing') implementation project(':feature:users') - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" diff --git a/app/build.gradle b/app/build.gradle index 9e0c4a6b..f080e706 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,7 +114,7 @@ dependencies { implementation project(':feature:config-debug') implementation project(':feature:config-debug-api') - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.core:core:1.8.0' diff --git a/core/build.gradle b/core/build.gradle index 51a21f8c..35e1873b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.core:core:1.8.0' implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' @@ -42,7 +42,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index f0a8ac66..e852f031 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation espressoCore diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 9e55bb4b..d7787ee7 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -23,7 +23,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index c5e79492..91203872 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -21,7 +21,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.core:core:1.8.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 701f0cc0..7f8d8257 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -20,7 +20,7 @@ dependencies { implementation project(':feature:identity-api') implementation 'androidx.core:core:1.8.0' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation platform('com.google.firebase:firebase-bom:30.4.1') implementation 'com.google.firebase:firebase-perf' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 42ab2276..5194007e 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -37,7 +37,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation fresco diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index fa664544..faf2ae2b 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.airbnb.android:epoxy:4.6.4' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index 9055700f..c021c300 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation project(':core-api') implementation project(':core-android-api') - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.core:core:1.8.0' kapt daggerAnnotationProcessor diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 5fe7593f..c320e46b 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation coroutinesCore implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.appcompat:appcompat:1.5.0' + implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' From 662d47c3263454fc9a2c65907b6e8d2c2c3718cd Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Sep 2022 23:03:40 +0200 Subject: [PATCH 315/621] Android 13 - API 33 (#760) --- app-partial-users/build.gradle | 4 ++-- app/build.gradle | 4 ++-- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/in-app-update/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/performance/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 9b757439..a85df2a4 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -3,12 +3,12 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { applicationId "com.jraska.github.client.users" minSdkVersion 26 - targetSdkVersion 32 + targetSdkVersion 33 versionName '0.1.0' versionCode 1 diff --git a/app/build.gradle b/app/build.gradle index f080e706..0e699c9d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,12 +20,12 @@ if (System.getenv("CI") == "true") { apply plugin: 'com.google.firebase.crashlytics' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { applicationId "com.jraska.github.client" minSdkVersion 26 - targetSdkVersion 32 + targetSdkVersion 33 versionName '0.41.0' versionCode 152 multiDexEnabled true diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 4b5f3c6b..a8603e80 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 592f9c33..60f717d5 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/core-testing/build.gradle b/core-testing/build.gradle index a13cf4d4..59840788 100644 --- a/core-testing/build.gradle +++ b/core-testing/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/core/build.gradle b/core/build.gradle index 35e1873b..758bc390 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/about/build.gradle b/feature/about/build.gradle index e852f031..db1fb055 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index a846856c..e34a1e54 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index d7787ee7..55299a94 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/in-app-update/build.gradle b/feature/in-app-update/build.gradle index 3cba06d2..af2aa916 100644 --- a/feature/in-app-update/build.gradle +++ b/feature/in-app-update/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 91203872..e2f95e43 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/performance/build.gradle b/feature/performance/build.gradle index e7daab67..7bcb2bb5 100644 --- a/feature/performance/build.gradle +++ b/feature/performance/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 7f8d8257..93ecce82 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 5194007e..eb7edc0c 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index faf2ae2b..94f1c0ef 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index c021c300..c5d9e8a5 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 1de698e5..b1979b55 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index c320e46b..457359bb 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { - compileSdkVersion 32 + compileSdkVersion 33 defaultConfig { minSdkVersion 26 From b4cd054b26b76eddeeed2ccf9863ffe3a16e20cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 21:13:55 +0000 Subject: [PATCH 316/621] Bump core from 1.8.0 to 1.9.0 (#757) Bumps core from 1.8.0 to 1.9.0. --- updated-dependencies: - dependency-name: androidx.core:core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core-android-api/build.gradle | 2 +- core-android-testing/build.gradle | 2 +- core/build.gradle | 2 +- feature/chrome-custom-tabs/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/push/build.gradle | 2 +- feature/shortcuts/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0e699c9d..14fe6296 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -117,7 +117,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-runtime:2.5.1' implementation 'androidx.media:media:1.6.0' diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index a8603e80..84dc4d68 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.4.0' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' implementation 'androidx.fragment:fragment:1.5.2' diff --git a/core-android-testing/build.gradle b/core-android-testing/build.gradle index 60f717d5..fe5a53e5 100644 --- a/core-android-testing/build.gradle +++ b/core-android-testing/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation dagger implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation coroutinesJvm implementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index 758bc390..7a8c5b64 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -27,7 +27,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/chrome-custom-tabs/build.gradle b/feature/chrome-custom-tabs/build.gradle index e34a1e54..546057ab 100644 --- a/feature/chrome-custom-tabs/build.gradle +++ b/feature/chrome-custom-tabs/build.gradle @@ -22,6 +22,6 @@ dependencies { implementation dagger kapt daggerAnnotationProcessor implementation 'androidx.browser:browser:1.4.0' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' testImplementation 'junit:junit:4.13.2' } diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index e2f95e43..0bafc4b8 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation dagger implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 93ecce82..d24a6ab1 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation project(':feature:identity-api') - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation platform('com.google.firebase:firebase-bom:30.4.1') diff --git a/feature/shortcuts/build.gradle b/feature/shortcuts/build.gradle index c5d9e8a5..2545782d 100644 --- a/feature/shortcuts/build.gradle +++ b/feature/shortcuts/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':core-android-api') implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index b1979b55..b955d404 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.core:core:1.8.0' + implementation 'androidx.core:core:1.9.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:4.6.4' } From 786acef9f3c2e660730419738271d68f4d5c5abe Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Sep 2022 23:37:20 +0200 Subject: [PATCH 317/621] Gradle 7.5.1 (#761) --- build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- plugins/gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index e950155e..52c42952 100644 --- a/build.gradle +++ b/build.gradle @@ -5,10 +5,10 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:7.3.0' classpath 'com.google.firebase:perf-plugin:1.4.1' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.1' - classpath 'com.google.gms:google-services:4.3.10' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' + classpath 'com.google.gms:google-services:4.3.14' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fce..ae04661e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/plugins/gradle/wrapper/gradle-wrapper.properties b/plugins/gradle/wrapper/gradle-wrapper.properties index 41dfb879..ae04661e 100644 --- a/plugins/gradle/wrapper/gradle-wrapper.properties +++ b/plugins/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From ea194b44696e6eb4983344c11bb4ee1221c51a9c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 15 Sep 2022 21:44:09 +0000 Subject: [PATCH 318/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 14fe6296..eb1ab4af 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.41.0' - versionCode 152 + versionName '0.41.1' + versionCode 153 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 6af25ba256f54e5b19e9bc4678fe76a176ec44a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 09:23:08 +0200 Subject: [PATCH 319/621] Bump firebase-bom from 30.4.1 to 30.5.0 (#762) Bumps firebase-bom from 30.4.1 to 30.5.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- feature/push/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index eb1ab4af..334609d8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.4.1') + implementation platform('com.google.firebase:firebase-bom:30.5.0') implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index d24a6ab1..4416a0ab 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation platform('com.google.firebase:firebase-bom:30.4.1') + implementation platform('com.google.firebase:firebase-bom:30.5.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 5d8e4b81fb2b5a27cdc78e65502333e6d3dc080f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 08:42:16 +0200 Subject: [PATCH 320/621] Bump daggerVersion from 2.43.2 to 2.44 (#764) Bumps `daggerVersion` from 2.43.2 to 2.44. Updates `dagger-compiler` from 2.43.2 to 2.44 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43.2...dagger-2.44) Updates `dagger` from 2.43.2 to 2.44 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.43.2...dagger-2.44) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 1ba161e3..f2349f8e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.43.2' + daggerVersion = '2.44' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From c73908ffb954a5b56efe816df9100e6eebf5a5a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 07:54:44 +0000 Subject: [PATCH 321/621] Bump fragment from 1.5.2 to 1.5.3 (#763) Bumps fragment from 1.5.2 to 1.5.3. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 84dc4d68..a2c25240 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' - implementation 'androidx.fragment:fragment:1.5.2' + implementation 'androidx.fragment:fragment:1.5.3' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From e6e46299b6eac7f8c3448ffa68598baab67d69cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 08:00:35 +0000 Subject: [PATCH 322/621] Bump annotation from 1.4.0 to 1.5.0 (#765) Bumps annotation from 1.4.0 to 1.5.0. --- updated-dependencies: - dependency-name: androidx.annotation:annotation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- core/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index a2c25240..1386dece 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -18,7 +18,7 @@ android { } dependencies { - implementation 'androidx.annotation:annotation:1.4.0' + implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' implementation 'androidx.fragment:fragment:1.5.3' diff --git a/core/build.gradle b/core/build.gradle index 7a8c5b64..4868d3e8 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -28,7 +28,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.core:core:1.9.0' - implementation 'androidx.annotation:annotation:1.4.0' + implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From 424dbc0a28b6b986606e68311949ecce6a91c23d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 26 Sep 2022 08:22:20 +0000 Subject: [PATCH 323/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 334609d8..dd52d311 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.41.1' - versionCode 153 + versionName '0.42.0' + versionCode 154 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From ca64f1019525c94f7cdc3463b243d7652f814350 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 08:30:35 +0100 Subject: [PATCH 324/621] Bump epoxy from 4.6.4 to 5.0.0 (#767) Bumps [epoxy](https://github.com/airbnb/epoxy) from 4.6.4 to 5.0.0. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/commits/5.0.0) --- updated-dependencies: - dependency-name: com.airbnb.android:epoxy dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index a85df2a4..44c89600 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation fresco - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/app/build.gradle b/app/build.gradle index dd52d311..d03d589f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,7 +125,7 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index db1fb055..a92f102a 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 55299a94..44626002 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index eb7edc0c..571abd43 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 94f1c0ef..21bdb0d2 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index b955d404..7494b628 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -21,5 +21,5 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.core:core:1.9.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 457359bb..72818f22 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:4.6.4' + implementation 'com.airbnb.android:epoxy:5.0.0' implementation 'com.jakewharton.timber:timber:5.0.1' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From 7a4b7ad8bb52a06e30c599fa8ff23125e3b5a429 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 07:37:34 +0000 Subject: [PATCH 325/621] Bump kotlin_version from 1.7.10 to 1.7.20 (#766) Bumps `kotlin_version` from 1.7.10 to 1.7.20. Updates `kotlin-gradle-plugin` from 1.7.10 to 1.7.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.20/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.10...v1.7.20) Updates `kotlin-stdlib` from 1.7.10 to 1.7.20 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/v1.7.20/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.10...v1.7.20) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 52c42952..f3421309 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.7.10' + ext.kotlin_version = '1.7.20' repositories { google() mavenCentral() From 428eb2effebf5caf3419ee23bbec447c332cec27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 07:44:09 +0000 Subject: [PATCH 326/621] Bump threetenabp from 1.4.0 to 1.4.1 (#768) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.4.0 to 1.4.1. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.4.0...1.4.1) --- updated-dependencies: - dependency-name: com.jakewharton.threetenabp:threetenabp dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 44c89600..d7712bde 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation coroutinesCore - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' implementation okHttpLoggingInterceptor implementation 'com.squareup.okio:okio:3.2.0' diff --git a/app/build.gradle b/app/build.gradle index d03d589f..a52f4381 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation dagger implementation retrofit - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/core/build.gradle b/core/build.gradle index 4868d3e8..2f424ce2 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' implementation fresco kapt daggerAnnotationProcessor From 7fc8ce1a787ee2e188184d0cccacd3f197d7a895 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 12 Oct 2022 20:48:57 +0200 Subject: [PATCH 327/621] Move Firebase implementations to core module (#769) * Move Firebase implementations to core module * Add WakeLock permission --- .../client/FirebaseEventConverterTest.kt | 1 + app/src/main/AndroidManifest.xml | 3 --- .../com/jraska/github/client/AppComponent.kt | 1 + .../jraska/github/client/GitHubClientApp.kt | 4 ++-- core/build.gradle | 6 +++++- core/src/main/AndroidManifest.xml | 5 +++++ .../android/firebase}/FirebaseConfigProxy.kt | 14 ++++++++------ .../android/firebase}/FirebaseCoreModule.kt | 18 +++++++++++------- .../firebase}/FirebaseCrashlyticsProxy.kt | 2 +- .../firebase}/FirebaseCrashlyticsReporter.kt | 4 +++- .../firebase}/FirebaseEventAnalytics.kt | 5 +++-- .../firebase}/FirebaseEventConverter.kt | 2 +- .../src/main/res/xml/config_defaults.xml | 0 13 files changed, 41 insertions(+), 24 deletions(-) rename {app/src/main/java/com/jraska/github/client => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseConfigProxy.kt (84%) rename {app/src/main/java/com/jraska/github/client => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseCoreModule.kt (74%) rename {app/src/main/java/com/jraska/github/client/logging => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseCrashlyticsProxy.kt (84%) rename {app/src/main/java/com/jraska/github/client/logging => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseCrashlyticsReporter.kt (78%) rename {app/src/main/java/com/jraska/github/client => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseEventAnalytics.kt (83%) rename {app/src/main/java/com/jraska/github/client => core/src/main/java/com/jraska/github/client/core/android/firebase}/FirebaseEventConverter.kt (93%) rename {app => core}/src/main/res/xml/config_defaults.xml (100%) diff --git a/app/src/androidTest/java/com/jraska/github/client/FirebaseEventConverterTest.kt b/app/src/androidTest/java/com/jraska/github/client/FirebaseEventConverterTest.kt index 615b0829..b760246f 100644 --- a/app/src/androidTest/java/com/jraska/github/client/FirebaseEventConverterTest.kt +++ b/app/src/androidTest/java/com/jraska/github/client/FirebaseEventConverterTest.kt @@ -1,6 +1,7 @@ package com.jraska.github.client import com.jraska.github.client.analytics.AnalyticsEvent +import com.jraska.github.client.core.android.firebase.FirebaseEventConverter import org.assertj.core.api.Assertions.assertThat import org.junit.Test diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dddd9533..bffc59c8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,9 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.jraska.github.client"> - - - + + + + @@ -16,5 +20,6 @@ android:scheme="https"/> + diff --git a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseConfigProxy.kt similarity index 84% rename from app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseConfigProxy.kt index 6bd119c3..e1231ce2 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseConfigProxy.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseConfigProxy.kt @@ -1,18 +1,20 @@ -package com.jraska.github.client +package com.jraska.github.client.core.android.firebase import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.crashlytics.FirebaseCrashlytics import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.jraska.github.client.Config +import com.jraska.github.client.core.R import timber.log.Timber -import java.util.Date +import java.util.* internal class FirebaseConfigProxy(private val config: FirebaseRemoteConfig) : Config { private val onFetchCompleteListener: OnCompleteListener = OnCompleteListener { config.activate() - Timber.d( - "Config fetch complete. last fetch: %s", - Date(config.info.fetchTimeMillis) - ) + Timber.d( + "Config fetch complete. last fetch: %s", + Date(config.info.fetchTimeMillis) + ) configsToCrashlytics() } diff --git a/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCoreModule.kt similarity index 74% rename from app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCoreModule.kt index 4d60f926..7f3d9a3d 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseCoreModule.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCoreModule.kt @@ -1,12 +1,13 @@ -package com.jraska.github.client +package com.jraska.github.client.core.android.firebase import com.google.firebase.FirebaseApp import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import com.jraska.github.client.Config +import com.jraska.github.client.Owner import com.jraska.github.client.analytics.AnalyticsProperty import com.jraska.github.client.analytics.EventAnalytics import com.jraska.github.client.logging.CrashReporter -import com.jraska.github.client.logging.FirebaseCrashlyticsReporter import dagger.Module import dagger.Provides import timber.log.Timber @@ -18,25 +19,28 @@ object FirebaseCoreModule { private val ANALYTICS_DISABLED_KEY = Config.Key("analytics_disabled", Owner.CORE_TEAM) @Provides - @Singleton internal fun firebaseAnalytics(config: Config): FirebaseEventAnalytics { + @Singleton + internal fun firebaseAnalytics(config: Config): FirebaseEventAnalytics { val firebaseAnalytics = FirebaseAnalytics.getInstance(FirebaseApp.getInstance().applicationContext) if (config.getBoolean(ANALYTICS_DISABLED_KEY)) { firebaseAnalytics.setAnalyticsCollectionEnabled(false) - Timber.d("Analytics disabled") + Timber.d("Analytics disabled") } else { firebaseAnalytics.setAnalyticsCollectionEnabled(true) - Timber.d("Analytics enabled") + Timber.d("Analytics enabled") } return FirebaseEventAnalytics(firebaseAnalytics) } - @Provides internal fun eventAnalytics(analytics: FirebaseEventAnalytics): EventAnalytics { + @Provides + internal fun eventAnalytics(analytics: FirebaseEventAnalytics): EventAnalytics { return analytics } - @Provides internal fun analyticsProperty(analytics: FirebaseEventAnalytics): AnalyticsProperty { + @Provides + internal fun analyticsProperty(analytics: FirebaseEventAnalytics): AnalyticsProperty { return analytics } diff --git a/app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsProxy.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsProxy.kt similarity index 84% rename from app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsProxy.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsProxy.kt index 5cf0c7f3..a65a6a81 100644 --- a/app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsProxy.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsProxy.kt @@ -1,4 +1,4 @@ -package com.jraska.github.client.logging +package com.jraska.github.client.core.android.firebase import com.google.firebase.crashlytics.FirebaseCrashlytics diff --git a/app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsReporter.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsReporter.kt similarity index 78% rename from app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsReporter.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsReporter.kt index a4b9920d..63b0b210 100644 --- a/app/src/main/java/com/jraska/github/client/logging/FirebaseCrashlyticsReporter.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseCrashlyticsReporter.kt @@ -1,4 +1,6 @@ -package com.jraska.github.client.logging +package com.jraska.github.client.core.android.firebase + +import com.jraska.github.client.logging.CrashReporter class FirebaseCrashlyticsReporter internal constructor(private val crashlyticsProxy: FirebaseCrashlyticsProxy) : CrashReporter { diff --git a/app/src/main/java/com/jraska/github/client/FirebaseEventAnalytics.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventAnalytics.kt similarity index 83% rename from app/src/main/java/com/jraska/github/client/FirebaseEventAnalytics.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventAnalytics.kt index 237675f1..dc0d3bca 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseEventAnalytics.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventAnalytics.kt @@ -1,11 +1,12 @@ -package com.jraska.github.client +package com.jraska.github.client.core.android.firebase import com.google.firebase.analytics.FirebaseAnalytics import com.jraska.github.client.analytics.AnalyticsEvent import com.jraska.github.client.analytics.AnalyticsProperty import com.jraska.github.client.analytics.EventAnalytics -internal class FirebaseEventAnalytics(private val analytics: FirebaseAnalytics) : EventAnalytics, AnalyticsProperty { +internal class FirebaseEventAnalytics(private val analytics: FirebaseAnalytics) : EventAnalytics, + AnalyticsProperty { override fun setUserProperty(key: String, value: String) { analytics.setUserProperty(key, value) diff --git a/app/src/main/java/com/jraska/github/client/FirebaseEventConverter.kt b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventConverter.kt similarity index 93% rename from app/src/main/java/com/jraska/github/client/FirebaseEventConverter.kt rename to core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventConverter.kt index 80a1934b..26bf8261 100644 --- a/app/src/main/java/com/jraska/github/client/FirebaseEventConverter.kt +++ b/core/src/main/java/com/jraska/github/client/core/android/firebase/FirebaseEventConverter.kt @@ -1,4 +1,4 @@ -package com.jraska.github.client +package com.jraska.github.client.core.android.firebase import android.os.Bundle diff --git a/app/src/main/res/xml/config_defaults.xml b/core/src/main/res/xml/config_defaults.xml similarity index 100% rename from app/src/main/res/xml/config_defaults.xml rename to core/src/main/res/xml/config_defaults.xml From 8fd9d1e8a78b6ff79ecab7c3575f65ba3fcf3c17 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 12 Oct 2022 18:55:02 +0000 Subject: [PATCH 328/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a52f4381..14e2b55b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.42.0' - versionCode 154 + versionName '0.42.1' + versionCode 155 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 8b143b3e4ed8b2be1af8a66c034c1f8812ee881c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 09:38:18 +0200 Subject: [PATCH 329/621] Bump threetenabp from 1.4.1 to 1.4.2 (#771) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.4.1...1.4.2) --- updated-dependencies: - dependency-name: com.jakewharton.threetenabp:threetenabp dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index d7712bde..91a75fad 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation coroutinesCore - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' implementation okHttpLoggingInterceptor implementation 'com.squareup.okio:okio:3.2.0' diff --git a/app/build.gradle b/app/build.gradle index 14e2b55b..649c2534 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation dagger implementation retrofit - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/core/build.gradle b/core/build.gradle index 27d7909e..eaa7f205 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.1' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' implementation fresco kapt daggerAnnotationProcessor From cf13f0250e7c16af0a3517b5987832a0da0a3fb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 07:44:13 +0000 Subject: [PATCH 330/621] Bump gradle from 7.3.0 to 7.3.1 (#770) Bumps gradle from 7.3.0 to 7.3.1. --- updated-dependencies: - dependency-name: com.android.tools.build:gradle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f3421309..ee39c365 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:7.3.1' classpath 'com.google.firebase:perf-plugin:1.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' classpath 'com.google.gms:google-services:4.3.14' From 2b86de2c7b451f9dfffad005cbcc31f8c7d48031 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 09:55:07 +0200 Subject: [PATCH 331/621] Bump mixpanel-java from 1.4.4 to 1.5.1 (#773) Bumps [mixpanel-java](https://github.com/mixpanel/mixpanel-java) from 1.4.4 to 1.5.1. - [Release notes](https://github.com/mixpanel/mixpanel-java/releases) - [Commits](https://github.com/mixpanel/mixpanel-java/compare/mixpanel-java-1.4.4...mixpanel-java-1.5.1) --- updated-dependencies: - dependency-name: com.mixpanel:mixpanel-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- plugins/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/build.gradle b/plugins/build.gradle index 3d6e2b38..fbb39114 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -18,7 +18,7 @@ repositories { dependencies { implementation gradleApi() implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.10" - implementation 'com.mixpanel:mixpanel-java:1.4.4' + implementation 'com.mixpanel:mixpanel-java:1.5.1' implementation retrofit implementation retrofitGsonConverter From 47027129018d5449fe28b2a22e6080c3280abf8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 21:49:49 +0000 Subject: [PATCH 332/621] Bump firebase-bom from 30.5.0 to 31.0.0 (#772) * Bump firebase-bom from 30.5.0 to 31.0.0 Bumps firebase-bom from 30.5.0 to 31.0.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Use analytics artifact as core was removed Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- app/build.gradle | 4 ++-- core/build.gradle | 4 ++-- feature/push/build.gradle | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 649c2534..35b801ad 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,8 +129,8 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' - implementation platform('com.google.firebase:firebase-bom:30.5.0') - implementation 'com.google.firebase:firebase-core' + implementation platform('com.google.firebase:firebase-bom:31.0.0') + implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-crashlytics' diff --git a/core/build.gradle b/core/build.gradle index eaa7f205..14057aaf 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,8 +49,8 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.1' implementation okHttpLoggingInterceptor - implementation platform('com.google.firebase:firebase-bom:30.5.0') - implementation 'com.google.firebase:firebase-core' + implementation platform('com.google.firebase:firebase-bom:31.0.0') + implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-crashlytics' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 4416a0ab..b3d3452e 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation platform('com.google.firebase:firebase-bom:30.5.0') + implementation platform('com.google.firebase:firebase-bom:31.0.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From f8d52fb67824cbb14c5f056e922ce602b951e27f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 09:15:36 +0200 Subject: [PATCH 333/621] Bump epoxy from 5.0.0 to 5.1.0 (#774) Bumps [epoxy](https://github.com/airbnb/epoxy) from 5.0.0 to 5.1.0. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/5.0.0...5.1.0) --- updated-dependencies: - dependency-name: com.airbnb.android:epoxy dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 91a75fad..02f49fa7 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation fresco - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' kapt daggerAnnotationProcessor implementation dagger diff --git a/app/build.gradle b/app/build.gradle index 35b801ad..639093a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,7 +125,7 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' implementation 'com.google.android.material:material:1.6.1' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index a92f102a..0a673fd5 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 44626002..3f45d64e 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 571abd43..b6084cce 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 21bdb0d2..43a57557 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 7494b628..590f54cc 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -21,5 +21,5 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.core:core:1.9.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 72818f22..39f4b85b 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.0.0' + implementation 'com.airbnb.android:epoxy:5.1.0' implementation 'com.jakewharton.timber:timber:5.0.1' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From 8596fcfd8b8cb6a27228575857801ed48b5864c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 07:23:58 +0000 Subject: [PATCH 334/621] Bump material from 1.6.1 to 1.7.0 (#776) Bumps [material](https://github.com/material-components/material-components-android) from 1.6.1 to 1.7.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.6.1...1.7.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/network-status/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 02f49fa7..1479c95b 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -47,7 +47,7 @@ dependencies { implementation 'androidx.media:media:1.6.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation retrofit diff --git a/app/build.gradle b/app/build.gradle index 639093a6..b10ed5bd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -127,7 +127,7 @@ dependencies { implementation 'com.airbnb.android:epoxy:5.1.0' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation platform('com.google.firebase:firebase-bom:31.0.0') implementation 'com.google.firebase:firebase-analytics' diff --git a/core/build.gradle b/core/build.gradle index 14057aaf..e1e01b7f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -41,7 +41,7 @@ dependencies { implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation retrofit diff --git a/feature/about/build.gradle b/feature/about/build.gradle index 0a673fd5..a3d23a81 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' androidTestImplementation 'junit:junit:4.13.2' diff --git a/feature/network-status/build.gradle b/feature/network-status/build.gradle index 0bafc4b8..78376573 100644 --- a/feature/network-status/build.gradle +++ b/feature/network-status/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation coroutinesJvm implementation coroutinesAndroid implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index b6084cce..d52a2f7e 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -36,7 +36,7 @@ dependencies { implementation retrofitGsonConverter implementation 'com.google.code.gson:gson:2.9.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.airbnb.android:epoxy:5.1.0' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 43a57557..5e4d2a74 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation project(':feature:ui-common-api') implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.airbnb.android:epoxy:5.1.0' implementation 'com.jraska:console:1.2.0' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 39f4b85b..afbc0ca1 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation coroutinesJvm implementation coroutinesCore - implementation 'com.google.android.material:material:1.6.1' + implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' From d1470cb12eb96d42384454bb1210be7294c26c36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Oct 2022 07:33:07 +0000 Subject: [PATCH 335/621] Bump perf-plugin from 1.4.1 to 1.4.2 (#775) Bumps perf-plugin from 1.4.1 to 1.4.2. --- updated-dependencies: - dependency-name: com.google.firebase:perf-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ee39c365..63049123 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:7.3.1' - classpath 'com.google.firebase:perf-plugin:1.4.1' + classpath 'com.google.firebase:perf-plugin:1.4.2' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2' classpath 'com.google.gms:google-services:4.3.14' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" From c9e61e9fd11110b51456d5b57e76f83b1179eeb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 01:14:33 +0100 Subject: [PATCH 336/621] Bump fragment from 1.5.3 to 1.5.4 (#777) Bumps fragment from 1.5.3 to 1.5.4. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 1386dece..4106d6a2 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' - implementation 'androidx.fragment:fragment:1.5.3' + implementation 'androidx.fragment:fragment:1.5.4' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From f9ef37d63da9cfde1fce9133bb47e01331042878 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 20:07:22 +0000 Subject: [PATCH 337/621] Bump firebase-bom from 31.0.0 to 31.0.2 (#778) Bumps firebase-bom from 31.0.0 to 31.0.2. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/push/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b10ed5bd..c1f23544 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'com.google.android.material:material:1.7.0' - implementation platform('com.google.firebase:firebase-bom:31.0.0') + implementation platform('com.google.firebase:firebase-bom:31.0.2') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/core/build.gradle b/core/build.gradle index e1e01b7f..e5e62e1d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,7 +49,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.9.1' implementation okHttpLoggingInterceptor - implementation platform('com.google.firebase:firebase-bom:31.0.0') + implementation platform('com.google.firebase:firebase-bom:31.0.2') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-crashlytics' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index b3d3452e..14f8ccdb 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation platform('com.google.firebase:firebase-bom:31.0.0') + implementation platform('com.google.firebase:firebase-bom:31.0.2') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 4184c60b9be8220a4ad26639510478bab713b7b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 20:13:31 +0000 Subject: [PATCH 338/621] Bump gson from 2.9.1 to 2.10 (#779) Bumps [gson](https://github.com/google/gson) from 2.9.1 to 2.10. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.9.1...gson-parent-2.10) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c1f23544..8a12d5e6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,7 +149,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10' androidTestImplementation espressoCore androidTestImplementation espressoIdlingResource diff --git a/core/build.gradle b/core/build.gradle index e5e62e1d..7b807e2a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10' implementation okHttpLoggingInterceptor implementation platform('com.google.firebase:firebase-bom:31.0.2') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index d52a2f7e..573171db 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -34,7 +34,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10' implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' diff --git a/feature/users/build.gradle b/feature/users/build.gradle index afbc0ca1..6a4c6d6a 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation retrofit implementation retrofitGsonConverter - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10' implementation coroutinesJvm implementation coroutinesCore From 3f1056253c27a984a75faf96518c350b13cb4e39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 31 Oct 2022 20:18:46 +0000 Subject: [PATCH 339/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8a12d5e6..a17f9fdc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.42.1' - versionCode 155 + versionName '0.43.0' + versionCode 156 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From c376941b53e362399c97559eec3cee4b8f811743 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 07:48:35 +0100 Subject: [PATCH 340/621] Bump threetenabp from 1.4.2 to 1.4.3 (#780) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.4.2...1.4.3) --- updated-dependencies: - dependency-name: com.jakewharton.threetenabp:threetenabp dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 1479c95b..2f55f3e2 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation coroutinesCore - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' implementation okHttpLoggingInterceptor implementation 'com.squareup.okio:okio:3.2.0' diff --git a/app/build.gradle b/app/build.gradle index a17f9fdc..588c0119 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation dagger implementation retrofit - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/core/build.gradle b/core/build.gradle index 7b807e2a..711a2d0a 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.2' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' implementation fresco kapt daggerAnnotationProcessor From eb54421ff7b3fe8c3f8423480e42cb1d695611c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 06:54:16 +0000 Subject: [PATCH 341/621] Bump epoxy from 5.1.0 to 5.1.1 (#781) Bumps [epoxy](https://github.com/airbnb/epoxy) from 5.1.0 to 5.1.1. - [Release notes](https://github.com/airbnb/epoxy/releases) - [Changelog](https://github.com/airbnb/epoxy/blob/master/CHANGELOG.md) - [Commits](https://github.com/airbnb/epoxy/compare/5.1.0...5.1.1) --- updated-dependencies: - dependency-name: com.airbnb.android:epoxy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- feature/about/build.gradle | 2 +- feature/config-debug/build.gradle | 2 +- feature/repo/build.gradle | 2 +- feature/settings/build.gradle | 2 +- feature/ui-common-api/build.gradle | 2 +- feature/users/build.gradle | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 2f55f3e2..767b03f8 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation fresco - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' kapt daggerAnnotationProcessor implementation dagger diff --git a/app/build.gradle b/app/build.gradle index 588c0119..68a95b6a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,7 +125,7 @@ dependencies { implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' implementation 'com.google.android.material:material:1.7.0' diff --git a/feature/about/build.gradle b/feature/about/build.gradle index a3d23a81..155f815b 100644 --- a/feature/about/build.gradle +++ b/feature/about/build.gradle @@ -27,7 +27,7 @@ dependencies { kapt daggerAnnotationProcessor implementation dagger - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' implementation okHttp implementation frescoDrawee implementation 'androidx.recyclerview:recyclerview:1.2.1' diff --git a/feature/config-debug/build.gradle b/feature/config-debug/build.gradle index 3f45d64e..5247bbc9 100644 --- a/feature/config-debug/build.gradle +++ b/feature/config-debug/build.gradle @@ -25,7 +25,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' testImplementation 'junit:junit:4.13.2' testImplementation project(':core-testing') diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 573171db..2707f204 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index 5e4d2a74..d58d39c6 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' implementation 'com.jraska:console:1.2.0' implementation 'com.jraska:console-timber-tree:1.2.0' implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/feature/ui-common-api/build.gradle b/feature/ui-common-api/build.gradle index 590f54cc..932b44c8 100644 --- a/feature/ui-common-api/build.gradle +++ b/feature/ui-common-api/build.gradle @@ -21,5 +21,5 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.core:core:1.9.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 6a4c6d6a..895f199c 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -46,7 +46,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'com.airbnb.android:epoxy:5.1.0' + implementation 'com.airbnb.android:epoxy:5.1.1' implementation 'com.jakewharton.timber:timber:5.0.1' implementation fresco implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' From e4f6380f08fb8d03c0d1d6dbce926b8552fbb9dd Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Tue, 15 Nov 2022 00:13:43 +0100 Subject: [PATCH 342/621] Livedata testing to 1.3.0 (#782) --- feature/repo/build.gradle | 2 +- feature/users/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/feature/repo/build.gradle b/feature/repo/build.gradle index 2707f204..3e5ab321 100644 --- a/feature/repo/build.gradle +++ b/feature/repo/build.gradle @@ -49,7 +49,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation project(':core-testing') testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' + testImplementation 'com.jraska.livedata:testing-ktx:1.3.0' testImplementation coroutinesTest kaptTest daggerAnnotationProcessor } diff --git a/feature/users/build.gradle b/feature/users/build.gradle index 895f199c..a335a166 100644 --- a/feature/users/build.gradle +++ b/feature/users/build.gradle @@ -53,7 +53,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1" - testImplementation 'com.jraska.livedata:testing-ktx:1.2.0' + testImplementation 'com.jraska.livedata:testing-ktx:1.3.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation 'androidx.arch.core:core-testing:2.1.0' From 1d298721f3478142a8bd9231b25f6e9151b3843e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 23:20:48 +0000 Subject: [PATCH 343/621] Bump androidTestVersion from 1.4.0 to 1.5.0 (#783) Bumps `androidTestVersion` from 1.4.0 to 1.5.0. Updates `runner` from 1.4.0 to 1.5.0 Updates `rules` from 1.4.0 to 1.5.0 Updates `monitor` from 1.4.0 to 1.5.0 --- updated-dependencies: - dependency-name: androidx.test:runner dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: androidx.test:rules dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: androidx.test:monitor dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index f2349f8e..66fbae96 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -26,7 +26,7 @@ ext { espressoCore = "androidx.test.espresso:espresso-core:$espressoVersion" espressoIdlingResource = "androidx.test.espresso:espresso-idling-resource:$espressoVersion" - androidTestVersion = '1.4.0' + androidTestVersion = '1.5.0' androidTestRunner = "androidx.test:runner:$androidTestVersion" androidTestRules = "androidx.test:rules:$androidTestVersion" androidTestMonitor = "androidx.test:monitor:$androidTestVersion" From 0bed081f77d827d940ea20553f1be566c4e46382 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 01:43:01 +0100 Subject: [PATCH 344/621] Bump kotlin_version from 1.7.20 to 1.7.21 (#784) Bumps `kotlin_version` from 1.7.20 to 1.7.21. Updates `kotlin-gradle-plugin` from 1.7.20 to 1.7.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.20...v1.7.21) Updates `kotlin-stdlib` from 1.7.20 to 1.7.21 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.20...v1.7.21) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- plugins/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 63049123..eca64d68 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.7.20' + ext.kotlin_version = '1.7.21' repositories { google() mavenCentral() diff --git a/plugins/build.gradle b/plugins/build.gradle index fbb39114..c7ff10a8 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21" } } @@ -17,7 +17,7 @@ repositories { dependencies { implementation gradleApi() - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.10" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.21" implementation 'com.mixpanel:mixpanel-java:1.5.1' implementation retrofit From 81614b9561b4f0c2814ef9d84d6d64eb7e1c629d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Nov 2022 00:58:02 +0000 Subject: [PATCH 345/621] Bump espressoVersion from 3.4.0 to 3.5.0 (#785) Bumps `espressoVersion` from 3.4.0 to 3.5.0. Updates `espresso-core` from 3.4.0 to 3.5.0 Updates `espresso-idling-resource` from 3.4.0 to 3.5.0 --- updated-dependencies: - dependency-name: androidx.test.espresso:espresso-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: androidx.test.espresso:espresso-idling-resource dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 66fbae96..7dcf6262 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -22,7 +22,7 @@ ext { fresco = "com.facebook.fresco:fresco:$frescoVesion" frescoDrawee = "com.facebook.fresco:drawee:$frescoVesion" - espressoVersion = '3.4.0' + espressoVersion = '3.5.0' espressoCore = "androidx.test.espresso:espresso-core:$espressoVersion" espressoIdlingResource = "androidx.test.espresso:espresso-idling-resource:$espressoVersion" From 0b08aed30fcc676b967908e744a513ed6a3f84b9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 15 Nov 2022 01:05:46 +0000 Subject: [PATCH 346/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 68a95b6a..96b5dce3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.43.0' - versionCode 156 + versionName '0.44.0' + versionCode 157 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From 2c0952d7e63801d6a06bc67762106302a7ff68d6 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 20 Nov 2022 12:48:51 +0100 Subject: [PATCH 347/621] Use Kotlin immutable collections instead of Collections.unmodifiable* (#786) --- .../jraska/github/client/analytics/AnalyticsEvent.kt | 3 +-- .../java/com/jraska/github/client/push/PushAction.kt | 4 +--- .../push/RemoteMessageToActionConverterTest.kt | 3 +-- .../client/users/model/GitHubApiUsersRepository.kt | 9 +++------ .../jraska/github/client/users/model/UserDetail.kt | 12 +++--------- 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/core-api/src/main/java/com/jraska/github/client/analytics/AnalyticsEvent.kt b/core-api/src/main/java/com/jraska/github/client/analytics/AnalyticsEvent.kt index 9fbd4d95..5a985671 100644 --- a/core-api/src/main/java/com/jraska/github/client/analytics/AnalyticsEvent.kt +++ b/core-api/src/main/java/com/jraska/github/client/analytics/AnalyticsEvent.kt @@ -1,7 +1,6 @@ package com.jraska.github.client.analytics import com.jraska.github.client.Owner -import java.util.Collections class AnalyticsEvent private constructor( val key: Key, @@ -41,7 +40,7 @@ class AnalyticsEvent private constructor( } fun build(): AnalyticsEvent { - return AnalyticsEvent(key, Collections.unmodifiableMap(properties)) + return AnalyticsEvent(key, properties) } } diff --git a/feature/push/src/main/java/com/jraska/github/client/push/PushAction.kt b/feature/push/src/main/java/com/jraska/github/client/push/PushAction.kt index 7d4d38bc..675ab5b8 100644 --- a/feature/push/src/main/java/com/jraska/github/client/push/PushAction.kt +++ b/feature/push/src/main/java/com/jraska/github/client/push/PushAction.kt @@ -1,7 +1,5 @@ package com.jraska.github.client.push -import java.util.Collections - class PushAction private constructor(val name: String, val parameters: Map) { companion object { const val KEY_ACTION = "action" @@ -11,7 +9,7 @@ class PushAction private constructor(val name: String, val parameters: Map = emptyMap()): PushAction { - return PushAction(name, Collections.unmodifiableMap(properties)) + return PushAction(name, properties) } } } diff --git a/feature/push/src/test/java/com/jraska/github/client/push/RemoteMessageToActionConverterTest.kt b/feature/push/src/test/java/com/jraska/github/client/push/RemoteMessageToActionConverterTest.kt index a22cb4c8..bd7cd562 100644 --- a/feature/push/src/test/java/com/jraska/github/client/push/RemoteMessageToActionConverterTest.kt +++ b/feature/push/src/test/java/com/jraska/github/client/push/RemoteMessageToActionConverterTest.kt @@ -2,13 +2,12 @@ package com.jraska.github.client.push import org.assertj.core.api.Assertions.assertThat import org.junit.Test -import java.util.Collections class RemoteMessageToActionConverterTest { @Test fun whenRemoteMessageWithoutActionThenDefaultReturned() { val action = - RemoteMessageToActionConverter.convert(Collections.emptyMap()) + RemoteMessageToActionConverter.convert(emptyMap()) assertThat(action.name).isEqualTo(PushAction.DEFAULT.name) } diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt index 900d2643..5c92c6be 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/GitHubApiUsersRepository.kt @@ -7,7 +7,6 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.withContext -import java.util.Collections internal class GitHubApiUsersRepository( private val gitHubUsersApi: GitHubUsersApi, @@ -20,7 +19,7 @@ internal class GitHubApiUsersRepository( override suspend fun getUsers(since: Int): List { val userDtos = gitHubUsersApi.getUsers(since).result() - return translateUsers(userDtos).also { lastUsers = it } + return convertUsers(userDtos).also { lastUsers = it } } override fun getUserDetail(login: String, reposInSection: Int): Flow { @@ -48,10 +47,8 @@ internal class GitHubApiUsersRepository( ?.let { UserDetail(it, null, emptyList(), emptyList()) } } - private fun translateUsers(gitHubUsers: List): List { - val users = gitHubUsers.map { convert(it) } - - return Collections.unmodifiableList(users) + private fun convertUsers(gitHubUsers: List): List { + return gitHubUsers.map { convert(it) } } private fun convert(gitHubUser: GitHubUser): User { diff --git a/feature/users/src/main/java/com/jraska/github/client/users/model/UserDetail.kt b/feature/users/src/main/java/com/jraska/github/client/users/model/UserDetail.kt index 1029b9c5..d6f0f814 100644 --- a/feature/users/src/main/java/com/jraska/github/client/users/model/UserDetail.kt +++ b/feature/users/src/main/java/com/jraska/github/client/users/model/UserDetail.kt @@ -1,14 +1,8 @@ package com.jraska.github.client.users.model -import java.util.Collections - internal class UserDetail( val user: User, val basicStats: UserStats?, - popularRepos: List, - contributedRepos: List -) { - - val popularRepos: List = Collections.unmodifiableList(popularRepos) - val contributedRepos: List = Collections.unmodifiableList(contributedRepos) -} + val popularRepos: List, + val contributedRepos: List +) From 254ab68bc2e36aef0ebf368dc65ad618736a0787 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 01:35:35 +0100 Subject: [PATCH 348/621] Bump daggerVersion from 2.44 to 2.44.2 (#787) Bumps `daggerVersion` from 2.44 to 2.44.2. Updates `dagger-compiler` from 2.44 to 2.44.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.44...dagger-2.44.2) Updates `dagger` from 2.44 to 2.44.2 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.44...dagger-2.44.2) --- updated-dependencies: - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index 7dcf6262..1161cfb4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,7 +9,7 @@ ext { retrofit = "com.squareup.retrofit2:retrofit:$retrofitVersion" retrofitGsonConverter = "com.squareup.retrofit2:converter-gson:$retrofitVersion" - daggerVersion = '2.44' + daggerVersion = '2.44.2' daggerAnnotationProcessor = "com.google.dagger:dagger-compiler:$daggerVersion" dagger = "com.google.dagger:dagger:$daggerVersion" From bb050ca913f8340623ded96f4b1ba8970338e91d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 00:43:04 +0000 Subject: [PATCH 349/621] Bump firebase-bom from 31.0.2 to 31.1.0 (#788) Bumps firebase-bom from 31.0.2 to 31.1.0. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/push/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 96b5dce3..9da69af6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'com.google.android.material:material:1.7.0' - implementation platform('com.google.firebase:firebase-bom:31.0.2') + implementation platform('com.google.firebase:firebase-bom:31.1.0') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/core/build.gradle b/core/build.gradle index 711a2d0a..90dcd4b4 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,7 +49,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.10' implementation okHttpLoggingInterceptor - implementation platform('com.google.firebase:firebase-bom:31.0.2') + implementation platform('com.google.firebase:firebase-bom:31.1.0') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-crashlytics' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index 14f8ccdb..b17668f5 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation platform('com.google.firebase:firebase-bom:31.0.2') + implementation platform('com.google.firebase:firebase-bom:31.1.0') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From cb5a54d9d1b33a9ff6079b74e97db48d0f02edd6 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:08:28 +0000 Subject: [PATCH 350/621] Update Firebase URL parser (#790) --- .../firebase/report/FirebaseUrlParser.kt | 4 +- .../firebase/report/FirebaseUrlParserTest.kt | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt index 184999b0..9e881b6d 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt @@ -1,12 +1,12 @@ package com.jraska.github.client.firebase.report object FirebaseUrlParser { - private val urlPattern = """Test results will be streamed to \[(\S*)\]""".toPattern() + private val urlPattern = """Test results will be streamed to \[([\S ]*)\]""".toPattern() fun parse(output: String): String { val matcher = urlPattern.matcher(output) matcher.find() - return matcher.group(1) + return matcher.group(1).trim() } } diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt index 23efae1f..416c95bf 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt @@ -11,6 +11,13 @@ class FirebaseUrlParserTest { assertThat(url).isEqualTo("https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4937539158600939569") } + @Test + fun findsNewUrlProperly() { + val url = FirebaseUrlParser.parse(EXAMPLE_OUTPUT_2) + + assertThat(url).isEqualTo("https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4992084868422917621") + } + companion object { val EXAMPLE_OUTPUT = """ Have questions, feedback, or issues? Get support by visiting: @@ -60,5 +67,39 @@ class FirebaseUrlParserTest { │ Failed │ flame-29-en-portrait │ 1 test cases failed, 13 passed │ └─────────┴──────────────────────┴────────────────────────────────┘ """.trimIndent() + + val EXAMPLE_OUTPUT_2 = """ + Have questions, feedback, or issues? Get support by visiting: + https://firebase.google.com/support/ + + Uploading [/home/runner/work/github-client/github-client/app/build/outputs/apk/debug/app-debug.apk] to Firebase Test Lab... + Uploading [/home/runner/work/github-client/github-client/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk] to Firebase Test Lab... + Raw results will be stored in your GCS bucket at [https://console.developers.google.com/storage/browser/test-lab-twsawhz0hy5am-h35y3vymzadax/2022-12-06T19:01:26.459081/] + + Test [matrix-zvqc95opgthaa] has been created in the Google Cloud. + Creating individual test executions... + ...............................done. + Firebase Test Lab will execute your instrumentation test on 2 device(s). More devices may be added later if flaky test attempts are specified. + + Test results will be streamed to [ https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4992084868422917621 ]. + + 19:02:41 Test matrix status: Pending:2 + 19:02:53 Test matrix status: Pending:2 + 19:03:05 Test matrix status: Running:2 + 19:03:18 Test matrix status: Running:2 + 19:03:30 Test matrix status: Running:2 + 19:03:42 Test matrix status: Running:2 + 19:03:54 Test matrix status: Finished:1 Running:1 + 19:04:06 Test matrix status: Finished:2 + Instrumentation testing complete. + + More details are available at [ https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4992084868422917621 ]. + ┌─────────┬────────────────────────┬──────────────────────┐ + │ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │ + ├─────────┼────────────────────────┼──────────────────────┤ + │ Passed │ bluejay-32-en-portrait │ 16 test cases passed │ + │ Passed │ cheetah-33-en-portrait │ 16 test cases passed │ + └─────────┴────────────────────────┴──────────────────────┘ + """.trimIndent() } } From 5177d12debb922152a62622e4d487286650f18a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 10:14:04 +0000 Subject: [PATCH 351/621] Bump kotlin_version from 1.7.21 to 1.7.22 (#789) * Bump kotlin_version from 1.7.21 to 1.7.22 Bumps `kotlin_version` from 1.7.21 to 1.7.22. Updates `kotlin-gradle-plugin` from 1.7.21 to 1.7.22 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.21...v1.7.22) Updates `kotlin-stdlib` from 1.7.21 to 1.7.22 - [Release notes](https://github.com/JetBrains/kotlin/releases) - [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md) - [Commits](https://github.com/JetBrains/kotlin/compare/v1.7.21...v1.7.22) --- updated-dependencies: - dependency-name: org.jetbrains.kotlin:kotlin-gradle-plugin dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jetbrains.kotlin:kotlin-stdlib dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Try 2 different devices Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Josef Raska <6277721+jraska@users.noreply.github.com> --- build.gradle | 2 +- plugins/build.gradle | 4 ++-- .../src/main/java/com/jraska/github/client/firebase/Device.kt | 3 +++ .../jraska/github/client/firebase/FirebaseTestLabPlugin.kt | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index eca64d68..1ec360f2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.7.21' + ext.kotlin_version = '1.7.22' repositories { google() mavenCentral() diff --git a/plugins/build.gradle b/plugins/build.gradle index c7ff10a8..a7b5fa6b 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.22" } } @@ -17,7 +17,7 @@ repositories { dependencies { implementation gradleApi() - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.21" + implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.22" implementation 'com.mixpanel:mixpanel-java:1.5.1' implementation retrofit diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt index 6d8f7b36..c242b5ee 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt @@ -17,5 +17,8 @@ class Device( companion object { val Pixel5 = Device("redfin", 30, "en", "portrait") val Pixel2 = Device("walleye", 27, "en", "portrait") + val Pixel7 = Device("panther", 33, "en", "portrait") + val Pixel6a = Device("bluejay", 32, "en", "portrait") + val Pixel7Pro = Device("cheetah", 33, "en", "portrait") } } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt index 92b7344b..9f1b8839 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt @@ -29,8 +29,8 @@ class FirebaseTestLabPlugin : Plugin { val appApk = "${project.buildDir}/outputs/apk/debug/app-debug.apk" val testApk = "${project.buildDir}/outputs/apk/androidTest/debug/app-debug-androidTest.apk" - val firstDevice = Device.Pixel5 - val secondDevice = Device.Pixel2 + val firstDevice = Device.Pixel7Pro + val secondDevice = Device.Pixel6a val resultDir = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()) val fcmKey = System.getenv("FCM_API_KEY") From cb67af18cc66c0607fdf72be1d7175fd55fa0665 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 7 Dec 2022 22:47:45 +0000 Subject: [PATCH 352/621] Use 3 devices for UI tests, refactor Firebase Test Lab plugin (#791) * Enable debug logging * Enable info logging * Refactor out test configuration * Refactor out GCloud commands * Add test for GCloudCommands * Extract pulling and parsing files into method * FirebaseUrl, CI+Git info moved only to reporting, not to event itself * Have devices as a generic list * Use 3 devices * Flaky test reruns * Keep just Pixel 7 Pro to test the flakiness * Keep just Pixel 7 Pro to test the flakiness - one more commit to parallelize the feedback loop * Use 3 devices again and get ready for merge * Use 3 devices again and get ready for merge * Use Pixel 7 instead Pixel 7 Pro as that one is flaky * Parse devices from Firebase output to detect flaky tests * Test error bringing flakiness * Test error bringing flakiness * Running just one device and checking how to parse result * Try out Standard output * Use Standard output to parse the device results * Remove flaky test --- .github/workflows/build.yml | 2 +- .../client/users/test/UsersActivityTest.kt | 2 + .../jraska/github/client/firebase/Device.kt | 4 +- .../client/firebase/FirebaseTestLabPlugin.kt | 85 +++++++++++-------- .../github/client/firebase/GCloudCommands.kt | 28 ++++++ .../client/firebase/TestConfiguration.kt | 24 ++++++ .../github/client/firebase/TestSuiteResult.kt | 9 -- .../firebase/report/DeviceRunOutcome.kt | 9 ++ .../firebase/report/FirebaseOutputParser.kt | 46 ++++++++++ .../report/FirebaseResultExtractor.kt | 11 --- .../firebase/report/FirebaseUrlParser.kt | 12 --- .../firebase/report/TestResultsReporter.kt | 23 +++-- .../client/firebase/GCloudCommandsTest.kt | 32 +++++++ ...serTest.kt => FirebaseOutputParserTest.kt} | 78 +++++++++++++++-- .../report/FirebaseResultExtractorTest.kt | 3 +- 15 files changed, 276 insertions(+), 92 deletions(-) create mode 100644 plugins/src/main/java/com/jraska/github/client/firebase/GCloudCommands.kt create mode 100644 plugins/src/main/java/com/jraska/github/client/firebase/TestConfiguration.kt create mode 100644 plugins/src/main/java/com/jraska/github/client/firebase/report/DeviceRunOutcome.kt create mode 100644 plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseOutputParser.kt delete mode 100644 plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt create mode 100644 plugins/src/test/kotlin/com/jraska/github/client/firebase/GCloudCommandsTest.kt rename plugins/src/test/kotlin/com/jraska/github/client/firebase/report/{FirebaseUrlParserTest.kt => FirebaseOutputParserTest.kt} (60%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e2eada4..d7de66d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,7 +41,7 @@ jobs: env: GCLOUD_CREDENTIALS: ${{ secrets.GCLOUD_CREDENTIALS }} FCM_API_KEY: ${{ secrets.FCM_API_KEY }} - run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace + run: ./gradlew runInstrumentedTestsOnFirebase --stacktrace lint: runs-on: ubuntu-latest steps: diff --git a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt index e5dceecd..3b02c381 100644 --- a/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt +++ b/feature/users/src/androidTest/java/com/jraska/github/client/users/test/UsersActivityTest.kt @@ -13,6 +13,7 @@ import okhttp3.mockwebserver.MockWebServer import org.assertj.core.api.Assertions.assertThat import org.junit.Rule import org.junit.Test +import kotlin.random.Random class UsersActivityTest { @@ -37,6 +38,7 @@ class UsersActivityTest { onView(withText("mojombo")).perform(click()) val nextScreen = it.linksLaunched.last() + assertThat(nextScreen.toString()).isEqualTo("https://github.com/mojombo") } } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt index c242b5ee..51d5f6f7 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/Device.kt @@ -15,10 +15,8 @@ class Device( } companion object { - val Pixel5 = Device("redfin", 30, "en", "portrait") val Pixel2 = Device("walleye", 27, "en", "portrait") - val Pixel7 = Device("panther", 33, "en", "portrait") val Pixel6a = Device("bluejay", 32, "en", "portrait") - val Pixel7Pro = Device("cheetah", 33, "en", "portrait") + val Pixel7 = Device("panther", 33, "en", "portrait") } } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt index 9f1b8839..e1b2df44 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/FirebaseTestLabPlugin.kt @@ -1,8 +1,9 @@ package com.jraska.github.client.firebase import com.jraska.analytics.AnalyticsReporter +import com.jraska.github.client.firebase.report.DeviceRunOutcome +import com.jraska.github.client.firebase.report.FirebaseOutputParser import com.jraska.github.client.firebase.report.FirebaseResultExtractor -import com.jraska.github.client.firebase.report.FirebaseUrlParser import com.jraska.github.client.firebase.report.TestResultsReporter import com.jraska.gradle.CiInfo import com.jraska.gradle.git.GitInfoProvider @@ -13,8 +14,6 @@ import org.gradle.api.tasks.Exec import org.gradle.process.ExecResult import java.io.ByteArrayOutputStream import java.io.File -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter class FirebaseTestLabPlugin : Plugin { override fun apply(theProject: Project) { @@ -27,50 +26,41 @@ class FirebaseTestLabPlugin : Plugin { project.exec("gcloud auth activate-service-account --key-file $credentialsPath") } - val appApk = "${project.buildDir}/outputs/apk/debug/app-debug.apk" - val testApk = "${project.buildDir}/outputs/apk/androidTest/debug/app-debug-androidTest.apk" - val firstDevice = Device.Pixel7Pro - val secondDevice = Device.Pixel6a - val resultDir = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()) - - val fcmKey = System.getenv("FCM_API_KEY") + val testConfiguration = TestConfiguration.create(project) + val envVars = mapOf("FCM_API_KEY" to System.getenv("FCM_API_KEY")) firebaseTask.commandLine = - ("gcloud " + - "firebase test android run " + - "--app $appApk " + - "--test $testApk " + - "--device ${firstDevice.firebaseCommandString()} " + - "--device ${secondDevice.firebaseCommandString()} " + - "--results-dir $resultDir " + - "--no-performance-metrics " + - "--timeout 3m " + - "--environment-variables FCM_API_KEY=$fcmKey") - .split(' ') + GCloudCommands.firebaseRunCommand(testConfiguration, envVars).split(' ') firebaseTask.isIgnoreExitValue = true - val decorativeStream = ByteArrayOutputStream() - firebaseTask.errorOutput = TeeOutputStream(decorativeStream, System.err) + val decorativeErrorStream = ByteArrayOutputStream() + firebaseTask.errorOutput = TeeOutputStream(decorativeErrorStream, System.err) + + val decorativeStdStream = ByteArrayOutputStream() + firebaseTask.standardOutput = TeeOutputStream(decorativeStdStream, System.out) firebaseTask.doLast { - val firstOutputFile = "${project.buildDir}/test-results/${firstDevice.cloudStoragePath()}/firebase-tests-results.xml" - val firstResultsFileToPull = "gs://test-lab-twsawhz0hy5am-h35y3vymzadax/$resultDir/${firstDevice.cloudStoragePath()}/test_result_1.xml" - project.exec("gsutil cp $firstResultsFileToPull $firstOutputFile") + val firebaseUrl = FirebaseOutputParser.parseUrl(decorativeErrorStream.toString()) - val firebaseUrl = FirebaseUrlParser.parse(decorativeStream.toString()) - val firstResult = FirebaseResultExtractor(firebaseUrl, GitInfoProvider.gitInfo(project), CiInfo.collectGitHubActions(), firstDevice).extract(File(firstOutputFile).readText()) + val deviceResults = + FirebaseOutputParser.deviceResults(testConfiguration.devices, decorativeStdStream.toString()) - val secondOutputFile = "${project.buildDir}/test-results/${secondDevice.cloudStoragePath()}/firebase-tests-results.xml" - val secondResultsFileToPull = "gs://test-lab-twsawhz0hy5am-h35y3vymzadax/$resultDir/${secondDevice.cloudStoragePath()}/test_result_1.xml" - project.exec("gsutil cp $secondResultsFileToPull $secondOutputFile") + val testSuiteResults = deviceResults.map { + testSuiteResult(project, it, testConfiguration.resultDir) + } - val secondResult = FirebaseResultExtractor(firebaseUrl, GitInfoProvider.gitInfo(project), CiInfo.collectGitHubActions(), secondDevice).extract(File(secondOutputFile).readText()) + val reporter = TestResultsReporter( + AnalyticsReporter.create("Test Reporter"), + firebaseUrl, + GitInfoProvider.gitInfo(project), + CiInfo.collectGitHubActions() + ) - val reporter = TestResultsReporter(AnalyticsReporter.create("Test Reporter")) + testSuiteResults.forEach { + reporter.report(it) + } - reporter.report(firstResult) - reporter.report(secondResult) - firebaseTask.execResult!!.assertNormalExitValue() + firebaseTask.executionResult.get().assertNormalExitValue() } firebaseTask.dependsOn(project.tasks.named("assembleDebugAndroidTest")) @@ -79,6 +69,27 @@ class FirebaseTestLabPlugin : Plugin { } } + private fun testSuiteResult( + project: Project, + deviceOutcome: DeviceRunOutcome, + resultDir: String + ): TestSuiteResult { + val device = deviceOutcome.device + + val outputFile = + "${project.buildDir}/test-results/${device.cloudStoragePath()}/firebase-tests-results.xml" + + val resultsFileToPull = if (deviceOutcome.outcome == TestOutcome.FLAKY) { + "gs://test-lab-twsawhz0hy5am-h35y3vymzadax/$resultDir/${device.cloudStoragePath()}-test_results_merged.xml" + } else { + "gs://test-lab-twsawhz0hy5am-h35y3vymzadax/$resultDir/${device.cloudStoragePath()}/test_result_1.xml" + } + + project.exec("gsutil cp $resultsFileToPull $outputFile") + + return FirebaseResultExtractor(device).extract(File(outputFile).readText()) + } + private fun Project.exec(command: String): ExecResult { return exec { it.commandLine(command.split(" ")) @@ -93,4 +104,6 @@ class FirebaseTestLabPlugin : Plugin { } return credentialsPath } + + // ./gsutil cp gs://test-lab-twsawhz0hy5am-h35y3vymzadax/2022-12-07T09:08:49.257735/cheetah-33-en-portrait/test_result_1.xml file.xml } diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/GCloudCommands.kt b/plugins/src/main/java/com/jraska/github/client/firebase/GCloudCommands.kt new file mode 100644 index 00000000..33798ffa --- /dev/null +++ b/plugins/src/main/java/com/jraska/github/client/firebase/GCloudCommands.kt @@ -0,0 +1,28 @@ +package com.jraska.github.client.firebase + +object GCloudCommands { + fun firebaseRunCommand( + testConfiguration: TestConfiguration, + envVars: Map + ): String { + if (envVars.isEmpty()) { + throw IllegalArgumentException("Version without env vars not supported for simplicity now") + } + + val envVarsString = envVars.entries.map { "${it.key}=${it.value}" }.joinToString(",") + + val devicesString = testConfiguration.devices + .joinToString(" ") { "--device " + it.firebaseCommandString() } + + return ("gcloud " + + "firebase test android run " + + "--app ${testConfiguration.appApkPath} " + + "--test ${testConfiguration.testApkPath} " + + "$devicesString " + + "--results-dir ${testConfiguration.resultDir} " + + "--no-performance-metrics " + + "--num-flaky-test-attempts=1 " + + "--timeout 3m " + + "--environment-variables $envVarsString") + } +} diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/TestConfiguration.kt b/plugins/src/main/java/com/jraska/github/client/firebase/TestConfiguration.kt new file mode 100644 index 00000000..8fa639e0 --- /dev/null +++ b/plugins/src/main/java/com/jraska/github/client/firebase/TestConfiguration.kt @@ -0,0 +1,24 @@ +package com.jraska.github.client.firebase + +import org.gradle.api.Project +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +class TestConfiguration( + val appApkPath: String, + val testApkPath: String, + val devices: List, + val resultDir: String +) { + companion object { + fun create(project: Project): TestConfiguration { + val appApk = "${project.buildDir}/outputs/apk/debug/app-debug.apk" + val testApk = "${project.buildDir}/outputs/apk/androidTest/debug/app-debug-androidTest.apk" + + val resultDir = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()) + val devices = listOf(Device.Pixel7, Device.Pixel6a, Device.Pixel2) + + return TestConfiguration(appApk, testApk, devices, resultDir) + } + } +} diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/TestSuiteResult.kt b/plugins/src/main/java/com/jraska/github/client/firebase/TestSuiteResult.kt index a757d6db..27eaa0ac 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/TestSuiteResult.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/TestSuiteResult.kt @@ -1,8 +1,5 @@ package com.jraska.github.client.firebase -import com.jraska.gradle.CiInfo -import com.jraska.gradle.git.GitInfo - data class TestSuiteResult( val testResults: List, val time: Double, @@ -13,9 +10,6 @@ data class TestSuiteResult( val passedCount: Int, val ignoredCount: Int, val flakyCount: Int, - val firebaseUrl: String, - val gitInfo: GitInfo, - val ciInfo: CiInfo?, val device: String ) @@ -25,9 +19,6 @@ data class TestResult( val methodName: String, val time: Double, val fullName: String, - val gitInfo: GitInfo, - val ciInfo: CiInfo?, - val firebaseUrl: String, val failure: String?, val device: String ) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/DeviceRunOutcome.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/DeviceRunOutcome.kt new file mode 100644 index 00000000..ded98cec --- /dev/null +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/DeviceRunOutcome.kt @@ -0,0 +1,9 @@ +package com.jraska.github.client.firebase.report + +import com.jraska.github.client.firebase.Device +import com.jraska.github.client.firebase.TestOutcome + +class DeviceRunOutcome( + val device: Device, + val outcome: TestOutcome +) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseOutputParser.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseOutputParser.kt new file mode 100644 index 00000000..0db41a08 --- /dev/null +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseOutputParser.kt @@ -0,0 +1,46 @@ +package com.jraska.github.client.firebase.report + +import com.jraska.github.client.firebase.Device +import com.jraska.github.client.firebase.TestOutcome + +object FirebaseOutputParser { + private val urlPattern = """Test results will be streamed to \[([\S ]*)\]""".toPattern() + private val deviceOutputPattern = """(Passed|Failed|Flaky ) \│ ([a-z0-9-]*)""".toPattern() + + fun parseUrl(output: String): String { + val matcher = urlPattern.matcher(output) + + matcher.find() + return matcher.group(1).trim() + } + + fun deviceResults(devices: List, output: String): List { + val matcher = deviceOutputPattern.matcher(output) + + val results = mutableListOf() + while (matcher.find()) { + val outcome = mapOutcome(matcher.group(1).trim()) + + val deviceText = matcher.group(2) + val device = (devices.find { it.cloudStoragePath() == deviceText } + ?: throw IllegalStateException("Not found device $deviceText")) + + results.add(DeviceRunOutcome(device, outcome)) + } + + if (results.size != devices.size) { + throw IllegalStateException("The input and output devices should have same amount of devices- Input: $devices, results: $results") + } + + return results + } + + private fun mapOutcome(text: String): TestOutcome { + return when (text) { + "Passed" -> TestOutcome.PASSED + "Flaky" -> TestOutcome.FLAKY + "Failed" -> TestOutcome.FAILED + else -> throw IllegalArgumentException("Unrecognzed text '$text' to parse as test outcome.") + } + } +} diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt index 9c51b587..be4fb979 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseResultExtractor.kt @@ -4,16 +4,11 @@ import com.jraska.github.client.firebase.Device import com.jraska.github.client.firebase.TestOutcome import com.jraska.github.client.firebase.TestResult import com.jraska.github.client.firebase.TestSuiteResult -import com.jraska.gradle.CiInfo -import com.jraska.gradle.git.GitInfo import groovy.util.Node import groovy.util.NodeList import groovy.util.XmlParser class FirebaseResultExtractor( - private val firebaseUrl: String, - private val gitInfo: GitInfo, - private val ciInfo: CiInfo?, private val device: Device ) { fun extract(xml: String): TestSuiteResult { @@ -44,9 +39,6 @@ class FirebaseResultExtractor( time = time, testsCount = testsCount, device = device.firebaseCommandString(), - gitInfo = gitInfo, - ciInfo = ciInfo, - firebaseUrl = firebaseUrl, errorsCount = errorsCount, passedCount = passedCount, failedCount = failedCount, @@ -74,9 +66,6 @@ class FirebaseResultExtractor( time = testNode.attributeDouble("time"), failure = failure, outcome = outcome, - firebaseUrl = firebaseUrl, - gitInfo = gitInfo, - ciInfo = ciInfo, device = device.firebaseCommandString(), fullName = "$className#$methodName" ) diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt deleted file mode 100644 index 9e881b6d..00000000 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/FirebaseUrlParser.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.jraska.github.client.firebase.report - -object FirebaseUrlParser { - private val urlPattern = """Test results will be streamed to \[([\S ]*)\]""".toPattern() - - fun parse(output: String): String { - val matcher = urlPattern.matcher(output) - - matcher.find() - return matcher.group(1).trim() - } -} diff --git a/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt b/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt index 19e23b52..88c41ede 100644 --- a/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt +++ b/plugins/src/main/java/com/jraska/github/client/firebase/report/TestResultsReporter.kt @@ -4,9 +4,14 @@ import com.jraska.analytics.AnalyticsEvent import com.jraska.analytics.AnalyticsReporter import com.jraska.github.client.firebase.TestResult import com.jraska.github.client.firebase.TestSuiteResult +import com.jraska.gradle.CiInfo +import com.jraska.gradle.git.GitInfo class TestResultsReporter( - private val analyticsReporter: AnalyticsReporter + private val analyticsReporter: AnalyticsReporter, + private val firebaseUrl: String, + private val gitInfo: GitInfo, + private val ciInfo: CiInfo?, ) { fun report(results: TestSuiteResult) { val delivery = mutableListOf() @@ -29,15 +34,15 @@ class TestResultsReporter( "className" to testResult.className, "methodName" to testResult.methodName, "device" to testResult.device, - "firebaseUrl" to testResult.firebaseUrl, + "firebaseUrl" to firebaseUrl, "fullName" to testResult.fullName, "failure" to testResult.failure, "outcome" to testResult.outcome, "testTime" to testResult.time ).apply { - putAll(testResult.gitInfo.asAnalyticsProperties()) - if(testResult.ciInfo != null) { - putAll(testResult.ciInfo.asAnalyticsProperties()) + putAll(gitInfo.asAnalyticsProperties()) + if (ciInfo != null) { + putAll(ciInfo.asAnalyticsProperties()) } } } @@ -47,7 +52,7 @@ class TestResultsReporter( "passed" to results.suitePassed, "suiteTime" to results.time, "device" to results.device, - "firebaseUrl" to results.firebaseUrl, + "firebaseUrl" to firebaseUrl, "passedCount" to results.passedCount, "testsCount" to results.testsCount, "ignoredCount" to results.ignoredCount, @@ -55,9 +60,9 @@ class TestResultsReporter( "failedCount" to results.failedCount, "errorsCount" to results.errorsCount ).apply { - putAll(results.gitInfo.asAnalyticsProperties()) - if(results.ciInfo != null) { - putAll(results.ciInfo.asAnalyticsProperties()) + putAll(gitInfo.asAnalyticsProperties()) + if (ciInfo != null) { + putAll(ciInfo.asAnalyticsProperties()) } } } diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/GCloudCommandsTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/GCloudCommandsTest.kt new file mode 100644 index 00000000..ca9fe804 --- /dev/null +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/GCloudCommandsTest.kt @@ -0,0 +1,32 @@ +package com.jraska.github.client.firebase + +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test + +class GCloudCommandsTest { + @Test + fun composesCommandCorrectly() { + val testConfiguration = TestConfiguration( + "/hey/hou/app.apk", + "hey/hou/test-app.apk", + listOf(Device.Pixel6a, Device.Pixel7), + "result-path-123.456" + ) + + val firebaseRunCommand = + GCloudCommands.firebaseRunCommand(testConfiguration, mapOf("FCM_API_KEY" to "35327abc123")) + + assertThat(firebaseRunCommand).isEqualTo(EXPECTED_COMMAND) + } + + companion object { + const val EXPECTED_COMMAND = + "gcloud firebase test android run " + + "--app /hey/hou/app.apk " + + "--test hey/hou/test-app.apk " + + "--device model=bluejay,version=32,locale=en,orientation=portrait " + + "--device model=panther,version=33,locale=en,orientation=portrait " + + "--results-dir result-path-123.456 --no-performance-metrics --num-flaky-test-attempts=1 --timeout 3m " + + "--environment-variables FCM_API_KEY=35327abc123" + } +} diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseOutputParserTest.kt similarity index 60% rename from plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt rename to plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseOutputParserTest.kt index 416c95bf..1087f601 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseUrlParserTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseOutputParserTest.kt @@ -1,23 +1,56 @@ package com.jraska.github.client.firebase.report +import com.jraska.github.client.firebase.Device +import com.jraska.github.client.firebase.TestOutcome import org.assertj.core.api.Assertions.assertThat import org.junit.Test -class FirebaseUrlParserTest { +class FirebaseOutputParserTest { @Test fun findsUrlProperly() { - val url = FirebaseUrlParser.parse(EXAMPLE_OUTPUT) + val url = FirebaseOutputParser.parseUrl(EXAMPLE_OUTPUT) assertThat(url).isEqualTo("https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4937539158600939569") } @Test fun findsNewUrlProperly() { - val url = FirebaseUrlParser.parse(EXAMPLE_OUTPUT_2) + val url = FirebaseOutputParser.parseUrl(EXAMPLE_OUTPUT_2) assertThat(url).isEqualTo("https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4992084868422917621") } + @Test + fun parsesFailedResultProperly() { + val deviceResults = FirebaseOutputParser.deviceResults(listOf(Device.Pixel6a), EXAMPLE_OUTPUT) + + assertThat(deviceResults).hasSize(1) + assertThat(deviceResults[0].outcome).isEqualTo(TestOutcome.FAILED) + } + + @Test + fun parsesSuccessResultProperly() { + val deviceResults = + FirebaseOutputParser.deviceResults(listOf(Device.Pixel6a, Device.Pixel7), EXAMPLE_OUTPUT_2) + + assertThat(deviceResults).hasSize(2) + assertThat(deviceResults[0].outcome).isEqualTo(TestOutcome.PASSED) + assertThat(deviceResults[1].outcome).isEqualTo(TestOutcome.PASSED) + } + + @Test + fun parsesFlakyResultProperly() { + val deviceResults = FirebaseOutputParser.deviceResults( + listOf(Device.Pixel6a, Device.Pixel2, Device.Pixel7), + FLAKY_OUTPUT + ) + + assertThat(deviceResults).hasSize(3) + assertThat(deviceResults[0].outcome).isEqualTo(TestOutcome.FAILED) + assertThat(deviceResults[1].outcome).isEqualTo(TestOutcome.FLAKY) + assertThat(deviceResults[2].outcome).isEqualTo(TestOutcome.PASSED) + } + companion object { val EXAMPLE_OUTPUT = """ Have questions, feedback, or issues? Get support by visiting: @@ -61,11 +94,11 @@ class FirebaseUrlParserTest { Instrumentation testing complete. More details are available at [https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/4937539158600939569]. - ┌─────────┬──────────────────────┬────────────────────────────────┐ - │ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │ - ├─────────┼──────────────────────┼────────────────────────────────┤ - │ Failed │ flame-29-en-portrait │ 1 test cases failed, 13 passed │ - └─────────┴──────────────────────┴────────────────────────────────┘ + ┌─────────┬────────────────────────┬────────────────────────────────┐ + │ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │ + ├─────────┼────────────────────────┼────────────────────────────────┤ + │ Failed │ bluejay-32-en-portrait │ 1 test cases failed, 13 passed │ + └─────────┴────────────────────────┴────────────────────────────────┘ """.trimIndent() val EXAMPLE_OUTPUT_2 = """ @@ -98,8 +131,35 @@ class FirebaseUrlParserTest { │ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │ ├─────────┼────────────────────────┼──────────────────────┤ │ Passed │ bluejay-32-en-portrait │ 16 test cases passed │ - │ Passed │ cheetah-33-en-portrait │ 16 test cases passed │ + │ Passed │ panther-33-en-portrait │ 16 test cases passed │ └─────────┴────────────────────────┴──────────────────────┘ """.trimIndent() } + + val FLAKY_OUTPUT = """ + Test results will be streamed to [ https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/7826067465486884652 ]. + + 17:54:09 Test matrix status: Pending:1 + 17:54:22 Test matrix status: Running:1 + 17:54:34 Test matrix status: Running:1 + 17:54:46 Test matrix status: Running:1 + 17:54:58 Test matrix status: Running:1 + 17:55:10 Test matrix status: Finished:1 Pending:1 + 17:55:22 Test matrix status: Finished:1 Pending:1 + 17:55:34 Test matrix status: Finished:1 Running:1 + 17:55:47 Test matrix status: Finished:1 Running:1 + 17:55:59 Test matrix status: Finished:1 Running:1 + 17:56:11 Test matrix status: Finished:1 Running:1 + 17:56:23 Test matrix status: Finished:2 + Instrumentation testing complete. + + More details are available at [ https://console.firebase.google.com/project/github-client-25b47/testlab/histories/bh.45e06288a93d3fad/matrices/7826067465486884652 ]. + ┌─────────┬────────────────────────┬───────────────────────────────┐ + │ OUTCOME │ TEST_AXIS_VALUE │ TEST_DETAILS │ + ├─────────┼────────────────────────┼───────────────────────────────┤ + │ Failed │ bluejay-32-en-portrait │ 16 test cases passed │ + │ Flaky │ walleye-27-en-portrait │ 1 test cases flaky, 15 passed │ + | Passed │ panther-33-en-portrait │ 16 test cases passed │ + └─────────┴────────────────────────┴───────────────────────────────┘ + """.trimIndent() } diff --git a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt index b7b4cfe4..7f630721 100644 --- a/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt +++ b/plugins/src/test/kotlin/com/jraska/github/client/firebase/report/FirebaseResultExtractorTest.kt @@ -2,7 +2,6 @@ package com.jraska.github.client.firebase.report import com.jraska.github.client.firebase.Device import com.jraska.github.client.firebase.TestOutcome -import com.jraska.gradle.git.GitInfo import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -13,7 +12,7 @@ class FirebaseResultExtractorTest { @Before fun setUp() { - extractor = FirebaseResultExtractor("someUrl", GitInfo("exampleBrach", "123", false, ""), null, Device.Pixel5) + extractor = FirebaseResultExtractor(Device.Pixel6a) } @Test From 2d54b00fddadd3370fda78446eabca1224772e84 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Wed, 7 Dec 2022 23:07:16 +0000 Subject: [PATCH 353/621] Gradle to 7.6 (#792) --- gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 60756 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 6 ++++++ gradlew.bat | 14 ++++++++------ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..249e5832f090a2944b7473328c07c9755baa3196 100644 GIT binary patch delta 10197 zcmaKS1ymhDwk=#NxVyW%y9U<)A-Dv)xI0|j{UX8L-JRg>5ZnnKAh;%chM6~S-g^K4 z>eZ{yK4;gd>gwvXs=Id8Jk-J}R4pT911;+{Jp9@aiz6!p1Oz9z&_kGLA%J5%3Ih@0 zQ|U}%$)3u|G`jIfPzMVfcWs?jV2BO^*3+q2><~>3j+Z`^Z%=;19VWg0XndJ zwJ~;f4$;t6pBKaWn}UNO-wLCFHBd^1)^v%$P)fJk1PbK5<;Z1K&>k~MUod6d%@Bq9 z>(44uiaK&sdhwTTxFJvC$JDnl;f}*Q-^01T508(8{+!WyquuyB7R!d!J)8Ni0p!cV6$CHsLLy6}7C zYv_$eD;)@L)tLj0GkGpBoa727hs%wH$>EhfuFy{_8Q8@1HI%ZAjlpX$ob{=%g6`Ox zLzM!d^zy`VV1dT9U9(^}YvlTO9Bf8v^wMK37`4wFNFzW?HWDY(U(k6@tp(crHD)X5>8S-# zW1qgdaZa*Sh6i%60e1+hty}34dD%vKgb?QmQiZ=-j+isA4={V_*R$oGN#j|#ia@n6 zuZx4e2Xx?^lUwYFn2&Tmbx0qA3Z8;y+zKoeQu;~k~FZGy!FU_TFxYd!Ck;5QvMx9gj5fI2@BLNp~Ps@ zf@k<&Q2GS5Ia9?_D?v~$I%_CLA4x~eiKIZ>9w^c#r|vB?wXxZ(vXd*vH(Fd%Me8p( z=_0)k=iRh%8i`FYRF>E97uOFTBfajv{IOz(7CU zv0Gd84+o&ciHlVtY)wn6yhZTQQO*4Mvc#dxa>h}82mEKKy7arOqU$enb9sgh#E=Lq zU;_RVm{)30{bw+|056%jMVcZRGEBSJ+JZ@jH#~DvaDQm92^TyUq=bY*+AkEakpK>8 zB{)CkK48&nE5AzTqT;WysOG|!y}5fshxR8Ek(^H6i>|Fd&wu?c&Q@N9ZrJ=?ABHI! z`*z8D`w=~AJ!P-9M=T}f`;76$qZRllB&8#9WgbuO$P7lVqdX1=g*t=7z6!0AQ^ux_ z9rcfUv^t}o_l-ZE+TqvqFsA*~W<^78!k;~!i8(eS+(+@u8FxK+Q7;mHZ<1}|4m<}vh@p`t%|@eM_J(P% zI>M7C)Ir{l|J;$G_EGGEhbP4?6{sYzMqBv+x95N&YWFH6UcE@b}B?q)G*4<4mR@sy1#vPnLMK51tb#ED(8TA1nE zYfhK7bo1!R5WJF$5Y?zG21)6+_(_5oSX9sGIW;(O&S?Rh(nydNQYzKjjJ54aDJ-1F zrJ=np8LsN?%?Rt7f~3aAX!2E{`fh_pb?2(;HOB3W+I*~A>W%iY+v45+^e$cE10fA} zXPvw9=Bd+(;+!rl)pkYj0HGB}+3Z!Mr;zr%gz~c-hFMv8b2VRE2R$8V=_XE zq$3=|Yg05(fmwrJ)QK2ptB4no`Y8Dg_vK2QDc6-6sXRQ5k78-+cPi-fH}vpgs|Ive zE=m*XNVs?EWgiNI!5AcD*3QMW)R`EqT!f0e1%hERO&?AT7HWnSf5@#AR{OGuXG3Zb zCnVWg7h|61lGV3k+>L<#d>)InG>ETn1DbOHCfztqzQ_fBiaUt@q6VMy={Fe-w#~2- z0?*f|z$zgjI9>+JVICObBaK=pU}AEOd@q(8d?j7zQFD@=6t`|KmolTr2MfBI$;EGh zD%W0cA_d#V6Lb$us5yIG(|d>r-QleC4;%hEu5W9hyY zY#+ESY&v`8(&mC~?*|e5WEhC!YU2>m_}`K+q9)a(d$bsS<=YkyZGp}YA%TXw>@abA zS_poVPoN+?<6?DAuCNt&5SHV(hp56PJ})swwVFZFXM->F zc|0c8<$H_OV%DR|y7e+s$12@Ac8SUClPg8_O9sTUjpv%6Jsn5vsZCg>wL+db4c+{+ zsg<#wOuV4jeOq`veckdi-1`dz;gvL)bZeH|D*x=8UwRU5&8W1@l>3$)8WzET0%;1J zM3(X<7tKK&9~kWRI{&FmwY5Gg!b5f4kI_vSm)H1#>l6M+OiReDXC{kPy!`%Ecq-+3yZTk=<` zm)pE6xum5q0Qkd#iny0Q-S}@I0;mDhxf>sX)Oiv)FdsAMnpx%oe8OQ`m%Xeozdzx!C1rQR>m1c_}+J4x)K}k{G zo68;oGG&Ox7w^-m7{g4a7NJu-B|~M;oIH~~#`RyUNm##feZH;E?pf}nshmoiIY52n z%pc%lnU4Q#C=RUz)RU6}E_j4#)jh<&a%JyJj$Fufc#&COaxFHtl}zJUGNLBu3~_@1 zn9F^JO9);Duxo&i@>X(kbYga1i>6p1fca8FzQ0>((Lb-aPUbC*d~a03V$y;*RBY!R ziEJ2IF^FjrvO}0Uy{cMn%u<+P5U!UO>pm9#ZYL5i6|xSC+np7IH$GfXs&uI;y4as@ z&AzJh>(S2?3PKKgab3Z(`xbx(C#46XIvVcW8eG_DjT~}Yz_8PWZ`uf6^Xr=vkvL_` zqmvfgJL+Zc`;iq~iP?%@G7}~fal-zqxa0yNyHBJJ5M)9bI>7S_cg?Ya&p(I)C5Ef4 zZ>YAF6x|U=?ec?g*|f2g5Tw3PgxaM_bi_5Az9MO$;_Byw(2d}2%-|bg4ShdQ;)Z|M z4K|tFv)qx*kKGKoyh!DQY<{n&UmAChq@DJrQP>EY7g1JF(ih*D8wCVWyQ z5Jj^|-NVFSh5T0vd1>hUvPV6?=`90^_)t(L9)XOW7jeP45NyA2lzOn&QAPTl&d#6P zSv%36uaN(9i9WlpcH#}rmiP#=L0q(dfhdxvFVaOwM;pY;KvNQ9wMyUKs6{d}29DZQ z{H3&Sosr6)9Z+C>Q5)iHSW~gGoWGgK-0;k~&dyr-bA3O|3PCNzgC?UKS_B=^i8Ri^ zd_*_qI4B07Cayq|p4{`U_E_P=K`N_~{F|+-+`sCgcNxs`%X!$=(?l2aAW}0M=~COb zf19oe^iuAUuDEf)4tgv<=WRPpK@IjToNNC*#&Ykw!)aqWU4h#|U@(cG_=Qx+&xt~a zvCz~Ds3F71dsjNLkfM%TqdVNu=RNMOzh7?b+%hICbFlOAPphrYy>7D-e7{%o_kPFn z;T!?ilE-LcKM0P(GKMseEeW57Vs`=FF}(y@^pQl;rL3fHs8icmA+!6YJt&8 ztSF?%Un35qkv>drkks&BNTJv~xK?vD;aBkp7eIkDYqn+G0%;sT4FcwAoO+vke{8CO z0d76sgg$CannW5T#q`z~L4id)9BCKRU0A!Z-{HpXr)QJrd9@iJB+l32Ql)Z}*v(St zE)Vp=BB=DDB4Pr}B(UHNe31<@!6d{U?XDoxJ@S)9QM)2L%SA0x^~^fb=bdsBy!uh& zU?M_^kvnt%FZzm+>~bEH{2o?v&Iogs`1t-b+Ml`J!ZPS(46YQJKxWE81O$HE5w;** z|8zM%bp`M7J8)4;%DqH`wVTmM0V@D}xd%tRE3_6>ioMJxyi5Hkb>85muF81&EY!73ei zA3e<#ug||EZJ=1GLXNJ)A z791&ge#lF;GVX6IU?iw0jX^1bYaU?+x{zPlpyX6zijyn*nEdZ$fxxkl!a-~*P3bkf zPd*pzu~3GBYkR_>ET`5UM^>>zTV>5m>)f=az{d0sg6a8VzUtXy$ZS?h#Gk-CA?7)c zI%Vu9DN6XSDQn6;?n9`>l$q&>s?K)R8*OsmI+$L_m z_~E`}w694Z*`Xk3Ne=497Si~=RWRqCM?6=88smrxle#s*W znwhTRsMRmg?37GLJ-)%nDZA7r$YG849j8mJWir1bWBy& zZPneYojSbooC8U@tkO`bWx4%E5*;p#Q^1^S3lsfy7(6A{jL0`A__0vm?>xC%1y8_m z57FfWr^@YG2I1K7MGYuYd>JC}@sT2n^rkrY3w%~$J$Y~HSoOHn?zpR$ zjLj_bq@Yj8kd~DXHh30KVbz@K)0S;hPKm+S&-o%IG+@x@MEcrxW2KFh;z^4dJDZix zGRGe&lQD$p)0JVF4NRgGYuh0bYLy)BCy~sbS3^b3 zHixT<%-Vwbht|25T{3^Hk;qZ^3s!OOgljHs+EIf~C%=_>R5%vQI4mQR9qOXThMXlU zS|oSH>0PjnCakb*js2{ObN`}%HYsT6=%(xA| znpUtG_TJ08kHgm5l@G|t?4E3tG2fq?wNtIp*Vqrb{9@bo^~Rx7+J&OnayrX`LDcF~ zd@0m0ZJ#Z@=T>4kTa5e2FjI&5c(F7S{gnRPoGpu9eIqrtSvnT_tk$8T)r%YwZw!gK zj*k@cG)V&@t+mtDi37#>LhVGTfRA^p%x0d#_P|Mktz3*KOoLIqFm`~KGoDDD4OOxe z?}ag_c08u%vu=5Vx=~uoS8Q;}+R2~?Uh|m-+`-2kDo$d6T!nD*hc#dB(*R{LXV=zo z`PJP0V=O!@3l-bw+d`X6(=@fq=4O#ETa8M^fOvO4qja9o3e8ANc9$sI=A4$zUut~w z4+JryRkI{9qWxU1CCMM$@Aj=6)P+z?vqa=UCv_4XyVNoBD{Xb~Oi4cjjhm8fRD!*U z2)zaS;AI78^Wq+5mDInKiMz|z#K`2emQfNH*U;{9^{NqSMVoq?RSo43<8YpJM^+W$ zxy!A5>5Zl16Vi#?nAYywu3w_=KWnd3*QetocWt`3pK67>)ZVwnT3h zbPdD&MZkD?q=-N`MpCCwpM74L+Tr1aa)zJ)8G;(Pg51@U&5W>aNu9rA`bh{vgfE={ zdJ>aKc|2Ayw_bop+dK?Y5$q--WM*+$9&3Q9BBiwU8L<-`T6E?ZC`mT0b}%HR*LPK} z!MCd_Azd{36?Y_>yN{U1w5yrN8q`z(Vh^RnEF+;4b|2+~lfAvPT!`*{MPiDioiix8 zY*GdCwJ{S(5(HId*I%8XF=pHFz<9tAe;!D5$Z(iN#jzSql4sqX5!7Y?q4_%$lH zz8ehZuyl0K=E&gYhlfFWabnSiGty$>md|PpU1VfaC5~kskDnZX&Yu}?-h;OSav=8u z=e3Yq=mi$4A|sB-J00;1d{Sd1+!v0NtU((Nz2;PFFlC}V{@p&4wGcVhU&nI($RAS! zwXn7)?8~1J3*4+VccRSg5JS<(bBhBM&{ELMD4C_NTpvzboH!{Zr*%HP;{UqxI#g&7 zOAqPSW5Qus$8-xtTvD%h{Tw<2!XR(lU54LZG{)Cah*LZbpJkA=PMawg!O>X@&%+5XiyeIf91n2E*hl$k-Y(3iW*E}Mz-h~H~7S9I1I zR#-j`|Hk?$MqFhE4C@=n!hN*o5+M%NxRqP+aLxDdt=wS6rAu6ECK*;AB%Nyg0uyAv zO^DnbVZZo*|Ef{nsYN>cjZC$OHzR_*g%T#oF zCky9HJS;NCi=7(07tQXq?V8I&OA&kPlJ_dfSRdL2bRUt;tA3yKZRMHMXH&#W@$l%-{vQd7y@~i*^qnj^`Z{)V$6@l&!qP_y zg2oOd!Wit#)2A~w-eqw3*Mbe)U?N|q6sXw~E~&$!!@QYX4b@%;3=>)@Z#K^`8~Aki z+LYKJu~Y$;F5%_0aF9$MsbGS9Bz2~VUG@i@3Fi2q(hG^+Ia44LrfSfqtg$4{%qBDM z_9-O#3V+2~W$dW0G)R7l_R_vw(KSkC--u&%Rs^Io&*?R=`)6BN64>6>)`TxyT_(Rd zUn+aIl1mPa#Jse9B3`!T=|e!pIp$(8ZOe0ao?nS7o?oKlj zypC-fMj1DHIDrh1unUI1vp=-Fln;I9e7Jvs3wj*^_1&W|X} zZSL|S|Bb@CV*YC_-T&2!Ht3b6?)d`tHOP?rA;;t#zaXa0Sc;vGnV0BLIf8f-r{QHh z*Zp`4_ItlOR7{u(K+!p_oLDmaAkNag*l4#29F2b_A*0oz0T|#-&f*;c#<`^)(W@gm z#k9k=t%u8<+C1fNUA{Fh7~wgPrEZZ#(6aBI%6bR4RO(e1(ZocjoDek4#MTgZD>1NG zy9~yoZfWYfwe&S-(zk4o6q6o?2*~DOrJ(%5wSnEJMVOKCzHd z=Yhm+HLzoDl{P*Ybro7@sk1!Ez3`hE+&qr7Rw^2glw^M(b(NS2!F|Q!mi|l~lF94o z!QiV)Q{Z>GO5;l1y!$O)=)got;^)%@v#B!ZEVQy1(BJApHr5%Zh&W|gweD+%Ky%CO ztr45vR*y(@*Dg_Qw5v~PJtm^@Lyh*zRuT6~(K+^HWEF{;R#L$vL2!_ndBxCtUvZ(_ zauI7Qq}ERUWjr&XW9SwMbU>*@p)(cuWXCxRK&?ZoOy>2VESII53iPDP64S1pl{NsC zD;@EGPxs&}$W1;P6BB9THF%xfoLX|4?S;cu@$)9OdFst-!A7T{(LXtdNQSx!*GUSIS_lyI`da8>!y_tpJb3Zuf0O*;2y?HCfH z5QT6@nL|%l3&u4;F!~XG9E%1YwF*Fgs5V&uFsx52*iag(?6O|gYCBY3R{qhxT-Etb zq(E%V=MgQnuDGEKOGsmBj9T0-nmI%zys8NSO>gfJT4bP>tI>|ol@ zDt(&SUKrg%cz>AmqtJKEMUM;f47FEOFc%Bbmh~|*#E zDd!Tl(wa)ZZIFwe^*)4>{T+zuRykc3^-=P1aI%0Mh}*x7%SP6wD{_? zisraq`Las#y-6{`y@CU3Ta$tOl|@>4qXcB;1bb)oH9kD6 zKym@d$ zv&PZSSAV1Gwwzqrc?^_1+-ZGY+3_7~a(L+`-WdcJMo>EWZN3%z4y6JyF4NR^urk`c z?osO|J#V}k_6*9*n2?j+`F{B<%?9cdTQyVNm8D}H~T}?HOCXt%r7#2hz97Gx#X%62hyaLbU z_ZepP0<`<;eABrHrJAc!_m?kmu#7j}{empH@iUIEk^jk}^EFwO)vd7NZB=&uk6JG^ zC>xad8X$h|eCAOX&MaX<$tA1~r|hW?-0{t4PkVygTc`yh39c;&efwY(-#;$W)+4Xb z$XFsdG&;@^X`aynAMxsq)J#KZXX!sI@g~YiJdHI~r z$4mj_?S29sIa4c$z)19JmJ;Uj?>Kq=0XuH#k#};I&-6zZ_&>)j>UR0XetRO!-sjF< zd_6b1A2vfi++?>cf}s{@#BvTD|a%{9si7G}T+8ZnwuA z1k8c%lgE<-7f~H`cqgF;qZ|$>R-xNPA$25N1WI3#n%gj}4Ix}vj|e=x)B^roGQpB) zO+^#nO2 zjzJ9kHI6nI5ni&V_#5> z!?<7Qd9{|xwIf4b0bRc;zb}V4>snRg6*wl$Xz`hRDN8laL5tg&+@Dv>U^IjGQ}*=XBnXWrwTy;2nX?<1rkvOs#u(#qJ=A zBy>W`N!?%@Ay=upXFI}%LS9bjw?$h)7Dry0%d}=v0YcCSXf9nnp0tBKT1eqZ-4LU` zyiXglKRX)gtT0VbX1}w0f2ce8{$WH?BQm@$`ua%YP8G@<$n13D#*(Yd5-bHfI8!on zf5q4CPdgJLl;BqIo#>CIkX)G;rh|bzGuz1N%rr+5seP${mEg$;uQ3jC$;TsR&{IX< z;}7j3LnV+xNn^$F1;QarDf6rNYj7He+VsjJk6R@0MAkcwrsq4?(~`GKy|mgkfkd1msc2>%B!HpZ~HOzj}kl|ZF(IqB=D6ZTVcKe=I7)LlAI=!XU?J*i#9VXeKeaG zwx_l@Z(w`)5Cclw`6kQKlS<;_Knj)^Dh2pL`hQo!=GPOMR0iqEtx12ORLpN(KBOm5 zontAH5X5!9WHS_=tJfbACz@Dnkuw|^7t=l&x8yb2a~q|aqE_W&0M|tI7@ilGXqE)MONI8p67OiQGqKEQWw;LGga=ZM1;{pSw1jJK_y$vhY6 ztFrV7-xf>lbeKH1U)j3R=?w*>(Yh~NNEPVmeQ8n}0x01$-o z2Jyjn+sXhgOz>AzcZ zAbJZ@f}MBS0lLKR=IE{z;Fav%tcb+`Yi*!`HTDPqSCsFr>;yt^^&SI2mhKJ8f*%ji zz%JkZGvOn{JFn;)5jf^21AvO-9nRzsg0&CPz;OEn07`CfT@gK4abFBT$Mu?8fCcscmRkK+ zbAVJZ~#_a z{|(FFX}~8d3;DW8zuY9?r#Dt>!aD>} zlYw>D7y#eDy+PLZ&XKIY&Df0hsLDDi(Yrq8O==d30RchrUw8a=Eex>Dd?)3+k=}Q> z-b85lun-V$I}86Vg#l1S@1%=$2BQD5_waAZKQfJ${3{b2SZ#w1u+jMr{dJMvI|Og= zpQ9D={XK|ggbe04zTUd}iF{`GO1dV%zWK~?sM9OM(= zVK9&y4F^w1WFW{$qi|xQk0F`@HG8oLI5|5$j~ci9xTMT69v5KS-Yym--raU5kn2#C z<~5q^Bf0rTXVhctG2%&MG(cUGaz(gC(rcG~>qgO$W6>!#NOVQJ;pIYe-lLy(S=HgI zPh;lkL$l+FfMHItHnw_^bj8}CKM19t(C_2vSrhX2$K@-gFlH};#C?1;kk&U1L%4S~ zR^h%h+O1WE7DI$~dly?-_C7>(!E`~#REJ~Xa7lyrB$T!`&qYV5QreAa^aKr%toUJR zPWh)J3iD`(P6BI5k$oE$us#%!4$>`iH2p-88?WV0M$-K)JDibvA4 zpef%_*txN$Ei3=Lt(BBxZ&mhl|mUz-z*OD1=r9nfN zc5vOMFWpi>K=!$6f{eb?5Ru4M3o;t9xLpry|C%j~`@$f)OFB5+xo8XM8g&US@UU-sB|dAoc20y(F@=-2Ggp_`SWjEb#>IG^@j zuQK}e^>So#W2%|-)~K!+)wdU#6l>w5wnZt2pRL5Dz#~N`*UyC9tYechBTc2`@(OI# zNvcE*+zZZjU-H`QOITK^tZwOyLo)ZCLk>>Wm+flMsr5X{A<|m`Y281n?8H_2Fkz5}X?i%Rfm5s+n`J zDB&->=U+LtOIJ|jdYXjQWSQZFEs>Rm{`knop4Sq)(}O_@gk{14y51)iOcGQ5J=b#e z2Yx^6^*F^F7q_m-AGFFgx5uqyw6_4w?yKCJKDGGprWyekr;X(!4CnM5_5?KgN=3qCm03 z##6k%kIU5%g!cCL(+aK>`Wd;dZ4h$h_jb7n?nqx5&o9cUJfr%h#m4+Bh)>HodKcDcsXDXwzJ3jR(sSFqWV(OKHC*cV8;;&bH=ZI0YbW3PgIHwTjiWy z?2MXWO2u0RAEEq(zv9e%Rsz|0(OKB?_3*kkXwHxEuazIZ7=JhaNV*P~hv57q55LoebmJpfHXA@yuS{Esg+ z*C}0V-`x^=0nOa@SPUJek>td~tJ{U1T&m)~`FLp*4DF77S^{|0g%|JIqd-=5)p6a` zpJOsEkKT(FPS@t^80V!I-YJbLE@{5KmVXjEq{QbCnir%}3 zB)-J379=wrBNK6rbUL7Mh^tVmQYn-BJJP=n?P&m-7)P#OZjQoK0{5?}XqJScV6>QX zPR>G{xvU_P;q!;S9Y7*07=Z!=wxIUorMQP(m?te~6&Z0PXQ@I=EYhD*XomZ^z;`Os z4>Uh4)Cg2_##mUa>i1Dxi+R~g#!!i{?SMj%9rfaBPlWj_Yk)lCV--e^&3INB>I?lu z9YXCY5(9U`3o?w2Xa5ErMbl5+pDVpu8v+KJzI9{KFk1H?(1`_W>Cu903Hg81vEX32l{nP2vROa1Fi!Wou0+ZX7Rp`g;B$*Ni3MC-vZ`f zFTi7}c+D)!4hz6NH2e%%t_;tkA0nfkmhLtRW%){TpIqD_ev>}#mVc)<$-1GKO_oK8 zy$CF^aV#x7>F4-J;P@tqWKG0|D1+7h+{ZHU5OVjh>#aa8+V;6BQ)8L5k9t`>)>7zr zfIlv77^`Fvm<)_+^z@ac%D&hnlUAFt8!x=jdaUo{)M9Ar;Tz5Dcd_|~Hl6CaRnK3R zYn${wZe8_BZ0l0c%qbP}>($jsNDay>8+JG@F!uV4F;#zGsBP0f$f3HqEHDz_sCr^q z1;1}7KJ9&`AX2Qdav1(nNzz+GPdEk5K3;hGXe{Hq13{)c zZy%fFEEH#nlJoG{f*M^#8yXuW%!9svN8ry-Vi7AOFnN~r&D`%6d#lvMXBgZkX^vFj z;tkent^62jUr$Cc^@y31Lka6hS>F?1tE8JW$iXO*n9CQMk}D*At3U(-W1E~z>tG?> z5f`5R5LbrhRNR8kv&5d9SL7ke2a*Xr)Qp#75 z6?-p035n2<7hK;sb>t9GAwG4{9v~iEIG>}7B5zcCgZhu$M0-z8?eUO^E?g)md^XT_ z2^~-u$yak>LBy(=*GsTj6p<>b5PO&un@5hGCxpBQlOB3DpsItKZRC*oXq-r{u}Wb; z&ko>#fbnl2Z;o@KqS-d6DTeCG?m1 z&E>p}SEc*)SD&QjZbs!Csjx~0+$@ekuzV_wAalnQvX3a^n~3ui)|rDO+9HW|JPEeBGP4 z)?zcZ<8qv47`EWA*_X~H^vr(lP|f%=%cWFM;u)OFHruKT<~?>5Y8l?56>&;=WdZU# zZEK4-C8s-3zPMA^&y~e*9z)!ZJghr3N^pJa2A$??Xqx-BR*TytGYor&l8Q+^^r%Yq02xay^f#;;wO6K7G!v>wRd6531WnDI~h$PN( z+4#08uX?r&zVKsQ;?5eBX=FxsXaGyH4Gth4a&L|{8LnNCHFr1M{KjJ!BfBS_aiy-E zxtmNcXq3}WTwQ7Dq-9YS5o758sT(5b`Sg-NcH>M9OH1oW6&sZ@|GYk|cJI`vm zO<$~q!3_$&GfWetudRc*mp8)M)q7DEY-#@8w=ItkApfq3sa)*GRqofuL7)dafznKf zLuembr#8gm*lIqKH)KMxSDqbik*B(1bFt%3Vv|ypehXLCa&wc7#u!cJNlUfWs8iQ` z$66(F=1fkxwg745-8_eqV>nWGY3DjB9gE23$R5g&w|C{|xvT@7j*@aZNB199scGchI7pINb5iyqYn)O=yJJX)Ca3&Ca+{n<=1w|(|f0)h<9gs$pVSV<<9Og-V z8ki@nKwE)x)^wmHBMk?mpMT=g{S#^8W|>&rI#Ceh;9za}io0k@0JxiCqi-jHlxbt3 zjJA?RihhRvhk6%G5-D{ePh1jare*fQS<328P-DcVAxPTrw=n6k?C6EV75f}cnBRPT zMYDqqKu(ND&aOtc!QRV`vzJSVxx8i~WB#5Ml{b#eQqNnSi7l-bS-`ITW<^zyYQA(b zbj4SuRK>q9o`_v%+C=S?h>2e4!66Ij(P5{7Uz$3u6YJJC$W%EoBa{-(=tQ|y1vov%ZkXVOV z##_UVg4V^4ne#4~<-1DkJqkKqgT+E_=&4Ue&eQ-JC+gi?7G@d6= zximz{zE)WW{b@QCJ!7l&N5x=dXS?$5RBU-VvN4Uec-GHK&jPa&P2z+qDdLhIB+HU) zu0CW&uLvE^4I5xtK-$+oe|58)7m6*PO%Xt<+-XEA%jG_BEachkF3e@pn?tl!`8lOF zbi2QOuNXX)YT*MCYflILO{VZ*9GiC%R4FO20zMK?p+&aCMm2oeMK7(aW=UDzr=AO0 z$5mJ%=qRsR8rZ>_YsL+vi{3*J_9Kzq(;ZwRj+4_f0-*wbkSMPWahX#Fj_a8BnrhJ6 zo^ZZ?Vah1@&6#r=JkuaYDBdp;J3@ii+CHM&@9*er&#P}$@wI$bfrH)&c!*|nkvhf%^*Y6b%dKz%QBSIo@U z{?V^qEs4`q<8@n+u8YiB^sc@6g>TncG<|GsmC3egwE6aO=EwLr~3-2 zNr`+)`i+-83?|1Xy0^8ps&pb}YT?w1eWVnC9Ps1=KM;Rw)bH6O!7Did1NwpnqVPZc z*%Qo~qkDL>@^<^fmIBtx$WUWQiNtAB2x-LO^BB=|w~-zTnJNEdm1Ou(?8PF&U88X@ z#8rdaTd||)dG^uJw~N_-%!XNbuAyh4`>Shea=pSj0TqP+w4!`nxsmVSv02kb`DBr% zyX=e>5IJ3JYPtdbCHvKMdhXUO_*E9jc_?se7%VJF#&ZaBD;7+eFN3x+hER7!u&`Wz z7zMvBPR4y`*$a250KYjFhAKS%*XG&c;R-kS0wNY1=836wL6q02mqx;IPcH(6ThA@2 zXKQF|9H>6AW$KUF#^A%l6y5{fel77_+cR_zZ0(7=6bmNXABv}R!B-{(E^O6Y?ZS)n zs1QEmh_Fm7p}oRyT3zxUNr4UV8NGs+2b8|4shO$OGFj3D&7_e?#yDi=TTe%$2QbG5 zk<;q7aQ;p!M-Osm{vFdmXZ@!z9uWh!;*%>(vTRggufuUGP9Hols@vhx z73pn$3u2;vzRvnXuT&$Os7J@6y12*j!{ix%3B4YU1466ItmJs0NsU(4ZYRYh7wEA6q{b*Hs6@k~ zi7Yq@Ax!et0cUMTvk7P%ym){MHpcliHEI~e3HP0NV=}7;xFv#IC?a<=`>~j_sk{e> z7vg-tK*p83HZ0=QK@ zRIHo^r{D8&Ms-^WZp+6US_Quqjh$Q66W^1}=Uz&XJ8AQE9&2}P zY|FXZzZ|0IiaBd2qdt6dIjQr(ZMIOU%NG1F&fu6Po9m^?BvLhI6T0R!H2d8;U(&p2 zYA|MFscMqcO(ye~Jp?F;0>Ke+5hzVr?aBNe>GsGgr$XrpS9uajN2kNQ3o$V5rp0T( z0$6TJC;3)26SNG#XcX7l^MKTn$ga?6r4Jzfb%ZgA(Zbwit0$kY=avSnI$@Gk%+^pu zS5mHrcRS8LFPC*uVWH4DDD1pY$H8N>X?KIJZuZ2SvTqc5Nr0GHdD8TCJcd$zIhOdC zZX0ErnsozQh;t^==4zTfrZO421AL?)O)l#GSxU#|LTTg4#&yeK=^w#;q63!Nv~1(@ zs^-RNRuF&qgcr+bIzc@7$h9L;_yjdifE*$j0Q&Np=1AuHL--zdkv@}`1 zo~LlDl_YAq*z?vmr4M`GjDkl9?p|-tl(DtX76oZv25_DtZutLS9Ez!5~p?th@4 zyc_uax4W#<(#)LMkvo)yp|5tKsC2=p#6PyhpH|449T<9Zdk|%CAb5cw?fhvQtBO&7 zpQ9$24yLqPHP;$N&fe2wm%8qdctwIna<3SwGtQA3{C77s%CW%LYxtK(SBGustL0<( zu~U9r0UOkr(c{OJxZS0Ntu3+cJlF7R`7k-Bsa&q?9Ae5{{|o~?cM+T7{lB1^#vT8R z?>c9fNWey`1dKDY%F3d2O*8^qYhjlB8*7HMKE<*=(A`{>=1%s1}Pm&#_t1xy!FkPk@%SMEka2@*= zxDuM|vJJ5s+xgDls{>*o!7eOcs|xuVBPWX&+y5vEiADK%hi`#Dbd>;;Pbk2H4*-X&R?_-6ZEutSd8hC+sSjhIo z;D(j4P;2EVpEj#UF7IjM6PC+X$C5T&=nL`*!*hm9U)#O?>wqOgC>jXKN3Slk_yaQX zLf|4D8T4k|wHW`;#ZQVocNF|3izi0sOqXzi7@KlYC3CXBG`94wD;tMI1bj|8Vm zY}9`VI9!plSfhAal$M_HlaYOVNU?9Z#0<$o?lXXbX3O(l_?f)i3_~r+GcO-x#+x^X zfsZl0>Rj2iP1rsT;+b;Mr? z4Vu&O)Q5ru4j;qaSP5gA{az@XTS1NpT0d9Xhl_FkkRpcEGA0(QQ~YMh#&zwDUkNzm z6cgkdgl9W{iL6ArJ1TQHqnQ^SQ1WGu?FT|93$Ba}mPCH~!$3}0Y0g zcoG%bdTd$bmBx9Y<`Jc+=Cp4}c@EUfjiz;Rcz101p z=?#i$wo>gBE9|szaZMt-d4nUIhBnYRuBVyx+p?5#aZQgUe(!ah`J#l1$%bl5avL27 zU2~@V`3Ic&!?FhDX@Cw!R4%xtWark#p8DLT)HCZ?VJxf^yr@AD*!ERK3#L$E^*Yr? zzN&uF9Roh4rP+r`Z#7U$tzl6>k!b~HgM$C<_crP=vC>6=q{j?(I}!9>g3rJU(&){o z`R^E*9%+kEa8H_fkD9VT7(Fks&Y-RcHaUJYf-|B+eMXMaRM;{FKRiTB>1(=Iij4k1(X__|WqAd-~t#2@UQ}Z&<1Th0azdXfoll!dd)6>1miA z!&=6sDJm=e$?L&06+Q3`D-HNSkK-3$3DdZMX-6Xjn;wd#9A{~ur!2NcX>(qY_oZL0~H7dnQ9sgLe!W>~2|RSW7|hWn<({Pg*xF$%B-!rKe^_R_vc z(LO!0agxxP;FWPV({8#lEv$&&GVakGus=@!3YVG`y^AO1m{2%Np;>HNA1e{=?ra1C}H zAwT0sbwG|!am;fl?*_t^^#yLDXZ*Nx)_FqueZi0c-G~omtpHW0Cu)mEJ`Z1X8brq$ z%vK##b~o*^b&Hz!hgrD=^6P8}aW40lhzMLB5T5*v`1QH?+L~-@CDi3+C@nRf2{7UE zyDIe{@LKw`Eu=Z%6<<_=#V|yxJIKiq_N?ZJ_v0$c)N4l07ZV_mIXG}glfBSPivOhw z-~+9GdckSpMBNR9eR`Y|9_)sXS+u_OiQ%!9rE(2AFjoxN8lk16Sb~^Sq6kRoEp3yD(mm`HsYIXcag_EAB8MHc}nahxVVUTts~U9P|f;7Ul$_` zStR4v&P4q_$KXOEni$lkxy8=9w8G&47VY0oDb^+jT+>ARe3NHUg~St`$RDxY)?;_F znqTujR&chZd2qHF7y8D$4&E3+e@J~!X3&BW4BF(Ebp#TEjrd+9SU!)j;qH+ZkL@AW z?J6Mj}v0_+D zH0qlbzCkHf|EZ`6c>5ig5NAFF%|La%M-}g(7&}Vx8K)qg30YD;H!S!??{;YivzrH0 z(M%2*b_S-)yh&Aiqai)GF^c!<1Xemj|13>dZ_M#)41SrP;OEMaRJ)bCeX*ZT7W`4Y zQ|8L@NHpD@Tf(5>1U(s5iW~Zdf7$@pAL`a3X@YUv1J>q-uJ_(Dy5nYTCUHC}1(dlI zt;5>DLcHh&jbysqt?G01MhXI3!8wgf){Hv}=0N|L$t8M#L7d6WscO8Om2|NBz2Ga^ zs86y%x$H18)~akOWD7@em7)ldlWgb?_sRN>-EcYQO_}aX@+b$dR{146>{kXWP4$nN{V0_+|3{Lt|8uX_fhKh~i{(x%cj*PU$i{PO(5$uA? zQzO>a6oPj-TUk&{zq?JD2MNb6Mf~V3g$ra+PB;ujLJ2JM(a7N*b`y{MX--!fAd}5C zF$D_b8S;+Np(!cW)(hnv5b@@|EMt*RLKF*wy>ykFhEhlPN~n_Bj>LT9B^_yj>z#fx z3JuE4H&?Cc!;G@}E*3k`HK#8ag`yE3Z1)5JUlSua%qkF zkTu|<9{w9OSi$qr)WD#7EzITnch=xnR63E*d~WGvi*Co9BBE?ETHud;!Z)7&wz+l6 zuKODYG1>I1U#a%&(GNJ`AqRfg=H!BtSl+_;CEeufF-#+*2EMMz-22@>18=8PH{PHd z);mN=aR0MPF>eutLiS#-AOX>#2%+pTGEOj!j4L(m0~&xR=0+g#HNpno6@veLhJp}e zyNVC$a>4;!9&iGvU_dj&xbKt@^t6r%f^)+}eV^suRTLP52+BVs0kOLwg6n`=NUv50E7My8XQUh?y%mW62OT1pMrKI3Q(r`7vU&@93=G~A?b(^pvC-8x=bSk zZ60BQR96WB1Z@9Df(M1IQh+YrU8sEjB=Tc2;(zBn-pete*icZE|M&Uc+oHg`|1o`g zH~m+k=D$o);{Rs)b<9Zo|9_Z6L6QHLNki(N>Dw^^i1LITprZeeqIaT#+)fw)PlllU zldphHC)t!0Gf(i9zgVm>`*TbmITF zH1FZ4{wrjRCx{t^26VK_2srZuWuY*EMAsMrJYFFCH35Ky7bq8<0K|ey2wHnrFMZyr z&^yEgX{{3i@&iE5>xKZ{Ads36G3a!i50D!C4?^~cLB<<|fc1!XN(HJRM)H^21sEs%vv+Mu0h*HkLHaEffMwc0n6)JhNXY#M5w@iO@dfXY z0c6dM2a4Hd1SA*#qYj@jK}uVgAZdaBj8t6uuhUNe>)ne9vfd#C6qLV9+@Q7{MnF#0 zJ7fd-ivG_~u3bVvOzpcw1u~ZSp8-kl(sunnX>L~*K-ByWDM2E8>;Si6kn^58AZQxI xVa^It*?521mj4+UJO?7%w*+`EfEcU=@KhDx-s^WzP+ae~{CgHDE&XryzW}Nww%-5% diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661e..070cb702 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c7873..a69d9cb6 100755 --- a/gradlew +++ b/gradlew @@ -205,6 +205,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index ac1b06f9..53a6b238 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From fb3a23fbfc0072c2fbdc2087890aee8ba3163b83 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 7 Dec 2022 23:35:42 +0000 Subject: [PATCH 354/621] release-bot: Bump version for next release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9da69af6..69b73ee0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { applicationId "com.jraska.github.client" minSdkVersion 26 targetSdkVersion 33 - versionName '0.44.0' - versionCode 157 + versionName '0.45.0' + versionCode 158 multiDexEnabled true testInstrumentationRunner "com.jraska.github.client.TestRunner" From ad703a3d786ad388b581d507e9bb08e8e5b955f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 09:17:37 +0100 Subject: [PATCH 355/621] Bump threetenabp from 1.4.3 to 1.4.4 (#795) Bumps [threetenabp](https://github.com/JakeWharton/ThreeTenABP) from 1.4.3 to 1.4.4. - [Release notes](https://github.com/JakeWharton/ThreeTenABP/releases) - [Changelog](https://github.com/JakeWharton/ThreeTenABP/blob/trunk/CHANGELOG.md) - [Commits](https://github.com/JakeWharton/ThreeTenABP/compare/1.4.3...1.4.4) --- updated-dependencies: - dependency-name: com.jakewharton.threetenabp:threetenabp dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app-partial-users/build.gradle | 2 +- app/build.gradle | 2 +- core/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app-partial-users/build.gradle b/app-partial-users/build.gradle index 767b03f8..935933d1 100644 --- a/app-partial-users/build.gradle +++ b/app-partial-users/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation coroutinesCore - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.4' implementation okHttpLoggingInterceptor implementation 'com.squareup.okio:okio:3.2.0' diff --git a/app/build.gradle b/app/build.gradle index 69b73ee0..54d0b627 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ dependencies { implementation dagger implementation retrofit - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.4' implementation okHttpLoggingInterceptor implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/core/build.gradle b/core/build.gradle index 90dcd4b4..a3f9b848 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -32,7 +32,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.3' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.4' implementation fresco kapt daggerAnnotationProcessor From b4c48089ab8a4769d92132190a6d86c4d205b25e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 08:23:49 +0000 Subject: [PATCH 356/621] Bump fragment from 1.5.4 to 1.5.5 (#794) Bumps fragment from 1.5.4 to 1.5.5. --- updated-dependencies: - dependency-name: androidx.fragment:fragment dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core-android-api/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-android-api/build.gradle b/core-android-api/build.gradle index 4106d6a2..b5f5be72 100644 --- a/core-android-api/build.gradle +++ b/core-android-api/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.5.0' implementation 'androidx.core:core:1.9.0' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' - implementation 'androidx.fragment:fragment:1.5.4' + implementation 'androidx.fragment:fragment:1.5.5' implementation okHttp implementation 'com.squareup.okio:okio:3.2.0' From d6dbd6e4acd024aa6c71d8246543f972ee6501a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 08:29:29 +0000 Subject: [PATCH 357/621] Bump firebase-bom from 31.1.0 to 31.1.1 (#793) Bumps firebase-bom from 31.1.0 to 31.1.1. --- updated-dependencies: - dependency-name: com.google.firebase:firebase-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- app/build.gradle | 2 +- core/build.gradle | 2 +- feature/push/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 54d0b627..8029177f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -129,7 +129,7 @@ dependencies { implementation 'com.google.android.material:material:1.7.0' - implementation platform('com.google.firebase:firebase-bom:31.1.0') + implementation platform('com.google.firebase:firebase-bom:31.1.1') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-perf' diff --git a/core/build.gradle b/core/build.gradle index a3f9b848..ddd4bd59 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,7 +49,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.10' implementation okHttpLoggingInterceptor - implementation platform('com.google.firebase:firebase-bom:31.1.0') + implementation platform('com.google.firebase:firebase-bom:31.1.1') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-config' implementation 'com.google.firebase:firebase-crashlytics' diff --git a/feature/push/build.gradle b/feature/push/build.gradle index b17668f5..a81dc46c 100644 --- a/feature/push/build.gradle +++ b/feature/push/build.gradle @@ -22,7 +22,7 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' - implementation platform('com.google.firebase:firebase-bom:31.1.0') + implementation platform('com.google.firebase:firebase-bom:31.1.1') implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-messaging' implementation 'com.google.firebase:firebase-database' From 6b9313efd5ef22a522d41926bfdd42698e912dc1 Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Dec 2022 21:54:36 +0100 Subject: [PATCH 358/621] Add common headers for network requests (#796) --- core/build.gradle | 1 + .../com/jraska/github/client/AppVersion.kt | 19 +++++++ .../http/AppCommonHeadersInterceptor.kt | 32 ++++++++++++ .../jraska/github/client/http/HttpModule.kt | 26 ++++++++-- .../http/AppCommonHeadersInterceptorTest.kt | 49 +++++++++++++++++++ 5 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/com/jraska/github/client/AppVersion.kt create mode 100644 core/src/main/java/com/jraska/github/client/http/AppCommonHeadersInterceptor.kt create mode 100644 core/src/test/java/com/jraska/github/client/http/AppCommonHeadersInterceptorTest.kt diff --git a/core/build.gradle b/core/build.gradle index ddd4bd59..71282bae 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -56,4 +56,5 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation okHttpMockWebServer } diff --git a/core/src/main/java/com/jraska/github/client/AppVersion.kt b/core/src/main/java/com/jraska/github/client/AppVersion.kt new file mode 100644 index 00000000..bcff441c --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/AppVersion.kt @@ -0,0 +1,19 @@ +package com.jraska.github.client + +import android.content.Context +import javax.inject.Inject + +interface AppVersion { + fun appVersion(): String +} + +@Suppress("DEPRECATION") // compatibility - since Android T +class AndroidAppVersion @Inject constructor(private val context: Context) : AppVersion { + private val version by lazy { + context.packageManager.getPackageInfo(context.packageName, 0).versionName + } + + override fun appVersion(): String { + return version + } +} diff --git a/core/src/main/java/com/jraska/github/client/http/AppCommonHeadersInterceptor.kt b/core/src/main/java/com/jraska/github/client/http/AppCommonHeadersInterceptor.kt new file mode 100644 index 00000000..545853f5 --- /dev/null +++ b/core/src/main/java/com/jraska/github/client/http/AppCommonHeadersInterceptor.kt @@ -0,0 +1,32 @@ +package com.jraska.github.client.http + +import com.jraska.github.client.AppVersion +import okhttp3.Interceptor +import okhttp3.Response +import java.util.* +import java.util.concurrent.atomic.AtomicInteger +import javax.inject.Inject + +class AppCommonHeadersInterceptor @Inject constructor( + private val appVersion: AppVersion +) : Interceptor { + private val sequenceNumber = AtomicInteger(0) + + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + + val newRequest = request.newBuilder() + .addHeader("Sequence-Number", nextSequenceNumber().toString()) + .addHeader("User-Agent", userAgent()) + .addHeader("Request-Id", UUID.randomUUID().toString()) + .build() + + return chain.proceed(newRequest) + } + + private fun userAgent(): String { + return "Android-GitHubClient/${appVersion.appVersion()}" + } + + private fun nextSequenceNumber() = sequenceNumber.incrementAndGet() +} diff --git a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt index 9c7ea583..44cd82fe 100644 --- a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt +++ b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt @@ -1,6 +1,8 @@ package com.jraska.github.client.http import android.content.Context +import com.jraska.github.client.AndroidAppVersion +import com.jraska.github.client.AppVersion import com.jraska.github.client.core.BuildConfig import dagger.Module import dagger.Provides @@ -30,19 +32,37 @@ object HttpModule { @Provides @Singleton - internal fun provideOkHttpClient(context: Context): OkHttpClient { + internal fun provideOkHttpClient( + context: Context, + appHeadersInterceptor: AppCommonHeadersInterceptor + ): OkHttpClient { val builder = OkHttpClient.Builder() + builder.addInterceptor(appHeadersInterceptor) + if (BuildConfig.DEBUG) { - val loggingInterceptor = HttpLoggingInterceptor { message -> Timber.tag("Network").v(message) } + val loggingInterceptor = + HttpLoggingInterceptor { message -> Timber.tag("Network").v(message) } loggingInterceptor.level = Level.BASIC - builder.addInterceptor(loggingInterceptor) + builder.addNetworkInterceptor(loggingInterceptor) } + val cacheDir = File(context.cacheDir, "network") val cache = Cache(cacheDir, 1024 * 1024 * 4) builder.cache(cache) return builder.build() } + + @Provides + @Singleton + internal fun appHeadersInterceptor(appVersion: AppVersion): AppCommonHeadersInterceptor { + return AppCommonHeadersInterceptor(appVersion) + } + + @Provides + internal fun appVersion(context: Context): AppVersion { + return AndroidAppVersion(context) + } } diff --git a/core/src/test/java/com/jraska/github/client/http/AppCommonHeadersInterceptorTest.kt b/core/src/test/java/com/jraska/github/client/http/AppCommonHeadersInterceptorTest.kt new file mode 100644 index 00000000..7dafb306 --- /dev/null +++ b/core/src/test/java/com/jraska/github/client/http/AppCommonHeadersInterceptorTest.kt @@ -0,0 +1,49 @@ +package com.jraska.github.client.http + +import com.jraska.github.client.AppVersion +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.mockwebserver.MockResponse +import okhttp3.mockwebserver.MockWebServer +import org.assertj.core.api.Assertions.assertThat +import org.junit.Rule +import org.junit.Test + +class AppCommonHeadersInterceptorTest { + @get:Rule + val mockWebServer = MockWebServer() + + @Test + fun addsRequiredHeaders() { + mockWebServer.enqueue(MockResponse()) + mockWebServer.enqueue(MockResponse()) + + val client = okHttpClient() + + val request = Request.Builder().method("GET", null) + .url(mockWebServer.url("/")) + .build() + + val firstHeaders = client.newCall(request).execute().request.headers + + assertThat(firstHeaders["User-Agent"]).isEqualTo("Android-GitHubClient/1.2.3-dev") + assertThat(firstHeaders["Sequence-Number"]).isEqualTo("1") + assertThat(firstHeaders["Request-Id"]).isNotEmpty + + val secondHeaders = client.newCall(request).execute().request.headers + assertThat(secondHeaders["Sequence-Number"]).isEqualTo("2") + assertThat(firstHeaders["Request-Id"]).isNotEqualTo(secondHeaders["Request-Id"]) + } + + private fun okHttpClient(): OkHttpClient { + val interceptor = AppCommonHeadersInterceptor(object : AppVersion { + override fun appVersion(): String { + return "1.2.3-dev" + } + }) + + return OkHttpClient.Builder() + .addInterceptor(interceptor) + .build() + } +} From 5f5502546cd83ac6cd2aac07d7cb9dbab4f4985e Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Thu, 15 Dec 2022 23:53:56 +0100 Subject: [PATCH 359/621] Add session id to network requests (#797) --- .../jraska/github/client/http/HttpModule.kt | 9 ++++++--- feature/identity/build.gradle | 2 ++ .../github/client/identity/IdentityModule.kt | 11 ++++++++++- .../internal/AddSessionIdInterceptor.kt | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 feature/identity/src/main/java/com/jraska/github/client/identity/internal/AddSessionIdInterceptor.kt diff --git a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt index 44cd82fe..7e346aaa 100644 --- a/core/src/main/java/com/jraska/github/client/http/HttpModule.kt +++ b/core/src/main/java/com/jraska/github/client/http/HttpModule.kt @@ -6,7 +6,9 @@ import com.jraska.github.client.AppVersion import com.jraska.github.client.core.BuildConfig import dagger.Module import dagger.Provides +import dagger.multibindings.IntoSet import okhttp3.Cache +import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor.Level @@ -34,11 +36,11 @@ object HttpModule { @Singleton internal fun provideOkHttpClient( context: Context, - appHeadersInterceptor: AppCommonHeadersInterceptor + interceptors: @JvmSuppressWildcards Set ): OkHttpClient { val builder = OkHttpClient.Builder() - builder.addInterceptor(appHeadersInterceptor) + interceptors.forEach { builder.addInterceptor(it) } if (BuildConfig.DEBUG) { val loggingInterceptor = @@ -57,7 +59,8 @@ object HttpModule { @Provides @Singleton - internal fun appHeadersInterceptor(appVersion: AppVersion): AppCommonHeadersInterceptor { + @IntoSet + internal fun appHeadersInterceptor(appVersion: AppVersion): Interceptor { return AppCommonHeadersInterceptor(appVersion) } diff --git a/feature/identity/build.gradle b/feature/identity/build.gradle index 0f8e68d3..a8301061 100644 --- a/feature/identity/build.gradle +++ b/feature/identity/build.gradle @@ -9,10 +9,12 @@ dependencies { implementation project(':feature:identity-api') implementation 'org.threeten:threetenbp:1.5.1:no-tzdb' + implementation okHttp kapt daggerAnnotationProcessor implementation dagger testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation okHttpMockWebServer } diff --git a/feature/identity/src/main/java/com/jraska/github/client/identity/IdentityModule.kt b/feature/identity/src/main/java/com/jraska/github/client/identity/IdentityModule.kt index 4682b8a5..fc0585ae 100644 --- a/feature/identity/src/main/java/com/jraska/github/client/identity/IdentityModule.kt +++ b/feature/identity/src/main/java/com/jraska/github/client/identity/IdentityModule.kt @@ -1,10 +1,13 @@ package com.jraska.github.client.identity +import com.jraska.github.client.identity.internal.AddSessionIdInterceptor import com.jraska.github.client.identity.internal.AnonymousIdentity import com.jraska.github.client.identity.internal.SessionIdProvider import com.jraska.github.client.time.TimeProvider import dagger.Module import dagger.Provides +import dagger.multibindings.IntoSet +import okhttp3.Interceptor import javax.inject.Singleton @Module @@ -23,5 +26,11 @@ object IdentityModule { } @Provides - internal fun identityProvider(implementation: IdentityProviderImpl): IdentityProvider = implementation + internal fun identityProvider(impl: IdentityProviderImpl): IdentityProvider = impl + + @Provides + @IntoSet + internal fun addSessionIdInterceptor(identityProvider: IdentityProvider): Interceptor { + return AddSessionIdInterceptor(identityProvider) + } } diff --git a/feature/identity/src/main/java/com/jraska/github/client/identity/internal/AddSessionIdInterceptor.kt b/feature/identity/src/main/java/com/jraska/github/client/identity/internal/AddSessionIdInterceptor.kt new file mode 100644 index 00000000..8f43b937 --- /dev/null +++ b/feature/identity/src/main/java/com/jraska/github/client/identity/internal/AddSessionIdInterceptor.kt @@ -0,0 +1,18 @@ +package com.jraska.github.client.identity.internal + +import com.jraska.github.client.identity.IdentityProvider +import okhttp3.Interceptor +import okhttp3.Response + +class AddSessionIdInterceptor( + private val identityProvider: IdentityProvider +) : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val newRequest = chain.request() + .newBuilder() + .addHeader("Session-Id", identityProvider.session().id.toString()) + .build() + + return chain.proceed(newRequest) + } +} From fd16fc67c775e7861a91edf46254aa35fb070c7f Mon Sep 17 00:00:00 2001 From: Josef Raska <6277721+jraska@users.noreply.github.com> Date: Sun, 18 Dec 2022 12:20:50 +0100 Subject: [PATCH 360/621] Add test IntegrityCheck to settings (#798) * Add test IntegrityCheck to settings * Try without UI of integrity * Add test IntegrityCheck to end of settings * Try changing layout of the Integrity check button --- feature/settings/build.gradle | 2 + .../github/client/settings/IntegrityCheck.kt | 41 +++++++++++++++++++ .../client/settings/IntegrityCheckModel.kt | 17 ++++++++ .../client/settings/SettingsActivity.kt | 3 ++ .../client/settings/SettingsViewModel.kt | 7 +++- .../main/res/layout/item_row_integrity.xml | 28 +++++++++++++ .../settings/src/main/res/values/strings.xml | 2 + 7 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheck.kt create mode 100644 feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheckModel.kt create mode 100644 feature/settings/src/main/res/layout/item_row_integrity.xml diff --git a/feature/settings/build.gradle b/feature/settings/build.gradle index d58d39c6..5f435669 100644 --- a/feature/settings/build.gradle +++ b/feature/settings/build.gradle @@ -30,6 +30,8 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' implementation okHttp + implementation 'com.google.android.play:integrity:1.0.2' + implementation dagger kapt daggerAnnotationProcessor diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheck.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheck.kt new file mode 100644 index 00000000..51611a1c --- /dev/null +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheck.kt @@ -0,0 +1,41 @@ +package com.jraska.github.client.settings + +import android.content.Context +import com.google.android.gms.tasks.Tasks +import com.google.android.play.core.integrity.IntegrityManagerFactory +import com.google.android.play.core.integrity.IntegrityTokenRequest +import com.jraska.github.client.coroutines.AppDispatchers +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import timber.log.Timber +import java.util.* +import javax.inject.Inject + +class IntegrityCheck @Inject constructor( + private val appDispatchers: AppDispatchers, + private val context: Context +) { + @OptIn(DelicateCoroutinesApi::class) + fun run() { + GlobalScope.launch(appDispatchers.io) { + runInternal() + } + } + + private fun runInternal() { + val integrityTokenRequest = IntegrityTokenRequest.builder() + .setNonce(UUID.randomUUID().toString()) + .build() + + val requestIntegrityTokenTask = IntegrityManagerFactory.create(context) + .requestIntegrityToken(integrityTokenRequest) + + try { + val token = Tasks.await(requestIntegrityTokenTask) + Timber.d("Integrity result %s", token) + } catch (exception: Exception) { + Timber.e(exception, "Error checking integrity") + } + } +} diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheckModel.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheckModel.kt new file mode 100644 index 00000000..bc8abaa6 --- /dev/null +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/IntegrityCheckModel.kt @@ -0,0 +1,17 @@ +package com.jraska.github.client.settings + +import android.view.View +import com.airbnb.epoxy.EpoxyModel + +internal class IntegrityCheckModel(private val onIntegrityCheckClick: () -> Unit) : + EpoxyModel() { + override fun getDefaultLayout(): Int { + return R.layout.item_row_integrity + } + + override fun bind(itemView: View) { + itemView.findViewById(R.id.settings_integrity_run_button).setOnClickListener { + onIntegrityCheckClick() + } + } +} diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt index a6687ad2..dfd27997 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsActivity.kt @@ -21,12 +21,15 @@ internal class SettingsActivity : AppCompatActivity() { val settingsRecycler = findViewById(R.id.settings_recycler) settingsRecycler.layoutManager = LinearLayoutManager(this) val adapter = SimpleEpoxyAdapter() + + adapter.addModels(IntegrityCheckModel(viewModel::onIntegrityCheckClicked)) adapter.addModels(PurchaseReportModel(this::onPurchaseButtonClicked)) adapter.addModels(ConsoleModel(viewModel::onConsoleClick)) viewModel.configRows().forEach { adapter.addModels(it as EpoxyModel<*>) } + settingsRecycler.adapter = adapter } diff --git a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt index e480ad6c..4cdd8506 100644 --- a/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/jraska/github/client/settings/SettingsViewModel.kt @@ -12,7 +12,8 @@ import javax.inject.Inject internal class SettingsViewModel @Inject constructor( private val eventAnalytics: EventAnalytics, private val deepLinkLauncher: DeepLinkLauncher, - private val rowModelProvider: ConfigRowModelProvider + private val rowModelProvider: ConfigRowModelProvider, + private val integrityCheck: IntegrityCheck ) : ViewModel() { fun onPurchaseSubmitted(value: String) { val money = value.toDoubleOrNull() ?: return @@ -31,6 +32,10 @@ internal class SettingsViewModel @Inject constructor( deepLinkLauncher.launch(Urls.console()) } + fun onIntegrityCheckClicked() { + integrityCheck.run() + } + companion object { val ANALYTICS_ECOMMERCE_PURCHASE = AnalyticsEvent.Key("purchase", Owner.USERS_TEAM) } diff --git a/feature/settings/src/main/res/layout/item_row_integrity.xml b/feature/settings/src/main/res/layout/item_row_integrity.xml new file mode 100644 index 00000000..978cd9b2 --- /dev/null +++ b/feature/settings/src/main/res/layout/item_row_integrity.xml @@ -0,0 +1,28 @@ + + + + + + +