mirror of
https://onedev.site.tesses.net/crosslang/crosslangextras
synced 2026-02-08 09:05:46 +00:00
Get far on package manager
This commit is contained in:
@@ -14,7 +14,7 @@ jobs:
|
||||
image: onedev.site.tesses.net/crosslang/crosslang:latest
|
||||
interpreter: !DefaultInterpreter
|
||||
commands: |
|
||||
bash ./pack.sh
|
||||
crossint ./build.tcross pack
|
||||
useTTY: true
|
||||
condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
|
||||
- !PublishArtifactStep
|
||||
|
||||
@@ -6,10 +6,15 @@
|
||||
|
||||
# To Build
|
||||
```bash
|
||||
./script.sh
|
||||
crossint ./build.tcross
|
||||
```
|
||||
|
||||
# To Install
|
||||
```bash
|
||||
./install.sh
|
||||
crossint ./build.tcross install
|
||||
```
|
||||
|
||||
# To Pack
|
||||
```bash
|
||||
crossint ./build.tcross pack
|
||||
```
|
||||
@@ -50,14 +50,16 @@ func Tesses.CrossLang.PackageManager()
|
||||
ParseFileName,
|
||||
GetPackageServers = ()=>{
|
||||
var packageConfigFile = configRoot / "package_servers.json";
|
||||
|
||||
if(FS.Local.RegularFileExists(packageConfigFile))
|
||||
{
|
||||
return Json.Decode(FileReadString(FS.Local, packageConfigFile));
|
||||
return Json.Decode(FS.ReadAllText(FS.Local, packageConfigFile));
|
||||
}
|
||||
return ["https://cpkg.tesseslanguage.com/"];
|
||||
},
|
||||
GetPackage = (this,name, version) =>
|
||||
{
|
||||
|
||||
var v = Version.Parse(version);
|
||||
var useCache = v.Stage != "dev";
|
||||
var pkgFile = packageCache / name / v.ToString();
|
||||
@@ -71,6 +73,7 @@ func Tesses.CrossLang.PackageManager()
|
||||
{
|
||||
//https://cpkg.tesseslanguage.com/api/v1/download?name=MyPackage&version=1.0.0.0-prod
|
||||
var uri = $"{item.TrimEnd('/')}/api/v1/download?name={Net.Http.UrlEncode(name)}&version={Net.Http.UrlEncode(version)}";
|
||||
Console.WriteLine($"Downloading: {name} {version} from {item}");
|
||||
var req = Net.Http.MakeRequest(uri);
|
||||
if(req.StatusCode == 200)
|
||||
{
|
||||
|
||||
@@ -11,15 +11,6 @@ func Tesses.CrossLang.BuildTool(pm)
|
||||
|
||||
return {
|
||||
DirectoriesCompiled = [],
|
||||
FileReadString = (fs,path) =>{
|
||||
var f = fs.OpenFile(path,"rb");
|
||||
var ms = FS.MemoryStream(true);
|
||||
f.CopyTo(ms);
|
||||
var text = ms.GetBytes().ToString();
|
||||
f.Close();
|
||||
ms.Close();
|
||||
return text;
|
||||
},
|
||||
GetPackageDependencies = (this,name,version,dir)=>{
|
||||
var dep = pm.GetPackage(name,version);
|
||||
if(TypeOf(dep) == "Null") throw $"Package {name} with version {version} does not exist";
|
||||
@@ -68,7 +59,7 @@ func Tesses.CrossLang.BuildTool(pm)
|
||||
var crossConf = dir / "cross.json";
|
||||
if(FS.Local.FileExists(crossConf))
|
||||
{
|
||||
var configData = Json.Decode(this.FileReadString(FS.Local,crossConf));
|
||||
var configData = Json.Decode(FS.ReadAllText(FS.Local,crossConf));
|
||||
var info = {type = "console"};
|
||||
var name = "out";
|
||||
var version = "1.0.0.0-prod";
|
||||
@@ -221,7 +212,7 @@ func Tesses.CrossLang.BuildTool(pm)
|
||||
{
|
||||
var src = {
|
||||
FileName = file.ToString(),
|
||||
Source = this.FileReadString(FS.Local, file)
|
||||
Source = FS.ReadAllText(FS.Local, file)
|
||||
};
|
||||
sources.Add(src);
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<?component() name="Counter" ?>
|
||||
<p>Count is <?expr count++ ?></p>
|
||||
<?end?>
|
||||
@@ -1,36 +0,0 @@
|
||||
<?resource name="simple.min.css" route="/css/simple.min.css" ?>
|
||||
<?resource name="favicon.ico" route="/favicon.ico" ?>
|
||||
<?component(title,pages,body) name="Shell" ?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Tesses.CrossLang.PackageServer - <?expr Net.Http.HtmlEncode(title) ?></title>
|
||||
<link rel="stylesheet" href="./css/simple.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Tesses.CrossLang.PackageServer</h1>
|
||||
<nav>
|
||||
<ul>
|
||||
<?code
|
||||
each(var item : pages)
|
||||
{
|
||||
?>
|
||||
<li><a <?code if(item.active) { ?> aria-current="page" <?code } ?> href="<?expr Net.Http.UrlPathEncode(item.route) ?>"><?expr Net.Http.HtmlEncode(item.text) ?></a></li>
|
||||
<?code
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<h1><?expr Net.Http.HtmlEncode(title) ?></h1>
|
||||
<?body?>
|
||||
<?end?>
|
||||
<footer>
|
||||
<p>Created using <a href="https://crosslang.tesseslanguage.com/">CrossLang</a> and <a href="https://simplecss.org/">SimpleCSS</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
<?end?>
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"project_dependencies": ["../Tesses.CrossLang.Markup"],
|
||||
|
||||
"info": {
|
||||
"type": "console"
|
||||
},
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?page() route="/about" ?>
|
||||
<?code
|
||||
var pages = [
|
||||
{
|
||||
active = false,
|
||||
route = "/",
|
||||
text = "Home"
|
||||
},
|
||||
{
|
||||
active = false,
|
||||
route = "/counter",
|
||||
text = "Counter"
|
||||
},
|
||||
{
|
||||
active = true,
|
||||
route = "/about",
|
||||
text = "About"
|
||||
}
|
||||
];
|
||||
?>
|
||||
<?Shell?>
|
||||
<?arg "About Me" ?>
|
||||
<?arg pages ?>
|
||||
<?arg_component() ?>
|
||||
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Laboriosam possimus nisi ab nobis magni, error minus vero neque iusto beatae, quasi nostrum. Ut repudiandae expedita reprehenderit tenetur. Sunt, adipisci cumque!</p>
|
||||
<?end?>
|
||||
<?end?>
|
||||
<?end?>
|
||||
@@ -1,29 +0,0 @@
|
||||
<?page() route="/counter" ?>
|
||||
<?code
|
||||
var pages = [
|
||||
{
|
||||
active = false,
|
||||
route = "/",
|
||||
text = "Home"
|
||||
},
|
||||
{
|
||||
active = true,
|
||||
route = "/counter",
|
||||
text = "Counter"
|
||||
},
|
||||
{
|
||||
active = false,
|
||||
route = "/about",
|
||||
text = "About"
|
||||
}
|
||||
];
|
||||
?>
|
||||
<?Shell?>
|
||||
<?arg "Counter" ?>
|
||||
<?arg pages ?>
|
||||
<?arg_component() ?>
|
||||
<?Counter ?>
|
||||
<?end?>
|
||||
<?end?>
|
||||
<?end?>
|
||||
<?end?>
|
||||
@@ -1,28 +0,0 @@
|
||||
<?page() route="/" ?>
|
||||
<?code
|
||||
var pages = [
|
||||
{
|
||||
active = true,
|
||||
route = "/",
|
||||
text = "Home"
|
||||
},
|
||||
{
|
||||
active = false,
|
||||
route = "/counter",
|
||||
text = "Counter"
|
||||
},
|
||||
{
|
||||
active = false,
|
||||
route = "/about",
|
||||
text = "About"
|
||||
}
|
||||
];
|
||||
?>
|
||||
<?Shell?>
|
||||
<?arg "Main Page" ?>
|
||||
<?arg pages ?>
|
||||
<?arg_component() ?>
|
||||
<p>1 John 4:4: You, dear children, are from God and have overcome them, because the one who is in you is greater than the one who is in the world.</p>
|
||||
<?end?>
|
||||
<?end?>
|
||||
<?end?>
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,312 @@
|
||||
var count = 0;
|
||||
func main(args)
|
||||
{
|
||||
Net.Http.ListenSimpleWithLoop(Router,4206);
|
||||
Console.WriteLine("In main");
|
||||
var dir = ".";
|
||||
if(args.Length > 1)
|
||||
{
|
||||
|
||||
dir = args[1];
|
||||
}
|
||||
DB.Init(dir);
|
||||
|
||||
|
||||
//should be a route but its crosslang so we can use mountable
|
||||
|
||||
|
||||
mountable.Mount("/package_icon.png", (ctx)=>{
|
||||
ctx.ResponseHeaders.SetValue("Content-Type", "image/png");
|
||||
ctx.SendBytes(embed("crosslang.png"));
|
||||
return true;
|
||||
});
|
||||
|
||||
/*
|
||||
PUT /api/v1/upload Authorization Bearer
|
||||
POST /api/v1/login Json object with username and password returns json object with either 200 for success {"token": "TOKEN_VAL"} or non 2XX if fails {"reason": "SOME ERROR"}
|
||||
POST /api/v1/logout use Authorization Bearer
|
||||
GET /api/v1/latest?name=PackageName returns 200 OK with json {"version": "1.0.0.0-prod"} if it succeeds if it fails returns a failing status code with {"reason": "SOME ERROR"}
|
||||
GET /api/v1/download?name=PackageName&version=1.0.0.0-prod returns 200 OK with package bytes or 404 if doesn't exist
|
||||
GET /api/v1/search?q=SomeQuery&offset=&limit= returns 200 OK with json of packages {"packages": [{"name": "pkgName","version": "latestVersion", ...}]} or non success status code
|
||||
|
||||
*/
|
||||
|
||||
|
||||
Net.Http.ListenSimpleWithLoop((ctx)=>{
|
||||
if(ctx.Path == "/package")
|
||||
{
|
||||
var name = ctx.QueryParams.TryGetFirst("name");
|
||||
if(TypeOf(name) != "String") name = "";
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Package(name));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/packages")
|
||||
{
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Packages(ctx));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/api/v1/latest")
|
||||
{
|
||||
var name = ctx.QueryParams.TryGetFirst("name");
|
||||
if(TypeOf(name) != "String") name = "";
|
||||
var version = DB.GetLatestVersion(name);
|
||||
if(version != null)
|
||||
{
|
||||
ctx.WithMimeType("application/json").SendText(Json.Encode({version}));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(ctx.Path == "/api/v1/search")
|
||||
{
|
||||
var q = ctx.QueryParams.TryGetFirst("q");
|
||||
if(TypeOf(q) != "String") q = "";
|
||||
var offset = ParseLong(ctx.QueryParams.TryGetFirst("offset"));
|
||||
if(TypeOf(offset) != "Long") offset=0;
|
||||
var limit = ParseLong(ctx.QueryParams.TryGetFirst("limit"));
|
||||
if(TypeOf(limit) != "Long") limit = 20;
|
||||
if(limit <= 0) limit = 20;
|
||||
|
||||
var res = DB.QueryPackages(q, offset*limit, limit);
|
||||
if(TypeOf(res) != "List")
|
||||
{
|
||||
ctx.StatusCode=500;
|
||||
ctx.SendText("Packages not a list");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx.WithMimeType("application/json").SendText(Json.Encode({packages=res}));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(ctx.Path == "/upload")
|
||||
{
|
||||
if(ctx.Method == "GET")
|
||||
{
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Upload(ctx));
|
||||
return true;
|
||||
}
|
||||
else if(ctx.Method == "POST")
|
||||
{
|
||||
if(ctx.NeedToParseFormData)
|
||||
{
|
||||
var filePath = DB.working / "Temp" / $"{DB.GetUniqueNumber()}.crvm";
|
||||
var hasFile=false;
|
||||
var strm = FS.Local.OpenFile(filePath,"wb");
|
||||
ctx.ParseFormData((mime,filename,name)=>{
|
||||
|
||||
if(name == "package")
|
||||
{
|
||||
if(hasFile) return FS.MemoryStream(true);
|
||||
hasFile=true;
|
||||
|
||||
return strm;
|
||||
}
|
||||
else
|
||||
return FS.MemoryStream(true);
|
||||
});
|
||||
|
||||
strm.Close();
|
||||
|
||||
var session = DB.GetSession(ctx);
|
||||
if(session == null)
|
||||
{
|
||||
ctx.StatusCode = 401;
|
||||
ctx.SendText("<h1>You are not logged in</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
var csrf = ctx.QueryParams.TryGetFirst("csrf");
|
||||
var result = { Success=false, Reason = "Invalid CSRF"};
|
||||
|
||||
if(DB.VerifyCSRF(session,csrf))
|
||||
{
|
||||
var userId = DB.GetUserIdFromSession(session);
|
||||
result = DB.UploadPackage(userId, filePath);
|
||||
}
|
||||
|
||||
if(FS.Local.FileExists(filePath))
|
||||
FS.Local.DeleteFile(filePath);
|
||||
|
||||
if(result.Success)
|
||||
{
|
||||
ctx.StatusCode = 302;
|
||||
ctx.ResponseHeaders.SetValue("Location", "/");
|
||||
ctx.WriteHeaders();
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText(result.Reason);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(ctx.Path == "/api/v1/package_icon.png")
|
||||
{
|
||||
var name = ctx.QueryParams.TryGetFirst("name");
|
||||
var version = ctx.QueryParams.TryGetFirst("version");
|
||||
ctx.ResponseHeaders.SetValue("Content-Type", "image/png");
|
||||
ctx.SendBytes(DB.GetPackageIcon(name,version));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/api/v1/download")
|
||||
{
|
||||
var name = ctx.QueryParams.TryGetFirst("name");
|
||||
var version = ctx.QueryParams.TryGetFirst("version");
|
||||
if(TypeOf(name) != "String") name = "";
|
||||
if(TypeOf(version) != "String") version = "";
|
||||
|
||||
var file = DB.working / "Packages" / name / $"{name}-{version}.crvm";
|
||||
|
||||
|
||||
if(FS.Local.FileExists(file) && name.Length > 0 && version.Length > 0)
|
||||
{
|
||||
var strm = FS.Local.OpenFile(file,"rb");
|
||||
if(strm != null)
|
||||
{
|
||||
ctx.WithMimeType("application/crvm").WithContentDisposition($"{name}-{version}.crvm",false).SendStream(strm);
|
||||
strm.Close();
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if(ctx.Path == "/login")
|
||||
{
|
||||
if(ctx.Method == "GET")
|
||||
{
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Login());
|
||||
return true;
|
||||
}
|
||||
else if(ctx.Method == "POST")
|
||||
{
|
||||
|
||||
var email = ctx.QueryParams.TryGetFirst("email");
|
||||
if(TypeOf(email) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the email buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
var password = ctx.QueryParams.TryGetFirst("password");
|
||||
if(TypeOf(password) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the password buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
var accountId = DB.GetAccountId(email, password);
|
||||
if(accountId == -1)
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>Invalid credentials</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
ctx.StatusCode = 302;
|
||||
ctx.ResponseHeaders.SetValue("Location", "/");
|
||||
ctx.ResponseHeaders.SetValue("Set-Cookie", $"Session={DB.CreateSession(accountId)}; SameSite=Strict");
|
||||
ctx.WriteHeaders();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(ctx.Path == "/signup")
|
||||
{
|
||||
if(ctx.Method == "GET")
|
||||
{
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Signup());
|
||||
return true;
|
||||
}
|
||||
else if(ctx.Method == "POST")
|
||||
{
|
||||
var email = ctx.QueryParams.TryGetFirst("email");
|
||||
if(TypeOf(email) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the email buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
var displayName = ctx.QueryParams.TryGetFirst("displayName");
|
||||
if(TypeOf(displayName) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the displayName buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
var password = ctx.QueryParams.TryGetFirst("password");
|
||||
if(TypeOf(password) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the password buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
var passwordconfirm = ctx.QueryParams.TryGetFirst("passwordconfirm");
|
||||
if(TypeOf(passwordconfirm) != "String")
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>You forgot the passwordconfirm buddy</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
if(password != passwordconfirm)
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText("<h1>The passwords do not match</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
var res = DB.CreateUser(email, displayName, password);
|
||||
if(!res.Success)
|
||||
{
|
||||
ctx.StatusCode = 400;
|
||||
ctx.SendText(%"<h1>Error: {Net.Http.HtmlEncode(res.Reason)}</h1>");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
ctx.StatusCode = 302;
|
||||
ctx.ResponseHeaders.SetValue("Location", res.Redirect);
|
||||
ctx.WriteHeaders();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(ctx.Path == "/css/bootstrap.min.css")
|
||||
{
|
||||
ctx.WithMimeType("text/css").SendBytes(embed("css/bootstrap.min.css"));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/css/bootstrap.min.css.map")
|
||||
{
|
||||
ctx.WithMimeType("application/json").SendBytes(embed("css/bootstrap.min.css.map"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if(ctx.Path == "/js/bootstrap.min.js")
|
||||
{
|
||||
ctx.WithMimeType("text/javascript").SendBytes(embed("js/bootstrap.min.js"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if(ctx.Path == "/js/bootstrap.min.js.map")
|
||||
{
|
||||
ctx.WithMimeType("application/json").SendBytes(embed("js/bootstrap.min.js.map"));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/favicon.ico")
|
||||
{
|
||||
ctx.WithMimeType("image/x-icon").SendBytes(embed("favicon.ico"));
|
||||
return true;
|
||||
}
|
||||
if(ctx.Path == "/")
|
||||
{
|
||||
ctx.WithMimeType("text/html").SendText(Pages.Index());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},4206);
|
||||
}
|
||||
@@ -494,6 +494,42 @@ func main(args)
|
||||
else if(commandName == "add-dependency")
|
||||
{
|
||||
//crosslang add-dependency Tesses.CrossLang.Markup --version=1.0.0.0-prod
|
||||
|
||||
if(dd.Arguments.Length > 1)
|
||||
{
|
||||
|
||||
var name = dd.Arguments[1];
|
||||
var version = null;
|
||||
each(var opt : dd.Options)
|
||||
{
|
||||
if(opt.Key == "version")
|
||||
version = opt.Value;
|
||||
}
|
||||
if(!FS.Local.FileExists("cross.json"))
|
||||
{
|
||||
Console.WriteLine("The current directory does not have a project");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(version == null)
|
||||
{
|
||||
var pm = Tesses.CrossLang.PackageManager();
|
||||
version = pm.GetLatest(name);
|
||||
}
|
||||
if(version == null)
|
||||
{
|
||||
Console.WriteLine("Could not get version");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
var data = Json.Decode(FS.ReadAllText(FS.Local,"cross.json"));
|
||||
if(TypeOf(data.dependencies) != "List") data.dependencies=[];
|
||||
data.dependencies.Add({name,version});
|
||||
FS.WriteAllText(FS.Local,"cross.json",Json.Encode(data,true));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(commandName == "upload-package")
|
||||
{
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"info": {
|
||||
"type": "lib"
|
||||
},
|
||||
"version": "1.0.0.0-prod",
|
||||
"name": "Tesses.CrossLang.Std"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
func Time.Date.Create(year,month,day,hour,minute,second,timezone,hasDST)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
func Time.Date.FromUnix(timeStamp)
|
||||
{
|
||||
var seconds = (timeStamp % 60).Abs();
|
||||
var min = ((timeStamp / 60) % 60).Abs();
|
||||
var hour = ((timeStamp / 3600) % 24).Abs();
|
||||
var year = ((timeStamp / 31557600));
|
||||
var daysSince1970 = (timeStamp / 86400);
|
||||
|
||||
|
||||
|
||||
return Time.Date.Create(,second);
|
||||
}
|
||||
func Time.Date.getNow()
|
||||
{
|
||||
return Time.Date.FromUnix(Time.Now);
|
||||
}
|
||||
@@ -52,6 +52,7 @@ func create_archive()
|
||||
copyFile("Templates/lib/bin/Tesses.CrossLang.Template.Library-1.0.0.0-prod.crvm", templates / "lib.crvm");
|
||||
copyFile("Templates/template/bin/Tesses.CrossLang.Template.Template-1.0.0.0-prod.crvm", templates / "template.crvm");
|
||||
copyFile("Templates/web/bin/Tesses.CrossLang.Template.Website-1.0.0.0-prod.crvm", templates / "web.crvm");
|
||||
copyFile("Templates/emptyweb/bin/Tesses.CrossLang.Template.EmptyWebsite-1.0.0.0-prod.crvm", templates / "emptyweb.crvm");
|
||||
copyFile("Templates/tool/bin/Tesses.CrossLang.Template.Tool-1.0.0.0-prod.crvm", templates / "tool.crvm");
|
||||
var packageCache = r / "PackageCache";
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
bash ./script.sh
|
||||
crossvm crosslang_shell_archive_maker/bin/crosslang_shell_archive_maker-1.0.0.0-prod.crvm install
|
||||
3
pack.sh
3
pack.sh
@@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
bash ./script.sh
|
||||
crossvm crosslang_shell_archive_maker/bin/crosslang_shell_archive_maker-1.0.0.0-prod.crvm
|
||||
13
script.sh
13
script.sh
@@ -1,13 +0,0 @@
|
||||
#!/bin/bash
|
||||
cd Tesses.CrossLang.BuildEssentials && crossc -o ./bin-tmp -n Tesses.CrossLang.BuildEssentials -v 1.0.0.0-prod main.tcross src/*.tcross && cd ..
|
||||
crossvm ./Tesses.CrossLang.BuildEssentials/bin-tmp/Tesses.CrossLang.BuildEssentials-1.0.0.0-prod.crvm Tesses.CrossLang.Shell
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Tesses.CrossLang.PackageServer
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Tesses.CrossLang.WebSite
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/console
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/web
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/template
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/lib
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/compiletool
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build Templates/tool
|
||||
crossvm ./Tesses.CrossLang.Shell/bin/Tesses.CrossLang.Shell-1.0.0.0-prod.crvm build crosslang_shell_archive_maker
|
||||
|
||||
Reference in New Issue
Block a user