Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поддержка 1cedtcli #133

Merged
18 changes: 18 additions & 0 deletions src/ru/pulsar/jenkins/library/edt/EdtCliEngineFactory.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.pulsar.jenkins.library.edt

import java.lang.module.ModuleDescriptor

class EdtCliEngineFactory {

static IEdtCliEngine getEngine(String edtVersion) {

def currentVersion = ModuleDescriptor.Version.parse(edtVersion)
def version2024 = ModuleDescriptor.Version.parse("2024")

if (currentVersion < version2024) {
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
return new RingConverter()
} else {
return new NativeEdtCliConverter()
}
}
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
}
11 changes: 11 additions & 0 deletions src/ru/pulsar/jenkins/library/edt/IEdtCliEngine.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.pulsar.jenkins.library.edt

import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration

interface IEdtCliEngine {
void edtToDesignerTransformConfiguration(IStepExecutor steps, JobConfiguration config);
void edtToDesignerTransformExtensions(IStepExecutor steps, JobConfiguration config);
void designerToEdtTransform(IStepExecutor steps, JobConfiguration config);
void edtValidate(IStepExecutor steps, JobConfiguration config, String projectList);
}
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
91 changes: 91 additions & 0 deletions src/ru/pulsar/jenkins/library/edt/NativeEdtCliConverter.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package ru.pulsar.jenkins.library.edt

import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.InitExtensionMethod
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.steps.DesignerToEdtFormatTransformation
import ru.pulsar.jenkins.library.steps.EdtToDesignerFormatTransformation
import ru.pulsar.jenkins.library.steps.EdtValidate
import ru.pulsar.jenkins.library.utils.FileUtils
import ru.pulsar.jenkins.library.utils.Logger

class NativeEdtCliConverter implements IEdtCliEngine {

@Override
void edtToDesignerTransformConfiguration(IStepExecutor steps, JobConfiguration config) {

String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.WORKSPACE").getRemote()
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote()
String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.CONFIGURATION_DIR").getRemote()

Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора с помощью ring")
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved

steps.deleteDir(configurationRoot)

def projectName = configurationRoot.getName()
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
def edtcliCommand = "1cedtcli -data \"$projectWorkspaceDir\" -command export --configuration-files \"$configurationRoot\" --project-name $projectName"

steps.cmd(edtcliCommand)

}

@Override
void edtToDesignerTransformExtensions(IStepExecutor steps, JobConfiguration config) {

def env = steps.env()

String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.WORKSPACE").getRemote()
String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR").getRemote()

config.initInfoBaseOptions.extensions.each {

if (it.initMethod != InitExtensionMethod.SOURCE) {
return
}

Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора с помощью 1cedtcli")
def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}")

def edtcliCommand = "1cedtcli -data \"$currentExtensionWorkspaceDir\" -command export --configuration-files \"$extensionRoot/${it.name}\" --project-name ${it.name}"

steps.cmd(edtcliCommand)

}

}
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved

@Override
void designerToEdtTransform(IStepExecutor steps, JobConfiguration config) {

def env = steps.env()

def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$DesignerToEdtFormatTransformation.WORKSPACE")
def srcDir = config.srcDir
def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir")
def projectName = configurationRoot.getName()

steps.deleteDir(workspaceDir)

Logger.println("Конвертация исходников из формата конфигуратора в формат EDT с помощью 1cedtcli")

def edtcliCommand = "1cedtcli -data \"$workspaceDir\" -command import --configuration-files \"$configurationRoot\" --project-name $projectName"

steps.cmd(edtcliCommand)

}
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved

@Override
void edtValidate(IStepExecutor steps, JobConfiguration config, String projectList) {

def env = steps.env()

String workspaceLocation = "$env.WORKSPACE/$DesignerToEdtFormatTransformation.WORKSPACE"
def resultFile = "$env.WORKSPACE/$EdtValidate.RESULT_FILE"

def edtcliCommand = "1cedtcli -data \"$workspaceLocation\" -command validate --file \"$resultFile\" $projectList"
steps.catchError {
steps.cmd(edtcliCommand)
}

}
}
100 changes: 100 additions & 0 deletions src/ru/pulsar/jenkins/library/edt/RingConverter.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package ru.pulsar.jenkins.library.edt

