90 lines
3.7 KiB
C#
90 lines
3.7 KiB
C#
using System.Text;
|
|
using Core;
|
|
using Core.Actions;
|
|
using Core.Events;
|
|
|
|
namespace Generator.Infrastructure.Publication;
|
|
|
|
public class Publisher
|
|
{
|
|
private readonly CommandExecutor _executor;
|
|
|
|
public Publisher(string invite, DisplayEmitter emitter)
|
|
{
|
|
_executor = new CommandExecutor(invite, emitter);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Published nuget package
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
public async Task PublishNugget(DotnetPublish data)
|
|
{
|
|
|
|
var packageFolder = new Location([data.DockerRoot, data.PackageFolder]);
|
|
|
|
var stringBuilder = new StringBuilder();
|
|
stringBuilder
|
|
.Append($"docker run --rm -it -v {data.LocalRoot}:{data.DockerRoot} {data.Image} /bin/sh -c '")
|
|
.Append($"cd {packageFolder} && ")
|
|
.Append($"dotnet nuget push out/{data.PackageFile}.{data.PackageVersion}.nupkg -k {data.AuthorizationToken} -s {data.Registry}'");
|
|
|
|
await _executor.RunAsync(stringBuilder.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Publishes npm packages
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
public async Task PublishNpm(JavascriptPublish data)
|
|
{
|
|
var specFile = new Location([data.DockerRoot, data.SpecFile]).ToString().Replace("/api/", "");
|
|
var frontFolder = new Location([data.DockerRoot, data.FrontFolder]);
|
|
var creds = data.DockerRoot.ConcatenateWith(".npmrc");
|
|
|
|
var stringBuilder = new StringBuilder();
|
|
stringBuilder.Append($"docker run --rm -it -v {data.LocalRoot}:{data.DockerRoot} {data.Image} /bin/sh -c '");
|
|
stringBuilder.Append("cd front && ");
|
|
stringBuilder.Append($"npm run prepare-workspace -- --apiName={data.PackageName} --apiVersion={data.Version} ");
|
|
stringBuilder.Append($"--apiFile={specFile} --registry={data.Registry} && ");
|
|
stringBuilder.Append("npm run package && ");
|
|
stringBuilder.Append($"cp {creds} ./ && ");
|
|
stringBuilder.Append($"mkdir -p {frontFolder} && ");
|
|
stringBuilder.Append($"cp -r dist/* {frontFolder} && ");
|
|
stringBuilder.Append("npm run publish'");
|
|
|
|
await _executor.RunAsync(stringBuilder.ToString());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Publishes maven package
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
public async Task PublishMaven(JavaPublish data)
|
|
{
|
|
var templateFolder = new Location([data.DockerRoot, data.TemplateFolder]);
|
|
var outputFolder = new Location([data.DockerRoot, data.OutputFolder]);
|
|
|
|
var stringBuilder = new StringBuilder();
|
|
stringBuilder.Append($"docker run --rm -it -v {data.LocalRoot}:{data.DockerRoot} ");
|
|
stringBuilder.Append($"-v {data.LocalRoot}maven-generated:/root/.m2/repository {data.Image} /bin/sh -c '");
|
|
stringBuilder.Append($"cp {templateFolder}/settings.xml /root/.m2 && ");
|
|
stringBuilder.Append($"cd {outputFolder} && ");
|
|
stringBuilder.Append("mvn -e deploy:deploy-file ");
|
|
stringBuilder.Append($"-D file=target/{data.Artifact}-{data.Version}.jar ");
|
|
stringBuilder.Append($"-D groupId={data.Group} ");
|
|
stringBuilder.Append($"-D artifactId={data.Artifact} ");
|
|
stringBuilder.Append($"-D version={data.Version} ");
|
|
stringBuilder.Append("-D packaging=jar ");
|
|
stringBuilder.Append("-D generatePom=true ");
|
|
stringBuilder.Append("-D repositoryId=fcsd ");
|
|
stringBuilder.Append("-D skipTests ");
|
|
stringBuilder.Append($"-D url={data.Registry} ");
|
|
stringBuilder.Append("-D repo.id=fcsd ");
|
|
stringBuilder.Append($"-D repo.username={data.Username} ");
|
|
stringBuilder.Append($"-D repo.password={data.Password}'");
|
|
|
|
await _executor.RunAsync(stringBuilder.ToString());
|
|
}
|
|
|
|
} |