Make build-all-images work on arm

This commit is contained in:
nicolas.dorier
2018-12-02 17:06:36 +09:00
parent c9a0454034
commit c84ab3f4fc
4 changed files with 237 additions and 55 deletions

View File

@@ -53,21 +53,58 @@ namespace DockerFileBuildHelper
var canDownloadEverything = downloading.All(o => o.Result);
if (!canDownloadEverything)
return false;
StringBuilder builder = new StringBuilder();
var builder = new StringBuilderEx();
builder.AppendLine("#!/bin/bash");
builder.AppendLine();
builder.AppendLine("# This file is automatically generated by the DockerFileBuildHelper tool, run DockerFileBuildHelper/update-repo.sh to update it");
builder.AppendLine("set -e");
builder.AppendLine("DOCKERFILE=\"\"");
builder.AppendLine();
builder.AppendLine();
foreach (var info in dockerInfos)
{
builder.AppendLine($"# Build {info.Image.Name}");
bool mightBeUnavailable = false;
if (info.DockerFilePath != null)
{
var dockerFile = DockerFile.Parse(info.DockerFilePath);
builder.AppendLine($"# {info.GetGithubLinkOf(dockerFile.DockerFullPath)}");
builder.AppendLine($"DOCKERFILE=\"{dockerFile.DockerFullPath}\"");
}
else
{
builder.AppendLine($"DOCKERFILE=\"\"");
mightBeUnavailable = true;
}
if (info.DockerFilePathARM32v7 != null)
{
var dockerFile = DockerFile.Parse(info.DockerFilePathARM32v7);
builder.AppendLine($"# {info.GetGithubLinkOf(dockerFile.DockerFullPath)}");
builder.AppendLine($"[[ \"$(uname -m)\" == \"armv7l\" ]] && DOCKERFILE=\"{dockerFile.DockerFullPath}\"");
}
if (info.DockerFilePathARM64v8 != null)
{
var dockerFile = DockerFile.Parse(info.DockerFilePathARM64v8);
builder.AppendLine($"# {info.GetGithubLinkOf(dockerFile.DockerFullPath)}");
builder.AppendLine($"[[ \"$(uname -m)\" == \"aarch64\" ]] && DOCKERFILE=\"{dockerFile.DockerFullPath}\"");
}
if(mightBeUnavailable)
{
builder.AppendLine($"if [[ \"$DOCKERFILE\" ]]; then");
builder.Indent++;
}
builder.AppendLine($"echo \"Building {info.Image.ToString()}\"");
builder.AppendLine($"git clone {info.GitLink} {info.Image.Name}");
var dockerFile = DockerFile.Parse($"{info.DockerFilePath ?? info.DockerFilePathARM32v7 ?? info.DockerFilePathARM64v8}");
builder.AppendLine($"cd {info.Image.Name}");
builder.AppendLine($"git checkout {info.GitRef}");
builder.AppendLine($"cd {dockerFile.DockerFilePath}");
builder.AppendLine($"docker build -f \"{dockerFile.DockerFileName}\" -t \"{info.Image}\" .");
builder.AppendLine($"cd \"$(dirname $DOCKERFILE)\"");
builder.AppendLine($"docker build -f \"$DOCKERFILE\" -t \"{info.Image}\" .");
builder.AppendLine($"cd - && cd ..");
if (mightBeUnavailable)
{
builder.Indent--;
builder.AppendLine($"fi");
}
builder.AppendLine();
builder.AppendLine();
}