Skip to content

Commit a561264

Browse files
committed
Merge branch 'release/1.13.0' into develop
* release/1.13.0: don't include actual email addresses save 1.13.0 vote result shorten/simplify gpg key sending commands update link to rc verification instructions fix typos in step 9 re: running the binary improve step 9 artifact verification gpg tips fix tarball explosion in release step 9 🧯 cucumber.adoc: fix list continuations further improve release steps 6 and 9 release step 6: fix sanity check example improve staging doc and commands in release step 8 doc: remove errant config but keep :sectlinks: clean during artifact build release step 6 FINERACT-2326: Do not remove external id if transaction got not replayed FINERACT-2326: Fix `Trial Balance Summary with asset owner` report FINERACT-2326: Loan point in time API now properly handles future dates improve release branch email template improve release process kickoff email template
2 parents 56b69d6 + 826608f commit a561264

File tree

12 files changed

+133
-61
lines changed

12 files changed

+133
-61
lines changed

buildSrc/src/main/resources/email/release.step01.headsup.message.ftl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
-->
2121
Hello everyone,
2222

23-
... based on our "How to Release Apache Fineract" process (https://cwiki.apache.org/confluence/x/DRwIB) as well as the "Releases" chapter in the docs (https://fineract.apache.org/docs/current/#_releases),
24-
25-
I will create a ${project['fineract.release.version']} branch off develop in our git repository at https://github.com/apache/fineract on ${project['fineract.releaseBranch.date']}.
23+
... based on our release process (https://fineract.apache.org/docs/current/#_releases), I will create a release/${project['fineract.release.version']} branch off develop in our git repository at https://github.com/apache/fineract on ${project['fineract.releaseBranch.date']}.
2624

2725
The release tracking umbrella issue for tracking all activity in JIRA is FINERACT-${project['fineract.release.issue']!'0000'} (https://issues.apache.org/jira/browse/FINERACT-${project['fineract.release.issue']!'0000'}).
2826

buildSrc/src/main/resources/email/release.step03.branch.message.ftl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
-->
2121
Hello everyone,
2222

23-
... as previously announced, I've just created the release branch for our upcoming ${project['fineract.release.version']} release.
23+
... as previously announced, I've created the branch for our upcoming ${project['fineract.release.version']} release. The branch name is release/${project['fineract.release.version']}.
2424

25-
You can continue working and merging PRs to the develop branch for future releases, as always.
25+
You can continue working and merging PRs into the develop branch for future releases, as always.
2626

27-
The DRAFT release notes are on https://cwiki.apache.org/confluence/display/FINERACT/${project['fineract.release.version']}+-+Apache+Fineract . Does anyone see anything missing?
27+
I started the DRAFT release notes at https://cwiki.apache.org/confluence/display/FINERACT/${project['fineract.release.version']}+-+Apache+Fineract . Please help me by filling in "Summary of changes". Does anyone see anything else missing?
2828

29-
Does anyone have any last minutes changes they would like to see cherry-picked to branch ${project['fineract.release.version']}, or are we good go and actually cut the release based on this branch as it is?
29+
Does anyone have any last minute changes for the release branch, or are we good to go and actually cut the release based on this branch as it is?
3030

3131
I'll initiate the final stage of actually creating the release on ${project['fineract.release.date']} if nobody objects.
3232

buildSrc/src/main/resources/email/release.step10.vote.message.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Please indicate if you are a binding vote (member of the PMC). Note: PMC members
4242

4343
Please also indicate with "Tested: YES/NO/PARTIAL" if you have locally built and/or tested these artifacts and/or a clone of the code checked out to the release commit, following the form:
4444

45-
Tested: YES ... Verified integrity and signatures of release artifacts locally, built from source, ran jar/war: Did everything mentioned in the current release candidate verification guidance ( https://lists.apache.org/thread/hym94pdy3nk9gjspkz4qonv2v15n5dpo ). If you did more than that, please specify.
45+
Tested: YES ... Verified integrity and signatures of release artifacts locally, built from source, ran jar/war: Did everything mentioned in the current release candidate verification guidance ( https://fineract.apache.org/docs/rc/#_artifact_verification ). If you did more than that, please specify.
4646

4747
Tested: NO ... No testing performed on release candidate, e.g. relying on testing performed by other contributors and/or output of GitHub Actions, while exercising my right to vote.
4848

buildSrc/src/main/resources/email/release.step11.vote.message.ftl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,45 +38,45 @@ Here are the detailed results:
3838
<#list project['fineract.vote'].approve.binding>
3939
Binding +1s:
4040
<#items as item>
41-
- ${item.name} (${item.email})
41+
- ${item.name}
4242
</#items>
4343
</#list>
4444

4545

4646
<#list project['fineract.vote'].approve.nonBinding>
4747
Non binding +1s:
4848
<#items as item>
49-
- ${item.name} (${item.email})
49+
- ${item.name}
5050
</#items>
5151
</#list>
5252

5353

5454
<#list project['fineract.vote'].disapprove.binding>
5555
Binding -1s:
5656
<#items as item>
57-
- ${item.name} (${item.email})
57+
- ${item.name}
5858
</#items>
5959
</#list>
6060

6161
<#list project['fineract.vote'].disapprove.nonBinding>
6262
Non binding -1s:
6363
<#items as item>
64-
- ${item.name} (${item.email})
64+
- ${item.name}
6565
</#items>
6666
</#list>
6767

6868

6969
<#list project['fineract.vote'].noOpinion.binding>
7070
Binding +0s:
7171
<#items as item>
72-
- ${item.name} (${item.email})
72+
- ${item.name}
7373
</#items>
7474
</#list>
7575

7676
<#list project['fineract.vote'].noOpinion.nonBinding>
7777
Non binding +0s:
7878
<#items as item>
79-
- ${item.name} (${item.email})
79+
- ${item.name}
8080
</#items>
8181
</#list>
8282

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"approve": {
3+
"binding": [
4+
{
5+
"name": "James Dailey",
6+
"email": "[email protected]"
7+
},
8+
{
9+
"name": "Victor Manuel Romero Rodriguez",
10+
"email": "[email protected]"
11+
},
12+
{
13+
"name": "Terence Monteiro",
14+
"email": "[email protected]"
15+
}
16+
],
17+
"nonBinding": [
18+
{
19+
"name": "Adam Monsen",
20+
"email": "[email protected]"
21+
},
22+
{
23+
"name": "Bharath Gowda",
24+
"email": "[email protected]"
25+
},
26+
{
27+
"name": "Aleksandar Vidakovic",
28+
"email": "[email protected]"
29+
},
30+
{
31+
"name": "Ed Cable",
32+
"email": "[email protected]"
33+
},
34+
{
35+
"name": "Felix van Hove",
36+
"email": "[email protected]"
37+
},
38+
{
39+
"name": "Ahmed adel",
40+
"email": "[email protected]"
41+
}
42+
]
43+
},
44+
"disapprove": {
45+
"binding": [
46+
],
47+
"nonBinding": [
48+
]
49+
},
50+
"noOpinion": {
51+
"binding": [
52+
],
53+
"nonBinding": [
54+
]
55+
}
56+
}

fineract-doc/src/docs/en/chapters/features/journal-entry-aggregation.adoc

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
= Journal Entry Aggregation
2-
:experimental:
3-
:source-highlighter: highlightjs
4-
:toc: left
5-
:toclevels: 3
6-
:icons: font
7-
:sectlinks:
8-
:sectnums:
92

103
== Overview
114
The Journal Entry Aggregation Job is a Spring Batch-based solution designed to efficiently aggregate journal entries in the Fineract system. This job processes journal entries in configurable chunks, improving performance and resource utilization when dealing with large volumes of financial transactions.

fineract-doc/src/docs/en/chapters/release/configuration-gpg.adoc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ sub cv25519/4FGHIJ56 2022-04-16 [E] [expires: 2024-04-16] <6>
151151
+
152152
<2> GPG created a revocation certificate and its directory. If your private key is compromised, you need to use your revocation certificate to revoke your key.
153153
+
154-
<3> The public key uses the Ed25519 ECC (Elliptic Curve Cryptography) algorithm and shows the expiration date of 16 Apr 2024. The public key ID `0x7890ABCD` matches the last 8 characters of key fingerprint. The `[SC]` indicates this key is used to sign (prove authorship) and certify (issue subkeys for encryption, signature and authentication operations).
154+
<3> The public key uses the Ed25519 ECC (Elliptic Curve Cryptography) algorithm and shows the expiration date of 16 Apr 2024. The public key ID `7890ABCD` matches the last 8 characters of key fingerprint. The `[SC]` indicates this key is used to sign (prove authorship) and certify (issue subkeys for encryption, signature and authentication operations).
155155
<4> The key fingerprint (`ABCD EFGH IJKL MNOP QRST UVWX YZ12 3456 7890 ABCD`) is a hash of your public key.
156156
+
157157
<5> Your name and your email address are shown with information about the subkey.
@@ -186,7 +186,7 @@ IMPORTANT: Please contact a PMC member to add your GPG public key in Fineract's
186186
+
187187
[source,bash]
188188
----
189-
gpg --send-keys ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCD
189+
gpg --send-keys 0xYZ1234567890ABCD
190190
----
191191
+
192192
Before doing this, make sure that your default keyserver is hkp://keyserver.ubuntu.com/. You can do this by changing the default keyserver in ~/.gnupg/dirmngr.conf:
@@ -200,9 +200,7 @@ Alternatively you can provide the keyserver with the send command:
200200
+
201201
[source,bash]
202202
----
203-
gpg \
204-
--keyserver 'hkp://keyserver.ubuntu.com:11371' \
205-
--send-keys ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCD
203+
gpg --keyserver keyserver.ubuntu.com --send-keys 0xYZ1234567890ABCD
206204
----
207205
+
208206
Another option to publish your key is to submit an armored public key directly at https://keyserver.ubuntu.com/. You can create the necessary data with this command by providing the email address that you used when you created your key pair:

fineract-doc/src/docs/en/chapters/release/process-step06.adoc

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,32 @@
44

55
Create source and binary tarballs.
66

7-
// FIXME - clean this up? focus on what commands should actually be run
8-
97
[source,bash,subs="attributes+"]
108
----
11-
./gradlew --rerun-tasks srcDistTar binaryDistTar <1>
9+
./gradlew clean srcDistTar binaryDistTar
1210
----
13-
<1> The source tarball might not be created if `--rerun-tasks` is omitted.
11+
12+
Check that `fineract-provider/build/classes/java/main/git.properties` exists. If so, continue. If not, you're likely encountering https://github.com/n0mer/gradle-git-properties/issues/233[this bug], and you need to re-run the command above to create proper source and binary tarballs. That `git.properties` file is supposed to end up at `BOOT-INF/classes/git.properties` in `fineract-provider-{revnumber}.jar` in the binary release tarball. Its contents are displayed at the `/fineract-provider/actuator/info` endpoint. It may be possible to fix this heisenbug entirely by https://github.com/gradle/gradle/issues/34177#issuecomment-3051970053[modifying our git properties gradle plugin config] in `fineract-provider/build.gradle`, perhaps by changing where `git.properties` is written.
1413

1514
Look in `fineract-war/build/distributions/` for the tarballs.
1615

17-
Make sure to do some sanity checks. The source tarball and the code in the release branch (at the commit with the release tag) should match.
16+
Do some sanity checks. The source tarball and the code in the release branch (at the commit with the release tag) should match.
1817

1918
[source,bash,subs="attributes+"]
2019
----
2120
cd /fineract-release-preparations
22-
tar -xvf path/to/apache-fineract-src-{revnumber}.tar.gz
21+
tar -xvzf path/to/apache-fineract-src-{revnumber}.tar.gz
2322
git clone [email protected]:apache/fineract.git
2423
cd fineract/
2524
git checkout tags/{revnumber}
2625
cd ..
2726
diff -r fineract apache-fineract-src-{revnumber}
2827
----
2928

30-
// FIXME - add output example
31-
32-
Make sure the code compiles and tests pass on the uncompressed source. Do as much testing as you can and share what you did. Here's the bare minimum check:
33-
34-
[source,bash,subs="attributes+"]
35-
----
36-
./gradlew build -x test -x doc
37-
----
29+
Make sure the code compiles and tests pass on the uncompressed source. You should at the very least do exactly what you will ask the community to do in <<Step 9: Verify Distribution Staging>>.
3830

3931
Ideally you'd build code and docs and run every possible test and check, but https://github.com/apache/fineract/actions[running everything has complex dependencies, caches, and takes many hours]. It is rarely done in practice offline / local / on developer machines. But please, go ahead and run the test and doc tasks, and more! Grab a cup of coffee and run everything you can. See the various builds in `.github/workflows/` and try the same things on your own. We should all hammer on a release candidate as much as we can to see if it breaks and fix it if so. All that of course improves our final release.
4032

41-
Finally, inspect `apache-fineract-bin-{revnumber}.tar.gz`. Make sure the `fineract-provider-{revnumber}.jar` can be run directly, and the `fineract-provider.war` can be run with Tomcat.
42-
4333
NOTE: We don't release any artifacts to Apache's Maven repository.
4434

4535
== Gradle Task

fineract-doc/src/docs/en/chapters/release/process-step08.adoc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
== Description
44

5-
Finally create a directory with release name ({revnumber} in this example) in https://dist.apache.org/repos/dist/dev/fineract and add the following files in this new directory:
5+
Next we'll stage the release candidate. Create a new folder and add these files:
66

77
* apache-fineract-bin-{revnumber}.tar.gz
88
* apache-fineract-bin-{revnumber}.tar.gz.sha512
@@ -11,16 +11,18 @@ Finally create a directory with release name ({revnumber} in this example) in ht
1111
* apache-fineract-src-{revnumber}.tar.gz.sha512
1212
* apache-fineract-src-{revnumber}.tar.gz.asc
1313

14-
These files (or "artifacts") make up the release candidate.
15-
16-
Upload these files to ASF's distribution dev (staging) area:
14+
These files (or "artifacts") comprise the release candidate. Upload these files to https://www.apache.org/legal/release-policy.html#stage[ASF's distribution dev/staging area] like so:
1715

1816
[source,bash,subs="attributes+"]
1917
----
18+
# this is a remote operation
2019
svn mkdir https://dist.apache.org/repos/dist/dev/fineract/{revnumber}
20+
# create local svn-tracked folder "{revnumber}"
2121
svn checkout https://dist.apache.org/repos/dist/dev/fineract/{revnumber}
22-
cp path/to/files/* {revnumber}/
22+
# prepare to upload
23+
cp path/to/new/folder/* {revnumber}/
2324
cd {revnumber}/
25+
# actual upload occurs here
2426
svn add * && svn commit
2527
----
2628

fineract-doc/src/docs/en/chapters/release/process-step09.adoc

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ Make sure release artifacts are hosted at https://dist.apache.org/repos/dist/dev
2121
----
2222
# source tarball signature and checksum verification steps
2323
# we'll check the source tarball first
24-
version={revnumber}
25-
src=apache-fineract-src-$version.tar.gz
24+
src=apache-fineract-src-{revnumber}.tar.gz
2625
2726
# upon success: prints "Good signature" and returns successful exit code
2827
# upon failure: prints "BAD signature" and returns error exit code
@@ -33,43 +32,75 @@ gpg --verify $src.asc
3332
gpg --print-md SHA512 $src | diff - $src.sha512
3433
3534
# binary tarball signature and checksum verification steps and outputs are similar
36-
bin=apache-fineract-bin-$version.tar.gz
35+
bin=apache-fineract-bin-{revnumber}.tar.gz
3736
gpg --verify $bin.asc
3837
gpg --print-md SHA512 $bin | diff - $bin.sha512
3938
----
4039

41-
For folks new to https://www.gnupg.org/[GnuPG], there are a couple things to note. First, if it says the source or binary tarball detached signature is correct, that's great! That's the most important part.
40+
Look for `Good signature` in the `gpg` output:
4241

43-
Second, if you've imported `KEYS` but gpg warns you the key used for signing is not trusted, you can tell gpg you trust the key to squelch the warning. Ideally you meet the alleged key owner in person and check their ID first. Once you trust their identity matches, you then indicate your trust for their key.
42+
[source,text,subs="attributes+"]
43+
----
44+
$ gpg --verify $bin.asc
45+
gpg: assuming signed data in 'apache-fineract-bin-{revnumber}.tar.gz'
46+
gpg: Signature made Sat 11 Oct 2025 05:46:42 PM PDT
47+
gpg: using EDDSA key 250775BDB5FE7D53E4AF95C00E895A1A7A090CFC
48+
gpg: Good signature from "Adam Monsen <[email protected]>" [unknown]
49+
----
50+
51+
That's the most important part.
52+
53+
You may see this warning:
4454

45-
Start with `gpg --edit-key KEYID`, substituting the signing key id for `KEYID`. At the `gpg>` prompt, run the `trust` command and choose `4` (I trust fully). You could also choose `3` (marginal), but do _not_ choose `5` (ultimate).
55+
[source,text]
56+
----
57+
gpg: WARNING: This key is not certified with a trusted signature!
58+
gpg: There is no indication that the signature belongs to the owner.
59+
----
4660

47-
TIP: Consider also https://en.wikipedia.org/wiki/Key_signing_party[signing] and https://en.wikipedia.org/wiki/Web_of_trust[uploading] each other's keys.
61+
You may choose to ignore it. To squelch this warning, you must extend your https://en.wikipedia.org/wiki/Web_of_trust[web of trust], by, for example, https://en.wikipedia.org/wiki/Key_signing_party[signing the release manager's key].
62+
63+
Now it's time to build and run the release candidate.
4864

4965
=== Build from source
5066

51-
[source,bash]
67+
[source,bash,subs="attributes+"]
5268
----
5369
tar -xzf $src
54-
cd apache-fineract-src-$version
55-
gradle build -x test -x doc
70+
cd apache-fineract-src-{revnumber}
71+
./gradlew build -x test -x doc
5672
cd ..
5773
----
5874

5975
=== Run from binary
6076

61-
Before running this you must first start a database server and ensure the `fineract_default` and `fineract_tenant` databases exist. Then:
77+
Before running Fineract you must first start a <<Database support,supported relational database server>> and ensure the `fineract_default` and `fineract_tenants` databases exist. Detailed steps for database preparation are left as an exercise for the reader. You can find ideas on how to prepare your database in the `build-mariadb.yml`, `build-mysql.yml`, and `build-postgresql.yml` files in source control.
6278

63-
[source,bash]
79+
Finally, start your Fineract server:
80+
81+
[source,bash,subs="attributes+"]
82+
----
83+
tar -xvzf apache-fineract-bin-{revnumber}.tar.gz
84+
cd apache-fineract-bin-{revnumber}
85+
export FINERACT_SERVER_SSL_ENABLED=false
86+
export FINERACT_SERVER_PORT=8080
87+
export BACKEND_PROTOCOL=http
88+
export BACKEND_PORT=$FINERACT_SERVER_PORT
89+
# assumes reachable, healthy mariadb with default username, password, and port
90+
java -jar fineract-provider-{revnumber}.jar
91+
----
92+
93+
Alternatively, you can run it in Tomcat:
94+
95+
[source,bash,subs="attributes+"]
6496
----
65-
tar -xzf $bin
66-
cd apache-fineract-bin-$version
6797
cat << 'EndOfRcenv' >> rcenv
6898
FINERACT_SERVER_SSL_ENABLED=false
6999
FINERACT_SERVER_PORT=8080
70100
BACKEND_PROTOCOL=http
71101
BACKEND_PORT=$FINERACT_SERVER_PORT
72102
EndOfRcenv
103+
# assumes reachable, healthy mariadb with default username, password, and port
73104
docker run --rm -it -v "$(pwd):/usr/local/tomcat/webapps" \
74105
--net=host --env-file=rcenv tomcat:jre21
75106
----

0 commit comments

Comments
 (0)