diff --git a/Jenkinsfile b/Jenkinsfile index 693c7efb00..8bb52d6030 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -26,7 +26,7 @@ node('docker') { } stage('Build') { - mvn 'clean install -DskipTests' + mvn 'clean install -Pdoc -DskipTests' } stage('Unit Test') { @@ -53,6 +53,7 @@ node('docker') { stage('Archive') { archiveArtifacts 'scm-webapp/target/scm-webapp.war' archiveArtifacts 'scm-server/target/scm-server-app.*' + archiveArtifacts 'scm-webapp/target/scm-webapp-restdocs.zip' } stage('Docker') { diff --git a/pom.xml b/pom.xml index 5b300fb634..17e8ae2cca 100644 --- a/pom.xml +++ b/pom.xml @@ -777,7 +777,7 @@ 2.0.1 3.1.3.Final 1.19.4 - 2.9.1 + 2.11.1 2.8.6 4.0 diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index db0173d1df..25f85fc170 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -137,7 +137,7 @@ - doc + plugin-doc diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 3145b6a338..1805f0665b 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -9,7 +9,7 @@ "flow": "flow check" }, "dependencies": { - "@scm-manager/ui-extensions": "^0.1.1" + "@scm-manager/ui-extensions": "^0.1.2" }, "devDependencies": { "@scm-manager/ui-bundler": "^0.0.24" diff --git a/scm-plugins/scm-git-plugin/yarn.lock b/scm-plugins/scm-git-plugin/yarn.lock index 234ed65102..64c47a247d 100644 --- a/scm-plugins/scm-git-plugin/yarn.lock +++ b/scm-plugins/scm-git-plugin/yarn.lock @@ -747,9 +747,10 @@ vinyl-source-stream "^2.0.0" watchify "^3.11.0" -"@scm-manager/ui-extensions@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.1.tgz#966e62d89981e92a14adf7e674e646e76de96d45" +"@scm-manager/ui-extensions@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.2.tgz#0689427ca45c8e4e045b5b9dbc89036f1d2c45fc" + integrity sha512-oIkXcc/VWssnK/yjWKC/Wnq5DZ01rArsz76n4X/0DT0hkGNIKmwk/Fdp7OoXiUEb7+aaPjUX1VvDqlTwCNKPmA== dependencies: react "^16.4.2" react-dom "^16.4.2" diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 0638a464de..849d8a92cb 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -6,7 +6,7 @@ "build": "ui-bundler plugin" }, "dependencies": { - "@scm-manager/ui-extensions": "^0.1.1" + "@scm-manager/ui-extensions": "^0.1.2" }, "devDependencies": { "@scm-manager/ui-bundler": "^0.0.24" diff --git a/scm-plugins/scm-hg-plugin/yarn.lock b/scm-plugins/scm-hg-plugin/yarn.lock index 0666ef408d..b47e6e6e32 100644 --- a/scm-plugins/scm-hg-plugin/yarn.lock +++ b/scm-plugins/scm-hg-plugin/yarn.lock @@ -681,9 +681,10 @@ vinyl-source-stream "^2.0.0" watchify "^3.11.0" -"@scm-manager/ui-extensions@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.1.tgz#966e62d89981e92a14adf7e674e646e76de96d45" +"@scm-manager/ui-extensions@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.2.tgz#0689427ca45c8e4e045b5b9dbc89036f1d2c45fc" + integrity sha512-oIkXcc/VWssnK/yjWKC/Wnq5DZ01rArsz76n4X/0DT0hkGNIKmwk/Fdp7OoXiUEb7+aaPjUX1VvDqlTwCNKPmA== dependencies: react "^16.4.2" react-dom "^16.4.2" diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index e51f3b9bfd..e5cddc0bba 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -6,7 +6,7 @@ "build": "ui-bundler plugin" }, "dependencies": { - "@scm-manager/ui-extensions": "^0.1.1" + "@scm-manager/ui-extensions": "^0.1.2" }, "devDependencies": { "@scm-manager/ui-bundler": "^0.0.24" diff --git a/scm-plugins/scm-svn-plugin/yarn.lock b/scm-plugins/scm-svn-plugin/yarn.lock index 0666ef408d..b47e6e6e32 100644 --- a/scm-plugins/scm-svn-plugin/yarn.lock +++ b/scm-plugins/scm-svn-plugin/yarn.lock @@ -681,9 +681,10 @@ vinyl-source-stream "^2.0.0" watchify "^3.11.0" -"@scm-manager/ui-extensions@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.1.tgz#966e62d89981e92a14adf7e674e646e76de96d45" +"@scm-manager/ui-extensions@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.2.tgz#0689427ca45c8e4e045b5b9dbc89036f1d2c45fc" + integrity sha512-oIkXcc/VWssnK/yjWKC/Wnq5DZ01rArsz76n4X/0DT0hkGNIKmwk/Fdp7OoXiUEb7+aaPjUX1VvDqlTwCNKPmA== dependencies: react "^16.4.2" react-dom "^16.4.2" diff --git a/scm-ui-components/packages/ui-components/package.json b/scm-ui-components/packages/ui-components/package.json index 06e007e871..bb8e5c738e 100644 --- a/scm-ui-components/packages/ui-components/package.json +++ b/scm-ui-components/packages/ui-components/package.json @@ -26,7 +26,7 @@ "react-router-enzyme-context": "^1.2.0" }, "dependencies": { - "@scm-manager/ui-extensions": "^0.1.1", + "@scm-manager/ui-extensions": "^0.1.2", "@scm-manager/ui-types": "2.0.0-SNAPSHOT", "classnames": "^2.2.6", "moment": "^2.22.2", diff --git a/scm-ui-components/packages/ui-components/src/LinkPaginator.js b/scm-ui-components/packages/ui-components/src/LinkPaginator.js index aaf13d7b15..d09306e04c 100644 --- a/scm-ui-components/packages/ui-components/src/LinkPaginator.js +++ b/scm-ui-components/packages/ui-components/src/LinkPaginator.js @@ -25,13 +25,13 @@ class LinkPaginator extends React.Component { ); } - renderPreviousButton(label?: string) { + renderPreviousButton(className: string, label?: string) { const { page } = this.props; const previousPage = page - 1; return ( diff --git a/scm-ui-components/packages/ui-components/src/navigation/NavAction.js b/scm-ui-components/packages/ui-components/src/navigation/NavAction.js index 3ae30d4b68..e93fd8dd52 100644 --- a/scm-ui-components/packages/ui-components/src/navigation/NavAction.js +++ b/scm-ui-components/packages/ui-components/src/navigation/NavAction.js @@ -18,7 +18,7 @@ class NavAction extends React.Component { return (
  • - {showIcon}{label} + {showIcon}{label}
  • ); } diff --git a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js index ef9de9bfe5..7609bc2171 100644 --- a/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js +++ b/scm-ui-components/packages/ui-components/src/repos/changesets/ChangesetRow.js @@ -3,15 +3,16 @@ import React from "react"; import type { Changeset, Repository, Tag } from "@scm-manager/ui-types"; import classNames from "classnames"; -import {Interpolate, translate} from "react-i18next"; +import { Interpolate, translate } from "react-i18next"; import ChangesetId from "./ChangesetId"; import injectSheet from "react-jss"; -import {DateFromNow} from "../.."; +import { DateFromNow } from "../.."; import ChangesetAuthor from "./ChangesetAuthor"; import ChangesetTag from "./ChangesetTag"; -import {parseDescription} from "./changesets"; -import {AvatarWrapper, AvatarImage} from "../../avatar"; +import { parseDescription } from "./changesets"; +import { AvatarWrapper, AvatarImage } from "../../avatar"; +import { ExtensionPoint } from "@scm-manager/ui-extensions"; const styles = { pointer: { @@ -64,7 +65,15 @@ class ChangesetRow extends React.Component {

    - {description.title} + + + {description.title} + +
    { return (

    -

    {description.title}

    +

    + + {description.title} + +

    @@ -67,22 +75,23 @@ class ChangesetDetails extends React.Component {

    {this.renderTags()}
    - -

    - {description.message.split("\n").map((item, key) => { - return ( - + +

    + {description.message.split("\n").map((item, key) => { + return ( + + {item} -
    -
    - ); - })} -

    -
    + +
    + + ); + })} +

    diff --git a/scm-ui/src/repos/components/list/RepositoryEntry.js b/scm-ui/src/repos/components/list/RepositoryEntry.js index 122128db3a..28a6fe1ad3 100644 --- a/scm-ui/src/repos/components/list/RepositoryEntry.js +++ b/scm-ui/src/repos/components/list/RepositoryEntry.js @@ -9,16 +9,6 @@ import classNames from "classnames"; import RepositoryAvatar from "./RepositoryAvatar"; const styles = { - overlayFullColumn: { - position: "absolute", - height: "calc(120px - 0.5rem)", - width: "calc(100% - 1.5rem)" - }, - overlayHalfColumn: { - position: "absolute", - height: "calc(120px - 1.5rem)", - width: "calc(50% - 3rem)" - }, inner: { position: "relative", pointerEvents: "none", @@ -86,8 +76,8 @@ class RepositoryEntry extends React.Component { const repositoryLink = this.createLink(repository); const halfColumn = fullColumnWidth ? "is-full" : "is-half"; const overlayLinkClass = fullColumnWidth - ? classes.overlayFullColumn - : classes.overlayHalfColumn; + ? "overlay-full-column" + : "overlay-half-column"; return (
    { {t("permission.add-permission.add-permission-heading")}
    -
    - - -
    - -
    + + +
    - {this.renderAutocompletionField()} + {this.renderAutocompletionField()}
    - +
    -
    -
    +
    +
    { disabled={!this.state.valid || this.state.name === ""} />
    -
    +
    ); diff --git a/scm-ui/src/repos/sources/components/content/ButtonGroup.js b/scm-ui/src/repos/sources/components/content/ButtonGroup.js index 5befbd94d5..055ee115a5 100644 --- a/scm-ui/src/repos/sources/components/content/ButtonGroup.js +++ b/scm-ui/src/repos/sources/components/content/ButtonGroup.js @@ -25,9 +25,9 @@ class ButtonGroup extends React.Component { let historyColor = ""; if (historyIsSelected) { - historyColor = "info is-selected"; + historyColor = "link is-selected"; } else { - sourcesColor = "info is-selected"; + sourcesColor = "link is-selected"; } const sourcesLabel = ( diff --git a/scm-ui/src/users/components/UserForm.js b/scm-ui/src/users/components/UserForm.js index bb368666d9..69d1aaa031 100644 --- a/scm-ui/src/users/components/UserForm.js +++ b/scm-ui/src/users/components/UserForm.js @@ -92,14 +92,16 @@ class UserForm extends React.Component { if (!this.props.user) { // create new user nameField = ( - +
    + +
    ); passwordChangeField = ( diff --git a/scm-ui/styles/scm.scss b/scm-ui/styles/scm.scss index a5d2eda70e..7583f1ef18 100644 --- a/scm-ui/styles/scm.scss +++ b/scm-ui/styles/scm.scss @@ -4,6 +4,8 @@ $blue: #33b2e8; $mint: #11dfd0; +$info: $blue; + // $footer-background-color .is-ellipsis-overflow { @@ -100,6 +102,19 @@ $fa-font-path: "webfonts"; &:nth-child(odd) { margin-right: 1.5rem; } + + .overlay-half-column { + position: absolute; + height: calc(120px - 1.5rem); + width: calc(50% - 3rem); + } + } + .column.is-full { + .overlay-full-column { + position: absolute; + height: calc(120px - 0.5rem); + width: calc(100% - 1.5rem); + } } @media screen and (max-width: 768px) { .column.is-half { @@ -108,6 +123,13 @@ $fa-font-path: "webfonts"; &:nth-child(odd) { margin-right: 0; } + + + .overlay-half-column{ + position: absolute; + height: calc(120px - 0.5rem); + width: calc(100% - 1.5rem); + } } } } diff --git a/scm-ui/yarn.lock b/scm-ui/yarn.lock index 3ddf27be96..5c656ab243 100644 --- a/scm-ui/yarn.lock +++ b/scm-ui/yarn.lock @@ -738,9 +738,10 @@ vinyl-source-stream "^2.0.0" watchify "^3.11.0" -"@scm-manager/ui-extensions@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.1.tgz#966e62d89981e92a14adf7e674e646e76de96d45" +"@scm-manager/ui-extensions@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.1.2.tgz#0689427ca45c8e4e045b5b9dbc89036f1d2c45fc" + integrity sha512-oIkXcc/VWssnK/yjWKC/Wnq5DZ01rArsz76n4X/0DT0hkGNIKmwk/Fdp7OoXiUEb7+aaPjUX1VvDqlTwCNKPmA== dependencies: react "^16.4.2" react-dom "^16.4.2" diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 01f45cb54e..59add29fc4 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -896,6 +896,11 @@ enunciate-lombok ${enunciate.version} + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index f15f7c4b00..19929b63ba 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -41,6 +41,8 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper