мпаиуцагцкмпцкмпгшк
All checks were successful
Build and Push Docker Images / build (src/LiquidCode.Tester.Gateway/Dockerfile, git.nullptr.top/liquidcode/liquidcode-tester-gateway-roman, gateway) (push) Successful in 52s
Build and Push Docker Images / build (src/LiquidCode.Tester.Worker/Dockerfile, git.nullptr.top/liquidcode/liquidcode-tester-worker-roman, worker) (push) Successful in 1m5s

This commit is contained in:
2025-11-05 22:32:22 +03:00
parent 6ed26ae29b
commit 7f8eb875f9
2 changed files with 6350 additions and 7 deletions

View File

@@ -1,4 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using LiquidCode.Tester.Worker.Services.Isolate;
using LiquidCode.Tester.Worker.Models;
@@ -85,21 +87,68 @@ public class CppCompilationServiceIsolate : ICompilationService
File.Copy(sourceFilePath, boxSourcePath, overwrite: true);
// Copy common headers from the source directory (e.g., testlib.h)
var sourceDirectory = Path.GetDirectoryName(sourceFilePath);
if (!string.IsNullOrEmpty(sourceDirectory) && Directory.Exists(sourceDirectory))
{
foreach (var header in Directory.EnumerateFiles(sourceDirectory))
{
if (string.Equals(header, sourceFilePath, StringComparison.OrdinalIgnoreCase))
{
continue;
}
var extension = Path.GetExtension(header);
if (extension is ".h" or ".hpp" or ".hh" or ".hxx" or ".h++" or ".inl" or ".tcc" )
{
var destination = Path.Combine(boxDir, Path.GetFileName(header));
File.Copy(header, destination, overwrite: true);
}
}
}
// Resolve compiler and flags
var (compiler, compilerFlags) = ResolveVersion(version);
_logger.LogDebug("Using compiler: {Compiler} with flags: {Flags}", compiler, string.Join(' ', compilerFlags));
// Build compiler arguments
var arguments = new List<string>(compilerFlags);
var directoryBindings = new List<DirectoryBinding>
{
new DirectoryBinding { HostPath = "/usr/include", SandboxPath = "/usr/include", ReadOnly = true },
new DirectoryBinding { HostPath = "/usr/lib", SandboxPath = "/usr/lib", ReadOnly = true },
new DirectoryBinding { HostPath = "/lib", SandboxPath = "/lib", ReadOnly = true }
};
// Add include directories
if (includeDirectories != null)
{
foreach (var includeDir in includeDirectories.Where(d => !string.IsNullOrWhiteSpace(d)))
{
var resolvedIncludeDir = includeDir;
if (!Path.IsPathRooted(resolvedIncludeDir))
{
var baseDir = sourceDirectory ?? Directory.GetCurrentDirectory();
resolvedIncludeDir = Path.GetFullPath(Path.Combine(baseDir, includeDir));
}
if (Directory.Exists(resolvedIncludeDir))
{
arguments.Add($"-I{resolvedIncludeDir}");
directoryBindings.Add(new DirectoryBinding
{
HostPath = resolvedIncludeDir,
SandboxPath = resolvedIncludeDir,
ReadOnly = true
});
}
else
{
arguments.Add($"-I{includeDir}");
}
}
}
// Add additional flags
if (additionalFlags != null)
@@ -133,12 +182,7 @@ public class CppCompilationServiceIsolate : ICompilationService
EnableNetwork = false,
StderrFile = stderrFilePath,
WorkingDirectory = "/box",
DirectoryBindings = new List<DirectoryBinding>
{
new DirectoryBinding { HostPath = "/usr/include", SandboxPath = "/usr/include", ReadOnly = true },
new DirectoryBinding { HostPath = "/usr/lib", SandboxPath = "/usr/lib", ReadOnly = true },
new DirectoryBinding { HostPath = "/lib", SandboxPath = "/lib", ReadOnly = true }
}
DirectoryBindings = directoryBindings
});
// Read compiler output

6299
testlib.h Normal file

File diff suppressed because it is too large Load Diff