Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
14aa09a
update: testing different paging sizes
sherlockwisdom Dec 30, 2025
604c959
update: refactored for speed and better composable lifecycles
sherlockwisdom Jan 14, 2026
8ffb1f3
update: fixed issue with retry and resent
sherlockwisdom Feb 3, 2026
60996ba
update: some optimizations, should begin working on the threat models
sherlockwisdom Feb 3, 2026
747e54a
update: broken changes
sherlockwisdom Feb 7, 2026
791796c
Rename .java to .kt
sherlockwisdom Feb 8, 2026
e1af2f2
update: added slqcipher for everywhere
sherlockwisdom Feb 8, 2026
302dfca
update: gradle toolchains included
sherlockwisdom Feb 19, 2026
08633c3
delete: submodules for libsmsmms
sherlockwisdom Feb 26, 2026
a01a3e6
delete: submodules for doubleratchet
sherlockwisdom Feb 26, 2026
81388a9
delete: submodules for rep-builds
sherlockwisdom Feb 26, 2026
67c5d09
update: removed all submodules
sherlockwisdom Feb 26, 2026
82620ae
update: version bump for dep
sherlockwisdom Feb 26, 2026
8ea3966
update: removed snapshots
sherlockwisdom Mar 6, 2026
729e262
update: bumped
sherlockwisdom Mar 6, 2026
3225cd2
Add GitHub Actions workflow for version bump
sherlockwisdom Mar 10, 2026
7f83fbc
Add pull request trigger for version bump workflow
sherlockwisdom Mar 10, 2026
08ece05
Delete .github/workflows/main.yml
sherlockwisdom Mar 10, 2026
e1ab117
update: bump versions andbuild script
sherlockwisdom Mar 10, 2026
dbe4591
Fix script name in staging version bump workflow
sherlockwisdom Mar 10, 2026
3808926
Update staging-version-bump.yml
sherlockwisdom Mar 10, 2026
45bb435
update: bump
sherlockwisdom Mar 10, 2026
1209d6e
python tags
sherlockwisdom Mar 10, 2026
eeb5c60
Update workflow to handle multiline output from version bump
sherlockwisdom Mar 10, 2026
981adfc
Modify staging version bump workflow triggers and checks
sherlockwisdom Mar 10, 2026
5250640
Change trigger branch for version bump workflow
sherlockwisdom Mar 10, 2026
d3bc453
Fix typo in version file name check
sherlockwisdom Mar 10, 2026
94a7c9a
Fix typo in version.properties check
sherlockwisdom Mar 10, 2026
de22591
Rename bump_version.py to bump_versions.py
sherlockwisdom Mar 10, 2026
5af5228
Fix typo in script name for version bump
sherlockwisdom Mar 10, 2026
92d01e3
update: bump versions
sherlockwisdom Mar 10, 2026
2b09fdf
Change version properties output path in workflow
sherlockwisdom Mar 10, 2026
63eb238
Update staging-version-bump.yml
sherlockwisdom Mar 10, 2026
7a44fa6
Update staging version bump workflow for branches
sherlockwisdom Mar 10, 2026
7cf433a
Fix formatting of git log command in workflow
sherlockwisdom Mar 10, 2026
1b9ef04
Fix script name in staging version bump workflow
sherlockwisdom Mar 10, 2026
e723e10
Update staging version bump workflow script
sherlockwisdom Mar 10, 2026
4aaa245
Fix workflow file and update script name
sherlockwisdom Mar 10, 2026
d6610a6
Merge pull request #460 from dekusms/dev
sherlockwisdom Mar 10, 2026
7ce0e53
chore: bump version [skip ci]
github-actions[bot] Mar 10, 2026
26907a0
Modify PR creation step for version bump workflow
sherlockwisdom Mar 10, 2026
ccd024b
Merge pull request #461 from dekusms/dev
sherlockwisdom Mar 10, 2026
5bd99eb
chore: bump version [skip ci]
github-actions[bot] Mar 10, 2026
67bb50b
Update staging-version-bump.yml
sherlockwisdom Mar 10, 2026
8dc111b
update: see if migration works
sherlockwisdom Mar 11, 2026
806c094
update: dep bump
sherlockwisdom Mar 11, 2026
39dea38
update: trying migrations
sherlockwisdom Mar 11, 2026
ffbd23b
update: forcing the migration
sherlockwisdom Mar 11, 2026
d38a352
update: changed keystore
sherlockwisdom Mar 11, 2026
3a91c88
update: fixed db issue
sherlockwisdom Mar 11, 2026
788715c
Merge remote-tracking branch 'origin/dev' into dev
sherlockwisdom Mar 11, 2026
5914af6
update: removed migrations
sherlockwisdom Mar 12, 2026
086ddb7
update: bump version
sherlockwisdom Mar 12, 2026
f15399b
update: house keeping
sherlockwisdom Mar 13, 2026
c49fe33
update: housekeeping
sherlockwisdom Mar 13, 2026
e3d22c0
Update staging-version-bump.yml
sherlockwisdom Mar 13, 2026
dd0b959
update: housekeeping ci
sherlockwisdom Mar 13, 2026
f75cf99
Create reproducible-build-check
sherlockwisdom Mar 13, 2026
a3ebcf5
Rename reproducible-build-check to reproducible-build-check.yml
sherlockwisdom Mar 13, 2026
c210e33
Merge branch 'staging-release-3' into dev
sherlockwisdom Mar 13, 2026
898fbf1
Merge pull request #464 from dekusms/dev
sherlockwisdom Mar 13, 2026
646d0a6
chore: bump version [skip ci]
github-actions[bot] Mar 13, 2026
2a47c82
Update staging-version-bump.yml
sherlockwisdom Mar 13, 2026
6775cfa
Merge pull request #466 from dekusms/dev
sherlockwisdom Mar 13, 2026
91421f7
chore: bump version [skip ci]
github-actions[bot] Mar 13, 2026
da3ef94
fix: merge conflict
sherlockwisdom Mar 13, 2026
f3c4ee4
chore: bump version [skip ci]
github-actions[bot] Mar 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .github/workflows/reproducible-build-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Reproducible Build Check