import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.InitExtensionMethod
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.steps.DesignerToEdtFormatTransformation
import ru.pulsar.jenkins.library.steps.EdtToDesignerFormatTransformation
import ru.pulsar.jenkins.library.steps.EdtValidate
import ru.pulsar.jenkins.library.utils.EDT
import ru.pulsar.jenkins.library.utils.FileUtils
import ru.pulsar.jenkins.library.utils.Logger

class RingConverter implements IEdtCliEngine {

@Override
void edtToDesignerTransformConfiguration(IStepExecutor steps, JobConfiguration config) {

def env = steps.env()
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved
def edtVersionForRing = EDT.ringModule(config)
def srcDir = config.srcDir

String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.WORKSPACE").getRemote()
String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote()
String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir").getRemote()
String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.CONFIGURATION_DIR").getRemote()

Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора с помощью ring")

steps.deleteDir(configurationRoot)

def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$projectWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""
steps.ringCommand(ringCommand)

}

@Override
void edtToDesignerTransformExtensions(IStepExecutor steps, JobConfiguration config) {

def env = steps.env()

String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.WORKSPACE").getRemote()
def edtVersionForRing = EDT.ringModule(config)
String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR").getRemote()

config.initInfoBaseOptions.extensions.each {

if (it.initMethod != InitExtensionMethod.SOURCE) {
return
}

Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора с помощью ring")

def projectDir = FileUtils.getFilePath("$env.WORKSPACE/${it.path}")
def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}")
def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\""
steps.ringCommand(ringCommand)
}
}

@Override
void designerToEdtTransform(IStepExecutor steps, JobConfiguration config) {

def env = steps.env()

def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$DesignerToEdtFormatTransformation.WORKSPACE")
def srcDir = config.srcDir
def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir")
def projectName = configurationRoot.getName()

steps.deleteDir(workspaceDir)
steps.deleteDir(configurationRoot)

Logger.println("Конвертация исходников из формата конфигуратора в формат EDT с помощью ring")

String edtVersionForRing = EDT.ringModule(config)
String ringCommand = "ring $edtVersionForRing workspace import --configuration-files \"$configurationRoot\" --project-name $projectName --workspace-location \"$workspaceDir\""
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved

steps.ringCommand(ringCommand)

}

@Override
void edtValidate(IStepExecutor steps, JobConfiguration config, String projectList) {

def env = steps.env()

def edtVersionForRing = EDT.ringModule(config)
String workspaceLocation = "$env.WORKSPACE/$DesignerToEdtFormatTransformation.WORKSPACE"

def resultFile = "$env.WORKSPACE/$EdtValidate.RESULT_FILE"

Logger.println("Версия EDT меньше 2024.1.X, для валидации используется ring")

def ringCommand = "ring $edtVersionForRing workspace validate --workspace-location \"$workspaceLocation\" --file \"$resultFile\" $projectList"
steps.catchError {
steps.ringCommand(ringCommand)
}

}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package ru.pulsar.jenkins.library.steps


import ru.pulsar.jenkins.library.edt.EdtCliEngineFactory
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.EDT
import ru.pulsar.jenkins.library.utils.FileUtils
import ru.pulsar.jenkins.library.utils.Logger

