Skip to content

Commit 415a6f7

Browse files
authored
Merge pull request #59 from standardsats/testnet
Release 5.0.0
2 parents bd4c14b + 23859e6 commit 415a6f7

56 files changed

Lines changed: 1165 additions & 564 deletions

Some content is hidden

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

.claude/agents/scala-expert.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
name: scala-expert
3+
description: Scala expert specializing in functional programming, type safety, and performance optimization.
4+
model: claude-sonnet-4-20250514
5+
---
6+
7+
## Focus Areas
8+
9+
- Advanced functional programming techniques in Scala
10+
- Type safety and typesafe design patterns
11+
- Immutable data structures and their advantages
12+
- Concurrency and parallelism in Scala
13+
- Efficient collection operations and transformations
14+
- Pattern matching and case classes
15+
- Using Scala's REPL for rapid prototyping
16+
- Implicit classes and extension methods
17+
- Scala's type system: variance, bounds, and constraints
18+
- Utilizing Scala's built-in libraries and features
19+
20+
## Approach
21+
22+
- Prioritize immutability and pure functions
23+
- Emphasize clear and concise code using Scala's features
24+
- Leverage pattern matching for clean conditional logic
25+
- Utilize Scala's powerful type inference capabilities
26+
- Implement tail-recursive solutions to optimize performance
27+
- Employ higher-order functions and combinators effectively
28+
- Explore functional error handling with Try, Option, Either
29+
- Use lazy evaluation to optimize performance where suitable
30+
- Regularly refactor code for clarity and maintainability
31+
- Encourage the use of the latest Scala version to leverage new language features
32+
33+
## Quality Checklist
34+
35+
- Ensure all functions have clear and explicit type signatures
36+
- Validate that code adheres to Scala style guidelines
37+
- Test concurrency implementations for race conditions and deadlocks
38+
- Profile memory usage and optimize where necessary
39+
- Confirm immutability of all data structures in critical code paths
40+
- Ensure proper use of pattern matching without redundancies
41+
- Avoid code smells and anti-patterns specific to Scala
42+
- Ensure comprehensive test coverage with ScalaTest or similar
43+
- Code must compile with no warnings or errors in strict mode
44+
- Verify all custom operators or implicits have clear documentation
45+
46+
## Output
47+
48+
- Idiomatic Scala code adhering to functional programming practices
49+
- Scaladoc comments for all public classes and methods
50+
- Unit tests using Scala's testing frameworks like ScalaTest
51+
- Performance benchmarks for key features and methods
52+
- Code examples demonstrating effective use of Scala features
53+
- Sample applications showing best practices in Scala
54+
- Recommendations for code improvement and optimization
55+
- Reports on type hierarchy and variance effective use
56+
- Scripts for automated building and testing using sbt
57+
- Guidance on evolving existing codebases to Scala best practices

.claudeignore

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Dependencies
2+
node_modules/
3+
venv/
4+
env/
5+
.venv/
6+
7+
# Build outputs
8+
dist/
9+
build/
10+
out/
11+
*.o
12+
*.a
13+
*.so
14+
15+
# Version control
16+
.git/
17+
.github/
18+
.gitignore
19+
20+
# IDE/Editor
21+
.vscode/
22+
.idea/
23+
*.swp
24+
*.swo
25+
26+
# OS files
27+
.DS_Store
28+
Thumbs.db
29+
30+
# Environment & secrets
31+
.env
32+
.env.local
33+
*.pem
34+
secrets/
35+
36+
# Logs & caches
37+
*.log
38+
.cache/
39+
tmp/
40+
temp/
41+
42+
# Project-specific
43+
fastlane/
44+
feature_graphics.png
45+
screenshot_frame.png
46+

.github/workflows/always.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ jobs:
99
uses: actions/checkout@v3
1010
with:
1111
lfs: true
12+
- name: Set up JDK 11
13+
uses: actions/setup-java@v3
14+
with:
15+
java-version: '11'
16+
distribution: 'temurin'
1217
- name: setup gradle
1318
uses: gradle/gradle-build-action@v2
1419
- run: ./gradlew assembleDebug

