diff --git a/CHANGELOG.md b/CHANGELOG.md
index cc4dcd3fac..5a26bb88aa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased
+
### Added
- Extension point to add links to the repository cards from plug ins ([#1041](https://github.com/scm-manager/scm-manager/pull/1041))
@@ -15,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Removed
- EventSource Polyfill
+### Fixed
+- Build on windows ([#1048](https://github.com/scm-manager/scm-manager/issues/1048), [#1049](https://github.com/scm-manager/scm-manager/issues/1049), [#1056](https://github.com/scm-manager/scm-manager/pull/1056))
+- Show specific notification for plugin actions on plugin administration ([#1057](https://github.com/scm-manager/scm-manager/pull/1057))
+
## 2.0.0-rc5 - 2020-03-12
### Added
- Added footer extension points for links and avatar
diff --git a/Jenkinsfile b/Jenkinsfile
index eb12ebf17f..39173ab389 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -64,15 +64,20 @@ node('docker') {
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.supportsatomicfilecreation=false'
- junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/TEST-*.xml'
- }
+ parallel(
+ unitTest: {
+ stage('Unit Test') {
+ mvn 'test -DskipFrontendBuild -DskipTypecheck -Pcoverage -pl !scm-it -Dmaven.test.failure.ignore=true'
+ junit allowEmptyResults: true, testResults: '**/target/surefire-reports/TEST-*.xml,**/target/jest-reports/TEST-*.xml'
+ }
+ },
+ integrationTest: {
+ stage('Integration Test') {
+ mvn 'verify -Pit -DskipUnitTests -pl :scm-webapp,:scm-it -Dmaven.test.failure.ignore=true'
+ junit allowEmptyResults: true, testResults: '**/target/failsafe-reports/TEST-*.xml'
+ }
+ }
+ )
stage('SonarQube') {
@@ -203,6 +208,10 @@ String mainBranch
Maven setupMavenBuild() {
Maven mvn = new MavenWrapperInDocker(this, "scmmanager/java-build:11.0.6_10")
+ // disable logging durring the build
+ def logConf = "scm-webapp/src/main/resources/logback.ci.xml"
+ mvn.additionalArgs += " -Dlogback.configurationFile=${logConf}"
+ mvn.additionalArgs += " -Dscm-it.logbackConfiguration=${logConf}"
if (isMainBranch() || isReleaseBranch()) {
// Release starts javadoc, which takes very long, so do only for certain branches
diff --git a/pom.xml b/pom.xml
index ebffdedef6..2fddd0e0b3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -200,7 +200,7 @@
de.otto.edison
edison-hal
- 2.0.1
+ 2.1.0
@@ -399,12 +399,6 @@
${jaxb.version}
-
- com.sun.xml.bind
- jaxb-impl
- ${jaxb.version}
-
-
org.glassfish.jaxb
jaxb-runtime
@@ -480,6 +474,13 @@
org.apache.maven.plugins
maven-surefire-plugin
2.22.0
+
+
+ ${skipUnitTests}
+
@@ -828,7 +829,7 @@
2.28.2
1.3
- 5.2.0
+ 5.6.0
1.7.30
@@ -838,10 +839,10 @@
2.1.1
4.5.2.Final
1.19.4
- 2.10.0
+ 2.10.2
4.2.2
2.3.0
- 6.1.0.Final
+ 6.1.2.Final
1.6.2
@@ -852,7 +853,7 @@
1.2.0
- 1.4.1
+ 1.5.1
5.6.1.202002131546-r-scm1
@@ -871,7 +872,7 @@
UTF-8
SCM-BSD
- 1.2.0.Final
+ 1.3.1.Final
@@ -881,7 +882,9 @@
./scm-ui/target/frontend/buildfrontend-node/node-v${nodejs.version}-linux-x64/bin/node
-
+
+ ${skipTests}
diff --git a/scm-core/pom.xml b/scm-core/pom.xml
index ec3b884fd6..3c7d67c2d8 100644
--- a/scm-core/pom.xml
+++ b/scm-core/pom.xml
@@ -152,11 +152,6 @@
jaxb-api
-
- com.sun.xml.bind
- jaxb-impl
-
-
org.glassfish.jaxb
jaxb-runtime
diff --git a/scm-it/pom.xml b/scm-it/pom.xml
index efcc59d212..6f41e1f1b6 100644
--- a/scm-it/pom.xml
+++ b/scm-it/pom.xml
@@ -84,7 +84,7 @@
org.glassfish
javax.json
- 1.0.4
+ 1.1.4
runtime
@@ -212,6 +212,10 @@
sonia.scm.classloading.lifecycle
simple
+
+ logback.configurationFile
+ ${scm-it.logbackConfiguration}
+
/scm
@@ -245,10 +249,10 @@
DEVELOPMENT
target/scm-it
+ ${project.basedir}/../scm-webapp/src/main/resources/logback.default.xml
-
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolRequestMockFactory.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolRequestMockFactory.java
index d1f5124b3a..e319b07608 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolRequestMockFactory.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolRequestMockFactory.java
@@ -3,12 +3,12 @@ package sonia.scm.web;
import com.google.common.collect.Lists;
import javax.servlet.http.HttpServletRequest;
-
import java.util.Collections;
import java.util.List;
import java.util.Locale;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class WireProtocolRequestMockFactory {
@@ -88,7 +88,6 @@ public class WireProtocolRequestMockFactory {
private HttpServletRequest base(String method, String queryStringValue) {
HttpServletRequest request = mock(HttpServletRequest.class);
- when(request.getRequestURI()).thenReturn(repositoryPath);
when(request.getMethod()).thenReturn(method);
queryString(request, queryStringValue);
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
index 9237127c88..40af1acfeb 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
@@ -47,7 +47,10 @@ import java.util.Collections;
import java.util.List;
import static org.hamcrest.Matchers.contains;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
/**
@@ -98,7 +101,6 @@ public class WireProtocolTest {
@Test
public void testGetCommandsOfWithHgArgsPost() throws IOException {
- when(request.getMethod()).thenReturn("POST");
when(request.getQueryString()).thenReturn("cmd=batch");
when(request.getIntHeader("X-HgArgs-Post")).thenReturn(29);
when(request.getHeaderNames()).thenReturn(Collections.enumeration(Lists.newArrayList("X-HgArgs-Post")));
diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml
index 851d2afd37..28b922cbc2 100644
--- a/scm-ui/pom.xml
+++ b/scm-ui/pom.xml
@@ -18,8 +18,9 @@
build
- false
false
+ ${skipTests}
+ false
typescript
ui-extensions/src,ui-components/src,ui-webapp/src
**/*.test.js,src/tests/**
@@ -88,6 +89,7 @@
run
+ ${skipFrontendBuild}
@@ -99,7 +101,7 @@
- ${skipTests}
+ ${skipFrontendTests}
diff --git a/scm-ui/ui-scripts/src/createPluginConfig.js b/scm-ui/ui-scripts/src/createPluginConfig.js
index 3e210fa022..6057ccc997 100644
--- a/scm-ui/ui-scripts/src/createPluginConfig.js
+++ b/scm-ui/ui-scripts/src/createPluginConfig.js
@@ -19,6 +19,7 @@ module.exports = function(mode) {
[name]: [path.resolve(__dirname, "webpack-public-path.js"), packageJSON.main || "src/main/js/index.js"]
},
mode,
+ stats: "minimal",
devtool: "source-map",
target: "web",
node: {
diff --git a/scm-ui/ui-scripts/src/lerna.js b/scm-ui/ui-scripts/src/lerna.js
index b5404fbd62..6479b112fb 100644
--- a/scm-ui/ui-scripts/src/lerna.js
+++ b/scm-ui/ui-scripts/src/lerna.js
@@ -1,7 +1,10 @@
const { spawnSync } = require("child_process");
+const os = require("os");
+
+const yarnCmd = os.platform() === "win32" ? "yarn.cmd" : "yarn";
const yarn = args => {
- const result = spawnSync("yarn", args, { stdio: "inherit" });
+ const result = spawnSync(yarnCmd, args, { stdio: "inherit" });
if (result.error) {
console.log("could not start yarn command:", result.error);
process.exit(2);
diff --git a/scm-ui/ui-scripts/src/webpack.config.js b/scm-ui/ui-scripts/src/webpack.config.js
index cf63c1da3c..e6cc362a67 100644
--- a/scm-ui/ui-scripts/src/webpack.config.js
+++ b/scm-ui/ui-scripts/src/webpack.config.js
@@ -25,6 +25,7 @@ console.log(`build ${mode} bundles`);
module.exports = [
{
mode,
+ stats: "minimal",
context: root,
entry: {
webapp: [path.resolve(__dirname, "webpack-public-path.js"), "./ui-webapp/src/index.tsx"]
diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json
index 86740eccd9..e007a210ae 100644
--- a/scm-ui/ui-styles/package.json
+++ b/scm-ui/ui-styles/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.11.2",
- "bulma": "^0.7.5",
+ "bulma": "^0.8.0",
"bulma-popover": "^1.0.0",
"bulma-tooltip": "^3.0.0",
"react-diff-view": "^2.4.1"
diff --git a/scm-ui/ui-webapp/public/locales/de/admin.json b/scm-ui/ui-webapp/public/locales/de/admin.json
index 2bfc2d6b5b..e65a10eb85 100644
--- a/scm-ui/ui-webapp/public/locales/de/admin.json
+++ b/scm-ui/ui-webapp/public/locales/de/admin.json
@@ -61,7 +61,10 @@
"newVersion": "Neue Version",
"dependencyNotification": "Mit diesem Plugin werden folgende Abhängigkeiten mit installiert, wenn sie noch nicht vorhanden sind!",
"dependencies": "Abhängigkeiten",
- "successNotification": "Das Plugin wurde erfolgreich installiert. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:",
+ "installedNotification": "Das Plugin wurde erfolgreich installiert. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:",
+ "updatedNotification": "Das Plugin wurde erfolgreich aktualisiert. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:",
+ "uninstalledNotification": "Das Plugin wurde erfolgreich installiert. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:",
+ "executedChangesNotification": "Die Plugin Änderungen wurden erfolgreich durchgeführt. Um Änderungen an der UI zu sehen, muss die Seite neu geladen werden:",
"reload": "jetzt neu laden",
"restartNotification": "Der SCM-Manager Kontext sollte nur neu gestartet werden, wenn aktuell niemand damit arbeitet.",
"executePending": "Die folgenden Plugin-Änderungen werden ausgeführt. Anschließend wird der SCM-Manager Kontext neu gestartet.",
diff --git a/scm-ui/ui-webapp/public/locales/en/admin.json b/scm-ui/ui-webapp/public/locales/en/admin.json
index b061901df2..5e7e44dcd2 100644
--- a/scm-ui/ui-webapp/public/locales/en/admin.json
+++ b/scm-ui/ui-webapp/public/locales/en/admin.json
@@ -61,7 +61,10 @@
"newVersion": "New version",
"dependencyNotification": "With this plugin, the following dependencies will be installed if they are not available yet!",
"dependencies": "Dependencies",
- "successNotification": "Successful installed plugin. You have to reload the page, to see ui changes:",
+ "installedNotification": "Successfully installed plugin. You have to reload the page, to see ui changes:",
+ "updatedNotification": "Successfully updated plugin. You have to reload the page, to see ui changes:",
+ "uninstalledNotification": "Successfully uninstalled plugin. You have to reload the page, to see ui changes:",
+ "executedChangesNotification": "Successfully executed plugin changes. You have to reload the page, to see ui changes:",
"reload": "reload now",
"restartNotification": "You should only restart the scm-manager context if no one else is currently working with it.",
"executePending": "The following plugin changes will be executed and after that the scm-manager context will be restarted.",
diff --git a/scm-ui/ui-webapp/src/admin/plugins/components/PluginModal.tsx b/scm-ui/ui-webapp/src/admin/plugins/components/PluginModal.tsx
index 1863ce0843..d8dd1bdd9c 100644
--- a/scm-ui/ui-webapp/src/admin/plugins/components/PluginModal.tsx
+++ b/scm-ui/ui-webapp/src/admin/plugins/components/PluginModal.tsx
@@ -161,7 +161,7 @@ class PluginModal extends React.Component {
}
renderNotifications = () => {
- const { t } = this.props;
+ const { t, pluginAction } = this.props;
const { restart, error, success } = this.state;
if (error) {
return (
@@ -172,7 +172,7 @@ class PluginModal extends React.Component {
} else if (success) {
return (
-
+
);
} else if (restart) {
diff --git a/scm-ui/ui-webapp/src/admin/plugins/components/SuccessNotification.tsx b/scm-ui/ui-webapp/src/admin/plugins/components/SuccessNotification.tsx
index 8e01e84bbd..cbee8e3e15 100644
--- a/scm-ui/ui-webapp/src/admin/plugins/components/SuccessNotification.tsx
+++ b/scm-ui/ui-webapp/src/admin/plugins/components/SuccessNotification.tsx
@@ -1,13 +1,30 @@
import React from "react";
import { WithTranslation, withTranslation } from "react-i18next";
import { Notification } from "@scm-manager/ui-components";
+import { PluginAction } from "./PluginEntry";
+
+type Props = WithTranslation & {
+ pluginAction?: string;
+};
+
+class InstallSuccessNotification extends React.Component {
+ createMessageForPluginAction = () => {
+ const { pluginAction, t } = this.props;
+ if (pluginAction === PluginAction.INSTALL) {
+ return t("plugins.modal.installedNotification");
+ } else if (pluginAction === PluginAction.UPDATE) {
+ return t("plugins.modal.updatedNotification");
+ } else if (pluginAction === PluginAction.UNINSTALL) {
+ return t("plugins.modal.uninstalledNotification");
+ }
+ return t("plugins.modal.executedChangesNotification");
+ };
-class InstallSuccessNotification extends React.Component {
render() {
const { t } = this.props;
return (
- {t("plugins.modal.successNotification")}{" "}
+ {this.createMessageForPluginAction()}{" "}
window.location.reload(true)}>{t("plugins.modal.reload")}
);
diff --git a/scm-webapp/src/main/resources/logback.ci.xml b/scm-webapp/src/main/resources/logback.ci.xml
new file mode 100644
index 0000000000..428d3e1350
--- /dev/null
+++ b/scm-webapp/src/main/resources/logback.ci.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+