From 83d69823a8bbee538827e1f1b277f19c9b739bb0 Mon Sep 17 00:00:00 2001 From: Renaud Pawlak Date: Mon, 31 Jul 2017 11:39:38 +0200 Subject: [PATCH] add the basis for bulk candy publishing --- candy-generator/pom.xml | 5 ++ .../main/java/org/jsweet/publisher/Main.java | 27 +++++++ .../publisher/visitor/GitCommitPush.java | 55 ++++++++++++++ .../org/jsweet/publisher/visitor/GitPull.java | 56 ++++++++++++++ .../jsweet/publisher/visitor/MvnClean.java | 47 ++++++++++++ .../jsweet/publisher/visitor/MvnDeploy.java | 55 ++++++++++++++ .../jsweet/publisher/visitor/RemoveExt.java | 52 +++++++++++++ .../publisher/visitor/UpdateVersion.java | 75 +++++++++++++++++++ .../publisher/visitor/package-info.java | 6 ++ 9 files changed, 378 insertions(+) create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/Main.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/GitCommitPush.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/GitPull.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnClean.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnDeploy.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/RemoveExt.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/UpdateVersion.java create mode 100644 candy-generator/src/main/java/org/jsweet/publisher/visitor/package-info.java diff --git a/candy-generator/pom.xml b/candy-generator/pom.xml index f1bd0ee8..4bfb5b54 100644 --- a/candy-generator/pom.xml +++ b/candy-generator/pom.xml @@ -181,6 +181,11 @@ + + org.cincheo + file-visitor + 1.0.0 + com.martiansoftware jsap diff --git a/candy-generator/src/main/java/org/jsweet/publisher/Main.java b/candy-generator/src/main/java/org/jsweet/publisher/Main.java new file mode 100644 index 00000000..297fa3f8 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/Main.java @@ -0,0 +1,27 @@ +package org.jsweet.publisher; + +import java.io.File; + +import org.cincheo.filevisitor.FileVisitor; +import org.jsweet.publisher.visitor.UpdateVersion; + +// THIS IS WIP. One day we will have a really automatized publisher for the JSweet Candies Github organization... +public class Main { + + public static String MAVEN_CMD = "/usr/local/bin/mvn"; + + public static void main(String[] args) { + File f = new File("/Users/renaudpawlak/git/candies"); + if (f.exists()) { + // FileVisitor[] fileVisitors = new FileVisitor[] { + // /*new UpdateFileVisitor(), */new RemoveExtFileVisitor(), new + // CommitFileVisitor() }; + // FileVisitor[] fileVisitors = new FileVisitor[] { new + // UpdateVersion("20170726", "rc1") }; + // FileVisitor[] fileVisitors = new FileVisitor[] { new MvnDeploy() + // }; + FileVisitor.scan(f, new UpdateVersion("20170726", "rc1")); + } + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitCommitPush.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitCommitPush.java new file mode 100644 index 00000000..1396e357 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitCommitPush.java @@ -0,0 +1,55 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; + +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; + +public class GitCommitPush implements FileVisitor { + + int count = 0; + int errorCount = 0; + + @Override + public void onBegin() { + System.out.println("=== Committing projects === "); + } + + @Override + public boolean visit(File file) { + try { + // System.out.println("visiting: " + file); + if (file.isDirectory() && new File(file, ".git").exists()) { + System.out.println(); + System.out.println(file + ": committing git project..."); + ProcessUtil.runCommand("git", file, false, (out) -> { + System.out.println(out); + }, (p1) -> { + count++; + System.out.println(file + ": pushing git project..."); + ProcessUtil.runCommand("git", file, false, (out) -> { + System.out.println(out); + }, (p2) -> { + }, () -> { + System.out.println("ERROR: cannot push project!"); + errorCount++; + }, "push", "origin", "master"); + }, () -> { + System.out.println("ERROR: cannot commit project!"); + errorCount++; + }, "commit", "-m", "publishing"); + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== " + count + " git project(s) updated successfully, " + errorCount + " error(s) ==="); + System.out.println(); + return errorCount == 0; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitPull.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitPull.java new file mode 100644 index 00000000..c0dc7993 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/GitPull.java @@ -0,0 +1,56 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; + +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; + +public class GitPull implements FileVisitor { + + int count = 0; + int errorCount = 0; + + @Override + public void onBegin() { + System.out.println("=== Updating projects === "); + } + + @Override + public boolean visit(File file) { + try { + // System.out.println("visiting: " + file); + if (file.isDirectory() && new File(file, ".git").exists()) { + System.out.println(); + System.out.println(file + ": cleaning git project..."); + ProcessUtil.runCommand("git", file, false, (out) -> { + System.out.println(out); + }, (p) -> { + count++; + }, () -> { + System.out.println("ERROR: cannot clean project!"); + errorCount++; + }, "clean", "-f", "-d"); + System.out.println(file + ": updating git project..."); + ProcessUtil.runCommand("git", file, false, (out) -> { + System.out.println(out); + }, (p) -> { + count++; + }, () -> { + System.out.println("ERROR: cannot pull project!"); + errorCount++; + }, "pull", "origin", "master"); + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== " + count + " git project(s) updated successfully, " + errorCount + " error(s) ==="); + System.out.println(); + return errorCount == 0; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnClean.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnClean.java new file mode 100644 index 00000000..bb8e7042 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnClean.java @@ -0,0 +1,47 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; + +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; +import org.jsweet.publisher.Main; + +public class MvnClean implements FileVisitor { + + int count = 0; + + @Override + public void onBegin() { + System.out.println("=== Clean === "); + } + + @Override + public boolean visit(File file) { + try { + // System.out.println("visiting: " + file); + if (file.isFile() && file.getName().equals("pom.xml")) { + + ProcessUtil.runCommand(Main.MAVEN_CMD, file.getParentFile(), false, (out) -> { + System.out.println(out); + }, (p1) -> { + }, () -> { + System.out.println("ERROR: cannot clean Maven directory"); + }, "clean"); + + count++; + + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== Cleaned " + count + " project(s) ==="); + System.out.println(); + return true; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnDeploy.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnDeploy.java new file mode 100644 index 00000000..7af4b784 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/MvnDeploy.java @@ -0,0 +1,55 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; + +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; +import org.jsweet.publisher.Main; + +public class MvnDeploy implements FileVisitor { + + int count = 0; + int errorCount = 0; + + @Override + public void onBegin() { + System.out.println("=== Deploy === "); + } + + @Override + public boolean visit(File file) { + try { + // System.out.println("visiting: " + file); + if (file.isFile() && file.getName().equals("pom.xml")) { + + ProcessUtil.runCommand("rm", file.getParentFile(), false, (out) -> { + System.out.println(out); + }, (p1) -> { + }, () -> { + System.out.println("ERROR: cannot clean resources"); + }, "-rf", "src/main/resources/META-INF/resources"); + + ProcessUtil.runCommand(Main.MAVEN_CMD, file.getParentFile(), false, (out) -> { + System.out.println(out); + }, (p1) -> { + count++; + }, () -> { + errorCount++; + System.out.println("ERROR: cannot deploy"); + }, "clean", "deploy"); + + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== Deployed " + count + " project(s), " + errorCount + " error(s) ==="); + System.out.println(); + return true; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/RemoveExt.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/RemoveExt.java new file mode 100644 index 00000000..c2cd3539 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/RemoveExt.java @@ -0,0 +1,52 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; + +import org.apache.commons.io.FileUtils; +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; + +public class RemoveExt implements FileVisitor { + + int count = 0; + + @Override + public void onBegin() { + System.out.println("=== Removing ext in group id === "); + } + + @Override + public boolean visit(File file) { + try { + //System.out.println("visiting: " + file); + if (file.isFile() && file.getName().equals("pom.xml")) { + String content = FileUtils.readFileToString(file); + if (content.contains("org.jsweet.candies.ext")) { + System.out.println(file+": removing ext in group"); + content = content.replace("org.jsweet.candies.ext", + "org.jsweet.candies"); + FileUtils.writeStringToFile(file, content); + count++; + } + ProcessUtil.runCommand("git", file.getParentFile(), false, (out) -> { + System.out.println(out); + }, (p1) -> { + }, () -> { + System.out.println("ERROR: cannot add file"); + }, "add", file.toString()); + + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== Removed " + count + " ext ==="); + System.out.println(); + return true; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/UpdateVersion.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/UpdateVersion.java new file mode 100644 index 00000000..b4d25795 --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/UpdateVersion.java @@ -0,0 +1,75 @@ +package org.jsweet.publisher.visitor; + +import java.io.File; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.commons.io.FileUtils; +import org.cincheo.filevisitor.FileVisitor; +import org.cincheo.filevisitor.ProcessUtil; + +public class UpdateVersion implements FileVisitor { + + String version; + String transpilerVersion; + + Pattern artifactVersionPattern = Pattern.compile("(\\d*.\\d*.\\d*-)(\\w*)(\\s*)"); + Pattern versionPattern = Pattern.compile("(\\d*.\\d*.\\d*-)(\\w*)()"); + Pattern coreVersionPattern = Pattern.compile("(\\d*-)(\\w*)()"); + Pattern transpilerVersionPattern = Pattern + .compile("(jsweet-maven-plugin\\s*\\d*.\\d*.\\d*-)(\\w*)()"); + + public UpdateVersion(String version, String transpilerVersion) { + this.version = version; + this.transpilerVersion = transpilerVersion; + } + + int count = 0; + + @Override + public void onBegin() { + System.out.println("=== Updating version === "); + } + + @Override + public boolean visit(File file) { + try { + // System.out.println("visiting: " + file); + if (file.isFile() && file.getName().equals("pom.xml")) { + System.out.println("update version: " + file); + String content = FileUtils.readFileToString(file); + Matcher m = artifactVersionPattern.matcher(content); + if (!m.find()) { + throw new RuntimeException("wrong version"); + } + m = versionPattern.matcher(content); + content = m.replaceAll("$1" + version + "$3"); + m = coreVersionPattern.matcher(content); + content = m.replaceAll("$1" + version + "$3"); + m = transpilerVersionPattern.matcher(content); + content = m.replaceAll("$1" + transpilerVersion + "$3"); + FileUtils.writeStringToFile(file, content); + count++; + + ProcessUtil.runCommand("git", file.getParentFile(), false, (out) -> { + System.out.println(out); + }, (p1) -> { + }, () -> { + System.out.println("ERROR: cannot add file"); + }, "add", file.toString()); + + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean onEnd() { + System.out.println("=== Updated " + count + " project versions ==="); + System.out.println(); + return true; + } + +} diff --git a/candy-generator/src/main/java/org/jsweet/publisher/visitor/package-info.java b/candy-generator/src/main/java/org/jsweet/publisher/visitor/package-info.java new file mode 100644 index 00000000..95674d3d --- /dev/null +++ b/candy-generator/src/main/java/org/jsweet/publisher/visitor/package-info.java @@ -0,0 +1,6 @@ +/** + * Contains all the visitors for publishing the candies. + * + * @author Renaud Pawlak + */ +package org.jsweet.publisher.visitor; \ No newline at end of file