.github/workflows/release.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Release APK
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
build-and-release:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: write
13+
14+
steps:
15+
- name: Checkout
16+
uses: actions/checkout@v3
17+
with:
18+
lfs: true
19+
20+
- name: Set up JDK 11
21+
uses: actions/setup-java@v3
22+
with:
23+
java-version: '11'
24+
distribution: 'temurin'
25+
26+
- name: Set up NDK
27+
run: echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "ndk;22.1.7171670" || true
28+
29+
- name: Setup Gradle
30+
uses: gradle/gradle-build-action@v2
31+
32+
- name: Decode keystore
33+
run: echo "${{ secrets.SIGNING_KEYSTORE_BASE64 }}" | base64 -d > keystore.jks
34+
35+
- name: Build release APK
36+
env:
37+
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
38+
SIGNING_STORE_FILENAME: ${{ github.workspace }}/keystore.jks
39+
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
40+
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
41+
run: ./gradlew assembleRelease
42+
43+
- name: Rename APK
44+
run: mv app/build/outputs/apk/release/finance.valet_105.apk app/build/outputs/apk/release/valet-testnet-${{ github.ref_name }}.apk
45+
46+
- name: Create GitHub Release
47+
uses: softprops/action-gh-release@v2
48+
with:
49+
files: app/build/outputs/apk/release/valet-testnet-${{ github.ref_name }}.apk
50+
generate_release_notes: true

