diff --git a/CHANGELOG.md b/CHANGELOG.md index 049543ae10..84e8fe80e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. 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 +## 2.0.0-rc7 - 2020-04-09 ### Added - Fire various plugin events ([#1088](https://github.com/scm-manager/scm-manager/pull/1088)) - Display version for plugins ([#1089](https://github.com/scm-manager/scm-manager/pull/1089) diff --git a/Jenkinsfile b/Jenkinsfile index a6ca00bb51..c910f01521 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -53,6 +53,7 @@ node('docker') { // merge release branch into master sh "git checkout master" + sh "git reset --hard origin/master" sh "git merge --ff-only ${env.BRANCH_NAME}" // set tag diff --git a/docs/v2/release-process.md b/docs/v2/release-process.md index 83f4db8ce2..d30b0d6289 100644 --- a/docs/v2/release-process.md +++ b/docs/v2/release-process.md @@ -14,7 +14,7 @@ git fetch && git checkout develop && git reset --hard origin/develop Change "Unreleased" header in `CHANGELOG.md` to ` - ` -## Create release branch: +## Create release branch `git checkout -b release/` @@ -37,6 +37,7 @@ Jenkins will - merge with master branch - build and deploy everything - set the new development version for the develop branch +- delete the release branch ## Make a party @@ -44,7 +45,7 @@ Jenkins will To release a new version of a Plugin for SCM-Manager v2 you have to do the following steps (replace placeholder `` accordingly, eg. with `2.1.0`): -## Update to latest version +## Check out default branch Make sure you have no changes you want to keep! @@ -52,68 +53,55 @@ Make sure you have no changes you want to keep! git fetch && git checkout develop && git reset --hard origin/develop ``` -## Set new version +## Update SCM parent if necessary -Edit `pom.xml`: +If you need to update the parent of the plugin to a new release of SCM-Manager, change it now: -- `version` and `scm.tag` have to be set to the new version. -- ensure that all dependencies to other scm resources have released versions -- ensure `parent.version` points to stable release +- `pom.xml`: `parent.version` +- `package.json`: `dependencies.ui-plugins` -Edit `package.json`: +``` +rm -rf node_modules yarn.lock +mvn clean install +git add yarn.lock pom.xml package.json +git commit -m "Update to new version of SCM-Manager" +git push +``` -- `version` has to be set to the new version. -- ensure that all dependencies to other scm resources have released versions -- ensure the version of `@scm-manager/ui-plugins` points to the same version as `parent.version` in the `pom.xml` +Wait for Jenkins to be green. + +## Create release branch + +``` +git checkout -b release/ +``` ## Modify Changelog Change "Unreleased" header in `CHANGELOG.md` to ` - ` -## Remove old dependencies - -`rm -rf node_modules yarn.lock` - -## Build - -`mvn clean install` - ## Commit and push release ``` -git commit -am "Release version " -git push origin develop +git commit -am "Prepare release of " ``` -## Merge with master branch - -The merge should be possible with a fast forward. If this fails, check for changes on the `master` branch that are not present on the `develop` branch. Merge these changes into the `develop` branch, first! +## Push release branch ``` -git checkout master && git pull && git merge develop --ff-only && git push origin master +git push origin release/ ``` -## Create and push tag +## Wait for Jenkins build -``` -git tag -s -a -m "" -git push --tags origin -``` +Jenkins will -## Prepare next development version +- update versions in pom.xml and package.json +- merge with master branch +- build and deploy everything +- set the new development version for the develop branch +- delete the release branch -``` -git checkout develop -``` - -Edit `pom.xml`: `version` has to be set to the new development version, `tag` to `HEAD`. - -Edit `package.json`: `version` has to be set to the new development version. - -``` -git commit -am "Prepare for next development iteration" -git push origin develop -``` ## Attention: Creating new plugins If you are creating a new plugin which doesn't exist in the SCM-Manager Plugin-Center yet, your plugin will not be shown after the release. First you have to create a `index.md` in the Plugin-Center Repository. diff --git a/pom.xml b/pom.xml index f806be11d7..cbbb7656f6 100644 --- a/pom.xml +++ b/pom.xml @@ -494,7 +494,7 @@ sonia.scm.maven smp-maven-plugin - 1.0.0-rc5 + 1.0.0-rc6 @@ -902,7 +902,7 @@ 2.28.2 1.3 - 5.6.0 + 5.6.1 1.7.30 @@ -913,7 +913,7 @@ 4.5.2.Final 1.19.4 2.10.3 - 4.2.2 + 4.2.3 2.3.1 6.1.2.Final diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java index c02e656821..dcd06f9207 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java @@ -21,15 +21,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; -import org.apache.commons.lang.exception.CloneFailedException; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.wc2.SvnCheckout; import org.tmatesoft.svn.core.wc2.SvnOperationFactory; import org.tmatesoft.svn.core.wc2.SvnTarget; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.repository.SvnWorkDirFactory; import sonia.scm.repository.util.SimpleWorkdirFactory; @@ -37,7 +37,6 @@ import sonia.scm.repository.util.WorkdirProvider; import javax.inject.Inject; import java.io.File; -import java.io.IOException; public class SimpleSvnWorkDirFactory extends SimpleWorkdirFactory implements SvnWorkDirFactory { @@ -60,7 +59,7 @@ public class SimpleSvnWorkDirFactory extends SimpleWorkdirFactory {children}; -const title = title; -const avatar = ; const link = "/foo/bar"; +const avatar = ; +const title = title; const footerLeft = left footer; const footerRight = right footer; +const baseDate = "2020-03-26T12:13:42+02:00"; storiesOf("CardColumn", module) .addDecorator(story => {story()}) .addDecorator(storyFn => {storyFn()}) .add("default", () => ( - )); + )) + .add("minimal", () => ( + + )) + .add("with hoverable date", () => ( + + + } /> + )); diff --git a/scm-ui/ui-components/src/CardColumn.tsx b/scm-ui/ui-components/src/CardColumn.tsx index 2ef488e746..70d3da1946 100644 --- a/scm-ui/ui-components/src/CardColumn.tsx +++ b/scm-ui/ui-components/src/CardColumn.tsx @@ -21,19 +21,19 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -import React, { ReactNode } from "react"; +import React, { FC, ReactNode } from "react"; import classNames from "classnames"; import styled from "styled-components"; import { Link } from "react-router-dom"; type Props = { + link?: string; + avatar?: ReactNode; title: ReactNode; description?: string; - avatar: ReactNode; contentRight?: ReactNode; footerLeft: ReactNode; footerRight: ReactNode; - link?: string; action?: () => void; className?: string; }; @@ -74,53 +74,63 @@ const RightMarginDiv = styled.div` const InheritFlexShrinkDiv = styled.div` flex-shrink: inherit; + pointer-events: all; `; -export default class CardColumn extends React.Component { - createLink = () => { - const { link, action } = this.props; - if (link) { - return ; - } else if (action) { - return ( - { - e.preventDefault(); - action(); - }} - href="#" - /> - ); - } - return null; - }; +const CardColumn: FC = ({ + link, + avatar, + title, + description, + contentRight, + footerLeft, + footerRight, + action, + className +}) => { + const renderAvatar = avatar ? {avatar} : null; + const renderDescription = description ?

