mirror of
https://github.com/google/nomulus.git
synced 2025-06-29 07:43:37 +02:00
Zip report folders that don't have a clear entry point
This is mostly for build reports that use xml or other non-browsable format. Most notable - the JUnit xml test results. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=236118885
This commit is contained in:
parent
d3a6d5483e
commit
f12d368da3
3 changed files with 32 additions and 18 deletions
|
@ -25,6 +25,7 @@ import com.google.common.collect.Streams;
|
||||||
import com.google.common.io.Files;
|
import com.google.common.io.Files;
|
||||||
import com.google.common.io.Resources;
|
import com.google.common.io.Resources;
|
||||||
import google.registry.gradle.plugin.ProjectData.TaskData.ReportFiles;
|
import google.registry.gradle.plugin.ProjectData.TaskData.ReportFiles;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UncheckedIOException;
|
import java.io.UncheckedIOException;
|
||||||
|
@ -33,7 +34,8 @@ import java.nio.file.Path;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
/** Utility functions used in the GCS plugin. */
|
/** Utility functions used in the GCS plugin. */
|
||||||
final class GcsPluginUtils {
|
final class GcsPluginUtils {
|
||||||
|
@ -150,8 +152,7 @@ final class GcsPluginUtils {
|
||||||
if (destination.isFile()) {
|
if (destination.isFile()) {
|
||||||
// The destination is a single file - find its root, and add this single file to the
|
// The destination is a single file - find its root, and add this single file to the
|
||||||
// ReportFiles.
|
// ReportFiles.
|
||||||
return ReportFiles.create(
|
return ReportFiles.createSingleFile(destinationPath, toByteArraySupplier(destination));
|
||||||
ImmutableMap.of(destinationPath, toByteArraySupplier(destination)), destinationPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!destination.isDirectory()) {
|
if (!destination.isDirectory()) {
|
||||||
|
@ -189,17 +190,26 @@ final class GcsPluginUtils {
|
||||||
|
|
||||||
// We weren't given an appropriate entry point. But we still need a single link to all this data
|
// We weren't given an appropriate entry point. But we still need a single link to all this data
|
||||||
// - so we'll zip it and just host a single file.
|
// - so we'll zip it and just host a single file.
|
||||||
//
|
Path zipFilePath = destinationPath.resolve(destinationPath.getFileName().toString() + ".zip");
|
||||||
// TODO(guyben):the zip part is still unimplemented, but what we'll want to do is this:
|
return ReportFiles.createSingleFile(zipFilePath, createZippedByteArraySupplier(files));
|
||||||
// Supplier<byte[]> zippedSupplier = createZippedByteArraySupplier(files);
|
}
|
||||||
// Path zipFilePath = rootFolder.resolve(rootFolder.getFileName().toString() + ".zip");
|
|
||||||
// return ReportFiles.create(ImmutableMap.of(zipFilePath, zippedSupplier), zipFilePath);
|
static Supplier<byte[]> createZippedByteArraySupplier(Map<Path, Supplier<byte[]>> files) {
|
||||||
Path unimplementedPath = destinationPath.resolve("unimplemented.txt");
|
return () -> zipFiles(files);
|
||||||
String content =
|
}
|
||||||
"Zip files are currently unimplemented. Files:\n"
|
|
||||||
+ files.keySet().stream().map(Object::toString).collect(Collectors.joining("\n"));
|
private static byte[] zipFiles(Map<Path, Supplier<byte[]>> files) {
|
||||||
return ReportFiles.create(
|
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||||
ImmutableMap.of(unimplementedPath, toByteArraySupplier(content)), unimplementedPath);
|
try (ZipOutputStream zip = new ZipOutputStream(output)) {
|
||||||
|
for (Path path : files.keySet()) {
|
||||||
|
zip.putNextEntry(new ZipEntry(path.toString()));
|
||||||
|
zip.write(files.get(path).get());
|
||||||
|
zip.closeEntry();
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UncheckedIOException(e);
|
||||||
|
}
|
||||||
|
return output.toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private GcsPluginUtils() {}
|
private GcsPluginUtils() {}
|
||||||
|
|
|
@ -164,6 +164,10 @@ abstract class ProjectData {
|
||||||
checkArgument(files.isEmpty() || files.containsKey(entryPoint));
|
checkArgument(files.isEmpty() || files.containsKey(entryPoint));
|
||||||
return new AutoValue_ProjectData_TaskData_ReportFiles(files, entryPoint);
|
return new AutoValue_ProjectData_TaskData_ReportFiles(files, entryPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ReportFiles createSingleFile(Path path, Supplier<byte[]> data) {
|
||||||
|
return create(ImmutableMap.of(path, data), path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,8 +229,8 @@ public final class GcsPluginUtilsTest {
|
||||||
|
|
||||||
ReportFiles files = createReportFiles(destination, Optional.empty(), root);
|
ReportFiles files = createReportFiles(destination, Optional.empty(), root);
|
||||||
|
|
||||||
assertThat(files.entryPoint().toString()).isEqualTo("some/path/unimplemented.txt");
|
assertThat(files.entryPoint().toString()).isEqualTo("some/path/path.zip");
|
||||||
assertThat(readAllFiles(files).keySet()).containsExactly("some/path/unimplemented.txt");
|
assertThat(readAllFiles(files).keySet()).containsExactly("some/path/path.zip");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -257,8 +257,8 @@ public final class GcsPluginUtilsTest {
|
||||||
|
|
||||||
ReportFiles files = createReportFiles(destination, Optional.of(badEntryPoint), root);
|
ReportFiles files = createReportFiles(destination, Optional.of(badEntryPoint), root);
|
||||||
|
|
||||||
assertThat(files.entryPoint().toString()).isEqualTo("some/path/unimplemented.txt");
|
assertThat(files.entryPoint().toString()).isEqualTo("some/path/path.zip");
|
||||||
assertThat(readAllFiles(files).keySet()).containsExactly("some/path/unimplemented.txt");
|
assertThat(readAllFiles(files).keySet()).containsExactly("some/path/path.zip");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue