[web] Using strings instead of template dir
This commit is contained in:
parent
2e11b32903
commit
8b4309e52b
@ -1,27 +1,25 @@
|
|||||||
import { db } from '$lib/server/prisma';
|
import { db } from '$lib/server/prisma';
|
||||||
import hostFs from 'fs-extra';
|
|
||||||
import memfs, { createFsFromVolume } from 'memfs';
|
import memfs, { createFsFromVolume } from 'memfs';
|
||||||
import { join } from 'path';
|
import { join } from 'path';
|
||||||
import git from 'isomorphic-git';
|
import git from 'isomorphic-git';
|
||||||
import { dirname } from 'path';
|
|
||||||
import { fileURLToPath } from 'url';
|
|
||||||
import http from 'isomorphic-git/http/node';
|
import http from 'isomorphic-git/http/node';
|
||||||
|
import {
|
||||||
|
templateCSharpGitIgnore,
|
||||||
|
templateCSharpProblem,
|
||||||
|
templateCSharpProblemProj,
|
||||||
|
templateJavaProblem
|
||||||
|
} from './templates';
|
||||||
|
|
||||||
type OptsAddProblems = {
|
type OptsAddProblems = {
|
||||||
fs: memfs.IFs;
|
fs: memfs.IFs;
|
||||||
templateDir: string;
|
|
||||||
dir: string;
|
dir: string;
|
||||||
contest: { problems: { pascalName: string }[] };
|
contest: { problems: { pascalName: string }[] };
|
||||||
};
|
};
|
||||||
|
|
||||||
async function addProblemsJava(opts: OptsAddProblems) {
|
async function addProblemsJava(opts: OptsAddProblems) {
|
||||||
const template = hostFs
|
|
||||||
.readFileSync(join(opts.templateDir, 'java/problem/problem.java'))
|
|
||||||
.toString();
|
|
||||||
|
|
||||||
opts.contest.problems.forEach((problem) => {
|
opts.contest.problems.forEach((problem) => {
|
||||||
opts.fs.mkdirSync(join(opts.dir, problem.pascalName));
|
opts.fs.mkdirSync(join(opts.dir, problem.pascalName));
|
||||||
const filledTemplate = template.replaceAll('%%pascalName%%', problem.pascalName);
|
const filledTemplate = templateJavaProblem.replaceAll('%%pascalName%%', problem.pascalName);
|
||||||
opts.fs.writeFileSync(
|
opts.fs.writeFileSync(
|
||||||
join(opts.dir, problem.pascalName, `${problem.pascalName}.java`),
|
join(opts.dir, problem.pascalName, `${problem.pascalName}.java`),
|
||||||
filledTemplate
|
filledTemplate
|
||||||
@ -30,19 +28,13 @@ async function addProblemsJava(opts: OptsAddProblems) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function addProblemsCSharp(opts: OptsAddProblems) {
|
async function addProblemsCSharp(opts: OptsAddProblems) {
|
||||||
const project = hostFs
|
|
||||||
.readFileSync(join(opts.templateDir, 'csharp/problem/problem.csproj'))
|
|
||||||
.toString();
|
|
||||||
const template = hostFs
|
|
||||||
.readFileSync(join(opts.templateDir, 'csharp/problem/problem.cs'))
|
|
||||||
.toString();
|
|
||||||
opts.contest.problems.forEach((problem) => {
|
opts.contest.problems.forEach((problem) => {
|
||||||
opts.fs.mkdirSync(join(opts.dir, problem.pascalName));
|
opts.fs.mkdirSync(join(opts.dir, problem.pascalName));
|
||||||
opts.fs.writeFileSync(
|
opts.fs.writeFileSync(
|
||||||
join(opts.dir, problem.pascalName, `${problem.pascalName}.csproj`),
|
join(opts.dir, problem.pascalName, `${problem.pascalName}.csproj`),
|
||||||
project
|
templateCSharpProblemProj
|
||||||
);
|
);
|
||||||
const filledTemplate = template.replaceAll('%%pascalName%%', problem.pascalName);
|
const filledTemplate = templateCSharpProblem.replaceAll('%%pascalName%%', problem.pascalName);
|
||||||
opts.fs.writeFileSync(
|
opts.fs.writeFileSync(
|
||||||
join(opts.dir, problem.pascalName, `${problem.pascalName}.cs`),
|
join(opts.dir, problem.pascalName, `${problem.pascalName}.cs`),
|
||||||
filledTemplate
|
filledTemplate
|
||||||
@ -63,17 +55,14 @@ export async function createRepos(contestId: number) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const templateDir = join(dirname(fileURLToPath(import.meta.url)), '../../../templates');
|
|
||||||
|
|
||||||
contest.teams.forEach(async (team) => {
|
contest.teams.forEach(async (team) => {
|
||||||
fs.mkdirSync(team.id.toString(), { recursive: true });
|
fs.mkdirSync(team.id.toString(), { recursive: true });
|
||||||
await git.init({ fs: fs, bare: false, defaultBranch: 'master', dir: team.id.toString() });
|
await git.init({ fs: fs, bare: false, defaultBranch: 'master', dir: team.id.toString() });
|
||||||
if (team.language === 'Java') {
|
if (team.language === 'Java') {
|
||||||
addProblemsJava({ fs, templateDir, dir: team.id.toString(), contest });
|
addProblemsJava({ fs, dir: team.id.toString(), contest });
|
||||||
} else if (team.language === 'CSharp') {
|
} else if (team.language === 'CSharp') {
|
||||||
addProblemsCSharp({ fs, templateDir, dir: team.id.toString(), contest });
|
addProblemsCSharp({ fs, dir: team.id.toString(), contest });
|
||||||
const gitignore = hostFs.readFileSync(join(templateDir, 'csharp/.gitignore')).toString();
|
fs.writeFileSync(join(team.id.toString(), '.gitignore'), templateCSharpGitIgnore);
|
||||||
fs.writeFileSync(join(team.id.toString(), '.gitignore'), gitignore);
|
|
||||||
} else {
|
} else {
|
||||||
console.error('Language not supported');
|
console.error('Language not supported');
|
||||||
return;
|
return;
|
||||||
@ -89,7 +78,9 @@ export async function createRepos(contestId: number) {
|
|||||||
fs: fs,
|
fs: fs,
|
||||||
http,
|
http,
|
||||||
dir: team.id.toString(),
|
dir: team.id.toString(),
|
||||||
url: `http://localhost:${process.env.GIT_PORT}/${contest.id.toString()}/${team.id.toString()}`
|
url: `http://localhost:${
|
||||||
|
process.env.GIT_PORT ?? 7006
|
||||||
|
}/${contest.id.toString()}/${team.id.toString()}`
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
28
web/src/lib/server/templates.ts
Normal file
28
web/src/lib/server/templates.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
export const templateJavaProblem = `public class %%pascalName%% {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println("Hello %%pascalName%%!");
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
export const templateCSharpGitIgnore = `*.sln
|
||||||
|
**/bin
|
||||||
|
**/obj`;
|
||||||
|
|
||||||
|
export const templateCSharpProblem = `public class %%pascalName%%
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello %%pascalName%%!");
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
export const templateCSharpProblemProj = `<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>`;
|
3
web/templates/csharp/.gitignore
vendored
3
web/templates/csharp/.gitignore
vendored
@ -1,3 +0,0 @@
|
|||||||
*.sln
|
|
||||||
**/bin
|
|
||||||
**/obj
|
|
@ -1,7 +0,0 @@
|
|||||||
public class %%pascalName%%
|
|
||||||
{
|
|
||||||
static void Main(string[] args)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Hello %%pascalName%%!");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>Exe</OutputType>
|
|
||||||
<TargetFramework>net7.0</TargetFramework>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
@ -1,5 +0,0 @@
|
|||||||
public class %%pascalName%% {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
System.out.println("Hello %%pascalName%%!");
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user