{description}

: null; + const renderContentRight = contentRight ? {contentRight} : null; - render() { - const { avatar, title, description, contentRight, footerLeft, footerRight, className } = this.props; - const link = this.createLink(); - return ( - <> - {link} - - {avatar} - -
- -

{title}

-

{description}

-
- {contentRight} -
- - {footerLeft} - - {footerRight} - - -
-
- + let createLink = null; + if (link) { + createLink = ; + } else if (action) { + createLink = ( +
{ + e.preventDefault(); + action(); + }} + href="#" + /> ); } -} + + return ( + <> + {createLink} + + {renderAvatar} + +
+ +

{title}

+ {renderDescription} +
+ {renderContentRight} +
+ + {footerLeft} + + {footerRight} + + +
+
+ + ); +}; + +export default CardColumn; diff --git a/scm-ui/ui-components/src/CardColumnSmall.stories.tsx b/scm-ui/ui-components/src/CardColumnSmall.stories.tsx index d94f8af7c6..029e5b1548 100644 --- a/scm-ui/ui-components/src/CardColumnSmall.stories.tsx +++ b/scm-ui/ui-components/src/CardColumnSmall.stories.tsx @@ -44,5 +44,8 @@ storiesOf("CardColumnSmall", module) .addDecorator(story => {story()}) .addDecorator(storyFn => {storyFn()}) .add("default", () => ( - + + )) + .add("minimal", () => ( + )); diff --git a/scm-ui/ui-components/src/CardColumnSmall.tsx b/scm-ui/ui-components/src/CardColumnSmall.tsx index 82b4889b91..4e1acbbc72 100644 --- a/scm-ui/ui-components/src/CardColumnSmall.tsx +++ b/scm-ui/ui-components/src/CardColumnSmall.tsx @@ -29,7 +29,7 @@ import { Link } from "react-router-dom"; type Props = { link: string; - icon: ReactNode; + avatar?: ReactNode; contentLeft: ReactNode; contentRight: ReactNode; footer?: ReactNode; @@ -62,21 +62,24 @@ const StyledLink = styled(Link)` } `; -const IconWrapper = styled.figure` +const AvatarWrapper = styled.figure` margin-right: 0.5rem; `; -const CardColumnSmall: FC = ({ link, icon, contentLeft, contentRight, footer }) => { +const CardColumnSmall: FC = ({ link, avatar, contentLeft, contentRight, footer }) => { + const renderAvatar = avatar ? {avatar} : null; + const renderFooter = footer ? {footer} : null; + return (
- {icon} + {renderAvatar} {contentLeft} {contentRight} - {footer} + {renderFooter}
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 ccd2fcd609..26b6c0c320 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -486,9 +486,6 @@ exports[`Storyshots CardColumn default 1`] = ` A description can be added here.

-
right footer @@ -513,6 +510,109 @@ exports[`Storyshots CardColumn default 1`] = `
`; +exports[`Storyshots CardColumn minimal 1`] = ` +
+
+
+
+
+

+ + title + +

+
+
+
+
+ + left footer + +
+
+ + right footer + +
+
+
+
+
+`; + +exports[`Storyshots CardColumn with hoverable date 1`] = ` +
+
+
+
+
+

+ + title + +

+
+
+
+
+ + left footer + +
+
+ + + +
+
+
+
+
+`; + exports[`Storyshots CardColumnSmall default 1`] = `
- + + +
+ +`; + +exports[`Storyshots CardColumnSmall minimal 1`] = ` +
+ +
+
+
+
+ + main content + +
+
+ + more text + +
+
@@ -34564,9 +34704,6 @@ exports[`Storyshots RepositoryEntry Avatar EP 1`] = ` The starship Heart of Gold was the first spacecraft to make use of the Infinite Improbability Drive

-
-
-
-