on:
pull_request:
branches: [ "staging" ]
types: [ closed ]

jobs:
reproducible-build:
name: Verify Reproducible Build
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Build Docker image
working-directory: ci
run: docker build -t deku_rep_build_release .

- name: First build
run: |
docker run --rm \
-v "$(pwd)":/project \
-w /project \
--user "$(id -u):$(id -g)" \
deku_rep_build_release \
./gradlew assembleRelease \
--no-daemon \
--max-workers=2 \
--console=plain \
-Dorg.gradle.jvmargs="-Xmx1024m -Xms256m -XX:MaxMetaspaceSize=384m -Dfile.encoding=UTF-8" \
-Dkotlin.daemon.jvm.options="-Xmx512m,-Xss1m" \
-Dkotlin.compiler.execution.strategy=in-process

- name: Hash first APK
id: sha1
run: |
hash=$(sha256sum app/build/outputs/apk/release/app-release-unsigned.apk)
echo "value=$hash" >> "$GITHUB_OUTPUT"
echo "First build: $hash"

- name: Remove first APK
run: rm app/build/outputs/apk/release/app-release-unsigned.apk

- name: Second build
run: |
docker run --rm \
-v "$(pwd)":/project \
-w /project \
--user "$(id -u):$(id -g)" \
deku_rep_build_release \
./gradlew assembleRelease \
--no-daemon \
--max-workers=2 \
--console=plain \
-Dorg.gradle.jvmargs="-Xmx1024m -Xms256m -XX:MaxMetaspaceSize=384m -Dfile.encoding=UTF-8" \
-Dkotlin.daemon.jvm.options="-Xmx512m,-Xss1m" \
-Dkotlin.compiler.execution.strategy=in-process

- name: Hash second APK
id: sha2
run: |
hash=$(sha256sum app/build/outputs/apk/release/app-release-unsigned.apk)
echo "value=$hash" >> "$GITHUB_OUTPUT"
echo "Second build: $hash"

- name: Compare hashes
run: |
SHA1="${{ steps.sha1.outputs.value }}"
SHA2="${{ steps.sha2.outputs.value }}"
echo "Build 1: $SHA1"
echo "Build 2: $SHA2"
if [ "$SHA1" = "$SHA2" ]; then
echo "Reproducible build verified — hashes match."
else
echo "Build is NOT reproducible — hashes differ! Run diffoscope"
exit 1
fi
97 changes: 97 additions & 0 deletions .github/workflows/staging-version-bump.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: Bump Version

on:
push:
branches:
- staging-release
- staging-release-*
workflow_dispatch:

jobs:
bump-version:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

