diff --git a/CHANGELOG.md b/CHANGELOG.md index e55f8ed761..a613576ac5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,17 +10,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Create OpenAPI specification during build - Extension point entries with supplied extensionName are sorted ascending - Possibility to configure git core config entries for jgit like core.trustfolderstat and core.supportsatomicfilecreation +- Babel-plugin-styled-components for persistent generated classnames - By default, only 100 files will be listed in source view in one request ### Changed - New footer design - Update jgit to version 5.6.1.202002131546-r-scm1 - Update svnkit to version 1.10.1-scm1 +- Secondary navigation collapsable ### Fixed - Modification for mercurial repositories with enabled XSRF protection - Does not throw NullPointerException when merge fails without normal merge conflicts - Keep file attributes on modification +- Drop Down Component works again with translations ### Removed - Enunciate rest documentation diff --git a/Jenkinsfile b/Jenkinsfile index 65f8428034..e5f88e787f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,24 +1,21 @@ #!groovy -// Keep the version in sync with the one used in pom.xml in order to get correct syntax completion. -@Library('github.com/cloudogu/ces-build-lib@1.35.1') +// switch back to a stable tag, after pr 22 is mreged an the next version is released +// see https://github.com/cloudogu/ces-build-lib/pull/22 +@Library('github.com/cloudogu/ces-build-lib@8e9194e8') import com.cloudogu.ces.cesbuildlib.* node('docker') { - // Change this as when we go back to default - necessary for proper SonarQube analysis mainBranch = 'develop' properties([ // Keep only the last 10 build to preserve space buildDiscarder(logRotator(numToKeepStr: '10')), - disableConcurrentBuilds(), - parameters([ - string(name: 'dockerTag', trim: true, defaultValue: 'latest', description: 'Extra Docker Tag for cloudogu/scm-manager image') - ]) + disableConcurrentBuilds() ]) - timeout(activity: true, time: 40, unit: 'MINUTES') { + timeout(activity: true, time: 60, unit: 'MINUTES') { Git git = new Git(this) @@ -30,16 +27,47 @@ node('docker') { checkout scm } + if (isReleaseBranch()) { + stage('Set Version') { + String releaseVersion = getReleaseVersion(); + // set maven versions + mvn "versions:set -DgenerateBackupPoms=false -DnewVersion=${releaseVersion}" + // set versions for ui packages + // we need to run 'yarn install' in order to set version with ui-scripts + mvn "-pl :scm-ui buildfrontend:install@install" + mvn "-pl :scm-ui buildfrontend:run@set-version" + + // stage pom changes + sh "git status --porcelain | sed s/^...// | grep pom.xml | xargs git add" + // stage package.json changes + sh "git status --porcelain | sed s/^...// | grep package.json | xargs git add" + // stage lerna.json changes + sh "git add lerna.json" + + // commit changes + sh "git -c user.name='CES Marvin' -c user.email='cesmarvin@cloudogu.com' commit -m 'release version ${releaseVersion}'" + + // merge release branch into master + sh "git checkout master" + sh "git merge --ff-only ${env.BRANCH_NAME}" + + // set tag + sh "git -c user.name='CES Marvin' -c user.email='cesmarvin@cloudogu.com' tag -m 'release version ${releaseVersion}' ${releaseVersion}" + } + } + stage('Build') { mvn 'clean install -DskipTests' } stage('Unit Test') { mvn 'test -Pcoverage -Dmaven.test.failure.ignore=true' + junit allowEmptyResults: true, testResults: '**/target/surefire-reports/TEST-*.xml,**/target/jest-reports/TEST-*.xml' } stage('Integration Test') { - mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true -Dscm.git.core.trustfolderstat=false' + mvn 'verify -Pit -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true -Dscm.git.core.supportsatomicfilecreation=false' + junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/TEST-*.xml' } stage('SonarQube') { @@ -51,10 +79,7 @@ node('docker') { } } - def commitHash = git.getCommitHash() - def dockerImageTag = "2.0.0-dev-${commitHash.substring(0,7)}-${BUILD_NUMBER}" - - if (isMainBranch()) { + if (isMainBranch() || isReleaseBranch()) { stage('Lifecycle') { try { @@ -66,38 +91,106 @@ node('docker') { } } - stage('Archive') { - archiveArtifacts 'scm-webapp/target/scm-webapp.war' - archiveArtifacts 'scm-server/target/scm-server-app.*' - } + if (isBuildSuccessful()) { - stage('Docker') { - def image = docker.build('cloudogu/scm-manager') - docker.withRegistry('', 'hub.docker.com-cesmarvin') { - image.push(dockerImageTag) - image.push('latest') - if (!'latest'.equals(params.dockerTag)) { - image.push(params.dockerTag) + def commitHash = git.getCommitHash() - def newDockerTag = "2.0.0-${commitHash.substring(0,7)}-dev-${params.dockerTag}" - currentBuild.description = newDockerTag - image.push(newDockerTag) + def imageVersion = mvn.getVersion() + if (imageVersion.endsWith('-SNAPSHOT')) { + imageVersion = imageVersion.replace('-SNAPSHOT', "-${commitHash.substring(0,7)}-${BUILD_NUMBER}") + } + + stage('Archive') { + archiveArtifacts 'scm-webapp/target/scm-webapp.war' + archiveArtifacts 'scm-server/target/scm-server-app.*' + } + + stage('Maven Deployment') { + // TODO why is the server recreated + // delete appassembler target, because the maven plugin fails to recreate the tar + sh "rm -rf scm-server/target/appassembler" + + // deploy java artifacts + mvn.useRepositoryCredentials([id: 'maven.scm-manager.org', url: 'https://maven.scm-manager.org/nexus', credentialsId: 'maven.scm-manager.org', type: 'Nexus2']) + mvn.deployToNexusRepository() + + // deploy frontend bits + withCredentials([string(credentialsId: 'cesmarvin_npm_token', variable: 'NPM_TOKEN')]) { + writeFile encoding: 'UTF-8', file: '.npmrc', text: "//registry.npmjs.org/:_authToken='${NPM_TOKEN}'" + writeFile encoding: 'UTF-8', file: '.yarnrc', text: ''' + registry "https://registry.npmjs.org/" + always-auth true + email cesmarvin@cloudogu.com + '''.trim() + + // we are tricking lerna by pretending that we are not a git repository + sh "mv .git .git.disabled" + try { + mvn "-pl :scm-ui buildfrontend:run@deploy" + } finally { + sh "mv .git.disabled .git" + } + } + } + + stage('Docker') { + docker.withRegistry('', 'hub.docker.com-cesmarvin') { + // push to cloudogu repository for internal usage + def image = docker.build('cloudogu/scm-manager') + image.push(imageVersion) + if (isReleaseBranch()) { + // push to official repository + image = docker.build('scmmanager/scm-manager') + image.push(imageVersion) + } + } + } + + stage('Presentation Environment') { + build job: 'scm-manager/next-scm.cloudogu.com', propagate: false, wait: false, parameters: [ + string(name: 'changeset', value: commitHash), + string(name: 'imageTag', value: imageVersion) + ] + } + + if (isReleaseBranch()) { + stage('Update Repository') { + + // merge changes into develop + sh "git checkout develop" + // TODO what if we have a conflict + // e.g.: someone has edited the changelog during the release + sh "git merge master" + + // set versions for maven packages + mvn "build-helper:parse-version versions:set -DgenerateBackupPoms=false -DnewVersion='\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.0-SNAPSHOT'" + + // set versions for ui packages + mvn "-pl :scm-ui buildfrontend:run@set-version" + + // stage pom changes + sh "git status --porcelain | sed s/^...// | grep pom.xml | xargs git add" + // stage package.json changes + sh "git status --porcelain | sed s/^...// | grep package.json | xargs git add" + // stage lerna.json changes + sh "git add lerna.json" + + // commit changes + sh "git -c user.name='CES Marvin' -c user.email='cesmarvin@cloudogu.com' commit -m 'prepare for next development iteration'" + + // push changes back to remote repository + withCredentials([usernamePassword(credentialsId: 'cesmarvin-github', usernameVariable: 'GIT_AUTH_USR', passwordVariable: 'GIT_AUTH_PSW')]) { + sh "git -c credential.helper=\"!f() { echo username='\$GIT_AUTH_USR'; echo password='\$GIT_AUTH_PSW'; }; f\" push origin master --tags" + sh "git -c credential.helper=\"!f() { echo username='\$GIT_AUTH_USR'; echo password='\$GIT_AUTH_PSW'; }; f\" push origin develop --tags" + sh "git -c credential.helper=\"!f() { echo username='\$GIT_AUTH_USR'; echo password='\$GIT_AUTH_PSW'; }; f\" push origin :${env.BRANCH_NAME}" + } } } - } - stage('Deployment') { - build job: 'scm-manager/next-scm.cloudogu.com', propagate: false, wait: false, parameters: [ - string(name: 'changeset', value: commitHash), - string(name: 'imageTag', value: dockerImageTag) - ] } } } - // Archive Unit and integration test results, if any - junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/TEST-*.xml,**/target/surefire-reports/TEST-*.xml,**/target/jest-reports/TEST-*.xml' - mailIfStatusChanged(git.commitAuthorEmail) } } @@ -107,7 +200,7 @@ String mainBranch Maven setupMavenBuild() { Maven mvn = new MavenWrapperInDocker(this, "scmmanager/java-build:11.0.6_10") - if (isMainBranch()) { + if (isMainBranch() || isReleaseBranch()) { // Release starts javadoc, which takes very long, so do only for certain branches mvn.additionalArgs += ' -DperformRelease' // JDK8 is more strict, we should fix this before the next release. Right now, this is just not the focus, yet. @@ -144,6 +237,14 @@ void analyzeWith(Maven mvn) { } } +boolean isReleaseBranch() { + return env.BRANCH_NAME.startsWith("release/"); +} + +String getReleaseVersion() { + return env.BRANCH_NAME.substring("release/".length()); +} + boolean isMainBranch() { return mainBranch.equals(env.BRANCH_NAME) } diff --git a/docs/Home.md b/docs/Home.md index 559b0c47e4..bd3008f3dd 100644 --- a/docs/Home.md +++ b/docs/Home.md @@ -27,7 +27,7 @@ for more information. GmbH](https://www.scm-manager.org/scm-manager-2/scm-manager-2-gets-a-boost-by-cloudogu-gmbh/ "wikilink") - \*\*2018-05-04\*\* - SCM-Manager 1.60 released ([download](http://www.scm-manager.org/download/ "wikilink") \| - [release notes](release-notes "wikilink")) + [release notes](release-notes.md "wikilink")) - \*\*2018-04-11\*\* - SCM-Manager 1.59 released [All news](http://www.scm-manager.org/news/ "wikilink") @@ -42,59 +42,59 @@ for more information. ### Use SCM-Manager -- [Getting started](getting-started "wikilink") +- [Getting started](getting-started.md "wikilink") - [Download latest version](http://www.scm-manager.org/download/ "wikilink") -- [FAQ](faq "wikilink") -- [Upgrade SCM-Manager to a newer version](upgrade "wikilink") +- [FAQ](faq.md "wikilink") +- [Upgrade SCM-Manager to a newer version](upgrade.md "wikilink") - [Download latest snapshot - release](download-snapshot-release "wikilink") -- [Download Archive](download-archive "wikilink") -- [Command line client](command-line-client "wikilink") -- [SCM-Server SSL](scm-server-ssl "wikilink") + release](download-snapshot-release.md "wikilink") +- [Download Archive](download-archive.md "wikilink") +- [Command line client](command-line-client.md "wikilink") +- [SCM-Server SSL](scm-server-ssl.md "wikilink") - [ApplicationServer - (Tomcat/Glassfish/Jetty)](applicationserver "wikilink") + (Tomcat/Glassfish/Jetty)](applicationserver.md "wikilink") - [Using SCM-Manager with Apache - mod\_proxy](apache/apache-mod_proxy "wikilink") -- [Using SCM-Manager with Nginx](nginx "wikilink") + mod\_proxy](apache/apache-mod_proxy.md "wikilink") +- [Using SCM-Manager with Nginx](nginx.md "wikilink") - [Using SCM-Manager with ISS - (Helicon)](SCM-Manager%20on%20ISS%20Helicon "wikilink") -- [Permissions](https://bitbucket.org/sdorra/scm-manager/wiki/Permissions "wikilink") + (Helicon)](SCM-Manager%20on%20ISS%20Helicon.md "wikilink") +- [Permissions](Permissions.md "wikilink") - [Plugins](http://plugins.scm-manager.org/scm-plugin-backend/page/index.html "wikilink") - [Revision Control Plugin - Comparison](rv-plugin-comparison "wikilink") + Comparison](rv-plugin-comparison.md "wikilink") - [Screenshots](http://www.scm-manager.org/screenshots/ "wikilink") -- [Mercurial Subrepositories](subrepositories "wikilink") -- [Unix Daemons and Windows Services](daemons "wikilink") -- [RPM and DEB packages](RPM%20and%20DEB%20packages "wikilink") +- [Mercurial Subrepositories](subrepositories.md "wikilink") +- [Unix Daemons and Windows Services](daemons.md "wikilink") +- [RPM and DEB packages](RPM%20and%20DEB%20packages.md "wikilink") - [Build windows mercurial packages for SCM-Manager](https://bitbucket.org/sdorra/build-win-hg-packages "wikilink") ### Plugin documentation -- [Active Directory Plugin](active-directory-plugin "wikilink") -- [Branch Write Protect Plugin](branchwp-plugin "wikilink") -- [Jenkins Plugin](jenkins-plugin "wikilink") -- [Jira Plugin](jira-plugin "wikilink") -- [Mail Plugin](mail-plugin "wikilink") -- [Path Write Protect Plugin](pathwp-plugin "wikilink") -- [Redmine Plugin](redmine-plugin "wikilink") -- [Scheduler Plugin](scheduler-plugin "wikilink") -- [Trac Plugin](trac-plugin "wikilink") -- [WebHook Plugin](webhook-plugin "wikilink") +- [Active Directory Plugin](active-directory-plugin.md "wikilink") +- [Branch Write Protect Plugin](branchwp-plugin.md "wikilink") +- [Jenkins Plugin](jenkins-plugin.md "wikilink") +- [Jira Plugin](jira-plugin.md "wikilink") +- [Mail Plugin](mail-plugin.md "wikilink") +- [Path Write Protect Plugin](pathwp-plugin.md "wikilink") +- [Redmine Plugin](redmine-plugin.md "wikilink") +- [Scheduler Plugin](scheduler-plugin.md "wikilink") +- [Trac Plugin](trac-plugin.md "wikilink") +- [WebHook Plugin](webhook-plugin.md "wikilink") ### Development -- [Building SCM-Manager from source](build-from-source "wikilink") -- [Java Client API](java-client-api "wikilink") +- [Building SCM-Manager from source](build-from-source.md "wikilink") +- [Java Client API](java-client-api.md "wikilink") - [Code Snippets](https://bitbucket.org/sdorra/scm-manager/wiki/code-snippets "wikilink") - [Configuring Eclipse projects for - SCM-Manager](configure-eclipse "wikilink") -- [Plugin Descriptor](plugin-descriptor "wikilink") -- [ExtensionPoints](ExtensionPoints "wikilink") -- [How to create your own plugin](howto-create-a-plugin "wikilink") -- [Injection Objects](injectionObjects "wikilink") + SCM-Manager](configure-eclipse.md "wikilink") +- [Plugin Descriptor](plugin-descriptor.md "wikilink") +- [ExtensionPoints](ExtensionPoints.md "wikilink") +- [How to create your own plugin](howto-create-a-plugin.md "wikilink") +- [Injection Objects](injectionObjects.md "wikilink") - [API documentation](http://docs.scm-manager.org/apidocs/latest/ "wikilink") - [WebService @@ -103,24 +103,24 @@ for more information. ### SCM Manager 2 - [Configuration for Intellij - IDEA](v2/intellij-idea-configuration "wikilink") + IDEA](v2/intellij-idea-configuration.md "wikilink") - [State of SCM-Manager 2 - development](v2/State%20of%20SCM-Manager%202%20development "wikilink") -- [SCM v2 Test Cases](v2/SCMM-v2-Test-Cases "wikilink") + development](v2/State%20of%20SCM-Manager%202%20development.md "wikilink") +- [SCM v2 Test Cases](v2/SCMM-v2-Test-Cases.md "wikilink") - [Table of decisions made during - development](v2/Decision-Table "wikilink") -- [Definition of done](Definition_of_done "wikilink") -- [Style Guide](v2/style-guide "wikilink") -- [Error Handling in REST, Java, UI](v2/error-handling "wikilink") -- [Create a new Plugin](v2/Create_a_new_Plugin "wikilink") -- [Migrate Plugin from v1](v2/Migrate_Plugin_from_v1 "wikilink") -- [Plugin Development](v2/Plugin_Development "wikilink") -- [i18n for Plugins](v2/i18n_for_Plugins "wikilink") -- [Extension Points](v2/Extension-Points "wikilink") -- [API changes](v2/API_changes "wikilink") -- [ui-components/ui-types](v2/UI:_Additions_or_Changes_to_ui-components_or_ui-types "wikilink") -- [Vulnerabilities](v2/vulnerabilities "wikilink") -- [Common pitfall](v2/Common_pitfall "wikilink") -- [Release process](v2/Release_process "wikilink") -- [Migration Wizard](v2/Migration-Wizard "wikilink") -- [Known Issues](v2/Known_Issues "wikilink") + development](v2/Decision-Table.md "wikilink") +- [Definition of done](Definition%20of%20done.md "wikilink") +- [Style Guide](v2/style-guide.md "wikilink") +- [Error Handling in REST, Java, UI](v2/error-handling.md "wikilink") +- [Create a new Plugin](v2/Create%20a%20new%20Plugin.md "wikilink") +- [Migrate Plugin from v1](v2/Migrate%20Plugin%20from%20v1.md "wikilink") +- [Plugin Development](v2/Plugin%20Development.md "wikilink") +- [i18n for Plugins](v2/i18n%20for%20Plugins.md "wikilink") +- [Extension Points](v2/Extension-Points.md "wikilink") +- [API changes](v2/API%20changes.md "wikilink") +- [ui-components/ui-types](v2/UI:%20Additions%20or%20Changes%20to%20ui-components%20or%20ui-types.md "wikilink") +- [Vulnerabilities](v2/vulnerabilities.md "wikilink") +- [Common pitfall](v2/Common%20pitfall.md "wikilink") +- [Release process](v2/Release%20process.md "wikilink") +- [Migration Wizard](v2/Migration-Wizard.md "wikilink") +- [Known Issues](v2/Known%20Issues.md "wikilink") diff --git a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java index 38961ccaf8..4e705985a1 100644 --- a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java +++ b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java @@ -50,13 +50,8 @@ import sonia.scm.plugin.PluginAnnotation; //~--- JDK imports ------------------------------------------------------------ -import java.io.Closeable; import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.Writer; import java.lang.annotation.Annotation; @@ -89,11 +84,13 @@ import javax.tools.StandardLocation; import javax.ws.rs.Path; import javax.ws.rs.ext.Provider; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; @@ -160,18 +157,6 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { return false; } - - private void close(Closeable closeable) { - if (closeable != null) { - try { - closeable.close(); - } catch (IOException ex) { - printException("could not close closeable", ex); - } - } - } - - private TypeElement findAnnotation(Set annotations, Class annotationClass) { TypeElement annotation = null; @@ -205,15 +190,12 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { private Document parseDocument(File file) { Document doc = null; - InputStream input = null; try { - DocumentBuilder builder = - DocumentBuilderFactory.newInstance().newDocumentBuilder(); + DocumentBuilder builder = createDocumentBuilder(); if (file.exists()) { - input = new FileInputStream(file); - doc = builder.parse(input); + doc = builder.parse(file); } else { doc = builder.newDocument(); doc.appendChild(doc.createElement(EL_MODULE)); @@ -221,13 +203,17 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { } catch (ParserConfigurationException | SAXException | IOException | DOMException ex) { printException("could not parse document", ex); - } finally { - close(input); } return doc; } + private DocumentBuilder createDocumentBuilder() throws ParserConfigurationException { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + return factory.newDocumentBuilder(); + } + private String prepareArrayElement(Object obj) { String v = obj.toString(); @@ -341,24 +327,25 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { private void writeDocument(Document doc, File file) { - Writer writer = null; try { file.getParentFile().mkdirs(); - writer = new FileWriter(file); - Transformer transformer = - TransformerFactory.newInstance().newTransformer(); + Transformer transformer = createTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, PROPERTY_VALUE); - transformer.transform(new DOMSource(doc), new StreamResult(writer)); - } catch (IOException | IllegalArgumentException | TransformerException ex) { + transformer.transform(new DOMSource(doc), new StreamResult(file)); + } catch (IllegalArgumentException | TransformerException ex) { printException("could not write document", ex); - } finally { - close(writer); } } + private Transformer createTransformer() throws TransformerConfigurationException { + TransformerFactory factory = TransformerFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); + return factory.newTransformer(); + } + private Map getAttributesFromAnnotation(Element el, TypeElement annotation) { diff --git a/scm-it/pom.xml b/scm-it/pom.xml index 9064a39fc1..efcc59d212 100644 --- a/scm-it/pom.xml +++ b/scm-it/pom.xml @@ -97,6 +97,14 @@ maven-war-plugin false + + ** diff --git a/scm-ui/babel-preset/index.js b/scm-ui/babel-preset/index.js index 14d3d23731..ddba529dd2 100644 --- a/scm-ui/babel-preset/index.js +++ b/scm-ui/babel-preset/index.js @@ -7,6 +7,10 @@ module.exports = api => { require("@babel/preset-react"), require("@babel/preset-typescript") ], - plugins: [require("@babel/plugin-proposal-class-properties"), require("@babel/plugin-proposal-optional-chaining")] + plugins: [ + require("babel-plugin-styled-components"), + require("@babel/plugin-proposal-class-properties"), + require("@babel/plugin-proposal-optional-chaining") + ] }; }; diff --git a/scm-ui/babel-preset/package.json b/scm-ui/babel-preset/package.json index 4751670f65..85eb6bf8f9 100644 --- a/scm-ui/babel-preset/package.json +++ b/scm-ui/babel-preset/package.json @@ -14,7 +14,8 @@ "@babel/preset-env": "^7.6.3", "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.6.3", - "@babel/preset-typescript": "^7.6.0" + "@babel/preset-typescript": "^7.6.0", + "babel-plugin-styled-components": "^1.10.7" }, "publishConfig": { "access": "public" diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index 3525b79563..851d2afd37 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -115,6 +115,18 @@ + + set-version + + run + + + + + ${project.version} + + + diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 790c2cdc94..bc7416defb 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -2,7 +2,7 @@ exports[`Storyshots Buttons|AddButton Default 1`] = `