Skip to content

Commit

Permalink
Set the project type parameters outside DSL (#8)
Browse files Browse the repository at this point in the history
* Bump releng-lib version

* OCTOPUS-231 Add a doc

* OCTOPUS-237 Set the project type parameters outside DSL
  • Loading branch information
ozonophore committed Jul 24, 2023
1 parent fdf1536 commit ffd078d
Show file tree
Hide file tree
Showing 63 changed files with 883 additions and 377 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ on: [push, pull_request, workflow_dispatch]

jobs:
run-build-and-deploy:
uses: octopusden/octopus-base/.github/workflows/[email protected].2
uses: octopusden/octopus-base/.github/workflows/[email protected].3
with:
flow-type: hybrid
java-version: '11'
docker-image: components-registry-service
skip-tests: false
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,13 @@ To build with custom image use `--build-arg` option:
``
docker build --build-arg IMAGE=docker.io/customspace/openjdk11:latest .
``

## Project properties

| Name | Description |
|-------------------------------------------------|-----------------------------------|
| components-registry.supportedGroupIds | Supported group ids. |
| components-registry.supportedSystems | Supported systems. |
| components-registry.version-name.service-branch | Name of a service branch version. |
| components-registry.version-name.service | Name of a service version. |
| components-registry.version-name.minor | Name of a minor version. |
Original file line number Diff line number Diff line change
@@ -1,38 +1,42 @@
package org.octopusden.octopus.escrow


import groovy.transform.CompileStatic
import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.Validate
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
import org.octopusden.octopus.components.registry.api.model.Dependencies
import org.octopusden.octopus.escrow.model.Distribution
import org.octopusden.octopus.releng.dto.ComponentVersion
import org.octopusden.octopus.releng.dto.JiraComponent
import org.octopusden.releng.versions.ComponentVersionFormat
import org.octopusden.releng.versions.KotlinVersionFormatter
import org.octopusden.releng.versions.NumericVersion
import org.octopusden.releng.versions.NumericVersionFactory
import org.octopusden.releng.versions.VersionNames
import org.octopusden.utils.StringUtilsKt
import groovy.transform.CompileStatic
import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.Validate
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger

@CompileStatic
class ModelConfigPostProcessor {
private static final Logger log = LogManager.getLogger(ModelConfigPostProcessor.class)

private final ComponentVersion componentRelease
private final VersionNames versionNames

ModelConfigPostProcessor(ComponentVersion componentRelease) {
ModelConfigPostProcessor(ComponentVersion componentRelease, VersionNames versionNames) {
Validate.notNull(componentRelease)
Validate.notNull(versionNames)
this.componentRelease = componentRelease
this.versionNames = versionNames
}

String resolveVariables(String value) {
if (StringUtils.isBlank(value)) {
return value
}

def kvf = new KotlinVersionFormatter()
def version = NumericVersion.parse(componentRelease.version)
def kvf = new KotlinVersionFormatter(versionNames)
def factory = new NumericVersionFactory(versionNames)
def version = factory.create(componentRelease.version)

Map<String, String> context = new HashMap<>()
for (def i : kvf.PREDEFINED_VARIABLES_LIST) {
Expand Down Expand Up @@ -61,10 +65,10 @@ class ModelConfigPostProcessor {
}
def componentVersionFormat = jiraComponent.componentVersionFormat
final ComponentVersionFormat enrichedComponentVersionFormat = componentVersionFormat == null ? null : ComponentVersionFormat.create(
componentVersionFormat.majorVersionFormat,
componentVersionFormat.releaseVersionFormat,
componentVersionFormat.buildVersionFormat != null ? componentVersionFormat.buildVersionFormat : componentVersionFormat.releaseVersionFormat,
componentVersionFormat.lineVersionFormat != null ? componentVersionFormat.lineVersionFormat : componentVersionFormat.majorVersionFormat
componentVersionFormat.majorVersionFormat,
componentVersionFormat.releaseVersionFormat,
componentVersionFormat.buildVersionFormat != null ? componentVersionFormat.buildVersionFormat : componentVersionFormat.releaseVersionFormat,
componentVersionFormat.lineVersionFormat != null ? componentVersionFormat.lineVersionFormat : componentVersionFormat.majorVersionFormat
)
return new JiraComponent(jiraComponent.projectKey, jiraComponent.displayName, enrichedComponentVersionFormat, jiraComponent.componentInfo, jiraComponent.technical)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.octopusden.octopus.escrow.model.VCSSettings;
import org.octopusden.octopus.releng.JiraComponentVersionDeserializer;
import org.octopusden.octopus.releng.dto.JiraComponent;
import org.octopusden.releng.versions.VersionNames;

import java.io.IOException;
import java.util.ArrayList;
Expand All @@ -24,8 +25,14 @@

public class ComponentConfigDeserializer extends JsonDeserializer<ComponentConfig> {


private static final VCSSettingsDeserializer VCS_SETTINGS_DESERIALIZER = new VCSSettingsDeserializer();
private final VersionNames versionNames;
private final JiraComponentVersionRangeFactory jiraComponentVersionRangeFactory;

public ComponentConfigDeserializer(VersionNames versionNames) {
this.versionNames = versionNames;
this.jiraComponentVersionRangeFactory = new JiraComponentVersionRangeFactory(versionNames);
}

@Override
public ComponentConfig deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
Expand Down Expand Up @@ -68,12 +75,18 @@ private List<JiraComponentVersionRange> getJiraComponentVersionRangeList(JsonNod
private JiraComponentVersionRange getJiraComponentVersionRange(JsonNode node) {
TextNode versionRange = (TextNode) node.get("versionRange");
TextNode componentName = (TextNode) node.get("componentName");
JiraComponentVersionDeserializer jiraComponentVersionDeserializer = new JiraComponentVersionDeserializer();
JiraComponentVersionDeserializer jiraComponentVersionDeserializer = new JiraComponentVersionDeserializer(versionNames);
JiraComponent jiraComponent = jiraComponentVersionDeserializer.getJiraComponent(node);
Distribution distribution = getDistribution(node);
VCSSettings vcsSettings = VCS_SETTINGS_DESERIALIZER.deserialize(node.get("vcsSettings"));

return new JiraComponentVersionRange(componentName.textValue(), versionRange.textValue(), jiraComponent, distribution, vcsSettings);
return jiraComponentVersionRangeFactory.create(
componentName.textValue(),
versionRange.textValue(),
jiraComponent,
distribution,
vcsSettings
);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.octopusden.releng.versions.VersionNames;

import java.io.IOException;

public class ComponentConfigParser {

private final VersionNames versionNames;

public ComponentConfigParser(VersionNames versionNames) {
this.versionNames = versionNames;
}

public ComponentConfig parse(String componentConfigJson) throws IOException {
ObjectMapper objectMapper = getObjectMapper();
Expand All @@ -17,7 +23,7 @@ private ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();

SimpleModule module = new SimpleModule();
module.addDeserializer(ComponentConfig.class, new ComponentConfigDeserializer());
module.addDeserializer(ComponentConfig.class, new ComponentConfigDeserializer(versionNames));
objectMapper.registerModule(module);

return objectMapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.octopusden.octopus.escrow.model.Distribution;
import org.octopusden.octopus.escrow.model.VCSSettings;
import org.octopusden.octopus.releng.dto.ComponentVersion;
import org.octopusden.octopus.releng.dto.JiraComponent;
import org.octopusden.octopus.releng.dto.JiraComponentVersion;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
Expand All @@ -31,15 +30,21 @@ public class JiraComponentVersionRange {
@JsonProperty
private final VCSSettings vcsSettings;

private final JiraComponentVersion jiraComponentVersion;

@JsonCreator
public JiraComponentVersionRange(@JsonProperty("componentName") String componentName, @JsonProperty("versionRange") String versionRange,
@JsonProperty("component") JiraComponent component, @JsonProperty("distribution") Distribution distribution,
@JsonProperty("vcsSettings") VCSSettings vcsSettings) {
JiraComponentVersionRange(@JsonProperty("componentName") String componentName,
@JsonProperty("versionRange") String versionRange,
@JsonProperty("component")JiraComponent component,
@JsonProperty("distribution") Distribution distribution,
@JsonProperty("vcsSettings") VCSSettings vcsSettings,
JiraComponentVersion jiraComponentVersion) {
this.componentName = componentName;
this.versionRange = versionRange;
this.jiraComponent = component;
this.distribution = distribution;
this.vcsSettings = vcsSettings;
this.jiraComponentVersion = jiraComponentVersion;
}

public JiraComponent getComponent() {
Expand All @@ -50,8 +55,8 @@ public String getVersionRange() {
return versionRange;
}

public JiraComponentVersion getJiraComponentVersion(String version) {
return new JiraComponentVersion(ComponentVersion.create(componentName, version), jiraComponent);
public JiraComponentVersion getJiraComponentVersion() {
return jiraComponentVersion;
}

public String getComponentName() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.octopusden.octopus.escrow.config;

import org.octopusden.octopus.escrow.model.Distribution;
import org.octopusden.octopus.escrow.model.VCSSettings;
import org.octopusden.octopus.releng.JiraComponentVersionFormatter;
import org.octopusden.octopus.releng.dto.ComponentVersion;
import org.octopusden.octopus.releng.dto.JiraComponent;
import org.octopusden.octopus.releng.dto.JiraComponentVersion;
import org.octopusden.releng.versions.VersionNames;

public class JiraComponentVersionRangeFactory {

private final VersionNames versionNames;

public JiraComponentVersionRangeFactory(VersionNames versionNames) {
this.versionNames = versionNames;
}

public JiraComponentVersionRange create(
String componentName,
String versionRange,
JiraComponent jiraComponent,
Distribution distribution,
VCSSettings vcsSettings
) {
JiraComponentVersionFormatter jiraComponentVersionFormatter = new JiraComponentVersionFormatter(versionNames);
JiraComponentVersion jiraComponentVersion = JiraComponentVersion.builder(jiraComponentVersionFormatter)
.componentVersion(ComponentVersion.create(componentName, versionRange))
.component(jiraComponent)
.build();

return new JiraComponentVersionRange(
componentName,
versionRange,
jiraComponent,
distribution,
vcsSettings,
jiraComponentVersion
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,46 @@ import org.octopusden.octopus.releng.dto.JiraComponent
import org.octopusden.releng.versions.ComponentVersionFormat
import groovy.transform.TypeChecked
import org.junit.Test
import org.octopusden.releng.versions.VersionNames

@TypeChecked
class ModelConfigPostProcessorTest extends GroovyTestCase {

static final VersionNames VERSION_NAMES = new VersionNames("serviceCBranch", "serviceC", "minorC")

@Test
void testComponent() {
def branch = 'TEST_COMPONENT2_$major02_$minor02_$service02'
assert "TEST_COMPONENT2_03_38_30" == getModelConfigProcessor("03.38.30.15-23").resolveVariables(branch)
assert "TEST_COMPONENT2_03_38_30" == getModelConfigProcessor("03.38.30.15-23", VERSION_NAMES).resolveVariables(branch)
}

void testProcess() {
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2")
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
def value = '$module-$version'
assert modelConfigPostProcessor.resolveVariables(value) == "zenit-1.2"
}

void testProcessWithReplacement() {
def value = '$module-${version.replaceAll(\'\\\\.\', \'_\')}'
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2");
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
def result = modelConfigPostProcessor.resolveVariables(value)
assert result == 'zenit-null'
}

void testProcessCVSCompatibleVersion() {
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2");
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
def value = '$module-$cvsCompatibleVersion'
assert modelConfigPostProcessor.resolveVariables(value) == "zenit-1-2"
}

void testProcessCVSCompatibleUnderscoreVersion() {
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2");
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
def value = '$module-$cvsCompatibleUnderscoreVersion'
assert modelConfigPostProcessor.resolveVariables(value) == "zenit-1_2"
}

void testProcessVCSSettings() {
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2")
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
VCSSettings versionControlSystemRoot = createTestVCSSettings()

VCSSettings formatted = VCSSettings.createForSingleRoot(VersionControlSystemRoot.create("cvs1", RepositoryType.CVS, 'vcsPath/zenit',
Expand All @@ -65,7 +68,7 @@ class ModelConfigPostProcessorTest extends GroovyTestCase {

@TypeChecked
void testReleaseInfo() {
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2")
ModelConfigPostProcessor modelConfigPostProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)


BuildParameters buildParameters = BuildParameters.create("1.7", "3", "2.10", true, "03.32", '-Dpkgj_version=$version', "build", [], [])
Expand All @@ -82,7 +85,7 @@ class ModelConfigPostProcessorTest extends GroovyTestCase {
@TypeChecked
void testProcessJiraComponent() {
def fullFilledJiraComponent = getJiraComponent("KEY", "displayName", '$major.$minor', '$major.$minor.$service.$fix', '$major.$minor.$service.$fix-$build', '$major.$minor.$service', "", "", false)
def postProcessor = getModelConfigProcessor("1.2")
def postProcessor = getModelConfigProcessor("1.2", VERSION_NAMES)
def actualFullFilledJiraComponent = postProcessor.resolveJiraConfiguration(fullFilledJiraComponent)
assert fullFilledJiraComponent == actualFullFilledJiraComponent
def semiFilledJiraComponent = getJiraComponent("KEY", "displayName", '$major.$minor', '$major.$minor.$service.$fix', null, null, "", "", false)
Expand All @@ -92,8 +95,8 @@ class ModelConfigPostProcessorTest extends GroovyTestCase {

}

private static ModelConfigPostProcessor getModelConfigProcessor(String version) {
new ModelConfigPostProcessor(ComponentVersion.create("zenit", version))
private static ModelConfigPostProcessor getModelConfigProcessor(String version, VersionNames versionNames) {
new ModelConfigPostProcessor(ComponentVersion.create("zenit", version), versionNames)
}

private static JiraComponent getJiraComponent(String projectKey, String displayName, String majorVersionFormat, String releaseVersionFormat, String buildVersionFormat, String lineVersionFormat, String versionPrefix, String versionFormat, boolean isTechincal) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,40 @@ import org.octopusden.octopus.escrow.ComponentConfigParserTest
import org.octopusden.octopus.escrow.model.Distribution
import org.octopusden.octopus.escrow.model.SecurityGroups
import org.octopusden.octopus.escrow.model.VCSSettings
import org.octopusden.octopus.releng.JiraComponentVersionFormatter
import org.octopusden.octopus.releng.dto.ComponentInfo
import org.octopusden.octopus.releng.dto.ComponentVersion
import org.octopusden.octopus.releng.dto.JiraComponent
import org.octopusden.octopus.releng.dto.JiraComponentVersion
import groovy.transform.TypeChecked
import org.octopusden.releng.versions.VersionNames

@TypeChecked
class JiraComponentVersionRangeTest extends GroovyTestCase {

String TEST_COMPONENT ="TEST_COMPONENT"
String JIRA_PROJECT="TEST_PRJ"
String TEST_VERSION = "1.1"
VersionNames VERSION_NAMES = new VersionNames("serviceCBranch", "serviceC", "minorC")
JiraComponentVersionRangeFactory JIRA_COMPONENT_VERSION_RANGE_FACTORY = new JiraComponentVersionRangeFactory(VERSION_NAMES)

void testGetJiraComponentVersion() {
def jiraComponent = new JiraComponent(JIRA_PROJECT, "My display name", ComponentConfigParserTest.COMPONENT_VERSION_FORMAT_1,
new ComponentInfo("MyPrefix", '$versionPrefix-$baseVersionFormat'), true)
def distribution = new Distribution(true, true, null, new SecurityGroups(null))
def range = new JiraComponentVersionRange(TEST_COMPONENT, "[1.0,2)", jiraComponent, distribution, VCSSettings.createEmpty())
def expectedComponent = new JiraComponentVersion(ComponentVersion.create(TEST_COMPONENT, TEST_VERSION), jiraComponent)
assert expectedComponent == range.getJiraComponentVersion("1.1")

def range = JIRA_COMPONENT_VERSION_RANGE_FACTORY.create(
TEST_COMPONENT,
"1.1",
jiraComponent,
distribution,
VCSSettings.createEmpty()
)
def expectedComponent = JiraComponentVersion.builder(new JiraComponentVersionFormatter(VERSION_NAMES))
.componentVersion(ComponentVersion.create(TEST_COMPONENT, TEST_VERSION))
.component(jiraComponent)
.build()

assert expectedComponent == range.jiraComponentVersion
}
}
Loading

0 comments on commit ffd078d

Please sign in to comment.