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); } /// /// Published nuget package /// /// 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()); } /// /// Publishes npm packages /// /// 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()); } /// /// Publishes maven package /// /// 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()); } }