Merge branch 'develop' into feature/fga/update_rust_sdk_0.2.25
This commit is contained in:
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -9,8 +9,8 @@ on:
|
||||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC -Dkotlin.daemon.jvm.options="-Xmx3g"
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
debug:
|
||||
|
||||
4
.github/workflows/maestro.yml
vendored
4
.github/workflows/maestro.yml
vendored
@@ -8,8 +8,8 @@ on:
|
||||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC -Dkotlin.daemon.jvm.options="-Xmx3g"
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
build-apk:
|
||||
|
||||
4
.github/workflows/nightly.yml
vendored
4
.github/workflows/nightly.yml
vendored
@@ -7,8 +7,8 @@ on:
|
||||
- cron: "0 4 * * *"
|
||||
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
nightly:
|
||||
|
||||
4
.github/workflows/nightlyReports.yml
vendored
4
.github/workflows/nightlyReports.yml
vendored
@@ -8,8 +8,8 @@ on:
|
||||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx3g" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
nightlyReports:
|
||||
|
||||
19
.github/workflows/quality.yml
vendored
19
.github/workflows/quality.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
checkScript:
|
||||
@@ -88,6 +88,10 @@ jobs:
|
||||
uses: gradle/actions/setup-gradle@v3
|
||||
with:
|
||||
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
|
||||
- name: Build Gplay Debug
|
||||
run: ./gradlew :app:compileGplayDebugKotlin $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build Fdroid Debug
|
||||
run: ./gradlew :app:compileFdroidDebugKotlin $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Run lint
|
||||
run: ./gradlew :app:lintGplayDebug :app:lintFdroidDebug $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Upload reports
|
||||
@@ -187,6 +191,19 @@ jobs:
|
||||
- name: Run Knit
|
||||
run: ./gradlew knitCheck $CI_GRADLE_ARG_PROPERTIES
|
||||
|
||||
# Note: to auto fix issues you can use the following command:
|
||||
# shellcheck -f diff <files> | git apply
|
||||
shellcheck:
|
||||
name: Check shell scripts
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run shellcheck
|
||||
uses: ludeeus/action-shellcheck@2.0.0
|
||||
with:
|
||||
scandir: ./tools
|
||||
severity: warning
|
||||
|
||||
upload_reports:
|
||||
name: Project Check Suite
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
2
.github/workflows/recordScreenshots.yml
vendored
2
.github/workflows/recordScreenshots.yml
vendored
@@ -7,7 +7,7 @@ on:
|
||||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx5g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx5g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
record:
|
||||
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
gplay:
|
||||
|
||||
@@ -62,10 +62,10 @@ if [[ -z ${REPO} ]]; then
|
||||
fi
|
||||
|
||||
echo "Deleting previous screenshots"
|
||||
./gradlew removeOldSnapshots --stacktrace -PpreDexEnable=false --max-workers 4 --warn
|
||||
./gradlew removeOldSnapshots --stacktrace --warn
|
||||
|
||||
echo "Record screenshots"
|
||||
./gradlew recordPaparazziDebug --stacktrace -PpreDexEnable=false --max-workers 4 --warn
|
||||
./gradlew recordPaparazziDebug --stacktrace --warn
|
||||
|
||||
echo "Committing changes"
|
||||
git config http.sslVerify false
|
||||
|
||||
21
.github/workflows/sonar.yml
vendored
21
.github/workflows/sonar.yml
vendored
@@ -9,8 +9,9 @@ on:
|
||||
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -XX:MaxMetaspaceSize=512m -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --warn -Dsonar.gradle.skipCompile=true
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace --warn -Dsonar.gradle.skipCompile=true
|
||||
GROUP: ${{ format('sonar-{0}', github.ref) }}
|
||||
|
||||
jobs:
|
||||
sonar:
|
||||
@@ -18,8 +19,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
# Allow all jobs on main and develop. Just one per PR.
|
||||
concurrency:
|
||||
group: ${{ github.ref == 'refs/heads/main' && format('sonar-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('sonar-develop-{0}', github.sha) || format('sonar-{0}', github.ref) }}
|
||||
cancel-in-progress: true
|
||||
group: ${{ format('sonar-{0}', github.ref) }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -35,8 +36,16 @@ jobs:
|
||||
uses: gradle/actions/setup-gradle@v3
|
||||
with:
|
||||
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
|
||||
- name: Build projects
|
||||
run: ./gradlew assembleDebug createFullJarDebugTestFixtures :app:createFullJarGplayDebugTestFixtures $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build Gplay Debug
|
||||
run: ./gradlew :app:assembleGplayDebug $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build Fdroid Debug
|
||||
run: ./gradlew :app:assembleFdroidDebug $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build Sample
|
||||
run: ./gradlew :samples:minimal:assembleDebug $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build library fixtures
|
||||
run: ./gradlew assembleDebug createFullJarDebugTestFixtures $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: Build app fixtures
|
||||
run: ./gradlew :app:createFullJarGplayDebugTestFixtures $CI_GRADLE_ARG_PROPERTIES
|
||||
- name: 🔊 Publish results to Sonar
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
|
||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
# Enrich gradle.properties for CI/CD
|
||||
env:
|
||||
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 8 --warn -Dsonar.gradle.skipCompile=true
|
||||
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
|
||||
@@ -22,7 +22,9 @@ import androidx.preference.PreferenceManager
|
||||
import androidx.startup.Initializer
|
||||
import io.element.android.features.preferences.impl.developer.tracing.SharedPreferencesTracingConfigurationStore
|
||||
import io.element.android.features.preferences.impl.developer.tracing.TargetLogLevelMapBuilder
|
||||
import io.element.android.features.rageshake.api.reporter.BugReporter
|
||||
import io.element.android.libraries.architecture.bindings
|
||||
import io.element.android.libraries.core.meta.BuildType
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
|
||||
import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration
|
||||
@@ -36,31 +38,27 @@ class TracingInitializer : Initializer<Unit> {
|
||||
val tracingService = appBindings.tracingService()
|
||||
val bugReporter = appBindings.bugReporter()
|
||||
Timber.plant(tracingService.createTimberTree())
|
||||
val tracingConfiguration = if (BuildConfig.DEBUG) {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
val store = SharedPreferencesTracingConfigurationStore(prefs)
|
||||
val builder = TargetLogLevelMapBuilder(store)
|
||||
val tracingConfiguration = if (BuildConfig.BUILD_TYPE == BuildType.RELEASE.name) {
|
||||
TracingConfiguration(
|
||||
filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
|
||||
writesToLogcat = true,
|
||||
writesToFilesConfiguration = WriteToFilesConfiguration.Disabled
|
||||
filterConfiguration = TracingFilterConfigurations.release,
|
||||
writesToLogcat = false,
|
||||
writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
|
||||
)
|
||||
} else {
|
||||
val config = if (BuildConfig.BUILD_TYPE == "nightly") {
|
||||
TracingFilterConfigurations.nightly
|
||||
} else {
|
||||
TracingFilterConfigurations.release
|
||||
}
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
val store = SharedPreferencesTracingConfigurationStore(prefs)
|
||||
val builder = TargetLogLevelMapBuilder(
|
||||
tracingConfigurationStore = store,
|
||||
defaultConfig = if (BuildConfig.BUILD_TYPE == BuildType.NIGHTLY.name) {
|
||||
TracingFilterConfigurations.nightly
|
||||
} else {
|
||||
TracingFilterConfigurations.debug
|
||||
}
|
||||
)
|
||||
TracingConfiguration(
|
||||
filterConfiguration = config,
|
||||
writesToLogcat = false,
|
||||
writesToFilesConfiguration = WriteToFilesConfiguration.Enabled(
|
||||
directory = bugReporter.logDirectory().absolutePath,
|
||||
filenamePrefix = "logs",
|
||||
filenameSuffix = null,
|
||||
// Keep a minimum of 1 week of log files.
|
||||
numberOfFiles = 7 * 24,
|
||||
)
|
||||
filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
|
||||
writesToLogcat = BuildConfig.DEBUG,
|
||||
writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
|
||||
)
|
||||
}
|
||||
bugReporter.setCurrentTracingFilter(tracingConfiguration.filterConfiguration.filter)
|
||||
@@ -69,5 +67,15 @@ class TracingInitializer : Initializer<Unit> {
|
||||
Os.setenv("RUST_BACKTRACE", "1", true)
|
||||
}
|
||||
|
||||
private fun defaultWriteToDiskConfiguration(bugReporter: BugReporter): WriteToFilesConfiguration.Enabled {
|
||||
return WriteToFilesConfiguration.Enabled(
|
||||
directory = bugReporter.logDirectory().absolutePath,
|
||||
filenamePrefix = "logs",
|
||||
filenameSuffix = null,
|
||||
// Keep a minimum of 1 week of log files.
|
||||
numberOfFiles = 7 * 24,
|
||||
)
|
||||
}
|
||||
|
||||
override fun dependencies(): List<Class<out Initializer<*>>> = mutableListOf()
|
||||
}
|
||||
|
||||
5
changelog.d/3016.bugfix
Normal file
5
changelog.d/3016.bugfix
Normal file
@@ -0,0 +1,5 @@
|
||||
Fix tracing configuration in debug and nightlies:
|
||||
|
||||
- Debug will now write the logs to disk too.
|
||||
- Nightly will be able to customise tracing filters.
|
||||
- Improved the configure tracing and bug report screens.
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package io.element.android.features.preferences.impl.developer.tracing
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
@@ -48,6 +49,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.designsystem.theme.aliasScreenTitle
|
||||
import io.element.android.libraries.designsystem.theme.components.DropdownMenu
|
||||
import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem
|
||||
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
|
||||
import io.element.android.libraries.designsystem.theme.components.Icon
|
||||
import io.element.android.libraries.designsystem.theme.components.IconButton
|
||||
import io.element.android.libraries.designsystem.theme.components.ListItem
|
||||
@@ -124,15 +126,17 @@ fun ConfigureTracingView(
|
||||
.consumeWindowInsets(it)
|
||||
.verticalScroll(state = rememberScrollState())
|
||||
) {
|
||||
CrateListContent(state)
|
||||
ListItem(
|
||||
headlineContent = {
|
||||
Text(
|
||||
text = "Kill and restart the app for the change to take effect.",
|
||||
modifier = Modifier.clickable { Runtime.getRuntime().exit(0) },
|
||||
text = "Tap here to kill the app and apply the changes. You'll have to re-open the app manually.",
|
||||
style = ElementTheme.typography.fontHeadingSmMedium,
|
||||
)
|
||||
},
|
||||
)
|
||||
HorizontalDivider()
|
||||
CrateListContent(state)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -18,14 +18,13 @@ package io.element.android.features.preferences.impl.developer.tracing
|
||||
|
||||
import io.element.android.libraries.matrix.api.tracing.LogLevel
|
||||
import io.element.android.libraries.matrix.api.tracing.Target
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfiguration
|
||||
import javax.inject.Inject
|
||||
|
||||
class TargetLogLevelMapBuilder @Inject constructor(
|
||||
private val tracingConfigurationStore: TracingConfigurationStore,
|
||||
private val defaultConfig: TracingFilterConfiguration,
|
||||
) {
|
||||
private val defaultConfig = TracingFilterConfigurations.debug
|
||||
|
||||
fun getDefaultMap(): Map<Target, LogLevel> {
|
||||
return Target.entries.associateWith { target ->
|
||||
defaultConfig.getLogLevel(target)
|
||||
|
||||
@@ -22,6 +22,7 @@ import app.cash.turbine.test
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.matrix.api.tracing.LogLevel
|
||||
import io.element.android.libraries.matrix.api.tracing.Target
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
|
||||
import io.element.android.tests.testutils.WarmUpRule
|
||||
import io.element.android.tests.testutils.waitForPredicate
|
||||
import kotlinx.coroutines.test.runTest
|
||||
@@ -37,7 +38,7 @@ class ConfigureTracingPresenterTest {
|
||||
val store = InMemoryTracingConfigurationStore()
|
||||
val presenter = ConfigureTracingPresenter(
|
||||
store,
|
||||
TargetLogLevelMapBuilder(store),
|
||||
TargetLogLevelMapBuilder(store, TracingFilterConfigurations.debug),
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
@@ -54,7 +55,7 @@ class ConfigureTracingPresenterTest {
|
||||
store.givenLogLevel(LogLevel.ERROR)
|
||||
val presenter = ConfigureTracingPresenter(
|
||||
store,
|
||||
TargetLogLevelMapBuilder(store),
|
||||
TargetLogLevelMapBuilder(store, TracingFilterConfigurations.debug),
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
@@ -70,7 +71,7 @@ class ConfigureTracingPresenterTest {
|
||||
val store = InMemoryTracingConfigurationStore()
|
||||
val presenter = ConfigureTracingPresenter(
|
||||
store,
|
||||
TargetLogLevelMapBuilder(store),
|
||||
TargetLogLevelMapBuilder(store, TracingFilterConfigurations.debug),
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
@@ -89,7 +90,7 @@ class ConfigureTracingPresenterTest {
|
||||
val store = InMemoryTracingConfigurationStore()
|
||||
val presenter = ConfigureTracingPresenter(
|
||||
store,
|
||||
TargetLogLevelMapBuilder(store),
|
||||
TargetLogLevelMapBuilder(store, TracingFilterConfigurations.debug),
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
|
||||
@@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
@@ -28,6 +29,8 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardCapitalization
|
||||
@@ -51,6 +54,7 @@ import io.element.android.libraries.designsystem.preview.debugPlaceholderBackgro
|
||||
import io.element.android.libraries.designsystem.theme.components.Button
|
||||
import io.element.android.libraries.designsystem.theme.components.OutlinedTextField
|
||||
import io.element.android.libraries.designsystem.theme.components.Text
|
||||
import io.element.android.libraries.designsystem.theme.components.onTabOrEnterKeyFocusNext
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
@Composable
|
||||
@@ -68,6 +72,7 @@ fun BugReportView(
|
||||
title = stringResource(id = CommonStrings.common_report_a_problem),
|
||||
onBackClick = onBackClick
|
||||
) {
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
val isFormEnabled = state.sending !is AsyncAction.Loading
|
||||
var descriptionFieldState by textFieldState(
|
||||
stateValue = state.formState.description
|
||||
@@ -76,7 +81,8 @@ fun BugReportView(
|
||||
PreferenceRow {
|
||||
OutlinedTextField(
|
||||
value = descriptionFieldState,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
|
||||
enabled = isFormEnabled,
|
||||
label = {
|
||||
Text(text = stringResource(id = R.string.screen_bug_report_editor_placeholder))
|
||||
@@ -91,8 +97,11 @@ fun BugReportView(
|
||||
keyboardOptions = KeyboardOptions(
|
||||
capitalization = KeyboardCapitalization.Sentences,
|
||||
keyboardType = KeyboardType.Text,
|
||||
imeAction = ImeAction.Next
|
||||
imeAction = ImeAction.Next,
|
||||
),
|
||||
keyboardActions = KeyboardActions(onNext = {
|
||||
keyboardController?.hide()
|
||||
}),
|
||||
minLines = 3,
|
||||
isError = state.isDescriptionInError,
|
||||
)
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (c) 2024 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.impl.di
|
||||
|
||||
import com.squareup.anvil.annotations.ContributesTo
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.core.meta.BuildType
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfiguration
|
||||
import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
|
||||
|
||||
@Module
|
||||
@ContributesTo(AppScope::class)
|
||||
object TracingMatrixModule {
|
||||
@Provides
|
||||
fun providesTracingFilterConfiguration(buildMeta: BuildMeta): TracingFilterConfiguration {
|
||||
return when (buildMeta.buildType) {
|
||||
BuildType.DEBUG -> TracingFilterConfigurations.debug
|
||||
BuildType.NIGHTLY -> TracingFilterConfigurations.nightly
|
||||
BuildType.RELEASE -> TracingFilterConfigurations.release
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ fun CommonExtension<*, *, *, *, *, *>.androidConfig(project: Project) {
|
||||
|
||||
lint {
|
||||
lintConfig = File("${project.rootDir}/tools/lint/lint.xml")
|
||||
checkDependencies = true
|
||||
checkDependencies = false
|
||||
abortOnError = true
|
||||
ignoreTestFixturesSources = true
|
||||
checkGeneratedSources = false
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -41,9 +41,9 @@ echo
|
||||
echo "Search for forbidden patterns in Kotlin source files..."
|
||||
|
||||
# list all Kotlin folders of the project.
|
||||
allKotlinDirs=`find . -type d |grep -v build |grep -v \.git |grep -v \.gradle |grep kotlin$`
|
||||
allKotlinDirs=$(find . -type d |grep -v build |grep -v \.git |grep -v \.gradle |grep kotlin$)
|
||||
|
||||
${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_code.txt $allKotlinDirs
|
||||
${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_code.txt "$allKotlinDirs"
|
||||
|
||||
resultForbiddenStringInCode=$?
|
||||
|
||||
@@ -51,9 +51,9 @@ echo
|
||||
echo "Search for forbidden patterns in XML resource files..."
|
||||
|
||||
# list all res folders of the project.
|
||||
allResDirs=`find . -type d |grep -v build |grep -v \.git |grep -v \.gradle |grep /res$`
|
||||
allResDirs=$(find . -type d |grep -v build |grep -v \.git |grep -v \.gradle |grep /res$)
|
||||
|
||||
${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_xml.txt $allResDirs
|
||||
${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_xml.txt "$allResDirs"
|
||||
|
||||
resultForbiddenStringInXml=$?
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#
|
||||
|
||||
## Dependency graph https://github.com/savvasdalkitsis/module-dependency-graph
|
||||
dotPath=`pwd`/docs/images/module_graph.dot
|
||||
pngPath=`pwd`/docs/images/module_graph.png
|
||||
./gradlew graphModules -PdotFilePath=${dotPath} -PgraphOutputFilePath=${pngPath} -PautoOpenGraph=false
|
||||
rm ${dotPath}
|
||||
dotPath=$(pwd)/docs/images/module_graph.dot
|
||||
pngPath=$(pwd)/docs/images/module_graph.png
|
||||
./gradlew graphModules -PdotFilePath="${dotPath}" -PgraphOutputFilePath="${pngPath}" -PautoOpenGraph=false
|
||||
rm "${dotPath}"
|
||||
|
||||
@@ -51,10 +51,10 @@ fi
|
||||
|
||||
set +e
|
||||
echo "Moving files from values-id to values-in..."
|
||||
find . -type d -name 'values-id' -execdir mv {}/translations.xml {}/../values-in/translations.xml 2> /dev/null \;
|
||||
find . -type d -name 'values-id' -execdir mv {}/translations.xml {}/../values-in/translations.xml \; 2> /dev/null
|
||||
|
||||
echo "Deleting all the folders values-id..."
|
||||
find . -type d -name 'values-id' -exec rm -rf {} 2> /dev/null \;
|
||||
find . -type d -name 'values-id' -exec rm -rf {} \; 2> /dev/null
|
||||
set -e
|
||||
|
||||
echo "Checking forbidden terms..."
|
||||
|
||||
@@ -83,7 +83,7 @@ if [[ ! -d ${buildToolsPath} ]]; then
|
||||
fi
|
||||
|
||||
# Check if git flow is enabled
|
||||
gitFlowDevelop=`git config gitflow.branch.develop`
|
||||
gitFlowDevelop=$(git config gitflow.branch.develop)
|
||||
if [[ ${gitFlowDevelop} != "" ]]
|
||||
then
|
||||
printf "Git flow is initialized\n"
|
||||
@@ -105,23 +105,23 @@ git pull
|
||||
printf "\n================================================================================\n"
|
||||
# Guessing version to propose a default version
|
||||
versionsFile="./plugins/src/main/kotlin/Versions.kt"
|
||||
versionMajorCandidate=`grep "val versionMajor" ${versionsFile} | cut -d " " -f6`
|
||||
versionMinorCandidate=`grep "val versionMinor" ${versionsFile} | cut -d " " -f6`
|
||||
versionPatchCandidate=`grep "val versionPatch" ${versionsFile} | cut -d " " -f6`
|
||||
versionMajorCandidate=$(grep "val versionMajor" ${versionsFile} | cut -d " " -f6)
|
||||
versionMinorCandidate=$(grep "val versionMinor" ${versionsFile} | cut -d " " -f6)
|
||||
versionPatchCandidate=$(grep "val versionPatch" ${versionsFile} | cut -d " " -f6)
|
||||
versionCandidate="${versionMajorCandidate}.${versionMinorCandidate}.${versionPatchCandidate}"
|
||||
|
||||
read -p "Please enter the release version (example: ${versionCandidate}). Just press enter if ${versionCandidate} is correct. " version
|
||||
version=${version:-${versionCandidate}}
|
||||
|
||||
# extract major, minor and patch for future use
|
||||
versionMajor=`echo ${version} | cut -d "." -f1`
|
||||
versionMinor=`echo ${version} | cut -d "." -f2`
|
||||
versionPatch=`echo ${version} | cut -d "." -f3`
|
||||
versionMajor=$(echo "${version}" | cut -d "." -f1)
|
||||
versionMinor=$(echo "${version}" | cut -d "." -f2)
|
||||
versionPatch=$(echo "${version}" | cut -d "." -f3)
|
||||
nextPatchVersion=$((versionPatch + 1))
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Starting the release ${version}\n"
|
||||
git flow release start ${version}
|
||||
git flow release start "${version}"
|
||||
|
||||
# Note: in case the release is already started and the script is started again, checkout the release branch again.
|
||||
ret=$?
|
||||
@@ -154,15 +154,15 @@ git commit -a -m "Changelog for version ${version}"
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Creating fastlane file...\n"
|
||||
printf -v versionMajor2Digits "%02d" ${versionMajor}
|
||||
printf -v versionMinor2Digits "%02d" ${versionMinor}
|
||||
printf -v versionPatch2Digits "%02d" ${versionPatch}
|
||||
printf -v versionMajor2Digits "%02d" "${versionMajor}"
|
||||
printf -v versionMinor2Digits "%02d" "${versionMinor}"
|
||||
printf -v versionPatch2Digits "%02d" "${versionPatch}"
|
||||
fastlaneFile="4${versionMajor2Digits}${versionMinor2Digits}${versionPatch2Digits}0.txt"
|
||||
fastlanePathFile="./fastlane/metadata/android/en-US/changelogs/${fastlaneFile}"
|
||||
printf "Main changes in this version: TODO.\nFull changelog: https://github.com/element-hq/element-x-android/releases" > ${fastlanePathFile}
|
||||
printf "Main changes in this version: TODO.\nFull changelog: https://github.com/element-hq/element-x-android/releases" > "${fastlanePathFile}"
|
||||
|
||||
read -p "I have created the file ${fastlanePathFile}, please edit it and press enter to continue. "
|
||||
git add ${fastlanePathFile}
|
||||
git add "${fastlanePathFile}"
|
||||
git commit -a -m "Adding fastlane file for version ${version}"
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
@@ -173,7 +173,7 @@ printf "\n======================================================================
|
||||
read -p "Done, push the branch 'main' and the new tag (yes/no) default to yes? " doPush
|
||||
doPush=${doPush:-yes}
|
||||
|
||||
if [ ${doPush} == "yes" ]; then
|
||||
if [ "${doPush}" == "yes" ]; then
|
||||
printf "Pushing branch 'main' and tag 'v${version}'...\n"
|
||||
git push origin main
|
||||
git push origin "v${version}"
|
||||
@@ -202,7 +202,7 @@ printf "\n======================================================================
|
||||
read -p "Done, push the branch 'develop' (yes/no) default to yes? (A rebase may be necessary in case develop got new commits) " doPush
|
||||
doPush=${doPush:-yes}
|
||||
|
||||
if [ ${doPush} == "yes" ]; then
|
||||
if [ "${doPush}" == "yes" ]; then
|
||||
printf "Pushing branch 'develop'...\n"
|
||||
git push origin develop
|
||||
else
|
||||
@@ -220,74 +220,74 @@ printf "\n======================================================================
|
||||
printf "Downloading the artifacts...\n"
|
||||
|
||||
python3 ./tools/github/download_all_github_artifacts.py \
|
||||
--token ${gitHubToken} \
|
||||
--runUrl ${runUrl} \
|
||||
--directory ${targetPath}
|
||||
--token "${gitHubToken}" \
|
||||
--runUrl "${runUrl}" \
|
||||
--directory "${targetPath}"
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Unzipping the F-Droid artifact...\n"
|
||||
|
||||
fdroidTargetPath="${targetPath}/fdroid"
|
||||
unzip ${targetPath}/elementx-app-fdroid-apks-unsigned.zip -d ${fdroidTargetPath}
|
||||
unzip "${targetPath}"/elementx-app-fdroid-apks-unsigned.zip -d "${fdroidTargetPath}"
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Signing the FDroid APKs...\n"
|
||||
|
||||
cp ${fdroidTargetPath}/app-fdroid-arm64-v8a-release.apk \
|
||||
${fdroidTargetPath}/app-fdroid-arm64-v8a-release-signed.apk
|
||||
${buildToolsPath}/apksigner sign \
|
||||
cp "${fdroidTargetPath}"/app-fdroid-arm64-v8a-release.apk \
|
||||
"${fdroidTargetPath}"/app-fdroid-arm64-v8a-release-signed.apk
|
||||
"${buildToolsPath}"/apksigner sign \
|
||||
-v \
|
||||
--ks ${keyStorePath} \
|
||||
--ks-pass pass:${keyStorePassword} \
|
||||
--ks "${keyStorePath}" \
|
||||
--ks-pass pass:"${keyStorePassword}" \
|
||||
--ks-key-alias elementx \
|
||||
--key-pass pass:${keyPassword} \
|
||||
--key-pass pass:"${keyPassword}" \
|
||||
--min-sdk-version ${minSdkVersion} \
|
||||
${fdroidTargetPath}/app-fdroid-arm64-v8a-release-signed.apk
|
||||
"${fdroidTargetPath}"/app-fdroid-arm64-v8a-release-signed.apk
|
||||
|
||||
cp ${fdroidTargetPath}/app-fdroid-armeabi-v7a-release.apk \
|
||||
${fdroidTargetPath}/app-fdroid-armeabi-v7a-release-signed.apk
|
||||
${buildToolsPath}/apksigner sign \
|
||||
cp "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release.apk \
|
||||
"${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release-signed.apk
|
||||
"${buildToolsPath}"/apksigner sign \
|
||||
-v \
|
||||
--ks ${keyStorePath} \
|
||||
--ks-pass pass:${keyStorePassword} \
|
||||
--ks "${keyStorePath}" \
|
||||
--ks-pass pass:"${keyStorePassword}" \
|
||||
--ks-key-alias elementx \
|
||||
--key-pass pass:${keyPassword} \
|
||||
--key-pass pass:"${keyPassword}" \
|
||||
--min-sdk-version ${minSdkVersion} \
|
||||
${fdroidTargetPath}/app-fdroid-armeabi-v7a-release-signed.apk
|
||||
"${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release-signed.apk
|
||||
|
||||
cp ${fdroidTargetPath}/app-fdroid-x86-release.apk \
|
||||
${fdroidTargetPath}/app-fdroid-x86-release-signed.apk
|
||||
${buildToolsPath}/apksigner sign \
|
||||
cp "${fdroidTargetPath}"/app-fdroid-x86-release.apk \
|
||||
"${fdroidTargetPath}"/app-fdroid-x86-release-signed.apk
|
||||
"${buildToolsPath}"/apksigner sign \
|
||||
-v \
|
||||
--ks ${keyStorePath} \
|
||||
--ks-pass pass:${keyStorePassword} \
|
||||
--ks "${keyStorePath}" \
|
||||
--ks-pass pass:"${keyStorePassword}" \
|
||||
--ks-key-alias elementx \
|
||||
--key-pass pass:${keyPassword} \
|
||||
--key-pass pass:"${keyPassword}" \
|
||||
--min-sdk-version ${minSdkVersion} \
|
||||
${fdroidTargetPath}/app-fdroid-x86-release-signed.apk
|
||||
"${fdroidTargetPath}"/app-fdroid-x86-release-signed.apk
|
||||
|
||||
cp ${fdroidTargetPath}/app-fdroid-x86_64-release.apk \
|
||||
${fdroidTargetPath}/app-fdroid-x86_64-release-signed.apk
|
||||
${buildToolsPath}/apksigner sign \
|
||||
cp "${fdroidTargetPath}"/app-fdroid-x86_64-release.apk \
|
||||
"${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk
|
||||
"${buildToolsPath}"/apksigner sign \
|
||||
-v \
|
||||
--ks ${keyStorePath} \
|
||||
--ks-pass pass:${keyStorePassword} \
|
||||
--ks "${keyStorePath}" \
|
||||
--ks-pass pass:"${keyStorePassword}" \
|
||||
--ks-key-alias elementx \
|
||||
--key-pass pass:${keyPassword} \
|
||||
--key-pass pass:"${keyPassword}" \
|
||||
--min-sdk-version ${minSdkVersion} \
|
||||
${fdroidTargetPath}/app-fdroid-x86_64-release-signed.apk
|
||||
"${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Please check the information below:\n"
|
||||
|
||||
printf "File app-fdroid-arm64-v8a-release-signed.apk:\n"
|
||||
${buildToolsPath}/aapt dump badging ${fdroidTargetPath}/app-fdroid-arm64-v8a-release-signed.apk | grep package
|
||||
"${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-arm64-v8a-release-signed.apk | grep package
|
||||
printf "File app-fdroid-armeabi-v7a-release-signed.apk:\n"
|
||||
${buildToolsPath}/aapt dump badging ${fdroidTargetPath}/app-fdroid-armeabi-v7a-release-signed.apk | grep package
|
||||
"${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release-signed.apk | grep package
|
||||
printf "File app-fdroid-x86-release-signed.apk:\n"
|
||||
${buildToolsPath}/aapt dump badging ${fdroidTargetPath}/app-fdroid-x86-release-signed.apk | grep package
|
||||
"${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-x86-release-signed.apk | grep package
|
||||
printf "File app-fdroid-x86_64-release-signed.apk:\n"
|
||||
${buildToolsPath}/aapt dump badging ${fdroidTargetPath}/app-fdroid-x86_64-release-signed.apk | grep package
|
||||
"${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk | grep package
|
||||
|
||||
printf "\n"
|
||||
read -p "Does it look correct? Press enter when it's done."
|
||||
@@ -299,7 +299,7 @@ printf "\n======================================================================
|
||||
printf "Unzipping the Gplay artifact...\n"
|
||||
|
||||
gplayTargetPath="${targetPath}/gplay"
|
||||
unzip ${targetPath}/elementx-app-gplay-bundle-unsigned.zip -d ${gplayTargetPath}
|
||||
unzip "${targetPath}"/elementx-app-gplay-bundle-unsigned.zip -d "${gplayTargetPath}"
|
||||
|
||||
unsignedBundlePath="${gplayTargetPath}/app-gplay-release.aab"
|
||||
signedBundlePath="${gplayTargetPath}/app-gplay-release-signed.aab"
|
||||
@@ -307,24 +307,24 @@ signedBundlePath="${gplayTargetPath}/app-gplay-release-signed.aab"
|
||||
printf "\n================================================================================\n"
|
||||
printf "Signing file ${unsignedBundlePath} with build-tools version ${buildToolsVersion} for min SDK version ${minSdkVersion}...\n"
|
||||
|
||||
cp ${unsignedBundlePath} ${signedBundlePath}
|
||||
cp "${unsignedBundlePath}" "${signedBundlePath}"
|
||||
|
||||
${buildToolsPath}/apksigner sign \
|
||||
"${buildToolsPath}"/apksigner sign \
|
||||
-v \
|
||||
--ks ${keyStorePath} \
|
||||
--ks-pass pass:${keyStorePassword} \
|
||||
--ks "${keyStorePath}" \
|
||||
--ks-pass pass:"${keyStorePassword}" \
|
||||
--ks-key-alias elementx \
|
||||
--key-pass pass:${keyPassword} \
|
||||
--key-pass pass:"${keyPassword}" \
|
||||
--min-sdk-version ${minSdkVersion} \
|
||||
${signedBundlePath}
|
||||
"${signedBundlePath}"
|
||||
|
||||
printf "\n================================================================================\n"
|
||||
printf "Please check the information below:\n"
|
||||
|
||||
printf "Version code: "
|
||||
bundletool dump manifest --bundle=${signedBundlePath} --xpath=/manifest/@android:versionCode
|
||||
bundletool dump manifest --bundle="${signedBundlePath}" --xpath=/manifest/@android:versionCode
|
||||
printf "Version name: "
|
||||
bundletool dump manifest --bundle=${signedBundlePath} --xpath=/manifest/@android:versionName
|
||||
bundletool dump manifest --bundle="${signedBundlePath}" --xpath=/manifest/@android:versionName
|
||||
|
||||
printf "\n"
|
||||
read -p "Does it look correct? Press enter to continue. "
|
||||
@@ -336,17 +336,17 @@ printf "\n======================================================================
|
||||
read -p "Do you want to build the APKs from the app bundle? You need to do this step if you want to install the application to your device. (yes/no) default to yes " doBuildApks
|
||||
doBuildApks=${doBuildApks:-yes}
|
||||
|
||||
if [ ${doBuildApks} == "yes" ]; then
|
||||
if [ "${doBuildApks}" == "yes" ]; then
|
||||
printf "Building apks...\n"
|
||||
bundletool build-apks --bundle=${signedBundlePath} --output=${gplayTargetPath}/elementx.apks \
|
||||
bundletool build-apks --bundle="${signedBundlePath}" --output="${gplayTargetPath}"/elementx.apks \
|
||||
--ks=./app/signature/debug.keystore --ks-pass=pass:android --ks-key-alias=androiddebugkey --key-pass=pass:android \
|
||||
--overwrite
|
||||
|
||||
read -p "Do you want to install the application to your device? Make sure there is one (and only one!) connected device first. (yes/no) default to yes " doDeploy
|
||||
doDeploy=${doDeploy:-yes}
|
||||
if [ ${doDeploy} == "yes" ]; then
|
||||
if [ "${doDeploy}" == "yes" ]; then
|
||||
printf "Installing apk for your device...\n"
|
||||
bundletool install-apks --apks=${gplayTargetPath}/elementx.apks
|
||||
bundletool install-apks --apks="${gplayTargetPath}"/elementx.apks
|
||||
read -p "Please run the application on your phone to check that the upgrade went well. Press enter to continue. "
|
||||
else
|
||||
printf "APK will not be deployed!\n"
|
||||
@@ -373,7 +373,7 @@ printf "\n======================================================================
|
||||
body="%3C%21--%20Copy%20paste%20the%20section%20of%20the%20file%20CHANGES.md%20for%20this%20release%20here%20--%3E"
|
||||
githubCreateReleaseLink="https://github.com/element-hq/element-x-android/releases/new?tag=v${version}&title=Element%20X%20Android%20v${version}&body=${body}"
|
||||
printf "Creating the release on gitHub.\n"
|
||||
printf -- "Open this link: %s\n" ${githubCreateReleaseLink}
|
||||
printf -- "Open this link: %s\n" "${githubCreateReleaseLink}"
|
||||
printf "Then\n"
|
||||
printf " - copy paste the section of the file CHANGES.md for this release.\n"
|
||||
printf " - click on the 'Generate releases notes' button.\n"
|
||||
@@ -392,12 +392,12 @@ if [[ -z "${elementBotToken}" ]]; then
|
||||
else
|
||||
read -p "Send this message to the room (yes/no) default to yes? " doSend
|
||||
doSend=${doSend:-yes}
|
||||
if [ ${doSend} == "yes" ]; then
|
||||
if [ "${doSend}" == "yes" ]; then
|
||||
printf "Sending message...\n"
|
||||
transactionId=`openssl rand -hex 16`
|
||||
transactionId=$(openssl rand -hex 16)
|
||||
# Element Android internal
|
||||
matrixRoomId="!LiSLXinTDCsepePiYW:matrix.org"
|
||||
curl -X PUT --data $"{\"msgtype\":\"m.text\",\"body\":\"${message}\"}" -H "Authorization: Bearer ${elementBotToken}" https://matrix-client.matrix.org/_matrix/client/r0/rooms/${matrixRoomId}/send/m.room.message/\$local.${transactionId}
|
||||
curl -X PUT --data "{\"msgtype\":\"m.text\",\"body\":\"${message}\"}" -H "Authorization: Bearer ${elementBotToken}" https://matrix-client.matrix.org/_matrix/client/r0/rooms/${matrixRoomId}/send/m.room.message/\$local."${transactionId}"
|
||||
else
|
||||
printf "Message not sent, please send it manually!\n"
|
||||
fi
|
||||
|
||||
@@ -8,11 +8,11 @@ read -p "Do you want to build the RTE from local source (yes/no) default to yes?
|
||||
buildLocal=${buildLocal:-yes}
|
||||
|
||||
date=$(gdate +%Y%m%d%H%M%S)
|
||||
elementPwd=`pwd`
|
||||
elementPwd=$(pwd)
|
||||
|
||||
# Ask for the RTE local source path
|
||||
# if folder rte/ exists, use it as default
|
||||
if [ ${buildLocal} == "yes" ]; then
|
||||
if [ "${buildLocal}" == "yes" ]; then
|
||||
read -p "Please enter the path to the Rust SDK local source, default to ../matrix-rich-text-editor: " rtePath
|
||||
rtePath=${rtePath:-../matrix-rich-text-editor/}
|
||||
if [ ! -d "${rtePath}" ]; then
|
||||
@@ -25,21 +25,21 @@ else
|
||||
read -p "Please enter the Rust SDK branch, default to main " rteBranch
|
||||
rteBranch=${rteBranch:-main}
|
||||
cd ..
|
||||
git clone ${rteUrl} matrix-rich-text-editor-$date
|
||||
cd matrix-rich-text-editor-$date
|
||||
git checkout ${rteBranch}
|
||||
git clone "${rteUrl}" matrix-rich-text-editor-"$date"
|
||||
cd matrix-rich-text-editor-"$date"
|
||||
git checkout "${rteBranch}"
|
||||
rtePath=$(pwd)
|
||||
cd ${elementPwd}
|
||||
cd "${elementPwd}"
|
||||
fi
|
||||
|
||||
|
||||
cd ${rtePath}
|
||||
cd "${rtePath}"
|
||||
git status
|
||||
|
||||
read -p "Will build with this version of the RTE ^. Is it correct (yes/no) default to yes? " rteCorrect
|
||||
rteCorrect=${rteCorrect:-yes}
|
||||
|
||||
if [ ${rteCorrect} != "yes" ]; then
|
||||
if [ "${rteCorrect}" != "yes" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -47,31 +47,31 @@ fi
|
||||
read -p "Do you want to build the app after (yes/no) default to yes? " buildApp
|
||||
buildApp=${buildApp:-yes}
|
||||
|
||||
cd ${elementPwd}
|
||||
cd "${elementPwd}"
|
||||
|
||||
cd $rtePath
|
||||
cd "$rtePath"
|
||||
|
||||
printf "\nBuilding the RTE for aarch64...\n\n"
|
||||
make android-bindings-aarch64
|
||||
cd platforms/android
|
||||
./gradlew clean :library:assembleRelease :library-compose:assembleRelease
|
||||
cp ./library/build/outputs/aar/library-release.aar $elementPwd/libraries/textcomposer/lib/library.aar
|
||||
cp ./library-compose/build/outputs/aar/library-compose-release.aar $elementPwd/libraries/textcomposer/lib/library-compose.aar
|
||||
cp ./library/build/outputs/aar/library-release.aar "$elementPwd"/libraries/textcomposer/lib/library.aar
|
||||
cp ./library-compose/build/outputs/aar/library-compose-release.aar "$elementPwd"/libraries/textcomposer/lib/library-compose.aar
|
||||
|
||||
cd ${elementPwd}
|
||||
cd "${elementPwd}"
|
||||
mkdir -p ./libraries/textcomposer/lib/versions
|
||||
cp ./libraries/textcomposer/lib/library.aar ./libraries/textcomposer/lib/versions/library-${date}.aar
|
||||
cp ./libraries/textcomposer/lib/library-compose.aar ./libraries/textcomposer/lib/versions/library-compose-${date}.aar
|
||||
cp ./libraries/textcomposer/lib/library.aar ./libraries/textcomposer/lib/versions/library-"${date}".aar
|
||||
cp ./libraries/textcomposer/lib/library-compose.aar ./libraries/textcomposer/lib/versions/library-compose-"${date}".aar
|
||||
|
||||
|
||||
if [ ${buildApp} == "yes" ]; then
|
||||
if [ "${buildApp}" == "yes" ]; then
|
||||
printf "\nBuilding the application...\n\n"
|
||||
./gradlew assembleDebug
|
||||
fi
|
||||
|
||||
if [ ${buildLocal} == "no" ]; then
|
||||
if [ "${buildLocal}" == "no" ]; then
|
||||
printf "\nCleaning up...\n\n"
|
||||
rm -rf ../matrix-rich-text-editor-$date
|
||||
rm -rf ../matrix-rich-text-editor-"$date"
|
||||
fi
|
||||
|
||||
printf "\nDone!\n"
|
||||
|
||||
@@ -8,11 +8,11 @@ read -p "Do you want to build the Rust SDK from local source (yes/no) default to
|
||||
buildLocal=${buildLocal:-yes}
|
||||
|
||||
date=$(gdate +%Y%m%d%H%M%S)
|
||||
elementPwd=`pwd`
|
||||
elementPwd=$(pwd)
|
||||
|
||||
# Ask for the Rust SDK local source path
|
||||
# if folder rustSdk/ exists, use it as default
|
||||
if [ ${buildLocal} == "yes" ]; then
|
||||
if [ "${buildLocal}" == "yes" ]; then
|
||||
read -p "Please enter the path to the Rust SDK local source, default to ../matrix-rust-sdk" rustSdkPath
|
||||
rustSdkPath=${rustSdkPath:-../matrix-rust-sdk/}
|
||||
if [ ! -d "${rustSdkPath}" ]; then
|
||||
@@ -25,9 +25,9 @@ else
|
||||
read -p "Please enter the Rust SDK branch, default to main " rustSdkBranch
|
||||
rustSdkBranch=${rustSdkBranch:-main}
|
||||
cd ..
|
||||
git clone ${rustSdkUrl} matrix-rust-sdk-$date
|
||||
cd matrix-rust-sdk-$date
|
||||
git checkout ${rustSdkBranch}
|
||||
git clone "${rustSdkUrl}" matrix-rust-sdk-"$date"
|
||||
cd matrix-rust-sdk-"$date"
|
||||
git checkout "${rustSdkBranch}"
|
||||
rustSdkPath=$(pwd)
|
||||
cd "${elementPwd}"
|
||||
fi
|
||||
@@ -39,7 +39,7 @@ git status
|
||||
read -p "Will build with this version of the Rust SDK ^. Is it correct (yes/no) default to yes? " sdkCorrect
|
||||
sdkCorrect=${sdkCorrect:-yes}
|
||||
|
||||
if [ ${sdkCorrect} != "yes" ]; then
|
||||
if [ "${sdkCorrect}" != "yes" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -67,17 +67,17 @@ printf "\nBuilding the SDK for aarch64-linux-android...\n\n"
|
||||
cd "${elementPwd}"
|
||||
mv ./libraries/rustsdk/sdk-android-debug.aar ./libraries/rustsdk/matrix-rust-sdk.aar
|
||||
mkdir -p ./libraries/rustsdk/sdks
|
||||
cp ./libraries/rustsdk/matrix-rust-sdk.aar ./libraries/rustsdk/sdks/matrix-rust-sdk-${date}.aar
|
||||
cp ./libraries/rustsdk/matrix-rust-sdk.aar ./libraries/rustsdk/sdks/matrix-rust-sdk-"${date}".aar
|
||||
|
||||
|
||||
if [ ${buildApp} == "yes" ]; then
|
||||
if [ "${buildApp}" == "yes" ]; then
|
||||
printf "\nBuilding the application...\n\n"
|
||||
./gradlew assembleDebug
|
||||
fi
|
||||
|
||||
if [ ${buildLocal} == "no" ]; then
|
||||
if [ "${buildLocal}" == "no" ]; then
|
||||
printf "\nCleaning up...\n\n"
|
||||
rm -rf ../matrix-rust-sdk-$date
|
||||
rm -rf ../matrix-rust-sdk-"$date"
|
||||
fi
|
||||
|
||||
printf "\nDone!\n"
|
||||
|
||||
@@ -22,6 +22,6 @@ echo "Zipping the contents of the 'files' directory..."
|
||||
mkdir -p tmp
|
||||
|
||||
rm -f ./tmp/file_templates.zip
|
||||
pushd ./tools/templates/files
|
||||
pushd ./tools/templates/files || exit
|
||||
zip -r ../../../tmp/file_templates.zip .
|
||||
popd
|
||||
popd || exit
|
||||
|
||||
Reference in New Issue
Block a user