提交 7d92266c authored 作者: Thomas Mueller's avatar Thomas Mueller

Automated build even if compiling (most of) the database fails. Low code coverage warning.

上级 1b096e2d
......@@ -673,7 +673,14 @@ public class Build extends BuildBase {
if (password == null) {
throw new RuntimeException("h2.ftpPassword not set");
}
String cp = "bin" + File.pathSeparator + "temp";
downloadTest();
FileList files = files("src/tools").keep("*/UploadBuild.java");
StringList args = args("-d", "temp", "-sourcepath", "src/tools" +
File.pathSeparator + "src/test" + File.pathSeparator + "src/main");
mkdir("temp");
javac(args, files);
String cp = "bin" + File.pathSeparator + "temp" +
File.pathSeparator + "ext/h2mig_pagestore_addon.jar";
exec("java", args("-Xmx128m", "-cp", cp,
"-Dh2.ftpPassword=" + password,
"org.h2.build.doc.UploadBuild"));
......
......@@ -12,13 +12,12 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.zip.CRC32;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
......@@ -26,8 +25,8 @@ import java.util.zip.ZipOutputStream;
import org.h2.dev.ftp.FtpClient;
import org.h2.engine.Constants;
import org.h2.test.utils.OutputCatcher;
import org.h2.tools.RunScript;
import org.h2.util.IOUtils;
import org.h2.util.ScriptReader;
import org.h2.util.StringUtils;
/**
......@@ -43,9 +42,19 @@ public class UploadBuild {
*/
public static void main(String... args) throws Exception {
System.setProperty("h2.socketConnectTimeout", "30000");
String password = System.getProperty("h2.ftpPassword");
if (password == null) {
return;
}
FtpClient ftp = FtpClient.open("h2database.com");
ftp.login("h2database", password);
ftp.changeWorkingDirectory("/httpdocs");
boolean coverage = new File("coverage/index.html").exists();
boolean coverageFailed;
if (coverage) {
byte[] data = IOUtils.readBytesAndClose(new FileInputStream("coverage/index.html"), -1);
String index = new String(data, "ISO-8859-1");
boolean coverageFailed = index.indexOf("CLASS=\"h\"") >= 0;
coverageFailed = index.indexOf("CLASS=\"h\"") >= 0;
while (true) {
int idx = index.indexOf("<A HREF=\"");
if (idx < 0) {
......@@ -67,19 +76,25 @@ public class UploadBuild {
IOUtils.delete("coverage.txt");
IOUtils.delete("details/coverage_files.zip");
IOUtils.delete("details");
String password = System.getProperty("h2.ftpPassword");
if (password == null) {
return;
}
FtpClient ftp = FtpClient.open("h2database.com");
ftp.login("h2database", password);
ftp.changeWorkingDirectory("/httpdocs");
if (ftp.exists("/httpdocs", "coverage")) {
ftp.removeDirectoryRecursive("/httpdocs/coverage");
}
ftp.makeDirectory("/httpdocs/coverage");
String testOutput = IOUtils.readStringAndClose(new FileReader("docs/html/testOutput.html"), -1);
boolean error = testOutput.indexOf(OutputCatcher.START_ERROR) >= 0;
} else {
coverageFailed = true;
}
String testOutput;
boolean error;
if (new File("docs/html/testOutput.html").exists()) {
testOutput = IOUtils.readStringAndClose(new FileReader("docs/html/testOutput.html"), -1);
error = testOutput.indexOf(OutputCatcher.START_ERROR) >= 0;
} else if (new File("log.txt").exists()) {
testOutput = IOUtils.readStringAndClose(new FileReader("log.txt"), -1);
error = true;
} else {
testOutput = "No log.txt";
error = true;
}
if (!ftp.exists("/httpdocs", "automated")) {
ftp.makeDirectory("/httpdocs/automated");
}
......@@ -106,27 +121,45 @@ public class UploadBuild {
" - <a href=\"http://www.h2database.com/coverage/overview.html\">Coverage</a>" +
" - <a href=\"http://www.h2database.com/automated/h2-latest.jar\">Jar</a>');\n";
buildSql += sql;
Connection conn;
try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:");
RunScript.execute(conn, new StringReader(buildSql));
InputStream in = new FileInputStream("src/tools/org/h2/build/doc/buildNewsfeed.sql");
ResultSet rs = RunScript.execute(conn, new InputStreamReader(in, "ISO-8859-1"));
in.close();
conn = DriverManager.getConnection("jdbc:h2:mem:");
} catch (Exception e) {
Class.forName("org.h2.upgrade.v1_1.Driver");
conn = DriverManager.getConnection("jdbc:h2v1_1:mem:");
}
conn.createStatement().execute(buildSql);
String newsfeed = IOUtils.readStringAndClose(new FileReader("src/tools/org/h2/build/doc/buildNewsfeed.sql"), -1);
ScriptReader r = new ScriptReader(new StringReader(newsfeed));
Statement stat = conn.createStatement();
ResultSet rs = null;
while (true) {
String s = r.readStatement();
if (s == null) {
break;
}
if (stat.execute(s)) {
rs = stat.getResultSet();
}
}
rs.next();
String content = rs.getString("content");
conn.close();
ftp.store("/httpdocs/automated/history.sql", new ByteArrayInputStream(buildSql.getBytes()));
ftp.store("/httpdocs/automated/news.xml", new ByteArrayInputStream(content.getBytes()));
ftp.store("/httpdocs/html/testOutput.html", new ByteArrayInputStream(testOutput.getBytes()));
ftp.store("/httpdocs/coverage/overview.html", new FileInputStream("coverage/overview.html"));
String jarFileName = "bin/h2-" + Constants.getVersion() + ".jar";
if (IOUtils.exists(jarFileName)) {
ftp.store("/httpdocs/automated/h2-latest.jar", new FileInputStream(jarFileName));
}
if (coverage) {
ftp.store("/httpdocs/coverage/overview.html", new FileInputStream("coverage/overview.html"));
ftp.store("/httpdocs/coverage/coverage.zip", new FileInputStream("coverage.zip"));
ftp.close();
IOUtils.delete("coverage.zip");
}
ftp.close();
}
private static void zip(String destFile, String directory, boolean storeOnly) throws IOException {
OutputStream out = new FileOutputStream(destFile);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论