diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml new file mode 100644 index 00000000..9311b004 --- /dev/null +++ b/.github/workflows/maven-build.yml @@ -0,0 +1,55 @@ +# Build validation + +name: Build + +on: + push: + branches-ignore: + - master + - experimental/** + pull_request: + branches-ignore: + - master + - experimental/** + workflow_dispatch: + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest ] + java: [8, 11, 17] + + steps: + # Check out Git repository + - name: Checkout code + uses: actions/checkout@v2 + + # Set up environment with Java and Maven + - name: Setup JDK + uses: actions/setup-java@v1 + with: + java-version: ${{ matrix.java }} + + # Set up dependency cache + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + # Build & install (required for 2nd build: example) + - name: Build and verify + run: ./mvnw -s ./.maven-settings.xml -Pcontinuous-integration -B -U clean install + + # Build & verify example + - name: Build and verify example + run: ./mvnw -s ./.maven-settings.xml -Pcontinuous-integration -B -U clean verify -f example + + # Run code coverage check + - name: Run code coverage check + run: bash <(curl -s https://codecov.io/bash) diff --git a/.github/workflows/maven-deploy.yml b/.github/workflows/maven-deploy.yml new file mode 100644 index 00000000..33d3373e --- /dev/null +++ b/.github/workflows/maven-deploy.yml @@ -0,0 +1,55 @@ +# Deploy snapshots to Sonatpe OSS repository and deploy site to GitHub Pages + +name: Deploy + +on: + push: + branches: + - develop + workflow_dispatch: + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + # Check out Git repository + - name: Checkout code + uses: actions/checkout@v2 + + # Configure GIT + - name: Configure GIT + run: | + git config --global user.email "${{ secrets.GH_SITE_DEPLOY_EMAIL }}" + git config --global user.name "${{ secrets.GH_SITE_DEPLOY_NAME }}" + + # Set up environment with Java and Maven + - name: Setup JDK + uses: actions/setup-java@v1 + with: + java-version: 1.8 + + # Set up dependency cache + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + + # Build, deploy to ossrh, generate and stage site + - name: Build, verify, deploy, generate site + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + run: ./mvnw -s ./.maven-settings.xml -Pcontinuous-integration -B -U clean deploy site + + # Deploy site to Github Pages + - name: Stage and deploy site + run: > + ./mvnw -s ./.maven-settings.xml -Pcontinuous-integration -B site:stage scm-publish:publish-scm + -Dscmpublish.checkinComment="Maven site: ${{ github.repository }}" + -Dusername=${{ secrets.GH_SITE_DEPLOY_USERNAME }} + -Dpassword=${{ secrets.GH_SITE_DEPLOY_PAT }} diff --git a/.travis.maven-settings.xml b/.maven-settings.xml similarity index 80% rename from .travis.maven-settings.xml rename to .maven-settings.xml index 8b184f67..fb12e792 100644 --- a/.travis.maven-settings.xml +++ b/.maven-settings.xml @@ -42,19 +42,6 @@ - - wcm-io-apache-intermediate-release - https://wcm.io/maven/repositories/apache-intermediate-release - default - - true - never - - - false - - - oss-snapshots https://oss.sonatype.org/content/repositories/snapshots @@ -98,19 +85,6 @@ - - wcm-io-apache-intermediate-release - https://wcm.io/maven/repositories/apache-intermediate-release - default - - true - never - - - false - - - oss-snapshots https://oss.sonatype.org/content/repositories/snapshots @@ -147,4 +121,12 @@ default + + + ossrh + ${env.SONATYPE_USERNAME} + ${env.SONATYPE_PASSWORD} + + + diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 00000000..b901097f --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 00000000..2cc7d4a5 Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..598fb341 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0d033d61..00000000 --- a/.travis.yml +++ /dev/null @@ -1,58 +0,0 @@ -# #%L -# wcm.io -# %% -# Copyright (C) 2015 wcm.io -# %% -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# #L% -# - -language: java - -jdk: -- openjdk8 -- openjdk11 - -# Make sure travis can use container-based infrastructure -sudo: false - -install: "mvn -s ./.travis.maven-settings.xml clean" - -script: -- "mvn -s ./.travis.maven-settings.xml -Pcontinuous-integration -U install" -# Separate build for example due to dependeny on conga-maven-plugin -- "mvn -s ./.travis.maven-settings.xml -Pcontinuous-integration -U install -f example" -# Remove wcm.io artefacts from repository before cache -- rm -rf $HOME/.m2/repository/io/wcm - -# exlude release tags like 1.0.0 -branches: - except: - - /^\d+(\.\d+\.\d+)?(\..*|\-.*)?$/ - -# Cache Maven Repository -cache: - directories: - - '$HOME/.m2/repository' - -# this will not work yet with a google groups mailing list - see https://github.com/travis-ci/travis-ci/issues/2513 -#notifications: -# email: -# recipients: -# - wcm-io-dev@googlegroups.com -# on_success: change -# on_failure: always - -# codecov.io integration -after_success: -- bash <(curl -s https://codecov.io/bash) diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 9acec44a..00000000 --- a/Jenkinsfile +++ /dev/null @@ -1,37 +0,0 @@ -@Library('pipeline-library') pipelineLibrary -@Library('pv-pipeline-library') pvPipelineLibrary - - -import io.wcm.devops.jenkins.pipeline.ssh.SSHTarget - -import static de.provision.devops.jenkins.pipeline.utils.ConfigConstants.* -import static io.wcm.devops.jenkins.pipeline.utils.ConfigConstants.* - -// See: -// https://github.com/pro-vision/jenkins-pv-pipeline-library -// https://github.com/pro-vision/jenkins-pv-pipeline-library/blob/master/docs/config-structure.md -// Also have a look at https://github.com/wcm-io-devops/jenkins-pipeline-library for further configuration options - -List triggers = defaults.getTriggers() -triggers.push(githubPush()) - -Map config = [ - (BUILD_WRAPPER): [ - (BUILD_WRAPPER_SSH_TARGETS): [new SSHTarget("ssh-wcm.io")] - ], - (PROPERTIES) : [ - (PROPERTIES_PIPELINE_TRIGGERS): triggers - ], - (STAGE_COMPILE): [ - (MAVEN): [ - (MAVEN_GOALS): ["clean", "deploy", "site-deploy"], - ] - ], - (STAGE_FEATURE_PREPARATION): [ - (STAGE_FEATURE_PREPARATION_MERGE): [ - (STAGE_FEATURE_PREPARATION_MERGE_ENABLED): false - ] - ] -] - -routeDefaultJenkinsFile(config) diff --git a/README.md b/README.md index 618a6b20..9137ba4e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ CONGA - CONfiguration GenerAtor ====== -[![Build Status](https://travis-ci.org/wcm-io-devops/conga.png?branch=develop)](https://travis-ci.org/wcm-io-devops/conga) +[![Build](https://github.com/wcm-io-devops/conga/workflows/Build/badge.svg?branch=develop)](https://github.com/wcm-io-devops/conga/actions?query=workflow%3ABuild+branch%3Adevelop) [![Code Coverage](https://codecov.io/gh/wcm-io-devops/conga/branch/develop/graph/badge.svg)](https://codecov.io/gh/wcm-io-devops/conga) wcm.io DevOps CONGA Configuration Generator. @@ -8,7 +8,7 @@ wcm.io DevOps CONGA Configuration Generator. Documentation: https://devops.wcm.io/conga/
Issues: https://wcm-io.atlassian.net/projects/WDCONGA
Wiki: https://wcm-io.atlassian.net/wiki/
-Continuous Integration: https://travis-ci.org/wcm-io-devops/conga
+Continuous Integration: https://github.com/wcm-io-devops/conga/actions
Commercial support: https://wcm.io/commercial-support.html @@ -16,7 +16,7 @@ Commercial support: https://wcm.io/commercial-support.html If you want to build from sources make sure you have configured all [Maven Repositories](https://devops.wcm.io/maven.html) in your settings.xml. -See [Travis Maven settings.xml](https://github.com/wcm-io-devops/conga/blob/master/.travis.maven-settings.xml) for an example with a full configuration. +See [Maven Settings](https://github.com/wcm-io-devops/conga/blob/develop/.maven-settings.xml) for an example with a full configuration. Then you can build using diff --git a/changes.xml b/changes.xml index 921f85c8..a7dea595 100644 --- a/changes.xml +++ b/changes.xml @@ -23,7 +23,13 @@ xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 https://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd"> - + + + Eliminate usage of uk.com.robust-it:cloning to be compatible with Java 16+. + + + + conga-maven-plugin: Allow to override maven properties used in CONGA definitions/environments via system parameters. diff --git a/example/environments/pom.xml b/example/environments/pom.xml index f31d8b89..645d7f67 100644 --- a/example/environments/pom.xml +++ b/example/environments/pom.xml @@ -50,7 +50,7 @@ io.wcm.devops io.wcm.devops.parent_toplevel - 1.2.4 + 1.2.10 xml site diff --git a/example/pom.xml b/example/pom.xml index 360eea53..75e8a263 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -26,7 +26,7 @@ io.wcm.maven io.wcm.maven.global-parent - 33 + 36 @@ -50,7 +50,7 @@ io.wcm.devops.conga conga-maven-plugin - 1.14.1-SNAPSHOT + 1.14.3-SNAPSHOT true diff --git a/generator/pom.xml b/generator/pom.xml index 2dbe62d8..2c5f0884 100644 --- a/generator/pom.xml +++ b/generator/pom.xml @@ -25,7 +25,7 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 ../parent/pom.xml @@ -36,7 +36,7 @@ wcm.io DevOps CONGA Configuration Generator. - conga/generator + generator @@ -44,7 +44,7 @@ io.wcm.devops.conga io.wcm.devops.conga.model - 1.14.2 + 1.14.4 compile @@ -71,12 +71,6 @@ compile - - uk.com.robust-it - cloning - compile - - org.apache.commons commons-jexl3 @@ -98,7 +92,6 @@ - @@ -109,16 +102,20 @@ - - - org.apache.maven.plugins - maven-site-plugin - - false - - - + + + + + org.apache.maven.plugins + maven-site-plugin + + ${site.deploy.url} + + + + + @@ -158,7 +155,7 @@ ${site.deploy.id} - ${site.deploy.url}${site.url.module.prefix} + ${site.deploy.url}/${site.url.module.prefix} diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/ContextPropertiesBuilder.java b/generator/src/main/java/io/wcm/devops/conga/generator/ContextPropertiesBuilder.java index fc24f84f..c01a2f3b 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/ContextPropertiesBuilder.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/ContextPropertiesBuilder.java @@ -40,8 +40,8 @@ import java.util.Map; import com.google.common.collect.ImmutableMap; -import com.rits.cloning.Cloner; +import io.wcm.devops.conga.generator.util.ObjectCloner; import io.wcm.devops.conga.generator.util.VariableObjectTreeResolver; import io.wcm.devops.conga.generator.util.VariableStringResolver; import io.wcm.devops.conga.model.environment.Environment; @@ -94,7 +94,7 @@ public static Map buildEnvironmentContextVariables(String enviro map.put(ENVIRONMENT, environmentName); // clone environment before resolving variables to make sure they are resolved only for this context, not for file generation - Environment clonedEnvironemnt = Cloner.standard().deepClone(environment); + Environment clonedEnvironemnt = ObjectCloner.deepClone(environment); // resolve all variables at any level in environment variableObjectTreeResolver.resolve(clonedEnvironemnt); diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/export/ModelExport.java b/generator/src/main/java/io/wcm/devops/conga/generator/export/ModelExport.java index e5c0e941..a6f5b17c 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/export/ModelExport.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/export/ModelExport.java @@ -27,6 +27,7 @@ * Defines an export configuration for model information. */ public final class ModelExport extends AbstractConfigurable { + private static final long serialVersionUID = 4642081520558431376L; private List node; diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/export/NodeModelExport.java b/generator/src/main/java/io/wcm/devops/conga/generator/export/NodeModelExport.java index 6fb1dd0a..ae82efc4 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/export/NodeModelExport.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/export/NodeModelExport.java @@ -25,8 +25,6 @@ import java.util.Map; import java.util.Set; -import com.rits.cloning.Cloner; - import io.wcm.devops.conga.generator.ContextProperties; import io.wcm.devops.conga.generator.spi.context.PluginContextOptions; import io.wcm.devops.conga.generator.spi.export.NodeModelExportPlugin; @@ -34,6 +32,7 @@ import io.wcm.devops.conga.generator.spi.export.context.ExportNodeRoleTenantData; import io.wcm.devops.conga.generator.spi.export.context.NodeModelExportContext; import io.wcm.devops.conga.generator.spi.yaml.context.YamlRepresenter; +import io.wcm.devops.conga.generator.util.ObjectCloner; import io.wcm.devops.conga.generator.util.VariableMapResolver; import io.wcm.devops.conga.generator.util.VariableStringResolver; import io.wcm.devops.conga.model.environment.Environment; @@ -116,7 +115,7 @@ public ExportNodeRoleData addRole(String role, List roleVariants, Map clonedConfig = Cloner.standard().deepClone(config); + Map clonedConfig = ObjectCloner.deepClone(config); // resolve variables in configuration, and remove context properties Map resolvedNodeConfig = variableMapResolver.resolve(clonedConfig, false); diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/util/EnvironmentExpander.java b/generator/src/main/java/io/wcm/devops/conga/generator/util/EnvironmentExpander.java index 024ce098..ad70dbec 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/util/EnvironmentExpander.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/util/EnvironmentExpander.java @@ -27,7 +27,6 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.collect.ImmutableList; -import com.rits.cloning.Cloner; import io.wcm.devops.conga.generator.GeneratorException; import io.wcm.devops.conga.model.environment.Environment; @@ -50,7 +49,7 @@ private EnvironmentExpander() { * @return Environment that contains only nodes with single node names */ public static Environment expandNodes(Environment environment, String environmentName) { - Environment clonedEnvironemnt = Cloner.standard().deepClone(environment); + Environment clonedEnvironemnt = ObjectCloner.deepClone(environment); clonedEnvironemnt.setNodes(environment.getNodes().stream() .flatMap(node -> getSingleNodes(node, environmentName)) @@ -76,7 +75,7 @@ else if (hasNode) { } else if (hasNodes) { for (String nodeName : node.getNodes()) { - Node clonedNode = Cloner.standard().deepClone(node); + Node clonedNode = ObjectCloner.deepClone(node); clonedNode.setNode(nodeName); clonedNode.setNodes(ImmutableList.of()); nodes.add(clonedNode); diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/util/ObjectCloner.java b/generator/src/main/java/io/wcm/devops/conga/generator/util/ObjectCloner.java new file mode 100644 index 00000000..8804e53a --- /dev/null +++ b/generator/src/main/java/io/wcm/devops/conga/generator/util/ObjectCloner.java @@ -0,0 +1,49 @@ +/* + * #%L + * wcm.io + * %% + * Copyright (C) 2021 wcm.io + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * #L% + */ +package io.wcm.devops.conga.generator.util; + +import java.io.Serializable; + +import org.apache.commons.lang3.SerializationUtils; + +/** + * Clone maps. + */ +public final class ObjectCloner { + + private ObjectCloner() { + // static methods only + } + + /** + * Deep clones an object. + * @param Type is expected to be serializable (but not enforced here to also support e.g. Map interface variables) + * @param input Input object + * @return Cloned object + */ + @SuppressWarnings("unchecked") + public static T deepClone(T input) { + if (!(input instanceof Serializable)) { + throw new IllegalArgumentException("Input not serializable: " + input); + } + return (T)SerializationUtils.clone((Serializable)input); + } + +} diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/util/RoleUtil.java b/generator/src/main/java/io/wcm/devops/conga/generator/util/RoleUtil.java index 2553e64e..ea3418c2 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/util/RoleUtil.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/util/RoleUtil.java @@ -29,7 +29,6 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.collect.ImmutableList; -import com.rits.cloning.Cloner; import io.wcm.devops.conga.generator.GeneratorException; import io.wcm.devops.conga.model.role.Role; @@ -106,7 +105,7 @@ private static Role getRole(String roleName, String context, Map r + "referenced in " + context + " does not exist."); } // clone role object because it may be changed when resolving inheritance - return Cloner.standard().deepClone(role); + return ObjectCloner.deepClone(role); } private static void validateRole(String roleName, Role role, String superRoleName, Role superRole) { @@ -151,7 +150,7 @@ private static void mergeRoleConfig(Role role, Role superRole) { if (!found) { // if super role does not have the variant from the sub role, add it to super role as well List mergedVariants = new ArrayList<>(superRole.getVariants()); - mergedVariants.add(Cloner.standard().deepClone(variant)); + mergedVariants.add(ObjectCloner.deepClone(variant)); superRole.setVariants(mergedVariants); } } diff --git a/generator/src/main/java/io/wcm/devops/conga/generator/util/VariableMapResolver.java b/generator/src/main/java/io/wcm/devops/conga/generator/util/VariableMapResolver.java index eb84eb7b..67c362af 100644 --- a/generator/src/main/java/io/wcm/devops/conga/generator/util/VariableMapResolver.java +++ b/generator/src/main/java/io/wcm/devops/conga/generator/util/VariableMapResolver.java @@ -29,7 +29,6 @@ import java.util.regex.Matcher; import com.google.common.collect.ImmutableList; -import com.rits.cloning.Cloner; import io.wcm.devops.conga.generator.spi.context.ValueProviderGlobalContext; @@ -209,7 +208,7 @@ private List replaceIterate(Map map, Map // allow to iterate over single values as well listObject = ImmutableList.of(listObject); } - Map variablesClone = new LinkedHashMap<>(Cloner.standard().deepClone(variables)); + Map variablesClone = new LinkedHashMap<>(ObjectCloner.deepClone(variables)); List result = new ArrayList<>(); int count = 0; for (Object item : (List)listObject) { diff --git a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope1.java b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope1.java index b82db1d1..ae1db904 100644 --- a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope1.java +++ b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope1.java @@ -25,6 +25,7 @@ import io.wcm.devops.conga.model.shared.AbstractConfigurable; public class ConfScope1 extends AbstractConfigurable { + private static final long serialVersionUID = 2765118713968544969L; private List scope2; private Map map; diff --git a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope2.java b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope2.java index da587357..80863821 100644 --- a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope2.java +++ b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope2.java @@ -22,6 +22,7 @@ import io.wcm.devops.conga.model.shared.AbstractConfigurable; public class ConfScope2 extends AbstractConfigurable { + private static final long serialVersionUID = -3341288196194211843L; private ConfScope3 scope31; private ConfScope3 scope32; diff --git a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope3.java b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope3.java index 4e20d975..adbc86c7 100644 --- a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope3.java +++ b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/ConfScope3.java @@ -22,6 +22,7 @@ import io.wcm.devops.conga.model.shared.AbstractConfigurable; public class ConfScope3 extends AbstractConfigurable { + private static final long serialVersionUID = -8001840561161642209L; private String prop3; diff --git a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/SimpleConf.java b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/SimpleConf.java index 62171385..8df05a44 100644 --- a/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/SimpleConf.java +++ b/generator/src/test/java/io/wcm/devops/conga/generator/util/testmodel/SimpleConf.java @@ -22,6 +22,7 @@ import io.wcm.devops.conga.model.shared.AbstractConfigurable; public class SimpleConf extends AbstractConfigurable { + private static final long serialVersionUID = 5937540303503036634L; // no additional properties diff --git a/model/pom.xml b/model/pom.xml index 7167d21f..a84f6092 100644 --- a/model/pom.xml +++ b/model/pom.xml @@ -25,7 +25,7 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 ../parent/pom.xml @@ -40,7 +40,7 @@ io.wcm.devops.conga io.wcm.devops.conga.resource - 1.14.2 + 1.14.4 @@ -87,6 +87,17 @@ + + + org.apache.maven.plugins + maven-site-plugin + false + + true + true + + + diff --git a/model/src/main/java/io/wcm/devops/conga/model/environment/Environment.java b/model/src/main/java/io/wcm/devops/conga/model/environment/Environment.java index 3f5d297c..7de14d05 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/environment/Environment.java +++ b/model/src/main/java/io/wcm/devops/conga/model/environment/Environment.java @@ -34,6 +34,7 @@ * The filename of the environment YAML file is the environment name, it's not included in the model. */ public final class Environment extends AbstractConfigurable { + private static final long serialVersionUID = -3146650632389125273L; private List nodes = new ArrayList<>(); private List roleConfig = new ArrayList<>(); diff --git a/model/src/main/java/io/wcm/devops/conga/model/environment/Node.java b/model/src/main/java/io/wcm/devops/conga/model/environment/Node.java index 565634d1..a5ca5f46 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/environment/Node.java +++ b/model/src/main/java/io/wcm/devops/conga/model/environment/Node.java @@ -31,6 +31,7 @@ * other deployment target. */ public final class Node extends AbstractConfigurable { + private static final long serialVersionUID = -7827167562783775179L; private String node; private List nodes = new ArrayList<>(); diff --git a/model/src/main/java/io/wcm/devops/conga/model/environment/NodeRole.java b/model/src/main/java/io/wcm/devops/conga/model/environment/NodeRole.java index 00efb583..5b226dce 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/environment/NodeRole.java +++ b/model/src/main/java/io/wcm/devops/conga/model/environment/NodeRole.java @@ -30,6 +30,7 @@ * Role assignment for a node in an environment. */ public final class NodeRole extends AbstractConfigurable { + private static final long serialVersionUID = 8208217702200393548L; private String role; private String variant; diff --git a/model/src/main/java/io/wcm/devops/conga/model/environment/RoleConfig.java b/model/src/main/java/io/wcm/devops/conga/model/environment/RoleConfig.java index 5d45682d..67d2ccfe 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/environment/RoleConfig.java +++ b/model/src/main/java/io/wcm/devops/conga/model/environment/RoleConfig.java @@ -25,6 +25,7 @@ * Global role-specific configuration. Configuration defined here applies to all nodes that have this role assigned. */ public final class RoleConfig extends AbstractConfigurable { + private static final long serialVersionUID = -8636577741823687304L; private String role; diff --git a/model/src/main/java/io/wcm/devops/conga/model/environment/Tenant.java b/model/src/main/java/io/wcm/devops/conga/model/environment/Tenant.java index 5364a932..1cf089cf 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/environment/Tenant.java +++ b/model/src/main/java/io/wcm/devops/conga/model/environment/Tenant.java @@ -31,6 +31,7 @@ * E.g. vhosts files for Apache Webserver. */ public final class Tenant extends AbstractConfigurable { + private static final long serialVersionUID = 3984905428304600647L; private String tenant; private List roles = new ArrayList<>(); diff --git a/model/src/main/java/io/wcm/devops/conga/model/role/Role.java b/model/src/main/java/io/wcm/devops/conga/model/role/Role.java index bb97c86b..019a3ef9 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/role/Role.java +++ b/model/src/main/java/io/wcm/devops/conga/model/role/Role.java @@ -31,6 +31,7 @@ * The filename of the role YAML file is the role name, it's not included in the model. */ public final class Role extends AbstractConfigurable { + private static final long serialVersionUID = 4736362819976273689L; private List inherits = new ArrayList<>(); private List variants = new ArrayList<>(); diff --git a/model/src/main/java/io/wcm/devops/conga/model/role/RoleFile.java b/model/src/main/java/io/wcm/devops/conga/model/role/RoleFile.java index c71a0919..6dbe084e 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/role/RoleFile.java +++ b/model/src/main/java/io/wcm/devops/conga/model/role/RoleFile.java @@ -39,6 +39,7 @@ * Defines a file to be generated or downloaded for a role. */ public final class RoleFile extends AbstractModel { + private static final long serialVersionUID = -6027099825211623171L; private static final String VARIANT_MANDATORY_SUFFIX = "*"; diff --git a/model/src/main/java/io/wcm/devops/conga/model/role/RoleInherit.java b/model/src/main/java/io/wcm/devops/conga/model/role/RoleInherit.java index a319393c..bb24248a 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/role/RoleInherit.java +++ b/model/src/main/java/io/wcm/devops/conga/model/role/RoleInherit.java @@ -25,6 +25,7 @@ * Defines an inheritance relation to another role. */ public final class RoleInherit extends AbstractModel { + private static final long serialVersionUID = -7870095532845063259L; private String role; diff --git a/model/src/main/java/io/wcm/devops/conga/model/role/RoleVariant.java b/model/src/main/java/io/wcm/devops/conga/model/role/RoleVariant.java index 2f4a8db8..1c06d44b 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/role/RoleVariant.java +++ b/model/src/main/java/io/wcm/devops/conga/model/role/RoleVariant.java @@ -25,6 +25,7 @@ * Defines a named variant of a role. */ public final class RoleVariant extends AbstractConfigurable { + private static final long serialVersionUID = 8927953093805130622L; private String variant; diff --git a/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractConfigurable.java b/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractConfigurable.java index f64cdc82..c184ad4f 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractConfigurable.java +++ b/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractConfigurable.java @@ -21,6 +21,7 @@ import static io.wcm.devops.conga.model.util.DefaultUtil.defaultEmptyMap; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -29,7 +30,8 @@ /** * Abstract {@link Configurable} implementation. */ -public abstract class AbstractConfigurable extends AbstractModel implements Configurable { +public abstract class AbstractConfigurable extends AbstractModel implements Configurable, Serializable { + private static final long serialVersionUID = 5009663684342529022L; private Map config = new HashMap<>(); diff --git a/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractModel.java b/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractModel.java index a2840ce8..f661facf 100644 --- a/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractModel.java +++ b/model/src/main/java/io/wcm/devops/conga/model/shared/AbstractModel.java @@ -19,13 +19,16 @@ */ package io.wcm.devops.conga.model.shared; +import java.io.Serializable; + import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; /** * Abstract model implementation. */ -public abstract class AbstractModel implements Cloneable { +public abstract class AbstractModel implements Serializable { + private static final long serialVersionUID = -8387881912415309523L; @Override public String toString() { diff --git a/mvnw b/mvnw new file mode 100755 index 00000000..41c0f0c2 --- /dev/null +++ b/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 00000000..86115719 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/parent/pom.xml b/parent/pom.xml index 65f5ed61..49a356e5 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -25,20 +25,25 @@ io.wcm.devops io.wcm.devops.parent_toplevel - 1.2.4 + 1.2.10 io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 pom CONGA Parent POM for all wcm.io CONGA projects. + + GitHub Actions + https://github.com/wcm-io-devops/conga/actions + + - 4.2.0 + 4.3.0 @@ -47,25 +52,25 @@ org.yaml snakeyaml - 1.26 + 1.29 org.apache.commons commons-lang3 - 3.10 + 3.12.0 org.apache.commons commons-text - 1.8 + 1.9 com.google.guava guava - 29.0-jre + 31.0.1-jre @@ -77,13 +82,13 @@ commons-io commons-io - 2.7 + 2.11.0 commons-cli commons-cli - 1.4 + 1.5.0 @@ -100,31 +105,25 @@ com.google.code.gson gson - 2.8.6 - - - - uk.com.robust-it - cloning - 1.9.12 + 2.8.9 org.springframework spring-core - 4.3.27.RELEASE + 4.3.30.RELEASE org.apache.sling org.apache.sling.commons.osgi - 2.4.0 + 2.4.2 org.apache.commons commons-jexl3 - 3.1 + 3.2.1 @@ -133,11 +132,13 @@ - + org.apache.maven.plugins maven-site-plugin + false + true true diff --git a/pom.xml b/pom.xml index 3bf3ad9b..32450a45 100644 --- a/pom.xml +++ b/pom.xml @@ -25,13 +25,13 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 parent/pom.xml io.wcm.devops.conga io.wcm.devops.conga.root - 1.14.2 + 1.14.4 pom CONGA @@ -72,12 +72,20 @@ - org.apache.maven.plugins maven-site-plugin - false + ${site.deploy.url} + + + + + org.apache.maven.plugins + maven-scm-publish-plugin + + ${site.url.module.prefix} + true @@ -87,7 +95,7 @@ ${site.deploy.id} - ${site.deploy.url}${site.url.module.prefix} + ${site.deploy.url} diff --git a/resource/pom.xml b/resource/pom.xml index ffb493f2..6b305fc8 100644 --- a/resource/pom.xml +++ b/resource/pom.xml @@ -25,7 +25,7 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 ../parent/pom.xml @@ -75,6 +75,17 @@ + + + org.apache.maven.plugins + maven-site-plugin + false + + true + true + + + diff --git a/src/site/markdown/extensibility.md b/src/site/markdown/extensibility.md index 436fea48..0a4acb53 100644 --- a/src/site/markdown/extensibility.md +++ b/src/site/markdown/extensibility.md @@ -44,12 +44,16 @@ See API documentation for the detailed plugin interfaces: | `conf` | .conf | X | | | | | `unixShellScript` | .sh | X | | | | | `windowsShellScript` | .bat, .cmd | X | | | | +| `none` | | X | X | X | | + +The `none` plugins allow to disable the default behavior based on the file extension. #### Multiply plugins | Plugin name | Description |-------------|------------- | `tenant` | Allows to generate a file for each tenant defined in the environment. +| `none` | No multiply #### Value Provider plugins @@ -63,6 +67,7 @@ See API documentation for the detailed plugin interfaces: | Plugin name | Description |-------------|------------- | `yaml` | Dumps all "model data" (expanded configuration, list of generated files and tenants) from CONGA to "model.yaml" files for each node. This file can be picked up by infrastructure automation tools e.g. Ansible to execute the further deployment steps. +| `none` | No export #### URL File plugins diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md index 6cdb1da7..029e977f 100644 --- a/src/site/markdown/index.md +++ b/src/site/markdown/index.md @@ -57,6 +57,7 @@ Definitions for CONGA: * [adaptTo() 2017 Talk: Automate AEM Deployment with Ansible and wcm.io CONGA][adaptto-talk-2017-aem-ansible] * [adaptTo() 2017 Lightning Talk: Use CONGA to provision your local AEM instance][adaptto-talk-2017-lightning-provision-local-aem] * [adaptTo() 2018 Talk: Maven Archetypes for AEM][adaptto-talk-2018-aem-archetypes] +* [adaptTo() 2020 Talk: Use Cloud Manager to deploy CONGA-based AEM Applications](https://adapt.to/2020/en/schedule/use-cloud-manager-to-deploy-conga-based-aem-applications.html) * [wcm.io Ansible Automation for AEM][aem-ansible] diff --git a/tooling/conga-cli/pom.xml b/tooling/conga-cli/pom.xml index 1a9fffe8..bd7800ff 100644 --- a/tooling/conga-cli/pom.xml +++ b/tooling/conga-cli/pom.xml @@ -25,7 +25,7 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 ../../parent/pom.xml @@ -40,7 +40,7 @@ io.wcm.devops.conga io.wcm.devops.conga.generator - 1.14.2 + 1.14.4 compile @@ -106,6 +106,17 @@ + + + org.apache.maven.plugins + maven-site-plugin + false + + true + true + + + diff --git a/tooling/conga-maven-plugin/pom.xml b/tooling/conga-maven-plugin/pom.xml index f8e5d5e2..b2f0def3 100644 --- a/tooling/conga-maven-plugin/pom.xml +++ b/tooling/conga-maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.wcm.devops.conga io.wcm.devops.conga.parent - 1.14.2 + 1.14.4 ../../parent/pom.xml @@ -37,7 +37,7 @@ 3.3.9 - conga/tooling/conga-maven-plugin + tooling/conga-maven-plugin @@ -49,7 +49,7 @@ io.wcm.devops.conga io.wcm.devops.conga.generator - 1.14.2 + 1.14.4 compile @@ -146,16 +146,20 @@ - - - org.apache.maven.plugins - maven-site-plugin - - false - - - + + + + + org.apache.maven.plugins + maven-site-plugin + + ${site.deploy.url} + + + + + @@ -234,7 +238,7 @@ ${site.deploy.id} - ${site.deploy.url}${site.url.module.prefix} + ${site.deploy.url}/${site.url.module.prefix}