defaults:
run:
working-directory: ${{ github.workspace }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
ref: ${{ github.ref }}

- name: Get current branch name
id: branch
run: echo "name=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT

- name: Get latest tag
id: previoustag
uses: WyriHaximus/github-action-get-previous-tag@v2
with:
fallback: 0.0.0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Verify version.properties exists
run: |
if [ ! -f version.properties ]; then
echo "ERROR: version.properties not found in ${{ github.workspace }}"
ls -la
exit 1
fi
echo "Found version.properties:"
cat version.properties

- name: Run bump_version.py
id: bump
run: |
python ci/bump_version.py \
"${{ steps.previoustag.outputs.tag }}" \
"${{ steps.branch.outputs.name }}" \
> /tmp/version_bumped.properties
cp /tmp/version_bumped.properties version.properties
echo "result<<EOF" >> $GITHUB_OUTPUT
cat version.properties >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Commit and push version.properties
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add version.properties
git diff --cached --quiet || git commit -m "chore: bump version [skip ci]"
git push origin HEAD:${{ steps.branch.outputs.name }}

- name: Open or update PR to master
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PR_BODY="Automated version bump from \`${{ steps.branch.outputs.name }}\`

**version.properties:**
\`\`\`
${{ steps.bump.outputs.result }}
\`\`\`"

# Try to create, if it already exists update the body instead
if gh pr create \
--base staging \
--head "${{ steps.branch.outputs.name }}" \
--title "release: bump version (${{ steps.previoustag.outputs.tag }} → ${{ steps.branch.outputs.name }})" \
--body "$PR_BODY"; then
echo "PR created"
else
echo "PR already exists, updating body..."
gh pr edit "${{ steps.branch.outputs.name }}" \
--title "release: bump version (${{ steps.previoustag.outputs.tag }} → ${{ steps.branch.outputs.name }})" \
--body "$PR_BODY"
fi
9 changes: 0 additions & 9 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,9 +0,0 @@
[submodule "smswithoutborders_libsignal-doubleratchet"]
path = smswithoutborders_libsignal-doubleratchet
url = https://github.com/smswithoutborders/lib_signal_double_ratchet_java.git
[submodule "reproducible-apk-tools"]
path = reproducible-apk-tools
url = https://github.com/obfusk/reproducible-apk-tools.git
[submodule "smswithoutborders_libsmsmms"]
path = smswithoutborders_libsmsmms
url = git@github.com:smswithoutborders/lib_smsmms_android.git
2 changes: 0 additions & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

66 changes: 66 additions & 0 deletions .kotlin/errors/errors-1773154801796.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
kotlin version: 2.3.0
error message: The daemon has terminated unexpectedly on startup attempt #1 with exit code: 1. The daemon process output:
1. Invalid maximum heap size: -Xmx512m -Xss1m
2. Error: Could not create the Java Virtual Machine.
3. Error: A fatal exception has occurred. Program will exit.
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.

error message: The daemon has terminated unexpectedly on startup attempt #2 with exit code: 1. The daemon process output:
1. Invalid maximum heap size: -Xmx512m -Xss1m
2. Error: Could not create the Java Virtual Machine.
3. Error: A fatal exception has occurred. Program will exit.
Problems may have occurred during auto-selection of GC. The preferred GC is Parallel GC.
If the problems persist, try adding the JVM option to the Kotlin daemon JVM arguments: -XX:-UseParallelGC.
GC auto-selection logic is disabled temporary for the next daemon startup.
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.

error message: The daemon has terminated unexpectedly on startup attempt #3 with exit code: 1. The daemon process output:
1. Invalid maximum heap size: -Xmx512m -Xss1m
2. Error: Could not create the Java Virtual Machine.
3. Error: A fatal exception has occurred. Program will exit.
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.

error message: Failed connecting to the daemon in 4 retries

error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:198)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:143)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:107)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:75)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
at org.gradle.internal.Factories$1.create(Factories.java:31)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)


2 changes: 0 additions & 2 deletions apk-outputs/.gitignore

This file was deleted.

25 changes: 18 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "com.diffplug.spotless" version "7.0.4"
id 'org.jetbrains.kotlin.plugin.serialization' version '2.2.0'

id("com.gradleup.nmcp").version("0.0.8")
id "com.diffplug.spotless" version "8.2.1"
id 'org.jetbrains.kotlin.plugin.serialization' version '2.3.10'
id 'com.google.devtools.ksp' version '2.3.5'
alias(libs.plugins.compose.compiler)
}

Expand Down Expand Up @@ -40,6 +39,10 @@ android {
}
}

ksp {
arg('room.schemaLocation', "$projectDir/schemas")
}

}

buildFeatures {
Expand Down Expand Up @@ -112,9 +115,8 @@ android {
}

dependencies {
implementation project(':smswithoutborders_libsignal-doubleratchet')
// implementation project(':smswithoutborders_libsmsmms:lib_smsmms_android')
implementation 'com.github.smswithoutborders:lib_smsmms_android:8ccccf4'
implementation 'com.github.smswithoutborders:lib_smsmms_android:73432ef'
implementation 'com.github.smswithoutborders:lib_signal_double_ratchet_java:ad727a5'

implementation libs.androidx.room.testing
implementation libs.androidx.activity
Expand Down Expand Up @@ -285,4 +287,13 @@ dependencies {
androidTestImplementation libs.androidx.rules

implementation(libs.coil.video)


implementation 'net.zetetic:sqlcipher-android:4.12.0@aar'
implementation 'androidx.sqlite:sqlite:2.6.2'

// If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
// See Add the KSP plugin to your project
def room_version = "2.8.4"
ksp "androidx.room:room-compiler:$room_version"
}
Loading