Skip to content

Commit 32b0a89

Browse files
Merge pull request #467 from dekusms/staging-release-3
release: bump version (83 → staging-release-3)
2 parents 8e74714 + f3c4ee4 commit 32b0a89

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+637
-484
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Reproducible Build Check
2+
3+
on:
4+
pull_request:
5+
branches: [ "staging" ]
6+
types: [ closed ]
7+
8+
jobs:
9+
reproducible-build:
10+
name: Verify Reproducible Build
11+
runs-on: ubuntu-latest
12+
if: github.event.pull_request.merged == true
13+
14+
steps:
15+
- name: Checkout repository
16+
uses: actions/checkout@v4
17+
18+
- name: Build Docker image
19+
working-directory: ci
20+
run: docker build -t deku_rep_build_release .
21+
22+
- name: First build
23+
run: |
24+
docker run --rm \
25+
-v "$(pwd)":/project \
26+
-w /project \
27+
--user "$(id -u):$(id -g)" \
28+
deku_rep_build_release \
29+
./gradlew assembleRelease \
30+
--no-daemon \
31+
--max-workers=2 \
32+
--console=plain \
33+
-Dorg.gradle.jvmargs="-Xmx1024m -Xms256m -XX:MaxMetaspaceSize=384m -Dfile.encoding=UTF-8" \
34+
-Dkotlin.daemon.jvm.options="-Xmx512m,-Xss1m" \
35+
-Dkotlin.compiler.execution.strategy=in-process
36+
37+
- name: Hash first APK
38+
id: sha1
39+
run: |
40+
hash=$(sha256sum app/build/outputs/apk/release/app-release-unsigned.apk)
41+
echo "value=$hash" >> "$GITHUB_OUTPUT"
42+
echo "First build: $hash"
43+
44+
- name: Remove first APK
45+
run: rm app/build/outputs/apk/release/app-release-unsigned.apk
46+
47+
- name: Second build
48+
run: |
49+
docker run --rm \
50+
-v "$(pwd)":/project \
51+
-w /project \
52+
--user "$(id -u):$(id -g)" \
53+
deku_rep_build_release \
54+
./gradlew assembleRelease \
55+
--no-daemon \
56+
--max-workers=2 \
57+
--console=plain \
58+
-Dorg.gradle.jvmargs="-Xmx1024m -Xms256m -XX:MaxMetaspaceSize=384m -Dfile.encoding=UTF-8" \
59+
-Dkotlin.daemon.jvm.options="-Xmx512m,-Xss1m" \
60+
-Dkotlin.compiler.execution.strategy=in-process
61+
62+
- name: Hash second APK
63+
id: sha2
64+
run: |
65+
hash=$(sha256sum app/build/outputs/apk/release/app-release-unsigned.apk)
66+
echo "value=$hash" >> "$GITHUB_OUTPUT"
67+
echo "Second build: $hash"
68+
69+
- name: Compare hashes
70+
run: |
71+
SHA1="${{ steps.sha1.outputs.value }}"
72+
SHA2="${{ steps.sha2.outputs.value }}"
73+
echo "Build 1: $SHA1"
74+
echo "Build 2: $SHA2"
75+
if [ "$SHA1" = "$SHA2" ]; then
76+
echo "Reproducible build verified — hashes match."
77+
else
78+
echo "Build is NOT reproducible — hashes differ! Run diffoscope"
79+
exit 1
80+
fi
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: Bump Version
2+
3+
on:
4+
push:
5+
branches:
6+
- staging-release
7+
- staging-release-*
8+
workflow_dispatch:
9+
10+
jobs:
11+
bump-version:
12+
runs-on: ubuntu-latest
13+
permissions:
14+
contents: write
15+
pull-requests: write
16+
17+
defaults:
18+
run:
19+
working-directory: ${{ github.workspace }}
20+
21+
steps:
22+
- name: Checkout repository
23+
uses: actions/checkout@v4
24+
with:
25+
fetch-depth: 0
26+
token: ${{ secrets.GITHUB_TOKEN }}
27+
ref: ${{ github.ref }}
28+
29+
- name: Get current branch name
30+
id: branch
31+
run: echo "name=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
32+
33+
- name: Get latest tag
34+
id: previoustag
35+
uses: WyriHaximus/github-action-get-previous-tag@v2
36+
with:
37+
fallback: 0.0.0
38+
39+
- name: Set up Python
40+
uses: actions/setup-python@v5
41+
with:
42+
python-version: '3.x'
43+
44+
- name: Verify version.properties exists
45+
run: |
46+
if [ ! -f version.properties ]; then
47+
echo "ERROR: version.properties not found in ${{ github.workspace }}"
48+
ls -la
49+
exit 1
50+
fi
51+
echo "Found version.properties:"
52+
cat version.properties
53+
54+
- name: Run bump_version.py
55+
id: bump
56+
run: |
57+
python ci/bump_version.py \
58+
"${{ steps.previoustag.outputs.tag }}" \
59+
"${{ steps.branch.outputs.name }}" \
60+
> /tmp/version_bumped.properties
61+
cp /tmp/version_bumped.properties version.properties
62+
echo "result<<EOF" >> $GITHUB_OUTPUT
63+
cat version.properties >> $GITHUB_OUTPUT
64+
echo "EOF" >> $GITHUB_OUTPUT
65+
66+
- name: Commit and push version.properties
67+
run: |
68+
git config user.name "github-actions[bot]"
69+
git config user.email "github-actions[bot]@users.noreply.github.com"
70+
git add version.properties
71+
git diff --cached --quiet || git commit -m "chore: bump version [skip ci]"
72+
git push origin HEAD:${{ steps.branch.outputs.name }}
73+
74+
- name: Open or update PR to master
75+
env:
76+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
77+
run: |
78+
PR_BODY="Automated version bump from \`${{ steps.branch.outputs.name }}\`
79+
80+
**version.properties:**
81+
\`\`\`
82+
${{ steps.bump.outputs.result }}
83+
\`\`\`"
84+
85+
# Try to create, if it already exists update the body instead
86+
if gh pr create \
87+
--base staging \
88+
--head "${{ steps.branch.outputs.name }}" \
89+
--title "release: bump version (${{ steps.previoustag.outputs.tag }} → ${{ steps.branch.outputs.name }})" \
90+
--body "$PR_BODY"; then
91+
echo "PR created"
92+
else
93+
echo "PR already exists, updating body..."
94+
gh pr edit "${{ steps.branch.outputs.name }}" \
95+
--title "release: bump version (${{ steps.previoustag.outputs.tag }} → ${{ steps.branch.outputs.name }})" \
96+
--body "$PR_BODY"
97+
fi

.gitmodules

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +0,0 @@
1-
[submodule "smswithoutborders_libsignal-doubleratchet"]
2-
path = smswithoutborders_libsignal-doubleratchet
3-
url = https://github.com/smswithoutborders/lib_signal_double_ratchet_java.git
4-
[submodule "reproducible-apk-tools"]
5-
path = reproducible-apk-tools
6-
url = https://github.com/obfusk/reproducible-apk-tools.git
7-
[submodule "smswithoutborders_libsmsmms"]
8-
path = smswithoutborders_libsmsmms
9-
url = git@github.com:smswithoutborders/lib_smsmms_android.git

.idea/gradle.xml

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/Project_Default.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
kotlin version: 2.3.0
2+
error message: The daemon has terminated unexpectedly on startup attempt #1 with exit code: 1. The daemon process output:
3+
1. Invalid maximum heap size: -Xmx512m -Xss1m
4+
2. Error: Could not create the Java Virtual Machine.
5+
3. Error: A fatal exception has occurred. Program will exit.
6+
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.
7+
8+
error message: The daemon has terminated unexpectedly on startup attempt #2 with exit code: 1. The daemon process output:
9+
1. Invalid maximum heap size: -Xmx512m -Xss1m
10+
2. Error: Could not create the Java Virtual Machine.
11+
3. Error: A fatal exception has occurred. Program will exit.
12+
Problems may have occurred during auto-selection of GC. The preferred GC is Parallel GC.
13+
If the problems persist, try adding the JVM option to the Kotlin daemon JVM arguments: -XX:-UseParallelGC.
14+
GC auto-selection logic is disabled temporary for the next daemon startup.
15+
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.
16+
17+
error message: The daemon has terminated unexpectedly on startup attempt #3 with exit code: 1. The daemon process output:
18+
1. Invalid maximum heap size: -Xmx512m -Xss1m
19+
2. Error: Could not create the Java Virtual Machine.
20+
3. Error: A fatal exception has occurred. Program will exit.
21+
The daemon didn't produce the message "Kotlin compile daemon is ready" during startup.
22+
23+
error message: Failed connecting to the daemon in 4 retries
24+
25+
error message: Daemon compilation failed: Could not connect to Kotlin compile daemon
26+
java.lang.RuntimeException: Could not connect to Kotlin compile daemon
27+
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:198)
28+
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:143)
29+
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:107)
30+
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:75)
31+
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
32+
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
33+
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
34+
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
35+
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
36+
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
37+
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
38+
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
39+
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
40+
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
41+
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
42+
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
43+
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
44+
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
45+
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
46+
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
47+
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
48+
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
49+
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
50+
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
51+
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
52+
at org.gradle.internal.Factories$1.create(Factories.java:31)
53+
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
54+
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
55+
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
56+
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
57+
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
58+
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
59+
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
60+
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
61+
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
62+
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
63+
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
64+
at java.base/java.lang.Thread.run(Thread.java:1583)
65+
66+

apk-outputs/.gitignore

Lines changed: 0 additions & 2 deletions
This file was deleted.

app/build.gradle

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
plugins {
22
id 'com.android.application'
33
id 'org.jetbrains.kotlin.android'
4-
id "com.diffplug.spotless" version "7.0.4"
5-
id 'org.jetbrains.kotlin.plugin.serialization' version '2.2.0'
6-
7-
id("com.gradleup.nmcp").version("0.0.8")
4+
id "com.diffplug.spotless" version "8.2.1"
5+
id 'org.jetbrains.kotlin.plugin.serialization' version '2.3.10'
6+
id 'com.google.devtools.ksp' version '2.3.5'
87
alias(libs.plugins.compose.compiler)
98
}
109

@@ -40,6 +39,10 @@ android {
4039
}
4140
}
4241

42+
ksp {
43+
arg('room.schemaLocation', "$projectDir/schemas")
44+
}
45+
4346
}
4447

4548
buildFeatures {
@@ -112,9 +115,8 @@ android {
112115
}
113116

114117
dependencies {
115-
implementation project(':smswithoutborders_libsignal-doubleratchet')
116-
// implementation project(':smswithoutborders_libsmsmms:lib_smsmms_android')
117-
implementation 'com.github.smswithoutborders:lib_smsmms_android:8ccccf4'
118+
implementation 'com.github.smswithoutborders:lib_smsmms_android:73432ef'
119+
implementation 'com.github.smswithoutborders:lib_signal_double_ratchet_java:ad727a5'
118120

119121
implementation libs.androidx.room.testing
120122
implementation libs.androidx.activity
@@ -285,4 +287,13 @@ dependencies {
285287
androidTestImplementation libs.androidx.rules
286288

287289
implementation(libs.coil.video)
290+
291+
292+
implementation 'net.zetetic:sqlcipher-android:4.12.0@aar'
293+
implementation 'androidx.sqlite:sqlite:2.6.2'
294+
295+
// If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
296+
// See Add the KSP plugin to your project
297+
def room_version = "2.8.4"
298+
ksp "androidx.room:room-compiler:$room_version"
288299
}

0 commit comments

Comments
 (0)