diff --git a/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/Env.java b/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/Env.java index 453b6fc..78d24d2 100644 --- a/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/Env.java +++ b/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/Env.java @@ -15,6 +15,7 @@ public enum EnvVars{ ENV_EXECUTOR_COMPILER_NEED("ENV_EXECUTOR_COMPILER_NEED"), ENV_EXECUTOR_RUN_COMMAND("ENV_EXECUTOR_RUN_COMMAND"), ENV_EXECUTOR_WITH_FILENAME("ENV_EXECUTOR_WITH_FILENAME"), + ENV_EXECUTOR_WITH_BOM("ENV_EXECUTOR_WITH_BOM"), ; private final String value; @@ -40,6 +41,7 @@ public String getValue() { defaultEnv.put(EnvVars.ENV_EXECUTOR_ENABLE.value, "false"); defaultEnv.put(EnvVars.ENV_EXECUTOR_FILENAME.value, "Main.java"); defaultEnv.put(EnvVars.ENV_EXECUTOR_WITH_FILENAME.value, "true"); + defaultEnv.put(EnvVars.ENV_EXECUTOR_WITH_BOM.value, "false"); } public static String get(String key) { diff --git a/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/core/ExecutionManager.java b/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/core/ExecutionManager.java index d1b2318..9d0575f 100644 --- a/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/core/ExecutionManager.java +++ b/PROGRAM_CHECK_SYSTEM/src/main/java/ru/doctorixx/core/ExecutionManager.java @@ -1,11 +1,17 @@ package ru.doctorixx.core; +import ru.doctorixx.Env; import ru.doctorixx.core.executors.CommandExecutor; import ru.doctorixx.core.structures.ProgramResult; import ru.doctorixx.core.utils.FileUtils; import java.io.File; +import java.io.FileOutputStream; import java.io.FileWriter; +import java.io.OutputStreamWriter; +import java.nio.charset.StandardCharsets; + +import static ru.doctorixx.Env.EnvVars.ENV_EXECUTOR_WITH_BOM; public class ExecutionManager { @@ -57,7 +63,14 @@ private ProgramResult execute(int runId) { fileData = executor.mutateProgramBeforeRun(fileData); - try (FileWriter writer = new FileWriter(new File(tempdir, executor.getFilename()))) { + try (OutputStreamWriter writer = new OutputStreamWriter( + new FileOutputStream(new File(tempdir, executor.getFilename())), StandardCharsets.UTF_8)) { + + boolean useBOM = Env.get(ENV_EXECUTOR_WITH_BOM).equals("true"); + if (useBOM) { + writer.write('\ufeff'); // Записываем BOM (0xEF, 0xBB, 0xBF) + } + writer.write(fileData); writer.flush(); } diff --git a/docker-compose.yml b/docker-compose.yml index 7b82882..f79ea31 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -123,6 +123,16 @@ services: - with-internet - no-internet +# checker-kumir: +# build: +# dockerfile: z_checkers_dockerfiles/Kumir.Dockerfile +# image: ghcr.io/codebattles-nn/checker-kumir +# restart: unless-stopped +# networks: +# - with-internet +# - no-internet + + # checker-cpp: # build: # dockerfile: ./CPP.Dockerfile diff --git a/z_checkers_dockerfiles/Kumir.Dockerfile b/z_checkers_dockerfiles/Kumir.Dockerfile new file mode 100644 index 0000000..79e60ce --- /dev/null +++ b/z_checkers_dockerfiles/Kumir.Dockerfile @@ -0,0 +1,28 @@ +# +# Build stage +# +FROM maven:3.9.6-eclipse-temurin-21-alpine AS build +COPY ../PROGRAM_CHECK_SYSTEM/src /home/app/src +COPY ../PROGRAM_CHECK_SYSTEM/pom.xml /home/app +RUN mvn -f /home/app/pom.xml clean package + +# +# Package stage +# +FROM alt:p11 + +RUN apt-get update && apt-get -y --fix-missing install kumir2 java-17-openjdk-headless + +COPY --from=build /home/app/target/ProgramCheckSystem-1.0-SNAPSHOT.jar /usr/local/lib/demo.jar + +ENV SERVER_ENDPOINT http://backend:8000/api/check_system_callback +ENV ENV_EXECUTOR_ENABLE true +ENV ENV_EXECUTOR_COMPILER_NEED true +ENV ENV_EXECUTOR_COMPILER_COMMAND "kumir2-bc prog.kum" +ENV ENV_EXECUTOR_FILENAME prog.kum +ENV ENV_EXECUTOR_WITH_FILENAME false +ENV ENV_EXECUTOR_RUN_COMMAND "kumir2-xrun prog.kod" +ENV ENV_EXECUTOR_WITH_BOM true + +EXPOSE 7070 +ENTRYPOINT ["java","-jar","/usr/local/lib/demo.jar"] \ No newline at end of file