prepare first attempt on the builder pipeline
This commit is contained in:
parent
f61200f8ef
commit
e8afc8ea0d
@ -1,6 +1,6 @@
|
|||||||
package p.studio.compiler;
|
package p.studio.compiler;
|
||||||
|
|
||||||
import p.studio.compiler.model.FrontendSpec;
|
import p.studio.compiler.models.FrontendSpec;
|
||||||
import p.studio.utilities.structures.ReadOnlySet;
|
import p.studio.utilities.structures.ReadOnlySet;
|
||||||
|
|
||||||
public class PBSDefinitions {
|
public class PBSDefinitions {
|
||||||
|
|||||||
@ -4,4 +4,6 @@ plugins {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(project(":prometeu-infra"))
|
api(project(":prometeu-infra"))
|
||||||
|
implementation(project(":prometeu-compiler:prometeu-deps"))
|
||||||
|
implementation(project(":prometeu-compiler:prometeu-compiler-core"))
|
||||||
}
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package p.studio.compiler.messages;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class BuilderPipelineConfig {
|
||||||
|
private String rootProjectPath;
|
||||||
|
}
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||||
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
|
|
||||||
|
public class BuilderPipelineContext {
|
||||||
|
@Getter
|
||||||
|
private final BuilderPipelineConfig config;
|
||||||
|
@Getter
|
||||||
|
private final LogAggregator logs;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private ResolvedWorkspace resolvedWorkspace;
|
||||||
|
|
||||||
|
private BuilderPipelineContext(
|
||||||
|
final BuilderPipelineConfig config,
|
||||||
|
final LogAggregator logs) {
|
||||||
|
this.config = config;
|
||||||
|
this.logs = logs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BuilderPipelineContext seed(BuilderPipelineConfig config, LogAggregator logAggregator) {
|
||||||
|
return new BuilderPipelineContext(config, logAggregator);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
package p.studio.compiler.workspaces;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import p.studio.compiler.exceptions.BuildException;
|
||||||
|
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||||
|
import p.studio.compiler.models.BuilderPipelineContext;
|
||||||
|
import p.studio.compiler.workspaces.stages.DepsPipelineStage;
|
||||||
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class BuilderPipelineService {
|
||||||
|
public final static BuilderPipelineService INSTANCE;
|
||||||
|
|
||||||
|
static {
|
||||||
|
final var stages = List.<PipelineStage>of(
|
||||||
|
new DepsPipelineStage()
|
||||||
|
);
|
||||||
|
INSTANCE = new BuilderPipelineService(stages);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final List<PipelineStage> stages;
|
||||||
|
|
||||||
|
BuilderPipelineService(List<PipelineStage> stages) {
|
||||||
|
this.stages = stages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run(
|
||||||
|
final BuilderPipelineConfig config,
|
||||||
|
final LogAggregator logs) {
|
||||||
|
final var ctx = BuilderPipelineContext.seed(config, logs);
|
||||||
|
|
||||||
|
for (final var builderPipelineStage : stages) {
|
||||||
|
final var issues = builderPipelineStage.run(ctx);
|
||||||
|
var error = false;
|
||||||
|
if (ReadOnlyCollection.isNotEmpty(issues)) {
|
||||||
|
for (final var issue : issues) {
|
||||||
|
if (issue.isError()) {
|
||||||
|
error = true;
|
||||||
|
logs.using(log).error(issue.getMessage(), issue.getException());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
logs.using(log).warn(issue.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (error) {
|
||||||
|
throw new BuildException("issues found on pipeline stage: " + builderPipelineStage.getClass().getSimpleName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logs.using(log).info("builder pipeline completed successfully");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
package p.studio.compiler.workspaces;
|
||||||
|
|
||||||
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
|
import p.studio.compiler.models.BuilderPipelineContext;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
|
public interface PipelineStage {
|
||||||
|
ReadOnlyCollection<BuildingIssue> run(BuilderPipelineContext ctx);
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package p.studio.compiler.workspaces.stages;
|
||||||
|
|
||||||
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.BuilderPipelineContext;
|
||||||
|
import p.studio.compiler.workspaces.DependencyService;
|
||||||
|
import p.studio.compiler.workspaces.PipelineStage;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DepsPipelineStage implements PipelineStage {
|
||||||
|
@Override
|
||||||
|
public ReadOnlyCollection<BuildingIssue> run(final BuilderPipelineContext ctx) {
|
||||||
|
final Path rootCanonPath;
|
||||||
|
try {
|
||||||
|
rootCanonPath = Paths.get(ctx.getConfig().getRootProjectPath()).toRealPath();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return ReadOnlyCollection.wrap(List.of(BuildingIssue
|
||||||
|
.builder()
|
||||||
|
.error(true)
|
||||||
|
.message("[DEPS]: root directory no found: " + ctx.getConfig().getRootProjectPath())
|
||||||
|
.build()));
|
||||||
|
}
|
||||||
|
final var cfg = new DependencyConfig(false, rootCanonPath);
|
||||||
|
final var resolvedWorkspace = DependencyService.INSTANCE.run(cfg, ctx.getLogs());
|
||||||
|
for (final var pId : resolvedWorkspace.stack().projects()) {
|
||||||
|
final var pd = resolvedWorkspace.graph().projects().get(pId.getIndex());
|
||||||
|
ctx.getLogs().info("Project [ " + pd.getName() + " ] read");
|
||||||
|
}
|
||||||
|
ctx.setResolvedWorkspace(resolvedWorkspace);
|
||||||
|
return ReadOnlyCollection.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.messages;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
package p.studio.compiler.messages;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public record DependencyConfig(
|
||||||
|
boolean explain,
|
||||||
|
Path cacheDir) {
|
||||||
|
}
|
||||||
@ -1,10 +0,0 @@
|
|||||||
package p.studio.compiler.model;
|
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public record DependencyPipelineConfig(
|
|
||||||
boolean explain,
|
|
||||||
Path cacheDir,
|
|
||||||
List<Path> registryDirs) {
|
|
||||||
}
|
|
||||||
@ -1,9 +1,7 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public record BuildStack(ReadOnlyList<ProjectId> projects) {
|
public record BuildStack(ReadOnlyList<ProjectId> projects) {
|
||||||
}
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package p.studio.compiler.workspaces;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.compiler.model.*;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.compiler.exceptions.BuildException;
|
import p.studio.compiler.exceptions.BuildException;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
@ -8,8 +8,8 @@ import p.studio.utilities.structures.ReadOnlyList;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public final class DependencyPipelineContext {
|
public final class DependencyContext {
|
||||||
private final DependencyPipelineConfig config;
|
private final DependencyConfig config;
|
||||||
|
|
||||||
// Internal state mirroring Rust ResolverState
|
// Internal state mirroring Rust ResolverState
|
||||||
public Path mainProjectRootPathCanon;
|
public Path mainProjectRootPathCanon;
|
||||||
@ -27,15 +27,15 @@ public final class DependencyPipelineContext {
|
|||||||
public ProjectId root;
|
public ProjectId root;
|
||||||
public BuildStack stack;
|
public BuildStack stack;
|
||||||
|
|
||||||
private DependencyPipelineContext(DependencyPipelineConfig config) {
|
private DependencyContext(DependencyConfig config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DependencyPipelineContext seed(DependencyPipelineConfig config) {
|
public static DependencyContext seed(DependencyConfig config) {
|
||||||
return new DependencyPipelineContext(config);
|
return new DependencyContext(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DependencyPipelineConfig config() {
|
public DependencyConfig config() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
public record LoadedFile(String uri, String text) {
|
public record LoadedFile(String uri, String text) {
|
||||||
}
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@ -6,7 +6,6 @@ import p.studio.compiler.source.identifiers.ProjectId;
|
|||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
@Getter
|
@Getter
|
||||||
@ -1,9 +1,8 @@
|
|||||||
package p.studio.compiler.workspaces;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import p.studio.compiler.model.FrontendSpec;
|
|
||||||
import p.studio.compiler.model.PrometeuManifest;
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
@Builder
|
@Builder
|
||||||
@ -1,9 +1,9 @@
|
|||||||
package p.studio.compiler.workspaces;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import p.studio.compiler.model.FrontendSpec;
|
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
|
import p.studio.compiler.workspaces.DependencyReference;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.*;
|
import com.fasterxml.jackson.annotation.*;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package p.studio.compiler.model;
|
package p.studio.compiler.models;
|
||||||
|
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
package p.studio.compiler.workspaces;
|
||||||
|
|
||||||
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
|
public interface DependencyPhase {
|
||||||
|
ReadOnlyCollection<BuildingIssue> run(DependencyContext state);
|
||||||
|
}
|
||||||
@ -1,8 +0,0 @@
|
|||||||
package p.studio.compiler.workspaces;
|
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
|
||||||
|
|
||||||
public interface DependencyPipelinePhase {
|
|
||||||
ReadOnlyCollection<BuildingIssue> run(DependencyPipelineContext state);
|
|
||||||
}
|
|
||||||
@ -2,8 +2,9 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import p.studio.compiler.exceptions.BuildException;
|
import p.studio.compiler.exceptions.BuildException;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
import p.studio.compiler.model.ResolvedWorkspace;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
|
import p.studio.compiler.models.ResolvedWorkspace;
|
||||||
import p.studio.compiler.workspaces.phases.*;
|
import p.studio.compiler.workspaces.phases.*;
|
||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
@ -11,8 +12,8 @@ import p.studio.utilities.structures.ReadOnlyCollection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public final class DependencyPipelineService {
|
public final class DependencyService {
|
||||||
public final static DependencyPipelineService INSTANCE;
|
public final static DependencyService INSTANCE;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final var phases = List.of(
|
final var phases = List.of(
|
||||||
@ -24,22 +25,22 @@ public final class DependencyPipelineService {
|
|||||||
new StackPhase(),
|
new StackPhase(),
|
||||||
new PolicyPhase()
|
new PolicyPhase()
|
||||||
);
|
);
|
||||||
INSTANCE = new DependencyPipelineService(phases);
|
INSTANCE = new DependencyService(phases);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final List<DependencyPipelinePhase> phases;
|
private final List<DependencyPhase> phases;
|
||||||
|
|
||||||
DependencyPipelineService(List<DependencyPipelinePhase> phases) {
|
DependencyService(List<DependencyPhase> phases) {
|
||||||
this.phases = phases;
|
this.phases = phases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResolvedWorkspace run(
|
public ResolvedWorkspace run(
|
||||||
final DependencyPipelineConfig config,
|
final DependencyConfig config,
|
||||||
final LogAggregator logs) {
|
final LogAggregator logs) {
|
||||||
final var ctx = DependencyPipelineContext.seed(config);
|
final var ctx = DependencyContext.seed(config);
|
||||||
|
|
||||||
for (final var dependencyPipelinePhase : phases) {
|
for (final var dependencyPhase : phases) {
|
||||||
final var issues = dependencyPipelinePhase.run(ctx);
|
final var issues = dependencyPhase.run(ctx);
|
||||||
var error = false;
|
var error = false;
|
||||||
if (ReadOnlyCollection.isNotEmpty(issues)) {
|
if (ReadOnlyCollection.isNotEmpty(issues)) {
|
||||||
for (final var issue : issues) {
|
for (final var issue : issues) {
|
||||||
@ -52,11 +53,11 @@ public final class DependencyPipelineService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (error) {
|
if (error) {
|
||||||
throw new BuildException("issues found during dependency pipeline phase: " + dependencyPipelinePhase.getClass().getSimpleName());
|
throw new BuildException("[DEPS]: issues found during dependency phase: " + dependencyPhase.getClass().getSimpleName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logs.using(log).info("dependency pipeline completed successfully, going to resolve workspace");
|
logs.using(log).info("[DEPS]: dependency completed successfully");
|
||||||
|
|
||||||
return ctx.toResolvedWorkspace();
|
return ctx.toResolvedWorkspace();
|
||||||
}
|
}
|
||||||
@ -2,11 +2,11 @@ package p.studio.compiler.workspaces.phases;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import p.studio.compiler.FrontendRegistryService;
|
import p.studio.compiler.FrontendRegistryService;
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.model.PrometeuManifest;
|
import p.studio.compiler.models.PrometeuManifest;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelinePhase;
|
import p.studio.compiler.workspaces.DependencyPhase;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineContext;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.ProjectInfo;
|
import p.studio.compiler.models.ProjectInfo;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -16,11 +16,11 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class DiscoverPhase implements DependencyPipelinePhase {
|
public class DiscoverPhase implements DependencyPhase {
|
||||||
private final ObjectMapper mapper = new ObjectMapper();
|
private final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(final DependencyPipelineContext ctx) {
|
public ReadOnlyCollection<BuildingIssue> run(final DependencyContext ctx) {
|
||||||
final List<BuildingIssue> issues = new ArrayList<>();
|
final List<BuildingIssue> issues = new ArrayList<>();
|
||||||
while (!ctx.pending.isEmpty()) {
|
while (!ctx.pending.isEmpty()) {
|
||||||
final var rootPathCanon = ctx.pending.pollFirst();
|
final var rootPathCanon = ctx.pending.pollFirst();
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.*;
|
import p.studio.compiler.workspaces.*;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
@ -8,9 +9,9 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public final class LocalizePhase implements DependencyPipelinePhase {
|
public final class LocalizePhase implements DependencyPhase {
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(final DependencyPipelineContext state) {
|
public ReadOnlyCollection<BuildingIssue> run(final DependencyContext state) {
|
||||||
final List<BuildingIssue> issues = new ArrayList<>();
|
final List<BuildingIssue> issues = new ArrayList<>();
|
||||||
for (int i = 0; i < state.projectNodes.size(); i++) {
|
for (int i = 0; i < state.projectNodes.size(); i++) {
|
||||||
final var fromProjectNode = state.projectNodes.get(i);
|
final var fromProjectNode = state.projectNodes.get(i);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.model.PrometeuManifest;
|
import p.studio.compiler.models.*;
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.compiler.workspaces.*;
|
import p.studio.compiler.workspaces.*;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
@ -11,9 +11,9 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public final class MaterializePhase implements DependencyPipelinePhase {
|
public final class MaterializePhase implements DependencyPhase {
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(final DependencyPipelineContext ctx) {
|
public ReadOnlyCollection<BuildingIssue> run(final DependencyContext ctx) {
|
||||||
// start all over again, we will re-populate the project nodes and edges based on the project infos
|
// start all over again, we will re-populate the project nodes and edges based on the project infos
|
||||||
ctx.projectNodes.clear();
|
ctx.projectNodes.clear();
|
||||||
ctx.projectIdByDirectoryRoot.clear();
|
ctx.projectIdByDirectoryRoot.clear();
|
||||||
|
|||||||
@ -1,16 +1,16 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelinePhase;
|
import p.studio.compiler.workspaces.DependencyPhase;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineContext;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class PolicyPhase implements DependencyPipelinePhase {
|
public final class PolicyPhase implements DependencyPhase {
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(DependencyPipelineContext state) {
|
public ReadOnlyCollection<BuildingIssue> run(DependencyContext state) {
|
||||||
final List<BuildingIssue> issues = new ArrayList<>();
|
final List<BuildingIssue> issues = new ArrayList<>();
|
||||||
// No-op for now; in Rust this applies source policies
|
// No-op for now; in Rust this applies source policies
|
||||||
return ReadOnlyCollection.wrap(issues);
|
return ReadOnlyCollection.wrap(issues);
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelinePhase;
|
import p.studio.compiler.workspaces.DependencyPhase;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineContext;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class SeedPhase implements DependencyPipelinePhase {
|
public final class SeedPhase implements DependencyPhase {
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(final DependencyPipelineContext ctx) {
|
public ReadOnlyCollection<BuildingIssue> run(final DependencyContext ctx) {
|
||||||
final List<BuildingIssue> issues = new ArrayList<>();
|
final List<BuildingIssue> issues = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
ctx.mainProjectRootPathCanon = ctx.config().cacheDir().toRealPath();
|
ctx.mainProjectRootPathCanon = ctx.config().cacheDir().toRealPath();
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildStack;
|
import p.studio.compiler.models.BuildStack;
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.source.identifiers.ProjectId;
|
import p.studio.compiler.source.identifiers.ProjectId;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineContext;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelinePhase;
|
import p.studio.compiler.workspaces.DependencyPhase;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
import p.studio.utilities.structures.ReadOnlyList;
|
import p.studio.utilities.structures.ReadOnlyList;
|
||||||
|
|
||||||
@ -15,12 +15,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static java.util.stream.Collectors.joining;
|
import static java.util.stream.Collectors.joining;
|
||||||
|
|
||||||
public final class StackPhase implements DependencyPipelinePhase {
|
public final class StackPhase implements DependencyPhase {
|
||||||
/**
|
/**
|
||||||
* Implements topological sort; detects dependency cycles; sets build stack
|
* Implements topological sort; detects dependency cycles; sets build stack
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(DependencyPipelineContext ctx) {
|
public ReadOnlyCollection<BuildingIssue> run(DependencyContext ctx) {
|
||||||
final int n = ctx.projectNodes.size();
|
final int n = ctx.projectNodes.size();
|
||||||
final int[] indeg = new int[n];
|
final int[] indeg = new int[n];
|
||||||
for (int from = 0; from < n; from++) {
|
for (int from = 0; from < n; from++) {
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
package p.studio.compiler.workspaces.phases;
|
package p.studio.compiler.workspaces.phases;
|
||||||
|
|
||||||
import p.studio.compiler.model.BuildingIssue;
|
import p.studio.compiler.messages.BuildingIssue;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineContext;
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelinePhase;
|
import p.studio.compiler.workspaces.DependencyPhase;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class ValidatePhase implements DependencyPipelinePhase {
|
public final class ValidatePhase implements DependencyPhase {
|
||||||
@Override
|
@Override
|
||||||
public ReadOnlyCollection<BuildingIssue> run(DependencyPipelineContext state) {
|
public ReadOnlyCollection<BuildingIssue> run(DependencyContext state) {
|
||||||
if (state.root == null) {
|
if (state.root == null) {
|
||||||
final var issue = BuildingIssue
|
final var issue = BuildingIssue
|
||||||
.builder()
|
.builder()
|
||||||
|
|||||||
@ -2,8 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
import p.studio.compiler.model.ResolvedWorkspace;
|
import p.studio.compiler.models.ResolvedWorkspace;
|
||||||
import p.studio.compiler.workspaces.phases.*;
|
import p.studio.compiler.workspaces.phases.*;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -13,7 +13,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
class DependencyPipelineServiceTest {
|
class DependencyServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void canonical_pipeline_e2e(@TempDir Path tempDir) throws IOException {
|
void canonical_pipeline_e2e(@TempDir Path tempDir) throws IOException {
|
||||||
@ -26,7 +26,7 @@ class DependencyPipelineServiceTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, List.of());
|
final var cfg = new DependencyConfig(false, root, List.of());
|
||||||
final var phases = List.of(
|
final var phases = List.of(
|
||||||
new SeedPhase(),
|
new SeedPhase(),
|
||||||
new DiscoverPhase(),
|
new DiscoverPhase(),
|
||||||
@ -37,7 +37,7 @@ class DependencyPipelineServiceTest {
|
|||||||
new PolicyPhase()
|
new PolicyPhase()
|
||||||
);
|
);
|
||||||
|
|
||||||
final var service = new DependencyPipelineService(phases);
|
final var service = new DependencyService(phases);
|
||||||
final ResolvedWorkspace ws = service.run(cfg);
|
final ResolvedWorkspace ws = service.run(cfg);
|
||||||
|
|
||||||
assertNotNull(ws);
|
assertNotNull(ws);
|
||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.DiscoverPhase;
|
import p.studio.compiler.workspaces.phases.DiscoverPhase;
|
||||||
import p.studio.compiler.workspaces.phases.SeedPhase;
|
import p.studio.compiler.workspaces.phases.SeedPhase;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
@ -25,8 +26,8 @@ class DiscoverPhaseTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"}, null);
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"}, null);
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{}, null);
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{}, null);
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, java.util.List.of());
|
final var cfg = new DependencyConfig(false, root, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
||||||
|
|
||||||
final var issues = new DiscoverPhase().run(ctx);
|
final var issues = new DiscoverPhase().run(ctx);
|
||||||
|
|||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.*;
|
import p.studio.compiler.workspaces.phases.*;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
@ -25,8 +26,8 @@ class LocalizePhaseTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, java.util.List.of());
|
final var cfg = new DependencyConfig(false, root, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
||||||
|
|||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.DiscoverPhase;
|
import p.studio.compiler.workspaces.phases.DiscoverPhase;
|
||||||
import p.studio.compiler.workspaces.phases.MaterializePhase;
|
import p.studio.compiler.workspaces.phases.MaterializePhase;
|
||||||
import p.studio.compiler.workspaces.phases.SeedPhase;
|
import p.studio.compiler.workspaces.phases.SeedPhase;
|
||||||
@ -27,8 +28,8 @@ class MaterializePhaseTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, java.util.List.of());
|
final var cfg = new DependencyConfig(false, root, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.SeedPhase;
|
import p.studio.compiler.workspaces.phases.SeedPhase;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
@ -14,8 +15,8 @@ class SeedPhaseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void seed_initializes_root_and_pending(@TempDir Path tempDir) throws Exception {
|
void seed_initializes_root_and_pending(@TempDir Path tempDir) throws Exception {
|
||||||
final var cfg = new DependencyPipelineConfig(false, tempDir, java.util.List.of());
|
final var cfg = new DependencyConfig(false, tempDir, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
|
|
||||||
final var issues = new SeedPhase().run(ctx);
|
final var issues = new SeedPhase().run(ctx);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(issues), "Nenhum issue esperado na SeedPhase");
|
assertTrue(ReadOnlyCollection.isEmpty(issues), "Nenhum issue esperado na SeedPhase");
|
||||||
|
|||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.*;
|
import p.studio.compiler.workspaces.phases.*;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
@ -25,8 +26,8 @@ class StackPhaseTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, java.util.List.of());
|
final var cfg = new DependencyConfig(false, root, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
||||||
|
|||||||
@ -2,7 +2,8 @@ package p.studio.compiler.workspaces;
|
|||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.io.TempDir;
|
import org.junit.jupiter.api.io.TempDir;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.DependencyConfig;
|
||||||
|
import p.studio.compiler.models.DependencyContext;
|
||||||
import p.studio.compiler.workspaces.phases.*;
|
import p.studio.compiler.workspaces.phases.*;
|
||||||
import p.studio.utilities.structures.ReadOnlyCollection;
|
import p.studio.utilities.structures.ReadOnlyCollection;
|
||||||
|
|
||||||
@ -25,8 +26,8 @@ class ValidateAndPolicyPhasesTest {
|
|||||||
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
writeManifest(root, "root-proj", "0.1.0", new String[]{"depA"});
|
||||||
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
writeManifest(depA, "dep-a", "0.1.0", new String[]{});
|
||||||
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, root, java.util.List.of());
|
final var cfg = new DependencyConfig(false, root, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new SeedPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new DiscoverPhase().run(ctx)));
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
assertTrue(ReadOnlyCollection.isEmpty(new MaterializePhase().run(ctx)));
|
||||||
@ -38,8 +39,8 @@ class ValidateAndPolicyPhasesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void policy_is_noop(@TempDir Path tempDir) {
|
void policy_is_noop(@TempDir Path tempDir) {
|
||||||
final var cfg = new DependencyPipelineConfig(false, tempDir, java.util.List.of());
|
final var cfg = new DependencyConfig(false, tempDir, java.util.List.of());
|
||||||
final var ctx = DependencyPipelineContext.seed(cfg);
|
final var ctx = DependencyContext.seed(cfg);
|
||||||
final var issues = new PolicyPhase().run(ctx);
|
final var issues = new PolicyPhase().run(ctx);
|
||||||
assertTrue(ReadOnlyCollection.isEmpty(issues), "PolicyPhase atualmente é no-op");
|
assertTrue(ReadOnlyCollection.isEmpty(issues), "PolicyPhase atualmente é no-op");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package p.studio.compiler;
|
package p.studio.compiler;
|
||||||
|
|
||||||
import p.studio.compiler.model.FrontendSpec;
|
import p.studio.compiler.models.FrontendSpec;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@ -6,7 +6,7 @@ plugins {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation(project(":prometeu-infra"))
|
implementation(project(":prometeu-infra"))
|
||||||
implementation(project(":prometeu-compiler:prometeu-compiler-core"))
|
implementation(project(":prometeu-compiler:prometeu-compiler-core"))
|
||||||
implementation(project(":prometeu-compiler:prometeu-deps"))
|
implementation(project(":prometeu-compiler:prometeu-build-pipeline"))
|
||||||
implementation(libs.javafx.controls)
|
implementation(libs.javafx.controls)
|
||||||
implementation(libs.javafx.fxml)
|
implementation(libs.javafx.fxml)
|
||||||
implementation(libs.richtextfx)
|
implementation(libs.richtextfx)
|
||||||
|
|||||||
@ -6,16 +6,13 @@ import javafx.scene.control.*;
|
|||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
import javafx.scene.layout.StackPane;
|
import javafx.scene.layout.StackPane;
|
||||||
import p.studio.Container;
|
import p.studio.Container;
|
||||||
import p.studio.compiler.model.DependencyPipelineConfig;
|
import p.studio.compiler.messages.BuilderPipelineConfig;
|
||||||
import p.studio.compiler.workspaces.DependencyPipelineService;
|
import p.studio.compiler.workspaces.BuilderPipelineService;
|
||||||
import p.studio.utilities.i18n.I18n;
|
import p.studio.utilities.i18n.I18n;
|
||||||
import p.studio.utilities.logs.LogAggregator;
|
import p.studio.utilities.logs.LogAggregator;
|
||||||
import p.studio.workspaces.Workspace;
|
import p.studio.workspaces.Workspace;
|
||||||
import p.studio.workspaces.WorkspaceId;
|
import p.studio.workspaces.WorkspaceId;
|
||||||
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class BuilderWorkspace implements Workspace {
|
public class BuilderWorkspace implements Workspace {
|
||||||
private final BorderPane root = new BorderPane();
|
private final BorderPane root = new BorderPane();
|
||||||
private final TextArea logs = new TextArea();
|
private final TextArea logs = new TextArea();
|
||||||
@ -53,13 +50,10 @@ public class BuilderWorkspace implements Workspace {
|
|||||||
private ToolBar buildToolBar() {
|
private ToolBar buildToolBar() {
|
||||||
buildButton.textProperty().bind(Container.i18n().bind(I18n.WORKSPACE_BUILDER_BUTTON_RUN));
|
buildButton.textProperty().bind(Container.i18n().bind(I18n.WORKSPACE_BUILDER_BUTTON_RUN));
|
||||||
buildButton.setOnAction(e -> {
|
buildButton.setOnAction(e -> {
|
||||||
final var rootPath = Paths.get("../test-projects/main").toAbsolutePath();
|
|
||||||
final var cfg = new DependencyPipelineConfig(false, rootPath, List.of());
|
|
||||||
final var logAggregator = LogAggregator.with(logs::appendText);
|
final var logAggregator = LogAggregator.with(logs::appendText);
|
||||||
final var resolvedWorkspace = DependencyPipelineService.INSTANCE.run(cfg, logAggregator);
|
final var config = new BuilderPipelineConfig();
|
||||||
for (final var p : resolvedWorkspace.graph().projects()) {
|
config.setRootProjectPath("../test-projects/main");
|
||||||
logs.appendText("Project [ " + p.getName() + " ] read\n");
|
BuilderPipelineService.INSTANCE.run(config, logAggregator);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return new ToolBar(buildButton);
|
return new ToolBar(buildButton);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,9 +8,6 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "../sdk"
|
"path": "../sdk"
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "../main"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -3,9 +3,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"language": "pbs",
|
"language": "pbs",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
{
|
|
||||||
"path": "../dep1"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "../sdk"
|
"path": "../sdk"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user