Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/mcl/src/main.d
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ int main(string[] args)
void setLogLevel(LogLevel l)
{
import std.logger : globalLogLevel, sharedLog;

globalLogLevel = l;
(cast()sharedLog()).logLevel = l;
(cast() sharedLog()).logLevel = l;
}

int wrongUsage(string error)
Expand Down
127 changes: 74 additions & 53 deletions packages/mcl/src/src/mcl/commands/ci.d
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
module mcl.commands.ci;

import std.file : readText;
import std.json : parseJSON,JSONValue;
import std.stdio : writeln,write;
import std.algorithm : map;
import std.json : parseJSON, JSONValue;
import std.stdio : writeln, write;
import std.algorithm : map, each;
import std.array : array, join;
import std.conv : to;
import std.process : ProcessPipes;

import mcl.utils.env : optional, parseEnv;
import mcl.commands.ci_matrix: nixEvalJobs, SupportedSystem, Params, flakeAttr;
import mcl.commands.shard_matrix: generateShardMatrix;
import mcl.commands.ci_matrix : nixEvalJobs, SupportedSystem, Params, flakeAttr, Package;
import mcl.commands.shard_matrix : generateShardMatrix, Shard;
import mcl.utils.path : rootDir, createResultDirs;
import mcl.utils.process : execute;
import mcl.utils.nix : nix;
Expand All @@ -23,60 +23,81 @@ export void ci()
params = parseEnv!Params;

auto shardMatrix = generateShardMatrix();
foreach (shard; shardMatrix.include)
shardMatrix.include.each!(handleShard);
}

static immutable(SupportedSystem) platform()
{
version (AArch64)
static immutable string arch = "aarch64";
else version (X86_64)
static immutable string arch = "x86_64";

version (linux)
static immutable string os = "linux";
else version (OSX)
static immutable string os = "darwin";

return (arch ~ "_" ~ os).to!(SupportedSystem);
}

void handleShard(Shard shard)
{
writeln("Shard ", shard.prefix ~ " ", shard.postfix ~ " ", shard.digit);
params.flakePre = shard.prefix;
params.flakePost = shard.postfix;

if (params.flakePre == "")
{
writeln("Shard ", shard.prefix ~ " ", shard.postfix ~ " ", shard.digit);
params.flakePre = shard.prefix;
params.flakePost = shard.postfix;
params.flakePre = "checks";
}
if (params.flakePost != "")
{
params.flakePost = "." ~ params.flakePost;
}
string cachixUrl = "https://" ~ params.cachixCache ~ ".cachix.org";
version (AArch64)
{
string arch = "aarch64";
}
version (X86_64)
{
string arch = "x86_64";
}

if (params.flakePre == "")
{
params.flakePre = "checks";
}
if (params.flakePost != "")
{
params.flakePost = "." ~ params.flakePost;
}
string cachixUrl = "https://" ~ params.cachixCache ~ ".cachix.org";
version (AArch64) {
string arch = "aarch64";
}
version (X86_64) {
string arch = "x86_64";
}
version (linux)
{
string os = "linux";
}
version (OSX)
{
string os = "darwin";
}

version (linux) {
string os = "linux";
}
version (OSX) {
string os = "darwin";
}
auto matrix = flakeAttr(params.flakePre, arch, os, params.flakePost)
.nixEvalJobs(cachixUrl, false);
matrix.each!(handlePackage);
}

auto matrix = flakeAttr(params.flakePre, arch, os, params.flakePost)
.nixEvalJobs(cachixUrl, false);
void handlePackage(Package pkg)
{
if (pkg.isCached)
writeln("Package ", pkg.name, " is cached");
else
{
writeln("Package ", pkg.name, " is not cached; building...");
ProcessPipes res = execute!ProcessPipes([
"nix", "build", "--json", ".#" ~ pkg.attrPath
]);

foreach (pkg; matrix)
foreach (line; res.stderr.byLine)
{
if (pkg.isCached)
{
writeln("Package ", pkg.name, " is cached");
}
else
{
writeln("Package ", pkg.name, " is not cached; building...");
ProcessPipes res = execute!ProcessPipes(["nix", "build", "--json", ".#" ~ pkg.attrPath]);

foreach (line; res.stderr.byLine)
{
"\r".write;
line.write;
}
"".writeln;
auto json = parseJSON(res.stdout.byLine.join("\n").to!string);
auto path = json.array[0]["outputs"]["out"].str;
execute(["cachix", "push", params.cachixCache, path], false, true).writeln;
}
"\r".write;
line.write;
}

"".writeln;
auto json = parseJSON(res.stdout.byLine.join("\n").to!string);
auto path = json.array[0]["outputs"]["out"].str;
execute(["cachix", "push", params.cachixCache, path], false, true).writeln;
}
}
Loading