.gitignore

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
.idea/
22
app/app.iml
33
.gradle/
4+
app/gradlew
5+
app/gradlew.bat
6+
app/gradle/
47
app/.cxx/
58
app/.externalNativeBuild/
69
app/build/
@@ -16,4 +19,10 @@ target/
1619
*.keystore
1720
*.jks
1821
.env
19-
22+
*.apk
23+
*.idsig
24+
*.zip
25+
*.cer
26+
*.bat
27+
*.md
28+
.claude/settings.local.json

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ android {
2323

2424
defaultConfig {
2525
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
26-
applicationId 'finance.valet'
26+
applicationId 'finance.valet.testnet'
2727
multiDexEnabled true
2828
targetSdkVersion 33
2929
minSdkVersion 21
3030

31-
versionName '4.4.4'
32-
versionCode 105
31+
versionName '5.0.0'
32+
versionCode 106
3333
if (System.getenv("SIGNING_KEY_ALIAS")) {
3434
signingConfig signingConfigs.release
3535
}
@@ -130,7 +130,7 @@ import java.util.zip.*
130130
task normalizeApkTimestamps {
131131
doLast {
132132
def sourceDateEpoch = System.getenv('SOURCE_DATE_EPOCH')?.toLong() ?: 0
133-
def apkFile = file("${buildDir}/outputs/apk/release/finance.valet_105.apk")
133+
def apkFile = file("${buildDir}/outputs/apk/release/finance.valet_${defaultConfig.versionCode}.apk")
134134
def tempFile = file("${apkFile}.tmp")
135135

136136
new ZipOutputStream(new FileOutputStream(tempFile)).withCloseable { zos ->
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
[
2+
[
3+
"00000000962a7fc2ef639196051fe181ed53ac6aa4cdfead14dca90f58aa36bc",
4+
0
5+
],
6+
[
7+
"000000002ad661157c553c0bbbb2490407adb1c8ac09f2b2a7174f87eeeb64bf",
8+
0
9+
],
10+
[
11+
"000000000be3ff43cde9eed4d6b2d4ad16c4f9509ccb94e1001af68e2f6647b3",
12+
0
13+
],
14+
[
15+
"00000000001ef2e4c2fc174354ed357cf313725fc336092733b2699d36342ff8",
16+
0
17+
],
18+
[
19+
"000000000025269f9fa4b0832ccbfef682d59c0fa8845b0c22cc24a1973f011a",
20+
0
21+
],
22+
[
23+
"000000000014b2d6b2ad804d5deb8d5b4a58caf152f6cea5600af0d9348dff29",
24+
0
25+
],
26+
[
27+
"000000000003c067c302d43c9499da6e382260252a2a29caf9748ee6972d5f01",
28+
0
29+
],
30+
[
31+
"000000000002180d23f15ba0b8161d9d38d03c61ab51d050c57928e1a7d98e0c",
32+
0
33+
],
34+
[
35+
"000000000000ed8722220a13b09d968a59686af5fc5c1e0a86371a498209fa72",
36+
0
37+
],
38+
[
39+
"0000000000003e82df3830ff7c05a58745a463a59d1097e160e47ac7aeb5323a",
40+
0
41+
],
42+
[
43+
"0000000000000c3f18b9a30269c4b53dd107bacf20482e4ec660e9970999a99f",
44+
0
45+
],
46+
[
47+
"00000000000002901853780dc8a63efd4d72359d8de7e14dc0398ccfc53d45cd",
48+
0
49+
],
50+
[
51+
"00000000000000a6ff1615113d25eeed8554813e4994f8ef7ce96458083d14cf",
52+
0
53+
],
54+
[
55+
"000000000000006e2d4fa8204c67c0986f9bb0214990b11043d0653d50755f54",
56+
0
57+
],
58+
[
59+
"00000000eaf8e0ea253d833614892aed70c55e5dc4b4d6709dd6420b8284debb",
60+
0
61+
],
62+
[
63+
"0000000000000063d3ca489d113ded6196c99f3785b61a8ded9254ebb96bc765",
64+
0
65+
],
66+
[
67+
"000000000000003f684cab6cdb7fe6e98cb13318bb45acdc2d2e2d7405b8bcbe",
68+
0
69+
],
70+
[
71+
"000000000000001f735b5a23732fb201cf6343b373c94a35f04e6b6075591889",
72+
0
73+
],
74+
[
75+
"000000001c247a1eb479ecc56ea7d7529f0c4afb6b7025f437a7d235454cd6a4",
76+
0
77+
],
78+
[
79+
"00000000acd1400a4801f361d675644993ad05e5b735a881f26746ece767521e",
80+
0
81+
],
82+
[
83+
"00000000542792e54a720567ba66157d48cdae7bfd01c1b678d0f07a2ed56e99",
84+
0
85+
],
86+
[
87+
"00000000ca301f565989627133247615bc937b52c68f8f4b342b6c2aeebff7ba",
88+
0
89+
],
90+
[
91+
"00000000e4ad2ec95dfddce6a554f626c9995e465b067e72528f6ae164fc58d2",
92+
0
93+
],
94+
[
95+
"00000000761cd6bff5e11258943e401e1bb094a8013e810e1d6031ce273a4b7c",
96+
0
97+
],
98+
[
99+
"00000000082032b915c151f1bb9892fe924013539924a34ec8b9bdea16eb7374",
100+
0
101+
],
102+
[
103+
"0000000000853161fa2a440407ce597524e85db6a27f5dffd35162b38e7627e7",
104+
0
105+
],
106+
[
107+
"00000000001c7ef1bace4a08448d9e462ff8b2e8c389f16026834c5d0c97252c",
108+
0
109+
],
110+
[
111+
"000000000ae11eebf9807d5ac0f9966282c59a1e613e229aa2bf7aea266d4535",
112+
0
113+
],
114+
[
115+
"00000000973e9926efc6a2a11413f7125242911ae10925e3616e872307a3e401",
116+
0
117+
],
118+
[
119+
"0000000000000003d66460a7e1ed89080427ac2004b2b3adae05e6e89725dc1f",
120+
0
121+
],
122+
[
123+
"000000009f8fe2dbafd82a0432d69d620d0ebeea033c8a2621bf06a6e6d3b5c4",
124+
0
125+
],
126+
[
127+
"0000000000000003ac6ce3118b61709d347142cc04daeb2c973b937904e4390b",
128+
0
129+
],
130+
[
131+
"0000000000003844aab8ac81fb69b47e83c037cee505bfd5cb6522aa4d2351bc",
132+
0
133+
],
134+
[
135+
"00000000000060397e5918c319db04ffac74f2a5c7724083112fca8958ea54de",
136+
0
137+
],
138+
[
139+
"00000000213b70c1bcec26b90a5503960a95d7a5fa5d9de498b9d794afeaebd5",
140+
0
141+
],
142+
[
143+
"0000000000000e5f474161d1b68932ab607035f5026f1ac4aa5816f24e76017a",
144+
0
145+
],
146+
[
147+
"00000000b56d4faf52043bfe98e126c69fb51671ba9bcea67c191620255d291d",
148+
0
149+
],
150+
[
151+
"0000000000052b94098008985919f6b525ead0d5cb5608fd60015f2647701ea1",
152+
0
153+
],
154+
[
155+
"00000000e5c06639c50bdb710b84ebf58d1df666db033157db685ec592932276",
156+
0
157+
],
158+
[
159+
"000000006f596242c0b5dd79b5f638e95a215252c44374133a5b263fcb5e9f89",
160+
0
161+
],
162+
[
163+
"00000000a2dc7b8c63c737543dd41e5a7a529d1824c32e2d454cae998c5a7298",
164+
0
165+
]
166+
]

0 commit comments

Comments
 (0)