diff --git a/.atr-rat-excludes-bin.txt b/.atr-rat-excludes-bin.txt new file mode 100644 index 000000000..62d78f043 --- /dev/null +++ b/.atr-rat-excludes-bin.txt @@ -0,0 +1,27 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +# See comment below license in .atr-rat-excludes-src.txt for an explanation of +# what this is. + +# if you make changes here, sort this list before committing asciibetically +# with en_US.UTF-8 lang/locale +.rat-excludes +README.md +fineract-documentation.pdf + +# vim:ft=conf diff --git a/.atr-rat-excludes-src.txt b/.atr-rat-excludes-src.txt new file mode 100644 index 000000000..715ddd1d7 --- /dev/null +++ b/.atr-rat-excludes-src.txt @@ -0,0 +1,54 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +# Path patterns to exclude from RAT checks run by ATR. +# +# RAT = Release Audit Tool (https://creadur.apache.org/rat/) +# ATR = ASF Trusted Releases (https://release-test.apache.org , https://github.com/apache/tooling-trusted-releases/) +# +# This duplicates exclusions in build.gradle. +# This is probably only necessary until both RAT and org.nosphere.apache.rat plugin are using 0.17. +# See https://github.com/eskatos/creadur-rat-gradle/issues/28 . +# Once both are on 0.17, we should be able to move the RAT excludes used during +# the build from build.gradle into a .rat-excludes file shared by both our +# build and ATR. +# Right now ATR does something custom, see +# https://github.com/apache/tooling-trusted-releases/issues/312 . +# If we get tired of waiting for the RAT gradle plugin or the ATR to upgrade to +# 0.17, we could write our own exclusion lists generator. + +# if you make changes here, sort this list before committing asciibetically +# with en_US.UTF-8 lang/locale +**/META-INF/fineract-test.config +**/legacy-docs/ +*.adoc +*.avsc +*.feature +*.html +*.md +*.mustache +*.puml +*.txt +.openapi-generator-ignore +/.asf.yaml +/.rat-excludes +/config/fineractdev-eclipse-preferences.epf +/fineract-provider/src/test/resources/results/xbrl.xml +/gradle/wrapper/gradle-wrapper.properties +org.springframework.boot.autoconfigure.AutoConfiguration.imports + +# vim:ft=conf diff --git a/.mailmap b/.mailmap index 4155b158a..23211b408 100644 --- a/.mailmap +++ b/.mailmap @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + # .mailmap unifies differences in commit names and emails, and shortens committers' names. # .mailmap format is a bit weird, e.g. https://github.com/sympy/sympy/wiki/Using-.mailmap explains it. # .mailmap official doc is on https://git-scm.com/docs/git-shortlog#_mapping_authors diff --git a/NOTICE_RELEASE b/NOTICE_RELEASE index 083abdfe5..5a5d9b1dc 100644 --- a/NOTICE_RELEASE +++ b/NOTICE_RELEASE @@ -1,8 +1,8 @@ Apache Fineract Copyright 2008-2025 The Apache Software Foundation -This product includes software developed by The Apache Software -Foundation (http://www.apache.org/). +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). This product includes third party libraries and resource files from different providers. The details of the different packages and their diff --git a/NOTICE_SOURCE b/NOTICE_SOURCE index 869b39afa..085a41097 100644 --- a/NOTICE_SOURCE +++ b/NOTICE_SOURCE @@ -1,5 +1,5 @@ Apache Fineract Copyright 2008-2025 The Apache Software Foundation -This product includes software developed by The Apache Software -Foundation (http://www.apache.org/). +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/build.gradle b/build.gradle index 3817f3769..17cee3073 100644 --- a/build.gradle +++ b/build.gradle @@ -353,8 +353,7 @@ allprojects { "**/generated/**/*MapperImpl.java", '**/META-INF/fineract-test.config', // Apache-specific GitHub metadata settings file - '/.asf.yaml', - '**/*.sh' + '/.asf.yaml' ] } } diff --git a/buildSrc/src/main/groovy/org.apache.fineract.release.gradle b/buildSrc/src/main/groovy/org.apache.fineract.release.gradle index 78fb085b6..254d80e22 100644 --- a/buildSrc/src/main/groovy/org.apache.fineract.release.gradle +++ b/buildSrc/src/main/groovy/org.apache.fineract.release.gradle @@ -196,36 +196,10 @@ fineract { step10: [ order: 10, description: 'Start voting on the dev mailing list', - email: [ - from: "${findProperty('fineract.config.email')}", - name: "${findProperty('fineract.config.name')}", - to: "${findProperty('fineract.config.email')}", - // to: 'dev@fineract.apache.org', - mime: 'text/plain', - subjectTemplate: [ - templateFile: "${projectDir}/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl" - ], - messageTemplate: [ - templateFile: "${projectDir}/buildSrc/src/main/resources/email/release.step10.vote.message.ftl" - ] - ] ], step11: [ order: 11, description: 'Conclude the vote and announce results', - email: [ - from: "${findProperty('fineract.config.email')}", - name: "${findProperty('fineract.config.name')}", - to: "${findProperty('fineract.config.email')}", - // to: 'dev@fineract.apache.org', - mime: 'text/plain', - subjectTemplate: [ - templateFile: "${projectDir}/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl" - ], - messageTemplate: [ - templateFile: "${projectDir}/buildSrc/src/main/resources/email/release.step11.vote.message.ftl" - ] - ] ], step12: [ order: 12, diff --git a/buildSrc/src/main/groovy/org/apache/fineract/gradle/FineractPlugin.groovy b/buildSrc/src/main/groovy/org/apache/fineract/gradle/FineractPlugin.groovy index c2bb039af..f1cf57ef7 100644 --- a/buildSrc/src/main/groovy/org/apache/fineract/gradle/FineractPlugin.groovy +++ b/buildSrc/src/main/groovy/org/apache/fineract/gradle/FineractPlugin.groovy @@ -18,7 +18,6 @@ */ package org.apache.fineract.gradle -import groovy.json.JsonSlurper import org.apache.commons.io.FileUtils import org.apache.commons.io.filefilter.NotFileFilter import org.apache.commons.io.filefilter.PrefixFileFilter @@ -384,23 +383,7 @@ class FineractPlugin implements Plugin { doFirst { FineractPluginExtension.FineractPluginStep step = step(extension, "step10") - String version = project.properties?['fineract.release.version'] - - if(!version) { - TextIO textIO = TextIoFactory.getTextIO(); - - version = textIO.newStringInputReader() - .withPattern("\\d+.\\d+.\\d+") - .read("Release Version"); - } - - // TODO: input validation, see FINERACT-1610 - - this.context?.project?['fineract.release.version'] = version - - if(step.email) { - emailService.send( processEmailParams(step.email, this.context) ) - } + printInstructions(project, "step10") } } @@ -409,28 +392,7 @@ class FineractPlugin implements Plugin { doFirst { FineractPluginExtension.FineractPluginStep step = step(extension, "step11") - String version = project.properties?['fineract.release.version'] - - if(!version) { - TextIO textIO = TextIoFactory.getTextIO() - - version = textIO.newStringInputReader() - .withPattern("\\d+.\\d+.\\d+") - .read("Release Version"); - } - - // TODO: input validation, see FINERACT-1610 - - this.context?.project?['fineract.release.version'] = version - - def jsonSlurper = new JsonSlurper() - def data = jsonSlurper.parse(new File("buildSrc/src/main/resources/vote/result.${version}.json")) - - this.context?.project?['fineract.vote'] = data - - if(step.email) { - emailService.send( processEmailParams(step.email, this.context) ) - } + printInstructions(project, "step11") } } diff --git a/buildSrc/src/main/resources/email/release.step10.vote.message.ftl b/buildSrc/src/main/resources/email/release.step10.vote.message.ftl deleted file mode 100644 index cf91d1746..000000000 --- a/buildSrc/src/main/resources/email/release.step10.vote.message.ftl +++ /dev/null @@ -1,51 +0,0 @@ -<#-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you 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. - ---> -Hello everyone, - -We are proud to present Apache Fineract ${project['fineract.release.version']}, with the artifacts below up for a vote. Releases are important for a number of reasons: They put a stamp of approval on a set of code changes and they build momentum for future improvements. - -Release notes and ChangeLog: https://cwiki.apache.org/confluence/display/FINERACT/${project['fineract.release.version']}+-+Apache+Fineract - -Source and binary artifacts: https://dist.apache.org/repos/dist/dev/fineract/${project['fineract.release.version']}/ - -Tagged as ${project['fineract.release.version']} - -Committer PGP keys, including the release signing key: https://dist.apache.org/repos/dist/dev/fineract/KEYS - -Note that this release candidate contains source and binary artifacts. - -This vote will be open for 72 hours: - -[ ] +1 approve -[ ] +0 no opinion -[ ] -1 disapprove (and reason why) - -Please indicate if yours is a binding vote, and "Verified: YES/NO/PARTIAL". - -Verified: 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. "Verified: YES" is required for binding votes. - -Verified: NO ... No testing performed on release candidate, e.g. relying on testing performed by other contributors and/or output of GitHub Actions, while exercising your right to vote. - -Verified: PARTIAL ... Please specify. - -Cheers, - -${project['fineract.config.name']} diff --git a/buildSrc/src/main/resources/email/release.step11.vote.message.ftl b/buildSrc/src/main/resources/email/release.step11.vote.message.ftl deleted file mode 100644 index 227d956d6..000000000 --- a/buildSrc/src/main/resources/email/release.step11.vote.message.ftl +++ /dev/null @@ -1,89 +0,0 @@ -<#-- - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you 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. - ---> -<#if (project['fineract.vote'].approve.binding?size + project['fineract.vote'].approve.nonBinding?size > project['fineract.vote'].disapprove.binding?size + project['fineract.vote'].disapprove.nonBinding?size)> -Voting is now closed and has passed with the following tally, - -Binding +1s: ${project['fineract.vote'].approve.binding?size} -Non binding +1s: ${project['fineract.vote'].approve.nonBinding?size} -<#else> -Voting is now closed and has not passed with the following tally, - -Binding +1s: ${project['fineract.vote'].approve.binding?size} -Non binding +1s: ${project['fineract.vote'].approve.nonBinding?size} - -Binding -1s: ${project['fineract.vote'].disapprove.binding?size} -Non binding -1s: ${project['fineract.vote'].disapprove.nonBinding?size} - - -Here are the detailed results: - -<#list project['fineract.vote'].approve.binding> -Binding +1s: - <#items as item> -- ${item.name} - - - - -<#list project['fineract.vote'].approve.nonBinding> -Non binding +1s: - <#items as item> -- ${item.name} - - - - -<#list project['fineract.vote'].disapprove.binding> -Binding -1s: - <#items as item> -- ${item.name} - - - -<#list project['fineract.vote'].disapprove.nonBinding> -Non binding -1s: - <#items as item> -- ${item.name} - - - - -<#list project['fineract.vote'].noOpinion.binding> -Binding +0s: - <#items as item> -- ${item.name} - - - -<#list project['fineract.vote'].noOpinion.nonBinding> -Non binding +0s: - <#items as item> -- ${item.name} - - - -<#if (project['fineract.vote'].approve.binding?size + project['fineract.vote'].approve.nonBinding?size > project['fineract.vote'].disapprove.binding?size + project['fineract.vote'].disapprove.nonBinding?size)> -Thanks to everyone who voted! I'll now continue with the rest of the release process. -<#else> -Thanks to everyone who voted! Looks like we have to repeat the vote. - - -${project['fineract.config.name']} diff --git a/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl b/buildSrc/src/main/resources/instructions/step10.txt.ftl similarity index 85% rename from buildSrc/src/main/resources/email/release.step10.vote.subject.ftl rename to buildSrc/src/main/resources/instructions/step10.txt.ftl index 9c8df5084..cbb81dd3d 100644 --- a/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl +++ b/buildSrc/src/main/resources/instructions/step10.txt.ftl @@ -18,4 +18,12 @@ under the License. --> -[FINERACT] [VOTE] πŸ—³οΈ ${project['fineract.release.version']} for release + + +[INSTRUCTIONS:START] + +Initiate voting with the ATR (ASF Trusted Releases) tool. + +https://release-test.apache.org + +[INSTRUCTIONS:END] diff --git a/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl b/buildSrc/src/main/resources/instructions/step11.txt.ftl similarity index 85% rename from buildSrc/src/main/resources/email/release.step11.vote.subject.ftl rename to buildSrc/src/main/resources/instructions/step11.txt.ftl index 380926605..5186a299e 100644 --- a/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl +++ b/buildSrc/src/main/resources/instructions/step11.txt.ftl @@ -18,4 +18,12 @@ under the License. --> -[FINERACT] [VOTE] [RESULT] 🧾️ ${project['fineract.release.version']} for release + + +[INSTRUCTIONS:START] + +Conclude voting with the ATR (ASF Trusted Releases) tool. + +https://release-test.apache.org + +[INSTRUCTIONS:END] diff --git a/buildSrc/src/main/resources/instructions/step12.txt.ftl b/buildSrc/src/main/resources/instructions/step12.txt.ftl index 22c8bec32..59f418dfc 100644 --- a/buildSrc/src/main/resources/instructions/step12.txt.ftl +++ b/buildSrc/src/main/resources/instructions/step12.txt.ftl @@ -24,6 +24,7 @@ Move the release candidate from the dev area to the release area using a Subversion server-side copy: -svn mv https://dist.apache.org/repos/dist/dev/fineract/${project['fineract.release.version']} https://dist.apache.org/repos/dist/release /fineract/ +# this is a remote operation +svn mv -m "Release Fineract 1.14.0 🚒" https://dist.apache.org/repos/dist/dev/fineract/${project['fineract.release.version']} https://dist.apache.org/repos/dist/release/fineract/ [INSTRUCTIONS:END] diff --git a/buildSrc/src/main/resources/instructions/step13.txt.ftl b/buildSrc/src/main/resources/instructions/step13.txt.ftl index 3a734bc71..db0b69712 100644 --- a/buildSrc/src/main/resources/instructions/step13.txt.ftl +++ b/buildSrc/src/main/resources/instructions/step13.txt.ftl @@ -30,5 +30,6 @@ and make sure that everything on the release tag is merged to develop and that e >> git push origin develop >> git branch -D release/${project['fineract.release.version']} >> git push origin :release/${project['fineract.release.version']} +>> git describe [INSTRUCTIONS:END] diff --git a/buildSrc/src/main/resources/instructions/step9.txt.ftl b/buildSrc/src/main/resources/instructions/step9.txt.ftl index 5d2cae8d9..ee7b00a5f 100644 --- a/buildSrc/src/main/resources/instructions/step9.txt.ftl +++ b/buildSrc/src/main/resources/instructions/step9.txt.ftl @@ -22,17 +22,6 @@ [INSTRUCTIONS:START] -Following are the typical things we need to verify before voting on a release candidate. And the release manager should verify them too before calling out a vote. - -Make sure release artifacts are hosted at https://dist.apache.org/repos/dist/dev/fineract - -* Release candidates should be in format apache-fineract-bin-${project['fineract.release.version']}.tar.gz -* Verify signatures and hashes. You may have to import the public key of the release manager to verify the signatures. (gpg --import KEYS or gpg --recv-key ) -* Git tag matches the released bits (diff -rf) -* Can compile docs and code successfully from source -* Verify DISCLAIMER, NOTICE and LICENSE (year etc) -* All files have correct headers (Rat check should be clean - gradlew rat) -* No jar files in the source artifacts -* Integration tests should work +See https://fineract.apache.org/docs/current/#_step_9_verify_distribution_staging [INSTRUCTIONS:END] diff --git a/fineract-doc/src/docs/en/chapters/features/re-ageing.adoc b/fineract-doc/src/docs/en/chapters/features/re-ageing.adoc index 1b0bc776c..110b61ecd 100644 --- a/fineract-doc/src/docs/en/chapters/features/re-ageing.adoc +++ b/fineract-doc/src/docs/en/chapters/features/re-ageing.adoc @@ -1,9 +1,4 @@ = Loan Re-Aging -:doctype: book -:icons: font -:toc: left -:toclevels: 3 -:sectnums: == Overview diff --git a/fineract-doc/src/docs/en/chapters/release/process-step01.adoc b/fineract-doc/src/docs/en/chapters/release/process-step01.adoc index b847af602..b1c935dd2 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step01.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step01.adoc @@ -4,6 +4,8 @@ The RM should, if one doesn't already exist, first create a new release umbrella issue in JIRA. This issue is dedicated to tracking (a summary of) any discussion related to the planned new release. An example of such an issue is https://issues.apache.org/jira/browse/FINERACT-873[FINERACT-873]. +Next, the RM logs in to https://release-test.apache.org[the ATR (ASF Trusted Releases)] tool and clicks "+ Start a new release", naming the release `{revnumber}`. + The RM then creates a list of resolved issues & features through an initial check in JIRA for already resolved issues for the release, and then setup a timeline for release branch point. The time for the day the issue list is created to the release branch point must be at least two weeks in order to give the community a chance to prioritize and commit any last minute features and issues they would like to see in the upcoming release. The RM must then send the pointer to the umbrella issue along with the tentative timeline for branch point to the developer lists. Any work identified as release related that needs to be completed should be added as a sub tasks of the umbrella issue to allow all developers and users to see the overall release progress in one place. The umbrella issue shall also link to any issues still requiring clarification whether or not they will make it into the release. diff --git a/fineract-doc/src/docs/en/chapters/release/process-step03.adoc b/fineract-doc/src/docs/en/chapters/release/process-step03.adoc index 48e39e5e9..1db633dd9 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step03.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step03.adoc @@ -36,7 +36,7 @@ git checkout -b release/{revnumber} git push origin release/{revnumber} ---- -5. Add new release notes in Release Folders. The change list can be swiped from the JIRA release note tool (use the "text" format for the change log). See JIRA Cleanup above to ensure that the release notes generated by this tool are what you are expecting. +5. Start new release notes page under https://cwiki.apache.org/confluence/display/FINERACT/Fineract+Releases[Fineract Releases]. The change list can be swiped from the JIRA release note tool (use the "text" format for the change log). See JIRA Cleanup above to ensure that the release notes generated by this tool are what you are expecting. 6. Send en email announcing the new release branch on the earlier email thread + diff --git a/fineract-doc/src/docs/en/chapters/release/process-step08.adoc b/fineract-doc/src/docs/en/chapters/release/process-step08.adoc index f97ba4fec..41cddef41 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step08.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step08.adoc @@ -11,19 +11,27 @@ Next we'll stage the release candidate. Create a new folder and add these files: * apache-fineract-src-{revnumber}.tar.gz.sha512 * apache-fineract-src-{revnumber}.tar.gz.asc -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: +These files (or "artifacts") comprise the release candidate. + +First, upload these files to https://release-test.apache.org/compose/fineract/{revnumber}. This tool will initiate automated checks on the files. We'll come back to those in next step and ensure they pass. + +Next, upload these files to https://www.apache.org/legal/release-policy.html#stage[ASF's distribution dev/staging area] like so: [source,bash,subs="attributes+"] ---- # this is a remote operation -svn mkdir https://dist.apache.org/repos/dist/dev/fineract/{revnumber} +svn mkdir -m "Create Fineract {revnumber} staging area πŸ—οΈ" \ + https://dist.apache.org/repos/dist/dev/fineract/{revnumber} + # create local svn-tracked folder "{revnumber}" svn checkout https://dist.apache.org/repos/dist/dev/fineract/{revnumber} + # prepare to upload cp path/to/new/folder/* {revnumber}/ cd {revnumber}/ + # actual upload occurs here -svn add * && svn commit +svn add * && svn commit -m "Stage Fineract {revnumber} 🎭" ---- NOTE: You will need your ASF Committer credentials to be able to access the Subversion host at `dist.apache.org`. @@ -36,4 +44,4 @@ NOTE: You will need your ASF Committer credentials to be able to access the Subv ./gradlew fineractReleaseStep8 -Pfineract.release.version={revnumber} ---- -CAUTION: This task is inefficient. Follow `svn mkdir` and other manual steps above. +CAUTION: Gradle task 8 is inefficient. We recommend `svn mkdir` and other manual steps above. diff --git a/fineract-doc/src/docs/en/chapters/release/process-step09.adoc b/fineract-doc/src/docs/en/chapters/release/process-step09.adoc index c0d177646..bf06e40e5 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step09.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step09.adoc @@ -2,9 +2,9 @@ == Description -Following are the typical things we need to verify before voting on a release candidate. And the release manager should verify them too before calling out a vote. +Following are the typical things we need to verify before voting on a release candidate. And the release manager should verify them too before calling out a vote. Some of these checks are duplicated by https://release-test.apache.org[the ATR (ASF Trusted Releases) tool], and will need to continue to be duplicated until we get more comfortable with that tool. -Make sure release artifacts are hosted at https://dist.apache.org/repos/dist/dev/fineract +Make sure release artifacts are hosted at both https://release-test.apache.org/compose/fineract/{revnumber} AND https://dist.apache.org/repos/dist/dev/fineract * Release candidate files should match filenames mentioned earlier, and will be moved without renaming if/when the release vote passes. * Verify signatures and hashes. You may have to import the public key of the release manager to verify the signatures. (`gpg --import KEYS` or `gpg --recv-key `) @@ -14,6 +14,7 @@ Make sure release artifacts are hosted at https://dist.apache.org/repos/dist/dev * All files have correct headers (Rat check should be clean - `./gradlew rat`) * No jar files in the source artifacts * All tests pass both in CI and locally +* All ATR checks pass === Artifact verification diff --git a/fineract-doc/src/docs/en/chapters/release/process-step10.adoc b/fineract-doc/src/docs/en/chapters/release/process-step10.adoc index 5a1a82a70..a7ba519d6 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step10.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step10.adoc @@ -2,19 +2,14 @@ == Description -Voting has to be done on dev@fineract.apache.org. You can close the vote after voting period expires (72 hours) and you accumulate sufficient votes (minimum 3 x +1 PMC votes). - -[source,text] ----- -include::{rootdir}/buildSrc/src/main/resources/email/release.step10.vote.subject.ftl[lines=21..] - -include::{rootdir}/buildSrc/src/main/resources/email/release.step10.vote.message.ftl[lines=21..] ----- +Initiate voting with https://release-test.apache.org[the ATR (ASF Trusted Releases) tool]. == Gradle Task .Command [source,bash,subs="attributes+,+macros"] ---- -./gradlew fineractReleaseStep10 -Pfineract.release.version={revnumber} +./gradlew fineractReleaseStep10 ---- + +INFO: Use the ATR for this task. diff --git a/fineract-doc/src/docs/en/chapters/release/process-step11.adoc b/fineract-doc/src/docs/en/chapters/release/process-step11.adoc index 62aab040e..51a3de319 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step11.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step11.adoc @@ -2,19 +2,14 @@ == Description -Upon receiving 3 x +1 from the PMC, or after 72 hours (whichever one comes first), reply to the voting thread and add the prefix "[RESULT]" to the subject line with the results, as follows: - -[source,text] ----- -include::{rootdir}/buildSrc/src/main/resources/email/release.step11.vote.subject.ftl[lines=21..] - -include::{rootdir}/buildSrc/src/main/resources/email/release.step11.vote.message.ftl[lines=21..] ----- +Conclude voting with https://release-test.apache.org[the ATR (ASF Trusted Releases) tool]. == Gradle Task .Command [source,text,subs="attributes+,+macros"] ---- -./gradlew fineractReleaseStep11 -Pfineract.release.version={revnumber} +./gradlew fineractReleaseStep11 ---- + +INFO: Use the ATR for this task. diff --git a/fineract-doc/src/docs/en/chapters/release/process-step12.adoc b/fineract-doc/src/docs/en/chapters/release/process-step12.adoc index 0bcc44bdd..b479539a3 100644 --- a/fineract-doc/src/docs/en/chapters/release/process-step12.adoc +++ b/fineract-doc/src/docs/en/chapters/release/process-step12.adoc @@ -6,7 +6,10 @@ Move the release candidate from the dev area to the release area using a Subvers [source,bash,subs="attributes+"] ---- -svn mv https://dist.apache.org/repos/dist/dev/fineract/{revnumber} https://dist.apache.org/repos/dist/release/fineract/ +# this is a remote operation +svn mv -m "Release Fineract {revnumber} 🚒" \ + https://dist.apache.org/repos/dist/dev/fineract/{revnumber} \ + https://dist.apache.org/repos/dist/release/fineract/ ---- NOTE: https://www.apache.org/legal/release-policy.html#upload-ci[This must be done by a Fineract PMC member]. diff --git a/fineract-war/build.gradle b/fineract-war/build.gradle index f606183cc..b5f6bcae3 100644 --- a/fineract-war/build.gradle +++ b/fineract-war/build.gradle @@ -136,6 +136,9 @@ distributions { from "$rootDir/fineract-doc/build/docs/pdf/en/index.pdf" rename ('index.pdf', 'fineract-documentation.pdf') + + from "$rootDir/.atr-rat-excludes-bin.txt" + rename ('.atr-rat-excludes-bin.txt', '.rat-excludes') } } src { @@ -147,7 +150,7 @@ distributions { '**/.classpath', '.idea', 'out', '._.DS_Store', '.DS_Store', 'WebContent', '**/.externalToolbuilders', '.theia', 'LICENSE_RELEASE', 'NOTICE_RELEASE', '**/licenses', '*.class', '**/bin', '*.log', '.dockerignore', - '**/.gitkeep' + '**/.gitkeep', '*.swp', '.atr-rat-excludes-bin.txt', '**/jquery-1.7.min.js' // Ensure consistent file paths for caching eachFile { details -> @@ -156,6 +159,7 @@ distributions { } rename ('LICENSE_SOURCE', 'LICENSE') rename ('NOTICE_SOURCE', 'NOTICE') + rename ('.atr-rat-excludes-src.txt', '.rat-excludes') } } } diff --git a/scripts/split-features.sh b/scripts/split-features.sh index 2213af4cf..8e5fb2dd5 100755 --- a/scripts/split-features.sh +++ b/scripts/split-features.sh @@ -1,5 +1,22 @@ #!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + # Exit on any error set -e diff --git a/scripts/split-tests.sh b/scripts/split-tests.sh index c083fedf8..713466917 100755 --- a/scripts/split-tests.sh +++ b/scripts/split-tests.sh @@ -1,4 +1,22 @@ #!/bin/bash + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + # Usage: ./split-tests.sh set -e