class DesignerToEdtFormatTransformation implements Serializable {
Expand All @@ -30,21 +28,8 @@ class DesignerToEdtFormatTransformation implements Serializable {
return
}

def env = steps.env()

def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE")
def srcDir = config.srcDir
def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir")
def projectName = configurationRoot.getName()
def edtVersionForRing = EDT.ringModule(config)

steps.deleteDir(workspaceDir)

Logger.println("Конвертация исходников из формата конфигуратора в формат EDT")

def ringCommand = "ring $edtVersionForRing workspace import --configuration-files \"$configurationRoot\" --project-name $projectName --workspace-location \"$workspaceDir\""

steps.ringCommand(ringCommand)
def engine = EdtCliEngineFactory.getEngine(config.edtVersion)
engine.designerToEdtTransform(steps, config)

steps.zip(WORKSPACE, WORKSPACE_ZIP)
steps.stash(WORKSPACE_ZIP_STASH, WORKSPACE_ZIP)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package ru.pulsar.jenkins.library.steps


import ru.pulsar.jenkins.library.edt.EdtCliEngineFactory
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.configuration.InitExtensionMethod
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.EDT
import ru.pulsar.jenkins.library.utils.FileUtils
import ru.pulsar.jenkins.library.utils.Logger

Expand Down Expand Up @@ -38,57 +36,19 @@ class EdtToDesignerFormatTransformation implements Serializable {

def env = steps.env();

String srcDir = config.srcDir
String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote()

String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote()
String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir").getRemote()
String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR").getRemote()


String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR").getRemote()
def edtVersionForRing = EDT.ringModule(config)

steps.deleteDir(workspaceDir)

transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing)
transformExtensions(steps, workspaceDir, extensionRoot, edtVersionForRing)
}

private void transformConfiguration(IStepExecutor steps, String projectDir, String projectWorkspaceDir, String configurationRoot, String edtVersionForRing) {

Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора")
steps.deleteDir(configurationRoot)

def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$projectWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""

steps.ringCommand(ringCommand)
def engine = EdtCliEngineFactory.getEngine(config.edtVersion)
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved

engine.edtToDesignerTransformConfiguration(steps, config)
steps.zip(CONFIGURATION_DIR, CONFIGURATION_ZIP)
steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP)
}

private void transformExtensions(IStepExecutor steps, String workspaceDir, String extensionRoot, String edtVersionForRing) {
steps.deleteDir(extensionRoot)

config.initInfoBaseOptions.extensions.each {

if (it.initMethod != InitExtensionMethod.SOURCE) {
return
}

Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора")

def env = steps.env();
def projectDir = FileUtils.getFilePath("$env.WORKSPACE/${it.path}")
def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}")

def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\""

steps.ringCommand(ringCommand)
}
engine.edtToDesignerTransformExtensions(steps, config)
ovcharenko-di marked this conversation as resolved.
Show resolved Hide resolved
steps.zip(EXTENSION_DIR, EXTENSION_ZIP)
steps.stash(EXTENSION_ZIP_STASH, EXTENSION_ZIP)

}

}
13 changes: 4 additions & 9 deletions src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package ru.pulsar.jenkins.library.steps

import ru.pulsar.jenkins.library.edt.EdtCliEngineFactory
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.EDT
import ru.pulsar.jenkins.library.utils.FileUtils
import ru.pulsar.jenkins.library.utils.Logger

Expand All @@ -31,7 +31,6 @@ class EdtValidate implements Serializable {

def env = steps.env()

String workspaceLocation = "$env.WORKSPACE/$DesignerToEdtFormatTransformation.WORKSPACE"
String projectList

if (config.sourceFormat == SourceFormat.DESIGNER) {
Expand All @@ -50,15 +49,11 @@ class EdtValidate implements Serializable {
projectList = "--project-list \"$projectDir\""
}

def resultFile = "$env.WORKSPACE/$RESULT_FILE"
def edtVersionForRing = EDT.ringModule(config)

Logger.println("Выполнение валидации EDT")

def ringCommand = "ring $edtVersionForRing workspace validate --workspace-location \"$workspaceLocation\" --file \"$resultFile\" $projectList"
steps.catchError {
steps.ringCommand(ringCommand)
}
def engine = EdtCliEngineFactory.getEngine(config.edtVersion)

engine.edtValidate(steps, config, projectList)

steps.archiveArtifacts("$DesignerToEdtFormatTransformation.WORKSPACE/.metadata/.log")
steps.archiveArtifacts(RESULT_FILE)
Expand Down