in buildSrc/src/main/groovy/org/apache/fineract/gradle/FineractPlugin.groovy [50:505]
void apply(Project project) {
def extension = project.extensions.create("fineract", FineractPluginExtension, project)
project.fineract.extensions.create("config", FineractPluginExtension.FineractPluginConfig)
project.fineract.config.extensions.create("doc", FineractPluginExtension.FineractPluginConfigDoc)
project.fineract.config.extensions.create("template", FineractPluginExtension.FineractPluginConfigTemplate)
project.fineract.config.extensions.create("smtp", FineractPluginExtension.FineractPluginConfigSmtp)
project.fineract.config.extensions.create("subversion", FineractPluginExtension.FineractPluginConfigSubversion)
project.fineract.config.extensions.create("jira", FineractPluginExtension.FineractPluginConfigJira)
project.fineract.config.extensions.create("confluence", FineractPluginExtension.FineractPluginConfigConfluence)
project.fineract.config.extensions.create("gpg", FineractPluginExtension.FineractPluginConfigGpg)
project.fineract.config.extensions.create("git", FineractPluginExtension.FineractPluginConfigGit)
project.afterEvaluate {
this.templateService = new TemplateService(extension.config.template)
this.jiraService = new JiraService(extension.config.jira)
this.confluenceService = new ConfluenceService(extension.config.confluence)
this.subversionService = new SubversionService(extension.config.subversion)
this.emailService = new EmailService(extension.config.smtp)
this.gitService = new GitService(extension.config.git, extension.config.gpg)
this.context = context(project)
}
project.tasks.register("fineractDocPublish") {
dependsOn(":fineract-doc:doc")
doLast {
log.warn("Fineract Publish Doc...")
def url = extension.config.doc.url?:"git@github.com:apache/fineract-site.git";
def branch = extension.config.doc.branch?:"asf-site"
def directory = extension.config.doc.directory?:System.getProperty("java.io.tmpdir")+"/fineract-site"
def d = new File(directory)
if(d.exists()) {
gitService.pull(directory)
} else {
gitService.clone(url, branch, directory)
gitService.config(directory, extension.config.git.sections)
}
def source = new File("fineract-doc/build/docs/html/en");
def target = new File(directory + "/docs/current")
if(!target.name) {
target.mkdirs()
}
FileUtils.copyDirectory(source, target, new NotFileFilter(new PrefixFileFilter(".asciidoctor")), true)
gitService.commit(directory)
}
}
project.tasks.register("fineractReleaseTest") {
doFirst {
// emojis:
// https://gist.github.com/parmentf/035de27d6ed1dce0b36a
// https://emojipedia.org/
// https://unicode.org/emoji/charts/full-emoji-list.html
FineractPluginExtension.FineractPluginStep step = step(extension, "test")
// TODO:
// - jira:
// - move tickets to new version
// jira query
FineractPluginExtension.FineractPluginJiraParams result = jiraService.search(step.jira)
log.warn(">>>>>>>>>>>>>>>> ISSUE: ${result.result[0]?.id} - ${result.result[0]?.key} - ${result.result[0]?.fields?['summary']} - ${result.result[0]?.fields?['fixVersions']}")
/*
// confluence create
def content = new ConfluenceService.ConfluenceContent(title: "1.7.0 - Apache Fineract",
space: new ConfluenceService.ConfluenceSpace(key: "FINERACT"),
ancestors: [new ConfluenceService.ConfluenceParent(id: "75974324")],
body: new ConfluenceService.ConfluenceBody(storage: new ConfluenceService.ConfluenceStorage(value: "<h1>Release Artifacts</h1>")))
confluenceService.createContent(content)
// confluence get
ConfluenceService.ConfluenceContent content = confluenceService.getContent("211881930")
log.warn(">>>>>>>>>>>>>>>>>>>>> CONFLUENCE: ${content.id} - ${content.title} - ${content.body?.storage?.value}")
// confluence update
content.body?.storage?.value = "<h1>Release Artifacts</h1><p><ac:structured-macro ac:macro-id=\"ac1cb3cb-84d4-45aa-820b-05cc42d39dd9\" ac:name=\"jira\" ac:schema-version=\"1\"><ac:parameter ac:name=\"server\">ASF JIRA</ac:parameter><ac:parameter ac:name=\"columnIds\">issuekey,summary,issuetype,created,updated,duedate,assignee,reporter,customfield_12311032,customfield_12311037,customfield_12311022,customfield_12311027,priority,status,resolution</ac:parameter><ac:parameter ac:name=\"columns\">key,summary,type,created,updated,due,assignee,reporter,Priority,Priority,Priority,Priority,priority,status,resolution</ac:parameter><ac:parameter ac:name=\"maximumIssues\">50</ac:parameter><ac:parameter ac:name=\"jqlQuery\">project = FINERACT AND fixVersion = 1.7.0 AND status not in (Open)</ac:parameter><ac:parameter ac:name=\"serverId\">5aa69414-a9e9-3523-82ec-879b028fb15b</ac:parameter></ac:structured-macro></p><p><br/></p>"
content.space = new ConfluenceService.ConfluenceSpace(key: "FINERACT")
content.status = null
content.version = new ConfluenceService.ConfluenceVersion(number: 3)
// confluence update
content = confluenceService.updateContent(content.id, content)
log.warn(">>>>>>>>>>>>>>>>>>>>> CONFLUENCE: ${content.id} - ${content.title} - ${content.body?.storage?.value}")
// confluence delete
ConfluenceService.ConfluenceResponse response = confluenceService.deleteContent("211881930")
log.warn(">>>>>>>>>>>>>>>>>>>>> CONFLUENCE: ${response?.statusCode} - ${response?.message}")
// jira versions
def versions = jiraService.getProjectVersions("12319420")
versions.findAll {
log.warn(">>>> VERSION: ${it.id} - ${it.name} - ${it.description}")
}
def version = jiraService.getVersion("12351431")
log.warn(">>>> !!! VERSION: ${version.id} - ${version.name} - ${version.description} - ${version.archived}")
version.archived = !version.archived
jiraService.updateVersion(version)
version = jiraService.getVersion("12351431")
log.warn(">>>> === VERSION: ${version.id} - ${version.name} - ${version.description} - ${version.archived}")
// jira projects
def projects = jiraService.getProjects()
projects.findAll {
log.warn(">>>>>>>>>>>> PROJECT: ${it.id} - ${it.key} - ${it.name}")
}
// jira info
Map<String, Object> info = jiraService.serverInfo()
log.warn(">>>>>>>>>>>>>>>> INFO: ${info}")
// jira query
FineractPluginExtension.FineractPluginJiraParams result = jiraService.search(step.jira)
log.warn(">>>>>>>>>>>>>>>> INFO: ${result.result.size()}")
// format with template
def tmp = templateService.render(step.template, [issues: result.result])
log.warn(tmp.output)
*/
}
}
// TODO: step for creating release Jira ticket missing!
// step 1
project.tasks.register("fineractReleaseStep1") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step1")
String version = project.properties?['fineract.release.version']
String issue = project.properties?['fineract.release.issue']
String date = project.properties?['fineract.release.date']
if(!version || !issue || !date) {
TextIO textIO = TextIoFactory.getTextIO()
if(!version) {
version = textIO.newStringInputReader()
.withPattern("\\d+.\\d+.\\d+")
.read("Release Version");
}
if(!issue) {
issue = textIO.newStringInputReader()
.withMaxLength(4)
.withPattern("\\d+")
.read("Jira Issue");
}
if(!date) {
date = textIO.newStringInputReader()
.withMaxLength(10)
.withPattern("\\d\\d\\d\\d-\\d\\d-\\d\\d")
.read("Date");
}
TextTerminal terminal = textIO.getTextTerminal()
terminal.printf("\nResult: %s - FINERACT-%s - %s", version, issue, date)
}
// TODO: input validation, see FINERACT-1610
this.context?.project?['fineract.release.version'] = version
this.context?.project?['fineract.release.issue'] = issue
this.context?.project?['fineract.release.date'] = date
if(step.email) {
emailService.send( processEmailParams(step.email, this.context) )
}
}
}
// step 2
project.tasks.register("fineractReleaseStep2") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step2")
// TODO: implement this, see FINERACT-1611
printInstructions(project, "step2")
}
}
// step 3
project.tasks.register("fineractReleaseStep3") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step3")
String version = project.properties?['fineract.release.version']
String date = project.properties?['fineract.release.date']
if(!version || !date) {
TextIO textIO = TextIoFactory.getTextIO()
if(!version) {
version = textIO.newStringInputReader()
.withPattern("\\d+.\\d+.\\d+")
.read("Release Version");
}
if(!date) {
date = textIO.newStringInputReader()
.withMaxLength(10)
.withPattern("\\d\\d\\d\\d-\\d\\d-\\d\\d")
.read("Date");
}
TextTerminal terminal = textIO.getTextTerminal()
terminal.printf("\nResult: %s - %s", version, date)
}
// TODO: input validation, see FINERACT-1610
// TODO: create release branch, see FINERACT-1611
this.context?.project?['fineract.release.version'] = version
this.context?.project?['fineract.release.date'] = date
if(step.email) {
emailService.send( processEmailParams(step.email, this.context) )
}
}
}
// step 4
project.tasks.register("fineractReleaseStep4") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step4")
// TODO: implement this, see FINERACT-1611
printInstructions(project, "step4")
}
}
// step 5
project.tasks.register("fineractReleaseStep5") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step5")
String version = project.properties?['fineract.release.version']
if(!version) {
TextIO textIO = TextIoFactory.getTextIO()
if (!version) {
version = textIO.newStringInputReader()
.withPattern("\\d+.\\d+.\\d+")
.read("Release Version");
}
}
this.context?.project?['fineract.release.version'] = version
def params = processGitParams(step.git, this.context)
params.tag = params.tag?:version
gitService.createTag(params.tag, params.message)
}
}
// step 6
project.tasks.register("fineractReleaseStep6") {
dependsOn(":fineract-war:distTar")
}
// step 7
project.tasks.register("fineractReleaseStep7") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step7")
gpgService = new GpgService(extension.config.gpg)
gpgService.sign(step.gpg)
step.gpg.files.findAll {
gpgService.sha512(step.gpg)
}
}
}
// step 8
project.tasks.register("fineractReleaseStep8") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step8")
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
subversionService.checkout(step.subversion)
def directory = step.subversion.directory?:System.getProperty("java.io.tmpdir") + "/fineract-dist-dev"
def source = new File("fineract-war/build/distributions")
def target = new File("${directory}/${version}")
FileUtils.copyDirectory(source, target, true)
subversionService.commit(step.subversion)
}
}
// step 9
project.tasks.register("fineractReleaseStep9") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step9")
// TODO: implement this, see FINERACT-1611
printInstructions(project, "step9")
}
}
// step 10
project.tasks.register("fineractReleaseStep10") {
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) )
}
}
}
// step 11
project.tasks.register("fineractReleaseStep11") {
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) )
}
}
}
// step 12
project.tasks.register("fineractReleaseStep12") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step12")
// TODO: input validation, see FINERACT-1610
// TODO: implement this, see FINERACT-1817
printInstructions(project, "step12")
}
}
// step 13
project.tasks.register("fineractReleaseStep13") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step13")
// TODO: implement this, see FINERACT-1611
printInstructions(project, "step13")
}
}
// step 14
project.tasks.register("fineractReleaseStep14") {
doFirst {
FineractPluginExtension.FineractPluginStep step = step(extension, "step14")
// TODO: implement this, see FINERACT-1611
printInstructions(project, "step14")
}
}
// step 15
project.tasks.register("fineractReleaseStep15") {
doFirst {
log.warn("Release step 15: send email to announcement mailing list")
FineractPluginExtension.FineractPluginStep step = step(extension, "step15")
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
FineractPluginExtension.FineractPluginJiraParams issues = jiraService.search(step.jira)
def versions = jiraService.getProjectVersions(step.jira.projectId)
def filteredVersions = versions.findAll {
log.warn(">>>> VERSION: ${it.id} - ${it.name} - ${it.description}")
it.name == version
}
this.context?.project?['fineract.release.version'] = version
this.context?.project?['fineract.release.issues'] = issues.result
this.context?.project?['fineract.release.projectId'] = step.jira.projectId
this.context?.project?['fineract.release.versionId'] = filteredVersions[0]?.id
if(step.email) {
emailService.send( processEmailParams(step.email, this.context) )
}
}
}
}