diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1c0491fda4..933c442501 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,10 +7,8 @@ on: # Enrich gradle.properties for CI/CD env: - CI_GRADLE_ARG_PROPERTIES: > - -Porg.gradle.jvmargs=-Xmx4g - -Porg.gradle.parallel=false - --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon jobs: debug: @@ -36,7 +34,7 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - name: Assemble ${{ matrix.target }} debug apk - run: ./gradlew assemble${{ matrix.target }}Debug $CI_GRADLE_ARG_PROPERTIES --stacktrace + run: ./gradlew assemble${{ matrix.target }}Debug $CI_GRADLE_ARG_PROPERTIES - name: Upload ${{ matrix.target }} debug APKs uses: actions/upload-artifact@v3 with: @@ -61,7 +59,7 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - name: Assemble GPlay unsigned apk - run: ./gradlew clean assembleGplayRelease $CI_GRADLE_ARG_PROPERTIES --stacktrace + run: ./gradlew clean assembleGplayRelease $CI_GRADLE_ARG_PROPERTIES - name: Upload Gplay unsigned APKs uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml new file mode 100644 index 0000000000..a1d754b4de --- /dev/null +++ b/.github/workflows/danger.yml @@ -0,0 +1,18 @@ +name: Danger CI + +on: [pull_request] + +jobs: + build: + runs-on: ubuntu-latest + name: Danger + steps: + - uses: actions/checkout@v3 + - run: | + npm install --save-dev @babel/plugin-transform-flow-strip-types + - name: Danger + uses: danger/danger-js@11.1.1 + with: + args: "--dangerfile tools/danger/dangerfile.js" + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 4e701faa44..7b68c0077d 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -1,5 +1,8 @@ name: "Validate Gradle Wrapper" -on: [push, pull_request] +on: + pull_request: { } + push: + branches: [ main, develop ] jobs: validation: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 36fd225674..51c1b32e82 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -6,10 +6,8 @@ on: - cron: "0 4 * * *" env: - CI_GRADLE_ARG_PROPERTIES: > - -Porg.gradle.jvmargs=-Xmx4g - -Porg.gradle.parallel=false - --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon jobs: nightly: @@ -40,7 +38,7 @@ jobs: yes n | towncrier build --version nightly - name: Build and upload Gplay Nightly APK run: | - ./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES --stacktrace + ./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES env: ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }} ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }} diff --git a/.github/workflows/post-pr.yml b/.github/workflows/post-pr.yml index a7f1d6f204..5cde95e625 100644 --- a/.github/workflows/post-pr.yml +++ b/.github/workflows/post-pr.yml @@ -10,10 +10,8 @@ on: # Enrich gradle.properties for CI/CD env: - CI_GRADLE_ARG_PROPERTIES: > - -Porg.gradle.jvmargs=-Xmx4g - -Porg.gradle.parallel=false - --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon jobs: diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 8bc5efe860..6e5e2e4d67 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -7,10 +7,8 @@ on: # Enrich gradle.properties for CI/CD env: - CI_GRADLE_ARG_PROPERTIES: > - -Porg.gradle.jvmargs=-Xmx4g - -Porg.gradle.parallel=false - --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon jobs: check: @@ -29,80 +27,50 @@ jobs: - uses: actions/checkout@v3 - name: Run knit run: | - ./gradlew knit + ./gradlew knitCheck - # ktlint for all the modules - ktlint: - name: Kotlin Linter + # Check the project: ktlint, detekt, lint + lint: + name: Android Linter runs-on: ubuntu-latest # Allow all jobs on main and develop. Just one per PR. concurrency: - group: ${{ github.ref == 'refs/heads/main' && format('ktlint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('ktlint-develop-{0}', github.sha) || format('ktlint-{0}', github.ref) }} + group: ${{ github.ref == 'refs/heads/main' && format('lint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('lint-develop-{0}', github.sha) || format('lint-{0}', github.ref) }} cancel-in-progress: true steps: - uses: actions/checkout@v3 - name: Run ktlint run: | ./gradlew ktlintCheck --continue + - name: Run detekt + if: always() + run: | + ./gradlew detekt $CI_GRADLE_ARG_PROPERTIES + - name: Run lint + # Not always, if ktlint or detekt fail, avoid running the long lint check. + run: | + ./gradlew lintGplayRelease $CI_GRADLE_ARG_PROPERTIES + ./gradlew lintFdroidRelease $CI_GRADLE_ARG_PROPERTIES - name: Upload reports if: always() uses: actions/upload-artifact@v3 with: - name: ktlinting-report + name: linting-report path: | - */build/reports/ktlint/ktlint*/ktlint*.txt - - name: Handle Results + */build/reports/**/*.* + - name: Prepare Danger if: always() - id: ktlint-results run: | - results="$(cat */*/build/reports/ktlint/ktlint*/ktlint*.txt */build/reports/ktlint/ktlint*/ktlint*.txt | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g")" - if [ -z "$results" ]; then - echo "::set-output name=add_comment::false" - else - body="👎\`Failed${results}\`" - body="${body//'%'/'%25'}" - body="${body//$'\n'/'%0A'}" - body="${body//$'\r'/'%0D'}" - body="$( echo $body | sed 's/\/home\/runner\/work\/element-android\/element-android\//\`\`/g')" - body="$( echo $body | sed 's/\/src\/main\/java\// 🔸 /g')" - body="$( echo $body | sed 's/im\/vector\/app\///g')" - body="$( echo $body | sed 's/im\/vector\/lib\/attachmentviewer\///g')" - body="$( echo $body | sed 's/im\/vector\/lib\/multipicker\///g')" - body="$( echo $body | sed 's/im\/vector\/lib\///g')" - body="$( echo $body | sed 's/org\/matrix\/android\/sdk\///g')" - body="$( echo $body | sed 's/\/src\/androidTest\/java\// 🔸 /g')" - echo "::set-output name=add_comment::true" - echo "::set-output name=body::$body" - fi - - name: Find Comment - if: always() && github.event_name == 'pull_request' - uses: peter-evans/find-comment@v2 - id: fc + npm install --save-dev @babel/core + npm install --save-dev @babel/plugin-transform-flow-strip-types + yarn add danger-plugin-lint-report --dev + - name: Danger lint + if: always() + uses: danger/danger-js@11.1.1 with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Ktlint Results - - name: Add comment if needed - if: always() && github.event_name == 'pull_request' && steps.ktlint-results.outputs.add_comment == 'true' - uses: peter-evans/create-or-update-comment@v2 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - issue-number: ${{ github.event.pull_request.number }} - body: | - ### Ktlint Results - - ${{ steps.ktlint-results.outputs.body }} - edit-mode: replace - - name: Delete comment if needed - if: always() && github.event_name == 'pull_request' && steps.fc.outputs.comment-id != '' && steps.ktlint-results.outputs.add_comment == 'false' - uses: actions/github-script@v3 - with: - script: | - github.issues.deleteComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.fc.outputs.comment-id }} - }) + args: "--dangerfile tools/danger/dangerfile-lint.js" + env: + DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }} # Gradle dependency analysis using https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin dependency-analysis: @@ -122,107 +90,3 @@ jobs: with: name: dependency-analysis path: build/reports/dependency-check-report.html - - # Lint for main module - android-lint: - name: Android Linter - runs-on: ubuntu-latest - # Allow all jobs on main and develop. Just one per PR. - concurrency: - group: ${{ github.ref == 'refs/heads/main' && format('android-lint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('android-lint-develop-{0}', github.sha) || format('android-lint-{0}', github.ref) }} - cancel-in-progress: true - steps: - - uses: actions/checkout@v3 - - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Lint analysis - run: ./gradlew clean :vector:lint --stacktrace $CI_GRADLE_ARG_PROPERTIES - - name: Upload reports - if: always() - uses: actions/upload-artifact@v3 - with: - name: lint-report - path: | - vector/build/reports/*.* - - # Lint for Gplay and Fdroid release APK - apk-lint: - name: Lint APK (${{ matrix.target }}) - runs-on: ubuntu-latest - if: github.ref != 'refs/heads/main' - strategy: - fail-fast: false - matrix: - target: [ Gplay, Fdroid ] - # Allow all jobs on develop. Just one per PR. - concurrency: - group: ${{ github.ref == 'refs/heads/develop' && format('apk-lint-develop-{0}-{1}', matrix.target, github.sha) || format('apk-lint-{0}-{1}', matrix.target, github.ref) }} - cancel-in-progress: true - steps: - - uses: actions/checkout@v3 - - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Lint ${{ matrix.target }} release - run: ./gradlew clean lint${{ matrix.target }}Release --stacktrace $CI_GRADLE_ARG_PROPERTIES - - name: Upload ${{ matrix.target }} linting report - if: always() - uses: actions/upload-artifact@v3 - with: - name: release-lint-report-${{ matrix.target }} - path: | - vector/build/reports/*.* - - detekt: - name: Detekt Analysis - runs-on: ubuntu-latest - # Allow all jobs on main and develop. Just one per PR. - concurrency: - group: ${{ github.ref == 'refs/heads/main' && format('detekt-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('detekt-develop-{0}', github.sha) || format('detekt-{0}', github.ref) }} - cancel-in-progress: true - steps: - - uses: actions/checkout@v3 - - name: Run detekt - run: | - ./gradlew detekt $CI_GRADLE_ARG_PROPERTIES - - name: Upload reports - if: always() - uses: actions/upload-artifact@v3 - with: - name: detekt-report - path: | - */build/reports/detekt/detekt.html - -# towncrier: -# name: Towncrier check -# runs-on: ubuntu-latest -# if: github.event_name == 'pull_request' && github.head_ref == 'develop' -# steps: -# - uses: actions/checkout@v3 -# - name: Set up Python 3.8 -# uses: actions/setup-python@v4 -# with: -# python-version: 3.8 -# - name: Install towncrier -# run: | -# python3 -m pip install towncrier -# - name: Run towncrier -# # Fetch the pull request' base branch so towncrier will be able to -# # compare the current branch with the base branch. -# # Source: https://github.com/actions/checkout/#fetch-all-branches. -# run: | -# git fetch --no-tags origin +refs/heads/${BASE_BRANCH}:refs/remotes/origin/${BASE_BRANCH} -# towncrier check --compare-with origin/${BASE_BRANCH} -# env: -# BASE_BRANCH: ${{ github.base_ref }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1a9cc5c239..2a89ed3040 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,10 +7,8 @@ on: # Enrich gradle.properties for CI/CD env: - CI_GRADLE_ARG_PROPERTIES: > - -Porg.gradle.jvmargs=-Xmx4g - -Porg.gradle.parallel=false - --no-daemon + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false + CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon jobs: tests: @@ -51,9 +49,9 @@ jobs: disable-animations: true emulator-build: 7425822 script: | - ./gradlew unitTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES - ./gradlew instrumentationTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES - ./gradlew generateCoverageReport --stacktrace $CI_GRADLE_ARG_PROPERTIES + ./gradlew unitTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES + ./gradlew instrumentationTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES + ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES # NB: continue-on-error marks steps.tests.conclusion = 'success' but leaves stes.tests.outcome = 'failure' - name: Run all the codecoverage tests at once (retry if emulator failed) uses: reactivecircus/android-emulator-runner@v2 @@ -67,13 +65,13 @@ jobs: disable-animations: true emulator-build: 7425822 script: | - ./gradlew unitTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES - ./gradlew instrumentationTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES - ./gradlew generateCoverageReport --stacktrace $CI_GRADLE_ARG_PROPERTIES + ./gradlew unitTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES + ./gradlew instrumentationTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES + ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES - run: ./gradlew sonarqube $CI_GRADLE_ARG_PROPERTIES if: always() # we may have failed a previous step and retried, that's OK env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + GITHUB_TOKEN: ${{ secrets.SONARQUBE_GITHUB_API_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} ORG_GRADLE_PROJECT_SONAR_LOGIN: ${{ secrets.SONAR_TOKEN }} @@ -114,5 +112,5 @@ jobs: # restore-keys: | # ${{ runner.os }}-gradle- # - name: Build Android Tests -# run: ./gradlew clean assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES --stacktrace +# run: ./gradlew clean assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES diff --git a/.gitignore b/.gitignore index 8313fb5c63..f1c0b99b58 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,8 @@ /fastlane/report.xml /**/build + +# Added by yarn +/package.json +/yarn.lock +/node_modules diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6e67639284..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -# FTR: Configuration on https://travis-ci.org/github/vector-im/element-android/settings -# -# - Build only if .travis.yml is present -> On -# - Limit concurrent jobs -> Off -# - Build pushed branches -> On (build the branch) -# - Build pushed pull request -> On (build the PR after auto-merge) -# -# - Auto cancel branch builds -> On -# - Auto cancel pull request builds -> On - -sudo: false - -notifications: - email: false - -# Just run a simple script here -script: - - ./tools/travis/check_pr.sh diff --git a/CHANGES.md b/CHANGES.md index 2bddbef133..829b1a0caa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,38 @@ +Changes in Element v1.4.32 (2022-08-10) +======================================= + +Features ✨ +---------- + - [Location Share] Render fallback UI when map fails to load ([#6711](https://github.com/vector-im/element-android/issues/6711)) + +Bugfixes 🐛 +---------- + - Fix message content sometimes appearing in the log ([#6706](https://github.com/vector-im/element-android/issues/6706)) + - Disable 'Enable biometrics' option if there are not biometric authenticators enrolled. ([#6713](https://github.com/vector-im/element-android/issues/6713)) + - Fix crash when biometric key is used when coming back to foreground and KeyStore reports that the device is still locked. ([#6768](https://github.com/vector-im/element-android/issues/6768)) + - Catch all exceptions on lockscreen system key migrations. ([#6769](https://github.com/vector-im/element-android/issues/6769)) + - Fixes crash when entering non ascii characters during account creation ([#6735](https://github.com/vector-im/element-android/issues/6735)) + - Fixes onboarding login/account creation errors showing after navigation ([#6737](https://github.com/vector-im/element-android/issues/6737)) + - [Location sharing] Invisible text on map symbol ([#6687](https://github.com/vector-im/element-android/issues/6687)) + +In development 🚧 +---------------- + - Adds new app layout toolbar ([#6655](https://github.com/vector-im/element-android/issues/6655)) + +Other changes +------------- + - [Modularization] Provides abstraction to avoid direct usages of BuildConfig ([#6406](https://github.com/vector-im/element-android/issues/6406)) + - Refactors SpaceStateHandler (previously AppStateHandler) and adds unit tests for it ([#6598](https://github.com/vector-im/element-android/issues/6598)) + - Setup Danger to the project ([#6637](https://github.com/vector-im/element-android/issues/6637)) + - [Location Share] Open maximized map on tapping on live sharing notification ([#6642](https://github.com/vector-im/element-android/issues/6642)) + - [Location sharing] Align naming of components for live location feature ([#6647](https://github.com/vector-im/element-android/issues/6647)) + - [Location share] Update minimum sending period to 5 seconds for a live ([#6653](https://github.com/vector-im/element-android/issues/6653)) + - [Location sharing] - Fix the memory leaks ([#6674](https://github.com/vector-im/element-android/issues/6674)) + - [Timeline] Memory leak in audio message playback tracker ([#6678](https://github.com/vector-im/element-android/issues/6678)) + - [FTUE] Memory leak on FtueAuthSplashCarouselFragment ([#6680](https://github.com/vector-im/element-android/issues/6680)) + - Link directly to DCO docs from danger message. ([#6739](https://github.com/vector-im/element-android/issues/6739)) + + Changes in Element v1.4.31 (2022-08-01) ======================================= diff --git a/Gemfile b/Gemfile index 7a118b49be..c90138ee44 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,4 @@ source "https://rubygems.org" gem "fastlane" +gem 'danger' diff --git a/Gemfile.lock b/Gemfile.lock index 345b4c1502..90e846860e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,10 +24,29 @@ GEM aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) claide (1.0.3) + claide-plugins (0.9.2) + cork + nap + open4 (~> 1.3) colored (1.2) colored2 (3.1.2) commander (4.6.0) highline (~> 2.0.0) + cork (0.3.0) + colored2 (~> 3.1) + danger (8.6.1) + claide (~> 1.0) + claide-plugins (>= 0.9.2) + colored2 (~> 3.1) + cork (~> 0.1) + faraday (>= 0.9.0, < 2.0) + faraday-http-cache (~> 2.0) + git (~> 1.7) + kramdown (~> 2.3) + kramdown-parser-gfm (~> 1.0) + no_proxy_fix + octokit (~> 4.7) + terminal-table (>= 1, < 4) declarative (0.0.20) digest-crc (0.6.3) rake (>= 12.0.0, < 14.0.0) @@ -52,6 +71,8 @@ GEM faraday-em_http (1.0.0) faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) + faraday-http-cache (2.4.0) + faraday (>= 0.8) faraday-httpclient (1.0.1) faraday-net_http (1.0.1) faraday-net_http_persistent (1.2.0) @@ -98,6 +119,8 @@ GEM xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) gh_inspector (1.1.3) + git (1.11.0) + rchardet (~> 1.8) google-apis-androidpublisher_v3 (0.8.0) google-apis-core (>= 0.4, < 2.a) google-apis-core (0.4.0) @@ -143,17 +166,28 @@ GEM jmespath (1.4.0) json (2.5.1) jwt (2.2.3) + kramdown (2.4.0) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) memoist (0.16.2) mini_magick (4.11.0) mini_mime (1.1.0) multi_json (1.15.0) multipart-post (2.0.0) nanaimo (0.3.0) + nap (1.1.0) naturally (2.2.1) + no_proxy_fix (0.1.2) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + open4 (1.3.4) os (1.1.1) plist (3.6.0) public_suffix (4.0.6) rake (13.0.6) + rchardet (1.8.0) representable (3.1.1) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) @@ -163,6 +197,9 @@ GEM rouge (2.0.7) ruby2_keywords (0.0.5) rubyzip (2.3.2) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) security (0.1.3) signet (0.15.0) addressable (~> 2.3) @@ -200,9 +237,11 @@ GEM xcpretty (~> 0.2, >= 0.0.7) PLATFORMS + universal-darwin-21 x86_64-darwin-20 DEPENDENCIES + danger fastlane BUNDLED WITH diff --git a/build.gradle b/build.gradle index e8472097d5..afe51cc734 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ buildscript { classpath 'com.google.android.gms:oss-licenses-plugin:0.10.5' classpath "com.likethesalad.android:stem-plugin:2.1.1" classpath 'org.owasp:dependency-check-gradle:7.1.1' - classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.0" + classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.10" classpath "org.jetbrains.kotlinx:kotlinx-knit:0.4.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -41,10 +41,10 @@ plugins { // ktlint Plugin id "org.jlleitschuh.gradle.ktlint" version "10.3.0" // Detekt - id "io.gitlab.arturbosch.detekt" version "1.20.0" + id "io.gitlab.arturbosch.detekt" version "1.21.0" // Dependency Analysis - id 'com.autonomousapps.dependency-analysis' version "1.9.0" + id 'com.autonomousapps.dependency-analysis' version "1.11.2" } // https://github.com/jeremylong/DependencyCheck @@ -126,6 +126,11 @@ allprojects { enableExperimentalRules = true // display the corresponding rule verbose = true + reporters { + reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN) + // To have XML report for Danger + reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE) + } disabledRules = [ // TODO Re-enable these 4 rules after reformatting project "indent", diff --git a/dependencies.gradle b/dependencies.gradle index e8e39dc5f7..93a62a548e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -20,9 +20,9 @@ def retrofit = "2.9.0" def arrow = "0.8.2" def markwon = "4.6.2" def moshi = "1.13.0" -def lifecycle = "2.5.0" +def lifecycle = "2.5.1" def flowBinding = "1.2.0" -def flipper = "0.154.0" +def flipper = "0.156.0" def epoxy = "4.6.2" def mavericks = "2.7.0" def glide = "4.13.2" @@ -30,7 +30,7 @@ def bigImageViewer = "1.8.1" def jjwt = "0.11.5" def vanniktechEmoji = "0.15.0" -def fragment = "1.5.0" +def fragment = "1.5.1" // Testing def mockk = "1.12.3" // We need to use 1.12.3 to have mocking in androidTest until a new version is released: https://github.com/mockk/mockk/issues/819 @@ -50,7 +50,7 @@ ext.libs = [ 'coroutinesTest' : "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinCoroutines" ], androidx : [ - 'activity' : "androidx.activity:activity:1.5.0", + 'activity' : "androidx.activity:activity:1.5.1", 'appCompat' : "androidx.appcompat:appcompat:1.4.2", 'biometric' : "androidx.biometric:biometric:1.1.0", 'core' : "androidx.core:core-ktx:1.8.0", diff --git a/dependencies_groups.gradle b/dependencies_groups.gradle index e89c69a594..d5972ed846 100644 --- a/dependencies_groups.gradle +++ b/dependencies_groups.gradle @@ -74,6 +74,7 @@ ext.groups = [ 'com.github.javaparser', 'com.github.piasy', 'com.github.shyiko.klob', + 'com.github.rubensousa', 'com.google', 'com.google.android', 'com.google.api.grpc', @@ -125,6 +126,7 @@ ext.groups = [ 'info.picocli', 'io.arrow-kt', 'io.element.android', + 'io.github.davidburstrom.contester', 'io.github.detekt.sarif4k', 'io.github.microutils', 'io.github.reactivecircus.flowbinding', diff --git a/docs/danger.md b/docs/danger.md new file mode 100644 index 0000000000..19728f00e9 --- /dev/null +++ b/docs/danger.md @@ -0,0 +1,102 @@ +## Danger + + + +* [What does danger checks](#what-does-danger-checks) + * [PR check](#pr-check) + * [Quality check](#quality-check) +* [Setup](#setup) +* [Run danger locally](#run-danger-locally) +* [Danger user](#danger-user) +* [Useful links](#useful-links) + + + +## What does danger checks + +### PR check + +See the [dangerfile](../tools/danger/dangerfile.js). If you add rules in the dangerfile, please update the list below! + +Here are the checks that Danger does so far: + +- PR description is not empty +- Big PR got a warning to recommend to split +- PR contains a file for towncrier and extension is checked +- PR contains a Sign-Off, with exception for Element employee contributors +- PR with change on layout should include screenshot in the description +- PR which adds png file warn about the usage of vector drawables +- non draft PR should have a reviewer + +### Quality check + +After all the checks that generate checkstyle XML report, such as Ktlint, lint, or Detekt, Danger is run with this [dangerfile](../tools/danger/dangerfile-lint.js), in order to post comments to the PR with the detected error and warnings. + +To run locally, you will have to install the plugin `danger-plugin-lint-report` using: + +```shell +yarn add danger-plugin-lint-report --dev +``` + +## Setup + +This operation should not be necessary, since Danger is already setup for the project. + +To setup danger to the project, run: + +```shell +bundle exec danger init +``` + +## Run danger locally + +When modifying the [dangerfile](../tools/danger/dangerfile.js), you can check it by running Danger locally. + +To run danger locally, install it and run: + +```shell +bundle exec danger pr --dangerfile=./tools/danger/dangerfile.js +``` + +For instance: + +```shell +bundle exec danger pr https://github.com/vector-im/element-android/pull/6637 --dangerfile=./tools/danger/dangerfile.js +``` + +We may need to create a GitHub token to have less API rate limiting, and then set the env var: + +```shell +export DANGER_GITHUB_API_TOKEN='YOUR_TOKEN' +``` + +Swift and Kotlin (just in case) + +```shell +bundle exec danger-swift pr --dangerfile=./tools/danger/dangerfile.js +bundle exec danger-kotlin pr --dangerfile=./tools/danger/dangerfile.js +``` + +## Danger user + +To let Danger check all the PRs, including PRs form forks, a GitHub account have been created: +- login: ElementBot +- password: Stored on Passbolt +- GitHub token: A token with limited access has been created and added to the repository https://github.com/vector-im/element-android as secret DANGER_GITHUB_API_TOKEN. This token is not saved anywhere else. In case of problem, just delete it and create a new one, then update the secret. + +## Useful links + +- https://danger.systems/ +- https://danger.systems/js/ +- https://danger.systems/js/guides/getting_started.html +- https://danger.systems/js/reference.html +- https://github.com/danger/awesome-danger + +Some danger files to get inspired from + +- https://github.com/artsy/emission/blob/master/dangerfile.ts +- https://github.com/facebook/react-native/blob/master/bots/dangerfile.js +- https://github.com/apollographql/apollo-client/blob/master/config/dangerfile.ts +- https://github.com/styleguidist/react-styleguidist/blob/master/dangerfile.js +- https://github.com/storybooks/storybook/blob/master/dangerfile.js +- https://github.com/ReactiveX/rxjs/blob/master/dangerfile.js diff --git a/docs/nightly_build.md b/docs/nightly_build.md index 91f18214c4..7750e0466a 100644 --- a/docs/nightly_build.md +++ b/docs/nightly_build.md @@ -48,7 +48,7 @@ mv towncrier.toml towncrier.toml.bak sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml rm towncrier.toml.bak yes n | towncrier --version nightly -./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES --stacktrace +./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES ``` Then you can reset the change on the codebase. diff --git a/fastlane/metadata/android/en-US/changelogs/40104320.txt b/fastlane/metadata/android/en-US/changelogs/40104320.txt new file mode 100644 index 0000000000..61db61727a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40104320.txt @@ -0,0 +1,2 @@ +Main changes in this version: Various bug fixes and stability improvements. +Full changelog: https://github.com/vector-im/element-android/releases diff --git a/library/ui-styles/src/main/res/drawable/ic_home_search.xml b/library/ui-styles/src/main/res/drawable/ic_home_search.xml new file mode 100644 index 0000000000..5cb88ba1e4 --- /dev/null +++ b/library/ui-styles/src/main/res/drawable/ic_home_search.xml @@ -0,0 +1,4 @@ + + + diff --git a/library/ui-styles/src/main/res/values/dimens.xml b/library/ui-styles/src/main/res/values/dimens.xml index 70d051b457..53f1044a12 100644 --- a/library/ui-styles/src/main/res/values/dimens.xml +++ b/library/ui-styles/src/main/res/values/dimens.xml @@ -71,4 +71,7 @@ 8dp 12dp 22dp + + + 112dp diff --git a/library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml b/library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml similarity index 79% rename from library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml rename to library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml index 81e377d39b..30ac6229c5 100644 --- a/library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml +++ b/library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml @@ -1,7 +1,7 @@ - + diff --git a/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml b/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml new file mode 100644 index 0000000000..911167e52a --- /dev/null +++ b/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/library/ui-styles/src/main/res/values/styles_location.xml b/library/ui-styles/src/main/res/values/styles_location.xml index 41ddbc73ca..ee893046ba 100644 --- a/library/ui-styles/src/main/res/values/styles_location.xml +++ b/library/ui-styles/src/main/res/values/styles_location.xml @@ -1,7 +1,7 @@ - - - \ No newline at end of file + + + + + diff --git a/library/ui-styles/src/main/res/values/text_appearances.xml b/library/ui-styles/src/main/res/values/text_appearances.xml index 1e60e05acf..570d26fdfd 100644 --- a/library/ui-styles/src/main/res/values/text_appearances.xml +++ b/library/ui-styles/src/main/res/values/text_appearances.xml @@ -32,6 +32,15 @@ ?vctr_content_primary + + - \ No newline at end of file + diff --git a/library/ui-styles/src/main/res/values/theme_dark.xml b/library/ui-styles/src/main/res/values/theme_dark.xml index f86a05ed66..9f4e5c1e28 100644 --- a/library/ui-styles/src/main/res/values/theme_dark.xml +++ b/library/ui-styles/src/main/res/values/theme_dark.xml @@ -149,6 +149,9 @@ @color/vctr_live_location_dark + + + @dimen/collapsing_toolbar_layout_medium_size