From 896063a13b9473a890863be0d86885b80a45a0ee Mon Sep 17 00:00:00 2001 From: Tim Jacomb <21194782+timja@users.noreply.github.com> Date: Fri, 18 Dec 2020 12:43:50 +0000 Subject: [PATCH] JENKINS-64135 Fix plugin on >2.263 (#34) --- .github/CODEOWNERS | 1 + .github/release-drafter.yml | 2 + .github/workflows/changelog.yml | 15 + CHANGELOG-old.md | 214 +++++++++++++ LICENSE.md | 9 + README.md | 96 ++++++ README.txt | 3 - docs/images/build.png | Bin 0 -> 17548 bytes docs/images/config.png | Bin 0 -> 35691 bytes docs/images/maximized-mode.PNG | Bin 0 -> 6108 bytes docs/images/normal-mode.PNG | Bin 0 -> 2864 bytes docs/images/results.png | Bin 0 -> 3553 bytes pom.xml | 301 +++++++++--------- .../pipeline/ReleaseStepExecution.java | 1 - .../ReleaseWrapper/ReleaseAction/index.jelly | 62 ++-- 15 files changed, 526 insertions(+), 178 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/release-drafter.yml create mode 100644 .github/workflows/changelog.yml create mode 100644 CHANGELOG-old.md create mode 100644 LICENSE.md create mode 100644 README.md delete mode 100644 README.txt create mode 100644 docs/images/build.png create mode 100644 docs/images/config.png create mode 100644 docs/images/maximized-mode.PNG create mode 100644 docs/images/normal-mode.PNG create mode 100644 docs/images/results.png diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..b6fcc1c --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @jenkinsci/release-plugin-developers diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..ac497c7 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,2 @@ +_extends: .github +tag-template: release-$NEXT_MINOR_VERSION diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 0000000..490103e --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,15 @@ +name: Release Drafter + +on: + push: + branches: + - master + +jobs: + update_release_draft: + runs-on: ubuntu-latest + steps: + # Drafts your next Release notes as Pull Requests are merged into "master" + - uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG-old.md b/CHANGELOG-old.md new file mode 100644 index 0000000..06a7283 --- /dev/null +++ b/CHANGELOG-old.md @@ -0,0 +1,214 @@ +# Changelog + +## New versions are on GitHub releases + +## Version 2.10.2 (Nov 18, 2018) + +- [JENKINS-53994](https://issues.jenkins-ci.org/browse/JENKINS-53994) - + Fix issue with visualization of parameters coming from plugins + +## Version 2.10.1 (Mar 13, 2018) + +- No user-visible changes +- Developer: Upgrade the plugin to the latest plugin POM + +## Version 2.10 (Jan 22, 2018) + +- [Fix security + issue](https://jenkins.io/security/advisory/2018-01-22/) + +## Version 2.9 (Dec 08, 2017) + +- [JENKINS-26895](https://issues.jenkins-ci.org/browse/JENKINS-26895) - + Prevent exception when Dashboard View plugin is not installed +- [PR \#27](https://github.com/jenkinsci/release-plugin/pull/27) - + Update Maven Plugin dependency to 3.0, cleanup other dependencies + +## Version 2.8 (June 27, 2017) + +- [PR \#25](https://github.com/jenkinsci/release-plugin/pull/25) - + Enable release actions for [Job Generator + Plugin](https://wiki.jenkins.io/display/JENKINS/Job+Generator+Plugin) + +## Version 2.7 (Apr 08, 2017) + +- [JENKINS-40765](https://issues.jenkins-ci.org/browse/JENKINS-40765) - + Add a new **release()** step for [Pipeline + Plugin](https://wiki.jenkins.io/display/JENKINS/Pipeline+Plugin) +- [PR \#14](https://github.com/jenkinsci/release-plugin/pull/14) - + Enable the plugin for [Ivy + Plugin](https://wiki.jenkins.io/display/JENKINS/Ivy+Plugin) + +## Version 2.6.1 (10/13/2016) + +- [JENKINS-20797](http://issues.jenkins-ci.org/browse/JENKINS-20797) - + In addition to the fix in 2.6, schedule new release builds with the + actual User Cause widely supported by plugins + +## Version 2.6 (09/29/2016) + +[Unknown User +(oleg\_nenashev)](https://wiki.jenkins.io/display/~oleg_nenashev) is a +temporary maintainer. + +- Core dependency has been updated from 1.481 to 1.609.3 LTS + ([justification](https://github.com/jenkinsci/release-plugin/pull/17#r81082784)) +- [JENKINS-34996](http://issues.jenkins-ci.org/browse/JENKINS-34996) + Fix the compatibility with Jenkins cores containing the + [SECURITY-170](https://wiki.jenkins-ci.org/display/JENKINS/Plugins+affected+by+fix+for+SECURITY-170) + fix (pull request \#17, thanks to [Antonio + Muñiz](https://wiki.jenkins.io/display/~amuniz)) +- [JENKINS-11176](http://issues.jenkins-ci.org/browse/JENKINS-11176) + "If the build is a release build" promotion criteria was broken due + to the improper descriptor handling in the plugin (pull request + \#15, thanks to [Allan Burdajewicz](https://github.com/Dohbedoh)) +- [JENKINS-28132](http://issues.jenkins-ci.org/browse/JENKINS-28132) + "Release" permission is now implied by Jenkins Administer permission + (pull request \#16, thanks to aprueller) +- [JENKINS-20797](http://issues.jenkins-ci.org/browse/JENKINS-20797) + Recent Releases Portlet should support extraction of users from the + new "triggered by user" cause being used in Jenkins 1.427+ (pull + request \#18) +- [PR \#18](https://github.com/jenkinsci/release-plugin/pull/18) + Recent Releases Portlet should not create new users for non-existent + usernames when rendering the output page (pull request \#18) +- Cleanup of minor issues discovered by FindBugs (pull request \#19) + +## Version 2.5.4 (10/26/2015) + +- [JENKINS-31159](http://issues.jenkins-ci.org/browse/JENKINS-31159) + Fix postMatrixBuildSteps (Pull request \#13, thanks to Fiouz) + +## Version 2.5.3 (4/25/2015) + +- [JENKINS-27722](http://issues.jenkins-ci.org/browse/JENKINS-27722) + upgrade to the release plugin has left the plugin broken (Pull + request \#12, thanks to glenritchie) +- Change so that now you can select Publisher and Builders in the + (release) build steps (Pull request \#11, thanks to glenritchie) +- Small translation fix (Pull request \#10, thanks to Batmat) +- Add two custom view job filters "All Release Jobs" and "Release + Jobs" (Pull request \#9, thanks to fritaly) +- Define a new RELEASE permission (Pull request \#8, thanks to + fritaly) + - **BEWARE:** **You need to adapt your permissions so that users + still see the release button** +- Set the description for the parent of a matrix build (Pull request + \#7, thanks to fritaly) +- Add ability to run steps before/after all matrix configurations + +## Version 2.4.1 (9/27/2013) + +- Don't display release action in matrix configuration + +## Version 2.4 (8/04/2013) + +- [JENKINS-5079](http://issues.jenkins-ci.org/browse/JENKINS-5079) + Added matrix projects support + +## Version 2.3 (9/20/2012) + +- [JENKINS-13422](http://issues.jenkins-ci.org/browse/JENKINS-13422) + Added release button column +- Use package.png instead of package.gif to have transparent icons +- Fixed release link being shown when project was disabled + +## Version 2.2 (9/13/2011) + +- Disabled auto-refresh when triggering a new release (thanks rseguy) +- [JENKINS-9705](http://issues.jenkins-ci.org/browse/JENKINS-9705) + Option to override regular build parameters during release + +## Version 2.1 (3/13/2011) + +- [JENKINS-8816](http://issues.jenkins-ci.org/browse/JENKINS-8816) + Wrapped each build steps list in a f:block which seems to correct + the drag and drop behavior +- [JENKINS-8829](http://issues.jenkins-ci.org/browse/JENKINS-8829) + Create permalinks for the latest release and latest successful + release builds +- Added i8n for promotion support +- Added German translations + +## Version 2.0 (2/15/2011) + +- Migrated to Jenkins +- If release build result is not at least unstable, then don't keep + build forever. +- Expand release version template using build variables as well as + release parameters +- Add support for the promoted build plugin to add a condition that + the build must be a release build +- Show all previous release parameters when scheduling a release build +- Add post successful build steps and post failed build steps +- Prefill release parameters with previous release builds parameters + (supports text field, checkbox & select list (drop-down list) input + types) + +## Version 1.10 (7/21/2010) + +- Added new checkbox on job config page to allow the disabling of the + automated marking of the build as keep forever +- Fixed issue where if you had overlapping parameter names defined as + release and build parameters, the default build parameter values + were being used to resolve the release version template instead of + the release parameter values. + +## Version 1.9 (11/15/2009) + +- Fixed issue where release plugin would prevent Jenkins from starting + if dashboard view plugin was not installed + ([4845](https://issues.jenkins-ci.org/browse/JENKINS-4845)) +- Fixed issue where recent releases portlet would throw NullPointer if + a build was active + +## Version 1.8 (10/13/2009) + +- Added support for [Dashboard + View](https://wiki.jenkins.io/display/JENKINS/Dashboard+View) plugin + by adding Recent Releases portlet + +## Version 1.7 (08/30/2009) + +-  After sleeping on it, changed the implementation to use the release + version template so that parameters types don't have to be aware of + the release plugin in order to be used as a release version string. + +## Version 1.6 (08/29/2009) + +- Added new Release String Parameter that, when configured as a + release parameter, will be used as the release value and the plugin + will then set description and tooltip. + ([4022](https://issues.jenkins-ci.org/browse/JENKINS-4022)) + +## Version 1.5 (08/06/2009) + +- Changed form submission to use post instead of get. File upload + parameters work now. + +## Version 1.4 (05/16/2009) + +- Fixed regression issue introducing release parameters + ([3690](https://issues.jenkins-ci.org/browse/JENKINS-3690)) + +## Version 1.3 (05/11/2009) + +- Fixed regression due to maven plugin change + ([3628](https://issues.jenkins-ci.org/browse/JENKINS-3628)) + +## Version 1.2 (05/1/2009) + +- Added support for user supplied release parameters leveraging + Jenkins' parameter capability + ([3370](https://issues.jenkins-ci.org/browse/JENKINS-3370)) + +## Version 1.1 (03/26/2009) + +- Add permissions on triggering a release +- Fixed issue where parameters were not being resolved +- Captured release parameters as build parameters which can now be + viewed via build parameters link + +## Version 1.0 (02/10/2009) + +- Initial release  diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..6905dca --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,9 @@ +The MIT License + +Copyright 2020 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0499ec6 --- /dev/null +++ b/README.md @@ -0,0 +1,96 @@ +# Release + +This plugin adds the ability to wrap your job with pre- and post- build +steps which are only executed when a manual release build is triggered. + +Additional plugin integration + +Supports the [Dashboard +View](https://plugins.jenkins.io/dashboard-view/) with the +Recent Releases portlet and the [Promoted Builds +Plugin](https://plugins.jenkins.io/promoted-builds/) +with the Release build condition. + +# Configure the job to enable releasing + +On the job configuration page, enable the release build configuration +under the Build Wrapper heading and add your required release version +template string, release +[parameters](https://plugins.jenkins.io/parameterized-trigger/), +pre and post build steps that you need to complete a release. + +### Release Version Template + +The release version template was added in version 1.7 of the release +plugin.  This parameter lets you define how the release plugin +identifies the release of the project.  This is done by building a +parameter based template which is resolved at release time to a fully +resolved string.  For instance, the template can be: Release: +${releaseVersion}.  This will instruct the release plugin to use the +value of the parameter name releaseVersion to come up with the fully +identifying string which will then be used as a description of the +release build and as a tooltip on the release build icon on the +historical build list. + +### Release Parameters + +The release parameters let you define various parameters that are +presented to the user when a release is requested.  The list of +available parameter types are the same as those available in the +parameterized build option for Jenkins. + +### Build Steps + +The build steps section is used to define arbitrary actions to run +before and after the standard job build steps run. These are the same +build steps offered as the build steps available in the free style job +type. + +![](docs/images/config.png) + +In my experience, a release build typically requires pre-build steps of +validating the project is releasable and bumping the version to the +release version. After the build runs as usual, the post build steps are +labeling the codebase and bumping the version to the next development +version. + +# Executing a release + +To run a release, click the Release icon from the job home page. This +will bring you to the release details page where you will be prompted to +fill in any parameters that you have defined (or the default +RELEASE\_VERSION and DEVELOPMENT\_VERSION if there were no parameters +defined).  As seen above, these values are then available at job +execution time in both the pre and post release steps as well as the +normal build steps. Finally, click the schedule release build and the +job is scheduled to run immediately, now including the execution of the +pre and post build steps. + +![](docs/images/build.png) + +# Viewing results + +Once the build is complete, the release plugin automatically locks the +build, preventing it from being automatically deleted and adds a release +icon denoting it as a release build. + +![](docs/images/results.png) + +# Supported Job Types + + The release plugin supports the Maven2 and Free Style Job type + +# Recent Releases Portlet + +The release plugin contributes a recent releases portlet that can be +used in a [Dashboard +View](https://plugins.jenkins.io/dashboard-view/).  + +This portlet shows the 5 most recent release builds in normal mode with +a link that brings you to the build page and the version string. +![](docs/images/normal-mode.PNG) +In the maximized mode, it shows the 50 most recent builds with +additional detail.  Additionally, it offers an rss feed while in the +maximized mode so that you can get notified of all release builds or all +failing release builds. +![](docs/images/maximized-mode.PNG) diff --git a/README.txt b/README.txt deleted file mode 100644 index 8ae3f69..0000000 --- a/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -This plugin adds the ability to wrap your job with pre- and post- build steps which are only executed when a manual release build is triggered. - -See http://wiki.jenkins-ci.org/display/JENKINS/Release+Plugin \ No newline at end of file diff --git a/docs/images/build.png b/docs/images/build.png new file mode 100644 index 0000000000000000000000000000000000000000..67f68d84561b82ed5788d38a8d8a1c8da3de0a9f GIT binary patch literal 17548 zcmcJ%byQUC7dDJINJw`}4`m_J(j7y034(MpfRY1Wq_0ReFq0pS4x3L@}kX)WXk z_~(Ixl7uiq(Qoo~;0MS=NKOa=p(O0_l>rj)o9dmUk{klUM+O80FJAmxTLc82uLuZ4wuv>0d zUvZw1)ZnPj_o1&mULA=CS<>;EO|if zi|_yum5u~8ARD2Z>LJ?#wGRfziTGthwp){94uN>p};4WnK3t4VTr!L+TB) z#d){gb8~Yj)^vi1_fI%Eq5^nI(hGF|P;rCA>DuwNg#UaXh$yb|8UKGiPz2>ba4X2! z{r)x~s*my;z{$iAwZf)COG3Wy8C#C3ez(QJIK(qGME}*ql*a3i%n~7aTLG%WMbYAT z`Ak|oOurSISIEVru{GlEJBt+Z+Gx@FOr49DD}|nkyTOpgBh{uU&+_m1k#cX>Hbj3c zFkg;AIW{8;$;*n@x~MN}tR0oit42Q1k`g`T;pcL3>&I&osF$;Q?@t-?u#~fkzMcV+ zJ^$_lG(^VTv`v+N)NRAQSu!RamX)AbD*sAL;(o16*pgCkm!tujXDM1xZ=XEe7Zx=v zq@RQH3$*06$YS4ZPLR(9bJef4-9i`B7Dohl+!y>wp(>LiX%%!-%y=)qbZ@35RAh!N z4PEs)dXRD3HRL`EUB7fw;*!vaxnH2Y3>7^zP5kMSv2r#JyZ@vj_3itX=88fyXsKV_{M7@x9N zNgH+9SvRnehx{`D)h5V32U1Y2q5gI;KE8-Ys>vDm%X+E?ZUMyb5~35D;#KS5h$#E4 zWZ~7p^fVsI(@ii6GSvgzy9btt*Wu5j7$v!+eCFEb6ML^@J9;oWkh{cjt;gu zUk9|O9sEtGE>NySbkoP5w3}=^;s&qhd*Di+`-Yt`l8`d3e%AF7eCbNN`GM3wLRBhr zcV+=r#GM7wZT={N9X{p**_#|hEDEXbTR*ml?Q#NSpR+E|^FDbg?cDS{siI zv3Q~c@_&Xjg1Xh>$Dr(}^de66-wq|I#z71DQAWK!BM}Iw;r~4NXt3`aMlPNz-1HM7 z?5|_rVf3qv^U)`0{*fzO2o@fDh*G3^k-P~2YFH6n$i&8`_o19MHrTXvC?G=-HQ~G zh}TBO+b@xL)c1RgNF7cBRq71^`3a^7*2~^^CFqA@Bn~&~Aa)Y@Pw#wGz=D*7a{?Y{jBbSc&jQoA00N*3OKiLPkl7zrajS7(q@8|IVH-%@O z`#&qdiYTH4o;)qQ**fg*jK}`(vknKu_57$FU6y2B=%I4AO{W7Qd-DBiC8;z)11jLp z@{WS>e5Dt8xfY)L_B{_fGwwQboGM8vW3lu^z&sm zKf%fSWAy^zic%Rvy+xy>x~&t(71(ZiY=q&#nis3sj8W>>j;pCPDXI=^p6DGE6Fq|mkq;EieIb%lO;^Uo zt6#aHR#pS&@p%t1#;H(fPZFmq!&|gZu8M{gc!Vv}nO*G#@LpbgLx*2>+KU1zXb2AX z=Fyxkor|#wd!z0-xcE9f9BWe%EKqP(fvkRgm@Z>;ws7lC`7lo%K4#vy+?Hcn>gql5 zjpFHhxywT|D9C-)oHM4Ks=c}Rb# zp_b}XR?cSeF4h9tmx5)1p-}Uv95*TmpC7G?l!dX8;*ZIWFpME^#^wu z*{;X?YYYW2Rw0KQ__XdkgjemVRW8VLS0bhX6Y71i#yd)Lg!hgk>8*5tI6HBv2%Upu z;oBWD@8%Ia2*v5wyxo=@T3uRm_0j+a2+9{LJ=g>MqboB17!aq5&;z-2d1%+v3pgLYcqSY z@mpe!>qE`X=de+oQ`2pM*pcA6&FzMo>I-LUoeMHXPL-P~GQt}kqpqbY&tL=veBm&v z7ey^2!_&Le3d3H*#YZe>4vIabc|3NUqaB#?Upu!Nb62X`?U!;y@*^m?U#ovdrXb~y zp?b&efuq0IovDJzK-mgUP5@1LgbRfo*nUv+rQD}bs_-7x&Q#!jhMK`A(DUMX0{;ki0tFT^$l&?AqK`PMUDsrahj0 zrg<%3{b7?+top;U4S&ha1bC)yK9|$e&-+5LYR_ewzOi`SbdKo$gvf&CVB^zw~l zQRlxN_H$*hsa}b#xIHAY@Vp$UnI%!Sz~2(6-L7HEw{E>|OA}Q*&B5bkTfmIh7`2pV z7Y*6Up(cPzzFtV@aE8*8nFg2GOE{hgN_M7%(dX%CmS{oKg0>{zm6x5kI1Z6i56R-2 zc@$A&7eMMrm@RHF{H)(#cPKP!5H=5Rz&Fxe2o-%`{hag6C4c1 zcx0p2M>8`8B@*jBl$?yEi;np{dojq+vXSqx1yg!4vX%=4IoK$nTcG#O8Tk+zHdVKE zR@kGnp@0SxnNK-9ouTufGgH4;5q>6gcm4r{C#eaa>p!jmeNZDuGnlQe9Gv~FwKGm^eN9i2hL$4!d(V!p}vGEp&o2`+h&=ZDmkoFVgN z`_8>k(SnrJ!8W(wGj6(_E!l=pGf>gk(OS9=t^9VE4tp2*w&-ZTl;PdGMJm`&I&5_~ zRsZoqYmmwB#HJ8#WoP#%Nx0FmH6AbAcd_)g*k{z7rn$}bdm)KjFrFL|+Lx6tVD@VF zCRPwpgbrHRRtYSwvMJ3Hd=n;Q?5 zXlkvt6}oVG#GOl(v(SIs5!DCKf<6NO&Do;E>hC6A`?EcRobc<*Q)ei2d%O&}c&r_V zTmZT;)Y#aVo$Nu{pgltOuS>rB8zaa%8$d{+B%31qt*Pv%BVLl~-?_!ngxB+QMk8(g zqpbgWU$#YFYKcF~e}LQZ=)nb~R4B$BFiHRVpbUAyTe~}1O8s%?;TQmR7*FZq|Lg4r zz=F_7e%?wtm@xg`5(|{|Zp0VCcbMb&;^&75!3)ryzS2d=c;wys{A2+)BVXL_>Is+pg%fy0Pw>;dW$&Vx&dpeXBu@U09Usf&XFeq2UJM7!b6@iG%KGBWw& z<5c#lCpry34zJ(+IFo{>ON4Q-v+GpbXZ8u%dC*azps(jWK~x;Hsq_oflg^7W6)ylF zOt>6k$xvsi$mbN{6Q?JxmN!`e4wd!aO5NM?eg_-*s`e#b;IlE>LlJ6?ghFzB zXxh07w-MCfT)S?1ZIbz*rMwlFMJR?q+2D&SN-JdfmG%yC@|OuYowN=e;k+n5fhaS6 z)TK8tQ)sE(qPVC7m0ac4_U88O*^xx7B9+3-<=#U5;=?``Y{tD5s=kLrGBbyBpul*q zTtsruPa6yohC-A>9(i+7^;i{#BDv!~>I)^pO^?E}SGoH!fRLB;MU)-KkmLZy!gIRTE}K{8x|G z2lLg7A&tSNh^QHIf-%ThzP2{c3{r202Bo2mjEeComA}uVze?zjTjee5C_WUbd}}9> z<|r|(+wUBCvfk_mh)x_Wb}A&?+J3GP7Erc1PbQ?)>upRocKx#;QL zb5jJHcva6uV?EL$@RdkDs77lOed4lN3LJD+asvyP$Rc*q0HfRXz5sQ(mvLB`?uwAF zcH}FBV*L(rKY*WhOhe+{%0=$Tj%6&Ub7Z4>$pBxA{k7-MT{aY@UGj z(27#=Mu$#kGYq$t`l3z#;~X?)wJ{8g{Ot$jZxROCT=&j-$=wZ4SJ+;^MOm*dq2+}{ zgK1dBppg|0!4!apYPp+7d_scj$B)?GVW4sMqeROVdlQz?Me|pN;Ft+dU(PP zfrQy^IA8{8K>bzQNfvPt{_=K5WFW(@cIBoK_BL7g^@;s@q#}|6D|vy+6vzz|RW35$ zUUxLJk;jghc5^5}YtzVUZP4TsUx|bLvY{!n1ugG;s;)?ykG#VL8jN6vcShOYdq4h8 z0^v$g3B&z$)TbnamvD_*clbXNrh!P2iW&P@crlMgE0W!8XE=u3HVdm3dKJz6rG};H zz>K!XWU!z0OYL3e!{0*alF(SmAecddsSi__^k9{?)*|#i!xY^ zCrC4n4Djk&fYBNF*(MH%5eY4}yTty*@ur=`%Ohm#Nf?jf8^&-Zm!Rme89Xqj%}ns5 z(?I28($+nPoO(Qwc*%%VIoW;*Ct0$+2%Oo}UAk=ogJwepL8#KN{NCy)L0lA3z+Yuj zLLwYidj+aYyYWldu4R-=3KzAM%}Hj1w&9fx#B64fwDLbBk@$ z`0C$wD;Haee6X_GJU?8;dcq$(6|JuC4sG&AGB!5er!?E`a-k@kYIukA@z)d%xS^u1 zt0q^1lAT4+QzP|>rqB;X?yHq01BTvtDXMDF8n4vOL?0V2BPL)AQ56Io<_s+0aJX%h zV3z;(+5RHecb9#`slqbLakd;hOZhj)_#61hZ+=ID(4v5d%%F(HL=5p<1c*LyUU}mo zof0>PAu1~A>o>TbTIUc>iSfB#IOgDW;I9icDJuz6F;*9KJscnUTxM)7;5p*`B~nlc zh)U^<=}nPQ@mXL)LsHn8K}63XaGr{q8qy8WICw9m?r1=!?^&yK%pn8piU9%o^B?X8 z02fG5?<0+=x9BFQv1!2hlk9vL}%D>eA>k2eEY z0DmX!uH~^aw8H-Ys*!1S=oI4o@`L7r4utDtK z0NvoG3SV4aQj1aveROqA729J@q6@;{$EAy(L*f6l2-3rI8yXq$n~MH^O1#P`t|kB1 zLB70eejuDtAGjBistAGOZirf9(+oI!%g<}BudR9EAvI8aefeq}=Whhxj}6R}8I6$u zXD#9*QlyxRnk`6=P$i`-!xTaZiT(!`c!5fV0nZspfH%hUry&9=BOvfDJon+^|3&Z& z^Tjh|q);7y#ZE>hE%BDc%765+d3zygvB*%DcybAHuV(9u-)h;fQw zeYgEjpp>0e7J>;m#8ya3wtX};^%V_`E|li^=QVEnius06%kL{h=?3=r zt(nRExx4Kn!EWrguO^g*kUhr=xdaYtjT2`U7Ed~Tb(JfYll)cQ;_e>z{lLW@UT6GQ zYQN#2gJiEwHd=QkT5*jCidBCo!m&gME+x?*_d?OzpkUJPfB^@PJZTqn$h2#_Xtp`Q0`bu5zXOY7%-SOSaz_g9* zCCB18n?~CcC6Y7dLRB#fp;np&TJn00^IN$E^Z^>|LdePXWR;nN`|?n+YQ5W~_iBCM zXdsiP?#n}tbDqo0+pp>;>Sg-udM0wUtz(|+0vj6}1Errs0QJWe7E}axsgBnCWDIq4 zRac9|sPHVf6gWmk;=|asNQm)DJHr0@FkPd7bC^)UDZ10dcL9AbIBi`)Q7qKuF{$wI z3u;PC0Y(7>)sTQV)A=CtRF!vf%)f1m2F2Hkl`MtnY79T-)wYV0zZVy-Ct|0S0HqB} zSy*f)z1en|o}L*wv3}h3TUU;8FSNY8oSoCA{U$W4ZDnPpaFXL4axr5_NCnzX_-o4W1bDX?*ZiJ&{3!`=i36V;yuRNu_1Ts35^&Z9)6L zUof=9&?BR1j1(lUZL!Azvqd#(H%WG9u-9D<9UHZdeXifOUsUugtDV82(~JPMg?8=) zKE~F(%e#;2{k0zNL)-zcpkY3q#g@Wu5QDyQIzpmmhhWU;vszlY&uEGwRxw|+O3)ob zXXxHm@$5sWMVDIlgIaRamBI5-((RI|A_&d?8-hu1)kAg}_xX?{Szj%{8wz4p?Ga0VT#4T+KeT!+UQZvEaY{mjSVRTp!1!lX;f_{cpPcgyhb(ON zeVTri8{U7NUcK;~!%>3d<2&uH@30s+PpXQl_7q=5qR(e#@t4a1k}Y=I;~nr|`c*m< zlZ4#EgloEFz?lfiBG+T*;4w+_AtKp5A#bwC{viY>=e7r}m*X4?^j}47X1ldA2}c8V z`L;au6J0nCVoeT2oaa3l@Sh(bKrk=#?Gc%WH*v87WzzOLSG)#w*2=aEPW3vCQo{>4 zj52!UwSKk7d>S5R!(u++jnS~?9YRev} z{qW&K|HZ8_jcfDquqsyaY2CvY)|2bWyr=2f_390V@qUQqKhIVcKl1gFE3;l3NTTUu z20AEcD-XY6lgtngqH>fq0Il`}TX*}8ysli3x{2%;zV|PTws&rnuH$mI0V~cM!;EpP zCDiTm{ROD-vd& z9%^L`9jg!s`cuOX%3opHbJ<+k|FZbu&Uca~%)J+c!inm%bh6)i$atK;(x_kR(D_v) zzs*tQhSpJP*;l~b<4Rz-Ffl+o!pBZj)M?Ar3BPBaOVQ9(R0T>iO{bTDjvSn+eqeoU z`r_Vi;M2fRpxz3YJMA!ylo5jOX?8OyMd*YyP&?)WP#UzGY=Er#BPb39@#66l>#U~Q zO9X`^@u9+Siy*(XfBdUT{v z7smTh0q>YvZXqwq(m|vK)mWmEy6jd5yW_a9N(Ef4p&ANAjo7jPFr_MZSd5B~8vXe^ zpQq>S0X#4EiT>HbSt~*Bb9bv7fGCK4s$B^{kgKgH%qj5-;4xtjbBRtH)#NsgUzdFH zl5ZtJ(Go#sL!w1UZQ)tMP&PU@OIaX3HbTVN0NI0f!j-!iT9K2yyu(s-_n0}{=uS(@ z%m&-26WTE)sXS4>d$RQ2zObFfo5bVc&5QDVhTcO1OQQyYgOMU#mSz7M+H!wvMlCaM zpUsg%7SiBEQv>W5S7ezZ#WTzs!ncDg8^yb6_9DxSm!l%V@>9L0>a%7Z6)jiamC!BO zPp)%9E|JfN?9lffyvH(-%YpbIgvs4Oa>2WmoBKp-(81qE@uD2P)z3=Jxjdk9TI20( zy!aNBh^ydH-_wUJ?3qJNaw;E3(qOPM^q7e5WOv%!^%YW3o>R2DgZjCguEgv4lq&V3RF=WGt@o4M|Nb>C(h-L_t(iTy- zbYMnpZ1P~a`^`rriKXl@p`@+44~Kr%Ph6>B|Ss{s3I3d`c)s z4V`JhjQxvcz$63@?t%duIa3@| zd?MgOL`_7_PVJM*w@uz2iuYZKN^Xu7W^QI`ijB%>I9n!^mBK*F%dIPgDSi*@D)T^sr^t$G(|clwT5{^wcxA}FfHdPOe` z;F?$wE5Y~Q|*IOD6Ut3TH&M=^lMu&4{WQ3(<9a{0?`y~EQi6OQ%Axa6YrYf_+7-A;QH-PI8( zHSE5U5Dk(50w^<8Q=k9k2RNc7 zh_?Fnp}u0SA2j8Zr|IUUVdf;tV8=j(r)gs|_+_dUT$px%;)(2N;3Cfu)u!5ZI;sU1 zZ+3ptWXan7d~>F&!(IKqu}Vg_JvRtEx)C z$7nHH^uuQ5V%-9h|L{VuLRPPz>2at)N!_7TZFKzv|8`GNg`C9kn&<{nM>9ZUMT zo)t+dLl$vz;9`;6^^uu{Lqb7roKVg zAkDuNEDVGVc%P2XVgsn9ve@GvY=6IZk?>`QfpCiDRh^}{X`CqahG3(YggbsbLT=ff zb4rcua{YZO^yS{`uXFJz@nr}Zg{d{*jWJ4@-^EqLXj*;M;l#r2;S@@PV+7?JE$QmG z-`)fL{kz3z34-OjMi)ox3g8Md4r-s4MT&?TqXDIMV?-#TnYVXW=3yoB;;UwMHn(?1 ziP79rU~{AP@zHZg!7tqIb;KB2oAZ)I(LA1#cbs|H5z?)AkW#?mss&DbFi0j$q(BAX z+y{w#7@4%+VmMkhkt!C|LPiZLEsUGyhWw3yn zd7i~G3B%|3DW+u5p-R<;i|NG`G`6&coMF$#X)^-Gnpi|TeTt!c3dU==irD*cr3J5- z92;9_wj0BpcfN*1JF2Lw6&!lusTL4-(x*o#=9jb0kW$1w`G98`f*l6!+p8b*i0&)U zXq|8|;kJkntj7hiYQ~Z%4gQkq@Q&N9J_l)Y+V)!+O!x1pr*qt9O7veM9G?Bq#P{MM zA)F9V0k1z*JNpnB!mrHxigpM!>4L{>fG#Hr`F#OFDme;{Vv3k(gndhygQwVF>f)-> zD=nbe{Qo!QxEe*I0bvw2FN= zhXr^uB}hjuJ@1kKTY7nd)x`be7bkBA#7#=v(mxZg=(1U9?+O(!7deO*l+NX3hG6~d zO?%<+y068Ht3-O*QCPh)on64t8+gQahmf=sY zljsEAP{{WeW#bZkSE4S}nP(e*@b+|NgPY%^km6|%mRzX)y&2Z@D*Qj8aC0hYQOuf=S7zDW<_9T&*B*r# z)_P1$MRFG=*|#SW;(yqy951ZuwQkL46iBW)_qhqOD}4I~aI7sjw%7Y~?zl4o1Mmi3 zksDexV)SpacZ$c$}K{SeXpQ{5`U~z#Mvasin$U0$fR|m zLYQc%TS9sKN6JX_(ZtW^k9-1{-n5Vpc`|1s%DoAy^QA>cx!P#eMp@NPNhAyGJM!?k z%8uK0#jnrWzbOtnfy=ttPpFDz$Wc&%jGL z;?^1<8KTt|DR&JHqd`a6p&k+T^^hwUaZT;S>nftKkfXh62hN4)na^kFL2iA6hOV5Iq-z z0LHOV^XRExzUkqD(jb>>8C3O976+(3dSY{g-~dWS3S^EJ_AFOVkENoc)OeVS&Eg_0 zn=<)wtofB4Iq&pm%n$6+11qwwk_dN=56l{er4BawIB+{20OY0U8t(jSfKtIVnv-=t zO`_j*E*8;1wy{$%#ji`tVpgz!fq^N6n2S4i{9M(rx}bNslin&+3@B{`GQxF-?@QdE%X&6Z^&%~M8){id*)tU#WLMm>!dNqMV}77c_u_GYond4HzI8=SX1OXiikpKs@z2`dxcy+CR1e4jf4aF|ypp8y zz6F#lxaA z3$i$WE48YFb2QmL%IYQ$vk=IV*R`r5k2dr!+K}y5d78MlR2+txPEf>oZeNoruRs4r zc8y$Wflepa1ZhmkA?TNP(|+iO8DB&^Vbj=lsr=11np za;iyNPtw5;_kveGnryQ0pN-ZzceTbwMwgX<7 zdKi-5p#ND&?UW3g-MEli1$@;ODHwr=q71f8^ly*L*$_Q*HBsk3?VI+TJU9^`=bczn z1ots2fK3r$h{kxz@HHb}fs}NAbQIF|W10p2dRuv$X*y3yNi&UpBaWts1BiBuMtm-S zkvVcZdc(cp{6(J0ty3GjWOhAu&GRu>y|pX#7hkVawXWSSDEsAF6n0?Vejz*H`ohwz zd}Tq@gm1H6DNGg^sXR<$&ndy;i2EqMxltzX`9PegI#in@!!*+bVrV#~q02HXHud{8 zpP$q{PVUOUlf;{9rL}(1*2Alu6i4*DRM`*}DK?5$6h240{t?w7r(AmnuQoJQeaLTx zA2X0RoJmJkalvW3MWj>fTnu5f0Z6B}vu=Vl`lC@djiW>yiU^U5;~e%5GJPD1lU_9C zL64_=-uIRc`=de)saE|>Kb`)TXp8W1D60PWo7zgdTjd>9ew9q@Tc7bTn}S9U{Kw)b zy#1*Z%z=~>sLYy+kK}~jd409#TTua@A6o(StKoKt1{+4}HRFS1ZLE5n6r@PGbO$R2 zsfsBODj_Nf$`4BhIDGr+DT=Wzey;zI);E^q7NB!|ZJDeKKK zGxR0PHNq$7n-Zt#V@y0a^oFLthVsl(UXVVLZ{oyp=-U6P45wR=5vG-Vdj^~u-ddzK z;q^Qgi^sNlg3JmliwL`fB)|w^*PfqL-P&!9)r$QrPyvTCFuJgzB|clIq?q2S`;E#Q z8EFP(GnEXN8itPO3VejJ`S-KL`_jC`@DVRDeA8UTM$X+0i2dc-&rj@KGqJ@tJKe6M zGrS8kq?zY4u??;^A!~AOzUJm9%$W23mZc{%`6k;x_7p=Dhpmmtap0GeJWk9HNrr!| zOq3vAjPrJvbeA`=k4>>Ya{+GQhvS!eE|2-D*)=UKNMgW6tc}*Li=1ivDJaL zq@C9ACp0g&;0-e}Cvu!_ZUhB%Hej7t8fl+`cOd%cINjY0ukm>Is!=d;fcvnPwym(j z!YOX|QKApm-gF$?rDC&y#6*Rw!D-6b#3}ch<@&2t&7QE#DIM~n%H=IN=wLso zu)CdUKxkcOob~5zmDL>*=jTs3n=H~ca7CiO4v3yXS}0l<~+U#P{E^Z^&~B%zR!UH_RG5?;eC-jUGSn8BsI{9kGi@M$oG1-TGsny2FeS%0}235pFy z^DnzM#}6+RP1t@CE1EINqETq==bv$X&w5KXmu$}pDAU!zo%sTM1t;rOF{3d2%JJOh zZG&ZV1MS-3kqnlwn_wuARMiyKK;8h=N1?w7DeM^aAM8Z~l;Q%C{9cLyAddRFH3?E&S=-YVi7?uDA0SR;kG^$Sbm4+vpQ0*(yLuX*VMz~! zuJ-Z_3`7GS$9Z8%>WdLj<|}pX`~D#=BP&3hF5QIaKT*D%ykWCAeQKel_u*i?-S&AH zHhpQMF^z`_a{D?jQ$bl~%6p&9*^ zZlX}7xomlUd92X}ALLri$UDL;xk0-een+{=!skxN*Lj<^TU>Z==5cW2Ix9|X2k8SH#A^B|!I6=~yMmD=04g-tLNfIFu3IJd(j;c?DNUCs$NLEPt!FB8Bb&`eok9;%t#rk*Hm2J zXcxE`UDQ~o=orU@nsi%~V*R}^ho#uQd{w(oH47%;0Ip4e^7~7PVG=`q{wlpCxW7b_ z3qI{r)!fW{d)~VK@>nUfu<$gs(*;C#{ii4P$J9zPk9(XYy{pB zm^e>4vZe1ixDR(zyfX2ttV0l@{X217VJdg1{ruj%a@l(dIPd9Iz56^H1GRD{$vq1M zGe#+cjQ-Zay9DBq*1%*#pP@DXD*KsMUjw4N?N)8Xqlz7&S@0s~& z->aI%N||&$bHB`&2nl~q_yI1U{R=bXE}|*iDJr6Y0UfYmG<-&4oY{z-CIa zlYl0agV^@{aKJ0a#o#@=&y`CmV3Ec4k$>mZDg`9u{EakRL|ZVLu^E5*(0~F3S`Kdp zGII*vC$}hoa}ci$f*#R&8CI)WcBbXv?Pdo)7v&OW?@`55(8m!kw5T^MXTvJedROD{ z3mZ3dl7nx?oTDmq>;c0zW0B8vs3&7SW&8r41GmLL!UX$Ce}|A+x%th9B6dCX-~W`x z3gl?<@d`!R5ghUFljno7p>X=;K2+fhP{BP&*-?%S5}xFfgcEnQkqr*O+Z@61cQ`-4qWve(>7WFv?hxfWQ)h3lxAm{{;*A05hI%kxRsSgs4M$O8 zsVyrPf}j0qPwzWj(224tXf45YC?M*<@bY~*CP9A8(**qG42o9!X2y4laHHK{#=ZaU z(kB@pKgxYjQM`TOBe2I;LW!8Uzk9PYmV70(tAAS|=|eEE)Qlw{+wE-VN_#cx;^VQF zO$o)t5x0AcV_~MO4!%(YN-a-af5rhpI&gYRk%FvH?~dQ~vlmZ20|S^9QY3xLK z52@E^lRx6pmZraNCB0P3YoD9jSA9G^PdS}kMCM-6<3q!H@Le086G34UEwKa##mxt8 z?O`tIB>lb%&j3<4h3c*d${#le1LW+a;|#wgG^AG8W4dAyPMLd}fgaEPCHC_Q95ky~ zu=GWXJI|aga7CHcq!s1id8y&{3R51Qin@4&QfCZa`m5&T@J+S?s^7#A?|V~GdRI{C z&#JzL1#&iG4ge#!D$!*L3cXfogRC7wO5YT39rf}>ZrK_a-|KhEoq%G~`1hm0yr(p_ zv2Y$^q3JNBHQJ@||C*84`GA?QA;h%gp5%1@y&&RC)E2<}Gg=8;l34e`4!i`Lbor97 z!(33%>KOdk0q~?4*HDJ%@Id2FMp?4)uHZ@N>!S}~$*@nzVnC?(2~DU8b4I!tb>`#F z4z=UG5d&ghfBC!GsCsNu9AB4k1QvEQz1GlqwwF;5g{IrX*8M^Qx&Qe#AF_v!XNinS z{`K~t`=^CrNA#}e6S0p99FX{-fdOxxv{Lk)aJG8}A2`z%Fc3vHQqW{b-JWc3{<7+f zq<4^!VJWV~MB)u+<)Yz_MEtZtcfnMk(+~;?MRcg}sZ?Hm(|;{|e1Ib2tR6D$NiA}MQky3ks8irtr`NgY z)N)Qv$BlO0h=8@(i85IE0gV#>5=^P7HaMyIvNZ2a^N%v#KidN{paKqtD%ywZ_X$PF z>TftfE_h5xaTqm`(Pq?oe4@0PgP%^9>|0nms+VKJ4$V5QPiF~iqV?pvAI)1 zTI)ATfh18s2AuRLHbXcFdhblB>Qx*zLi-nPZY{o zZE{%hjyp57`M)PvLl99~;}D^doTm{(camn!G*m(9C(ql75T=uaM+ZOKEe}!HeDNON znO-yO-j1-{-H>Z)>|lk_z(zrKp@a^Hq50Q*TcX%%I+vK4;cnsa2_OhCvceZ4@ux{;yKBG&Y zBTO0@A*^d-2Wlyj3dWkUm}w_PLbkXrOWeVbDT$?s4&v}_hL>)13n^f?bWqryCX~b- z{4zFj_{5{PdS~HFTnqSKsox@q%zh5><z8olc&w&!zx{WmFzb#h%U~zr ztzFIn&sNtMt@I`r!SImegFo@$kVPu)odAUoaiunr*Nt+x(XPB19^+sCZdlMAK*Hj` zT6;EVfoOIRWHRcpO4NIO*|J>4f1PzkPr-+c)sqWc%lxz>?GGMU9g~7<0=I@mlITWX=i6nz0J+dj>JEM zdw~Y100@xB=@^<&0{vMxVrH{dYazbaFm*D3#ZYH|_^!A)VS&VEu?@q870sGMufgMu z-sI%u;0u4bzY-dFhv?(V>{mq|I|;>8VVu;I9Hv6V1?o#Lzuz=j*v1LQ4h;=ay&=r( znExMxVs@ANlYFwi{sw9>9?z?1es%hJ_Uv;)a?@tHI>#JSiHqqQ>s}!w%QJ4nDVbo} zj=)dsFmcVY6)V0QP`j8R8s{Gy0XP#W0P+fI&oLMnRWCGIaLRw&Y{ya;iN7)xrr+r@ zv#{WG*`xA(yo4f(nm1obVbmHpizJE|=#t0EFARPuXYePB4EQC4yZm}K3LgzNNjPaf zr)9(TK0SR@thJRT?#07Aq_m}jW%>Rf+vLU=nrJj9TjiJhX^XyKlE0#y2TD7Hh=!?e zq5NL%j&0s0gbX8&fd5dxcUMkypu*;VkBu&z48Zf%^S>1T?&ks!yamVv9{+t|4_qdt z<4oj6`#XpZ(8f-x=l4&**rbTp9eqEtm^Cfh=;o!GO{tkD|$&JV+gH6H*-O03< zM7?#%)Q4jjf4k|&0W8}b)p?4Qrt>x)%ae=l*2Np!^Oj=k56dT6##okL4+^uolAY_` zn2kW2Jf` z?{`c{1SjS7MVCZC-kk1qA!7~4JhAx7&;^?~ z(6!;KFdoO7)bk|F+%JrcAN}R+FJv68yj@(Je8riNd=*t=c5A=ek(%uK?EJK5JN?J-LyDM(+XN45SCc)Rcg`!v zS10xOXL*#P9eDLyHpf?1OMFJ_D@QATH<)b?&gxwM5^&o;HzCb>1_kaoh=)v|P#eYo zUhKU?7*GEQ&UMFvFYF?(+tGv63f$_1Xj^|Tis4)U5eU>*h4s37@!DOSvc@ulE<_}; zqX#Fm6UX(OYD%tT7YEZ4XEXx6!)7M0epb&wmIh8JW^hs=zDgv@CSBOdFEuW|OuX>n z&*MSOOAk)ZOU_~ziH~-!>GAKES|AL1bPqxV6|w#Ox2T+rHtUjU3Va51FUuJv-3gZG zYQQ0*@nA8b3D&@~HOcFt8lqxU(X~$Ahyfu+ROgq|;6NVKf>&H?awad+#fmN}Md&l4 z(lneQe?nm(9Oq#ntlV|k4xLsNu=#qWZZ7n`bEMQJM`BNn+&3lQYsrz-*vFq;fdpwy z2k;#CyGwkb^jwbBtk%PZ9q>k2WUWeh@V#{m^t}rV!0;_y5ADOC*y1gdnDoWG zs3sv^CQ(%a`UAqG6Z?|gpsnDeVMSW5qB_EM!k1qbg7>jh=r(_w-QzStd(;*cu(MM! z>FCQ{ebJ^tIos85ZY*JQTqmb09?$8ai0+0aWoWPkDeL3>s1zQba5gm+Q`xu=?WO&x zV0twv!G6r>smwIv`=e5zyK@<*7Ek!UpZReu_mw8kcQT53hYkK$lg|ajUiRw)^hiQ)WG*yZfsK!+5y3t?tdCTJ-C( z-JCdAlWFggguFJ+A{Rt~dOX|_sbSIoCcwxH)RG3!9js?3|D^Q}?*Zy`<|&%OZjXt3C+5K{bL_Ps SBjCRaL68!Ih!zRI_5MFKs*=+H literal 0 HcmV?d00001 diff --git a/docs/images/config.png b/docs/images/config.png new file mode 100644 index 0000000000000000000000000000000000000000..aa05382abafd8e27354eebe6f87405df0576caa9 GIT binary patch literal 35691 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ξ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 literal 0 HcmV?d00001 diff --git a/docs/images/normal-mode.PNG b/docs/images/normal-mode.PNG new file mode 100644 index 0000000000000000000000000000000000000000..718625d23e44e59006904f2697999e55c2ebfee0 GIT binary patch literal 2864 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index e58c81c..5b2ced2 100644 --- a/pom.xml +++ b/pom.xml @@ -1,150 +1,167 @@ - - 4.0.0 + + 4.0.0 - - org.jenkins-ci.plugins - plugin - 3.5 - - release - hpi - Jenkins Release Plugin - 2.10.3-SNAPSHOT - Adds the ability to wrap your job with pre- and post- build steps which are only executed when a manual release build is triggered. - https://wiki.jenkins.io/display/JENKINS/Release+Plugin + + org.jenkins-ci.plugins + plugin + 4.14 + + release + hpi + Jenkins Release Plugin + 2.10.3-SNAPSHOT + Adds the ability to wrap your job with pre- and post- build steps which are only executed when a manual + release build is triggered. + + https://github.com/jenkinsci/release-plugin - - - 1.642.4 - 7 - + + 2.235.1 + 8 + - - scm:git:git://github.com/jenkinsci/release-plugin.git - scm:git:git@github.com:jenkinsci/release-plugin.git - https://github.com/jenkinsci/release-plugin - HEAD - - - - petehayes - Peter Hayes - petehayes@gmail.com - -6 - - creator (inactive) - - - - oleg_nenashev - Oleg Nenashev - - maintainer (retired) - - - - christ66 - Steven Christou - - maintainer - - - - - - org.jenkins-ci.plugins - script-security - 1.21 - - - org.jenkins-ci.main - maven-plugin - 3.0 - - - org.jenkins-ci.plugins - mailer - 1.13 - - - org.jenkins-ci.plugins - jsch - 0.1.54.1 - - - org.jenkins-ci.plugins - dashboard-view - 2.0 - true - - - org.jenkins-ci.plugins - promoted-builds - 2.0 - true - - - org.jenkins-ci.plugins - matrix-project - 1.7 - - - org.jenkins-ci.plugins - ivy - 1.22 - true - - - - com.jcraft + + scm:git:git://github.com/jenkinsci/release-plugin.git + scm:git:git@github.com:jenkinsci/release-plugin.git + https://github.com/jenkinsci/release-plugin + HEAD + + + + petehayes + Peter Hayes + petehayes@gmail.com + -6 + + creator (inactive) + + + + oleg_nenashev + Oleg Nenashev + + maintainer (retired) + + + + christ66 + Steven Christou + + maintainer + + + + + + + + io.jenkins.tools.bom + bom-2.235.x + 19 + import + pom + + + + + + + org.jenkins-ci.plugins + script-security + + + org.jenkins-ci.main + maven-plugin + 3.8 + + + org.apache.commons + commons-lang3 + + + + + org.jenkins-ci.plugins + mailer + + + org.jenkins-ci.plugins jsch - - - - - org.jenkins-ci.plugins - jobgenerator - 1.22 - true - - - org.jenkins-ci.plugins.workflow - workflow-step-api - 2.3 - true - - - org.jenkins-ci.plugins.workflow - workflow-support - 2.6 - true - - - org.jenkins-ci.plugins.workflow - workflow-cps - 2.9 - test - - - org.jenkins-ci.plugins.workflow - workflow-job - 2.9 - test - - - org.jenkins-ci.plugins - ant - 1.4 - test - - - org.jenkins-ci.plugins.workflow - workflow-basic-steps - 2.1 - test - - + + + org.jenkins-ci.plugins + dashboard-view + true + + + org.jenkins-ci.plugins + promoted-builds + 2.0 + true + + + org.jenkins-ci.plugins + matrix-project + + + org.jenkins-ci.plugins + ivy + 1.22 + true + + + + com.jcraft + jsch + + + + + org.jenkins-ci.plugins + jobgenerator + 1.22 + true + + + org.jenkins-ci.plugins.workflow + workflow-step-api + true + + + org.jenkins-ci.plugins.workflow + workflow-support + true + + + org.jenkins-ci.plugins.workflow + workflow-cps + test + + + org.jenkins-ci.plugins.workflow + workflow-job + test + + + org.jenkins-ci.plugins + ant + 1.4 + test + + + org.jenkins-ci.plugins.workflow + workflow-basic-steps + test + + + + + MIT License + https://opensource.org/licenses/MIT + + diff --git a/src/main/java/hudson/plugins/release/pipeline/ReleaseStepExecution.java b/src/main/java/hudson/plugins/release/pipeline/ReleaseStepExecution.java index ccd8a96..6d637fc 100644 --- a/src/main/java/hudson/plugins/release/pipeline/ReleaseStepExecution.java +++ b/src/main/java/hudson/plugins/release/pipeline/ReleaseStepExecution.java @@ -114,7 +114,6 @@ private void println(String message) throws IOException, InterruptedException { TaskListener taskListener = getContext().get(TaskListener.class); if (taskListener == null) return; PrintStream taskLogger = taskListener.getLogger(); - if (taskLogger == null) return; taskLogger.println(message); } diff --git a/src/main/resources/hudson/plugins/release/ReleaseWrapper/ReleaseAction/index.jelly b/src/main/resources/hudson/plugins/release/ReleaseWrapper/ReleaseAction/index.jelly index 8800bb2..745c4e7 100644 --- a/src/main/resources/hudson/plugins/release/ReleaseWrapper/ReleaseAction/index.jelly +++ b/src/main/resources/hudson/plugins/release/ReleaseWrapper/ReleaseAction/index.jelly @@ -30,40 +30,39 @@ --> - + - - + + + + + + - - -
- - - - - - - - - - - Please configure your specific release parameters in the project config page as these - hard coded parameters will be removed in a future release. - - - - - - - - - - - - -
+ + + + Please configure your specific release parameters in the project config page as these + hard coded parameters will be removed in a future release. + + + + + + + + + + + + + + + + + +