Add initial docs

This commit is contained in:
Andres Almiray
2021-03-25 22:58:40 +01:00
parent 82b75c50cf
commit 1fda621a18
59 changed files with 4043 additions and 2279 deletions

View File

@@ -6,6 +6,7 @@ plugins {
jbake {
configuration['asciidoctor.attributes.export'] = true
configuration['asciidoctor.attributes.export.prefix'] = 'jbake-'
configuration['jreleaser-version'] = '0.1.0-SNAPSHOT'
version = '2.6.5'
}

View File

@@ -1,52 +0,0 @@
/* Sticky footer styles
-------------------------------------------------- */
html,
body {
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
/* Wrapper for page content to push down footer */
#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
/* Negative indent footer by it's height */
margin: 0 auto -60px;
}
/* Set the fixed height of the footer here */
#push,
#footer {
height: 60px;
}
#footer {
background-color: #f5f5f5;
padding: 0;
}
/* Lastly, apply responsive CSS fixes as necessary */
@media (max-width: 767px) {
#footer {
margin-left: -20px;
margin-right: -20px;
padding-left: 20px;
padding-right: 20px;
}
}
/* Custom page CSS
-------------------------------------------------- */
/* Not required for template or sticky footer method. */
#wrap > .container {
padding-top: 60px;
}
.container .credit {
margin: 20px 0;
}
/*code {
font-size: 80%;
}*/

View File

@@ -1,8 +1,8 @@
/*!
* Bootstrap Grid v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Bootstrap Grid v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
html {
box-sizing: border-box;
@@ -15,39 +15,12 @@ html {
box-sizing: inherit;
}
.container {
width: 100%;
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 576px) {
.container {
max-width: 540px;
}
}
@media (min-width: 768px) {
.container {
max-width: 720px;
}
}
@media (min-width: 992px) {
.container {
max-width: 960px;
}
}
@media (min-width: 1200px) {
.container {
max-width: 1140px;
}
}
.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {
.container,
.container-fluid,
.container-sm,
.container-md,
.container-lg,
.container-xl {
width: 100%;
padding-right: 15px;
padding-left: 15px;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
/*!
* Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
@@ -24,7 +24,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
@@ -133,12 +133,12 @@ a:hover {
text-decoration: underline;
}
a:not([href]) {
a:not([href]):not([class]) {
color: inherit;
text-decoration: none;
}
a:not([href]):hover {
a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
@@ -155,6 +155,7 @@ pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
@@ -185,6 +186,7 @@ caption {
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
label {
@@ -196,9 +198,8 @@ button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
button:focus:not(:focus-visible) {
outline: 0;
}
input,
@@ -222,6 +223,10 @@ select {
text-transform: none;
}
[role="button"] {
cursor: pointer;
}
select {
word-wrap: normal;
}
@@ -254,13 +259,6 @@ input[type="checkbox"] {
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
/*!
* Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
/*!
* Bootstrap v4.4.1 (https://getbootstrap.com/)
* Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root {
--blue: #007bff;
@@ -31,7 +31,7 @@
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}
@@ -54,7 +54,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
@@ -163,12 +163,12 @@ a:hover {
text-decoration: underline;
}
a:not([href]) {
a:not([href]):not([class]) {
color: inherit;
text-decoration: none;
}
a:not([href]):hover {
a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
@@ -185,6 +185,7 @@ pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
@@ -215,6 +216,7 @@ caption {
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
label {
@@ -226,9 +228,8 @@ button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
button:focus:not(:focus-visible) {
outline: 0;
}
input,
@@ -252,6 +253,10 @@ select {
text-transform: none;
}
[role="button"] {
cursor: pointer;
}
select {
word-wrap: normal;
}
@@ -284,13 +289,6 @@ input[type="checkbox"] {
padding: 0;
}
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
@@ -541,39 +539,12 @@ pre code {
overflow-y: scroll;
}
.container {
width: 100%;
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 576px) {
.container {
max-width: 540px;
}
}
@media (min-width: 768px) {
.container {
max-width: 720px;
}
}
@media (min-width: 992px) {
.container {
max-width: 960px;
}
}
@media (min-width: 1200px) {
.container {
max-width: 1140px;
}
}
.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {
.container,
.container-fluid,
.container-sm,
.container-md,
.container-lg,
.container-xl {
width: 100%;
padding-right: 15px;
padding-left: 15px;
@@ -2100,6 +2071,15 @@ pre code {
opacity: 1;
}
input[type="date"].form-control,
input[type="time"].form-control,
input[type="datetime-local"].form-control,
input[type="month"].form-control {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
select.form-control:focus::-ms-value {
color: #495057;
background-color: #fff;
@@ -2247,6 +2227,7 @@ textarea.form-control {
.valid-tooltip {
position: absolute;
top: 100%;
left: 0;
z-index: 5;
display: none;
max-width: 100%;
@@ -2259,6 +2240,11 @@ textarea.form-control {
border-radius: 0.25rem;
}
.form-row > .col > .valid-tooltip,
.form-row > [class*="col-"] > .valid-tooltip {
left: 5px;
}
.was-validated :valid ~ .valid-feedback,
.was-validated :valid ~ .valid-tooltip,
.is-valid ~ .valid-feedback,
@@ -2288,7 +2274,7 @@ textarea.form-control {
.was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #28a745;
padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;
}
.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
@@ -2347,6 +2333,7 @@ textarea.form-control {
.invalid-tooltip {
position: absolute;
top: 100%;
left: 0;
z-index: 5;
display: none;
max-width: 100%;
@@ -2359,6 +2346,11 @@ textarea.form-control {
border-radius: 0.25rem;
}
.form-row > .col > .invalid-tooltip,
.form-row > [class*="col-"] > .invalid-tooltip {
left: 5px;
}
.was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip,
.is-invalid ~ .invalid-feedback,
@@ -2388,7 +2380,7 @@ textarea.form-control {
.was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #dc3545;
padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat;
}
.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
@@ -2517,7 +2509,6 @@ textarea.form-control {
color: #212529;
text-align: center;
vertical-align: middle;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
@@ -2551,6 +2542,10 @@ textarea.form-control {
opacity: 0.65;
}
.btn:not(:disabled):not(.disabled) {
cursor: pointer;
}
a.btn.disabled,
fieldset:disabled a.btn {
pointer-events: none;
@@ -3121,7 +3116,6 @@ fieldset:disabled a.btn {
.btn-link:focus, .btn-link.focus {
text-decoration: underline;
box-shadow: none;
}
.btn-link:disabled, .btn-link.disabled {
@@ -3403,7 +3397,7 @@ input[type="button"].btn-block {
.dropdown-item:hover, .dropdown-item:focus {
color: #16181b;
text-decoration: none;
background-color: #f8f9fa;
background-color: #e9ecef;
}
.dropdown-item.active, .dropdown-item:active {
@@ -3413,7 +3407,7 @@ input[type="button"].btn-block {
}
.dropdown-item.disabled, .dropdown-item:disabled {
color: #6c757d;
color: #adb5bd;
pointer-events: none;
background-color: transparent;
}
@@ -3580,8 +3574,9 @@ input[type="button"].btn-block {
.input-group > .custom-select,
.input-group > .custom-file {
position: relative;
-ms-flex: 1 1 0%;
flex: 1 1 0%;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 1%;
min-width: 0;
margin-bottom: 0;
}
@@ -3611,12 +3606,6 @@ input[type="button"].btn-block {
z-index: 4;
}
.input-group > .form-control:not(:last-child),
.input-group > .custom-select:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group > .form-control:not(:first-child),
.input-group > .custom-select:not(:first-child) {
border-top-left-radius: 0;
@@ -3631,14 +3620,23 @@ input[type="button"].btn-block {
}
.input-group > .custom-file:not(:last-child) .custom-file-label,
.input-group > .custom-file:not(:last-child) .custom-file-label::after {
.input-group > .custom-file:not(:first-child) .custom-file-label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.input-group:not(.has-validation) > .form-control:not(:last-child),
.input-group:not(.has-validation) > .custom-select:not(:last-child),
.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group > .custom-file:not(:first-child) .custom-file-label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
.input-group.has-validation > .form-control:nth-last-child(n + 3),
.input-group.has-validation > .custom-select:nth-last-child(n + 3),
.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.input-group-prepend,
@@ -3741,8 +3739,10 @@ input[type="button"].btn-block {
.input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text,
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
border-top-right-radius: 0;
@@ -3761,9 +3761,12 @@ input[type="button"].btn-block {
.custom-control {
position: relative;
z-index: 1;
display: block;
min-height: 1.5rem;
padding-left: 1.5rem;
-webkit-print-color-adjust: exact;
color-adjust: exact;
}
.custom-control-inline {
@@ -3836,7 +3839,7 @@ input[type="button"].btn-block {
width: 1rem;
height: 1rem;
content: "";
background: no-repeat 50% / 50% 50%;
background: 50% / 50% 50% no-repeat;
}
.custom-checkbox .custom-control-label::before {
@@ -3925,7 +3928,7 @@ input[type="button"].btn-block {
line-height: 1.5;
color: #495057;
vertical-align: middle;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;
border: 1px solid #ced4da;
border-radius: 0.25rem;
-webkit-appearance: none;
@@ -3994,6 +3997,7 @@ input[type="button"].btn-block {
width: 100%;
height: calc(1.5em + 0.75rem + 2px);
margin: 0;
overflow: hidden;
opacity: 0;
}
@@ -4023,6 +4027,7 @@ input[type="button"].btn-block {
z-index: 1;
height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem;
overflow: hidden;
font-weight: 400;
line-height: 1.5;
color: #495057;
@@ -4059,7 +4064,7 @@ input[type="button"].btn-block {
}
.custom-range:focus {
outline: none;
outline: 0;
}
.custom-range:focus::-webkit-slider-thumb {
@@ -4254,11 +4259,8 @@ input[type="button"].btn-block {
border-bottom: 1px solid #dee2e6;
}
.nav-tabs .nav-item {
margin-bottom: -1px;
}
.nav-tabs .nav-link {
margin-bottom: -1px;
border: 1px solid transparent;
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
@@ -4297,12 +4299,14 @@ input[type="button"].btn-block {
background-color: #007bff;
}
.nav-fill > .nav-link,
.nav-fill .nav-item {
-ms-flex: 1 1 auto;
flex: 1 1 auto;
text-align: center;
}
.nav-justified > .nav-link,
.nav-justified .nav-item {
-ms-flex-preferred-size: 0;
flex-basis: 0;
@@ -4412,8 +4416,12 @@ input[type="button"].btn-block {
height: 1.5em;
vertical-align: middle;
content: "";
background: no-repeat center center;
background-size: 100% 100%;
background: 50% / 100% 100% no-repeat;
}
.navbar-nav-scroll {
max-height: 75vh;
overflow-y: auto;
}
@media (max-width: 575.98px) {
@@ -4447,6 +4455,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-sm .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-sm .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4489,6 +4500,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-md .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-md .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4531,6 +4545,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-lg .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-lg .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4573,6 +4590,9 @@ input[type="button"].btn-block {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
}
.navbar-expand-xl .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand-xl .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4617,6 +4637,10 @@ input[type="button"].btn-block {
flex-wrap: nowrap;
}
.navbar-expand .navbar-nav-scroll {
overflow: visible;
}
.navbar-expand .navbar-collapse {
display: -ms-flexbox !important;
display: flex !important;
@@ -4661,7 +4685,7 @@ input[type="button"].btn-block {
}
.navbar-light .navbar-toggler-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}
.navbar-light .navbar-text {
@@ -4709,7 +4733,7 @@ input[type="button"].btn-block {
}
.navbar-dark .navbar-toggler-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}
.navbar-dark .navbar-text {
@@ -4743,14 +4767,26 @@ input[type="button"].btn-block {
margin-left: 0;
}
.card > .list-group:first-child .list-group-item:first-child {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
.card > .list-group {
border-top: inherit;
border-bottom: inherit;
}
.card > .list-group:last-child .list-group-item:last-child {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
.card > .list-group:first-child {
border-top-width: 0;
border-top-left-radius: calc(0.25rem - 1px);
border-top-right-radius: calc(0.25rem - 1px);
}
.card > .list-group:last-child {
border-bottom-width: 0;
border-bottom-right-radius: calc(0.25rem - 1px);
border-bottom-left-radius: calc(0.25rem - 1px);
}
.card > .card-header + .list-group,
.card > .list-group + .card-footer {
border-top: 0;
}
.card-body {
@@ -4792,10 +4828,6 @@ input[type="button"].btn-block {
border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;
}
.card-header + .list-group .list-group-item:first-child {
border-top: 0;
}
.card-footer {
padding: 0.75rem 1.25rem;
background-color: rgba(0, 0, 0, 0.03);
@@ -4825,6 +4857,7 @@ input[type="button"].btn-block {
bottom: 0;
left: 0;
padding: 1.25rem;
border-radius: calc(0.25rem - 1px);
}
.card-img,
@@ -4936,6 +4969,10 @@ input[type="button"].btn-block {
}
}
.accordion {
overflow-anchor: none;
}
.accordion > .card {
overflow: hidden;
}
@@ -4973,7 +5010,7 @@ input[type="button"].btn-block {
}
.breadcrumb-item + .breadcrumb-item::before {
display: inline-block;
float: left;
padding-right: 0.5rem;
color: #6c757d;
content: "/";
@@ -5283,6 +5320,7 @@ a.badge-dark:focus, a.badge-dark.focus {
position: absolute;
top: 0;
right: 0;
z-index: 2;
padding: 0.75rem 1.25rem;
color: inherit;
}
@@ -5422,6 +5460,7 @@ a.badge-dark:focus, a.badge-dark.focus {
display: flex;
height: 1rem;
overflow: hidden;
line-height: 0;
font-size: 0.75rem;
background-color: #e9ecef;
border-radius: 0.25rem;
@@ -5454,8 +5493,8 @@ a.badge-dark:focus, a.badge-dark.focus {
}
.progress-bar-animated {
-webkit-animation: progress-bar-stripes 1s linear infinite;
animation: progress-bar-stripes 1s linear infinite;
-webkit-animation: 1s linear infinite progress-bar-stripes;
animation: 1s linear infinite progress-bar-stripes;
}
@media (prefers-reduced-motion: reduce) {
@@ -5484,6 +5523,7 @@ a.badge-dark:focus, a.badge-dark.focus {
flex-direction: column;
padding-left: 0;
margin-bottom: 0;
border-radius: 0.25rem;
}
.list-group-item-action {
@@ -5513,13 +5553,13 @@ a.badge-dark:focus, a.badge-dark.focus {
}
.list-group-item:first-child {
border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem;
border-top-left-radius: inherit;
border-top-right-radius: inherit;
}
.list-group-item:last-child {
border-bottom-right-radius: 0.25rem;
border-bottom-left-radius: 0.25rem;
border-bottom-right-radius: inherit;
border-bottom-left-radius: inherit;
}
.list-group-item.disabled, .list-group-item:disabled {
@@ -5549,26 +5589,26 @@ a.badge-dark:focus, a.badge-dark.focus {
flex-direction: row;
}
.list-group-horizontal .list-group-item:first-child {
.list-group-horizontal > .list-group-item:first-child {
border-bottom-left-radius: 0.25rem;
border-top-right-radius: 0;
}
.list-group-horizontal .list-group-item:last-child {
.list-group-horizontal > .list-group-item:last-child {
border-top-right-radius: 0.25rem;
border-bottom-left-radius: 0;
}
.list-group-horizontal .list-group-item.active {
.list-group-horizontal > .list-group-item.active {
margin-top: 0;
}
.list-group-horizontal .list-group-item + .list-group-item {
.list-group-horizontal > .list-group-item + .list-group-item {
border-top-width: 1px;
border-left-width: 0;
}
.list-group-horizontal .list-group-item + .list-group-item.active {
.list-group-horizontal > .list-group-item + .list-group-item.active {
margin-left: -1px;
border-left-width: 1px;
}
@@ -5578,22 +5618,22 @@ a.badge-dark:focus, a.badge-dark.focus {
-ms-flex-direction: row;
flex-direction: row;
}
.list-group-horizontal-sm .list-group-item:first-child {
.list-group-horizontal-sm > .list-group-item:first-child {
border-bottom-left-radius: 0.25rem;
border-top-right-radius: 0;
}
.list-group-horizontal-sm .list-group-item:last-child {
.list-group-horizontal-sm > .list-group-item:last-child {
border-top-right-radius: 0.25rem;
border-bottom-left-radius: 0;
}
.list-group-horizontal-sm .list-group-item.active {
.list-group-horizontal-sm > .list-group-item.active {
margin-top: 0;
}
.list-group-horizontal-sm .list-group-item + .list-group-item {
.list-group-horizontal-sm > .list-group-item + .list-group-item {
border-top-width: 1px;
border-left-width: 0;
}
.list-group-horizontal-sm .list-group-item + .list-group-item.active {
.list-group-horizontal-sm > .list-group-item + .list-group-item.active {
margin-left: -1px;
border-left-width: 1px;
}
@@ -5604,22 +5644,22 @@ a.badge-dark:focus, a.badge-dark.focus {
-ms-flex-direction: row;
flex-direction: row;
}
.list-group-horizontal-md .list-group-item:first-child {
.list-group-horizontal-md > .list-group-item:first-child {
border-bottom-left-radius: 0.25rem;
border-top-right-radius: 0;
}
.list-group-horizontal-md .list-group-item:last-child {
.list-group-horizontal-md > .list-group-item:last-child {
border-top-right-radius: 0.25rem;
border-bottom-left-radius: 0;
}
.list-group-horizontal-md .list-group-item.active {
.list-group-horizontal-md > .list-group-item.active {
margin-top: 0;
}
.list-group-horizontal-md .list-group-item + .list-group-item {
.list-group-horizontal-md > .list-group-item + .list-group-item {
border-top-width: 1px;
border-left-width: 0;
}
.list-group-horizontal-md .list-group-item + .list-group-item.active {
.list-group-horizontal-md > .list-group-item + .list-group-item.active {
margin-left: -1px;
border-left-width: 1px;
}
@@ -5630,22 +5670,22 @@ a.badge-dark:focus, a.badge-dark.focus {
-ms-flex-direction: row;
flex-direction: row;
}
.list-group-horizontal-lg .list-group-item:first-child {
.list-group-horizontal-lg > .list-group-item:first-child {
border-bottom-left-radius: 0.25rem;
border-top-right-radius: 0;
}
.list-group-horizontal-lg .list-group-item:last-child {
.list-group-horizontal-lg > .list-group-item:last-child {
border-top-right-radius: 0.25rem;
border-bottom-left-radius: 0;
}
.list-group-horizontal-lg .list-group-item.active {
.list-group-horizontal-lg > .list-group-item.active {
margin-top: 0;
}
.list-group-horizontal-lg .list-group-item + .list-group-item {
.list-group-horizontal-lg > .list-group-item + .list-group-item {
border-top-width: 1px;
border-left-width: 0;
}
.list-group-horizontal-lg .list-group-item + .list-group-item.active {
.list-group-horizontal-lg > .list-group-item + .list-group-item.active {
margin-left: -1px;
border-left-width: 1px;
}
@@ -5656,38 +5696,36 @@ a.badge-dark:focus, a.badge-dark.focus {
-ms-flex-direction: row;
flex-direction: row;
}
.list-group-horizontal-xl .list-group-item:first-child {
.list-group-horizontal-xl > .list-group-item:first-child {
border-bottom-left-radius: 0.25rem;
border-top-right-radius: 0;
}
.list-group-horizontal-xl .list-group-item:last-child {
.list-group-horizontal-xl > .list-group-item:last-child {
border-top-right-radius: 0.25rem;
border-bottom-left-radius: 0;
}
.list-group-horizontal-xl .list-group-item.active {
.list-group-horizontal-xl > .list-group-item.active {
margin-top: 0;
}
.list-group-horizontal-xl .list-group-item + .list-group-item {
.list-group-horizontal-xl > .list-group-item + .list-group-item {
border-top-width: 1px;
border-left-width: 0;
}
.list-group-horizontal-xl .list-group-item + .list-group-item.active {
.list-group-horizontal-xl > .list-group-item + .list-group-item.active {
margin-left: -1px;
border-left-width: 1px;
}
}
.list-group-flush .list-group-item {
border-right-width: 0;
border-left-width: 0;
.list-group-flush {
border-radius: 0;
}
.list-group-flush .list-group-item:first-child {
border-top-width: 0;
.list-group-flush > .list-group-item {
border-width: 0 0 1px;
}
.list-group-flush:last-child .list-group-item:last-child {
.list-group-flush > .list-group-item:last-child {
border-bottom-width: 0;
}
@@ -5842,9 +5880,6 @@ button.close {
padding: 0;
background-color: transparent;
border: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
a.close.disabled {
@@ -5852,15 +5887,14 @@ a.close.disabled {
}
.toast {
-ms-flex-preferred-size: 350px;
flex-basis: 350px;
max-width: 350px;
overflow: hidden;
font-size: 0.875rem;
background-color: rgba(255, 255, 255, 0.85);
background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
opacity: 0;
border-radius: 0.25rem;
}
@@ -5892,6 +5926,8 @@ a.close.disabled {
background-color: rgba(255, 255, 255, 0.85);
background-clip: padding-box;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
border-top-left-radius: calc(0.25rem - 1px);
border-top-right-radius: calc(0.25rem - 1px);
}
.toast-body {
@@ -5982,6 +6018,9 @@ a.close.disabled {
.modal-dialog-centered::before {
display: block;
height: calc(100vh - 1rem);
height: -webkit-min-content;
height: -moz-min-content;
height: min-content;
content: "";
}
@@ -6107,6 +6146,9 @@ a.close.disabled {
}
.modal-dialog-centered::before {
height: calc(100vh - 3.5rem);
height: -webkit-min-content;
height: -moz-min-content;
height: min-content;
}
.modal-sm {
max-width: 300px;
@@ -6131,7 +6173,7 @@ a.close.disabled {
z-index: 1070;
display: block;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -6244,7 +6286,7 @@ a.close.disabled {
z-index: 1060;
display: block;
max-width: 276px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal;
font-weight: 400;
line-height: 1.5;
@@ -6532,7 +6574,7 @@ a.close.disabled {
display: inline-block;
width: 20px;
height: 20px;
background: no-repeat 50% / 100% 100%;
background: 50% / 100% 100% no-repeat;
}
.carousel-control-prev-icon {
@@ -6621,8 +6663,8 @@ a.close.disabled {
border: 0.25em solid currentColor;
border-right-color: transparent;
border-radius: 50%;
-webkit-animation: spinner-border .75s linear infinite;
animation: spinner-border .75s linear infinite;
-webkit-animation: .75s linear infinite spinner-border;
animation: .75s linear infinite spinner-border;
}
.spinner-border-sm {
@@ -6638,6 +6680,8 @@ a.close.disabled {
}
50% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@@ -6648,6 +6692,8 @@ a.close.disabled {
}
50% {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@@ -6659,8 +6705,8 @@ a.close.disabled {
background-color: currentColor;
border-radius: 50%;
opacity: 0;
-webkit-animation: spinner-grow .75s linear infinite;
animation: spinner-grow .75s linear infinite;
-webkit-animation: .75s linear infinite spinner-grow;
animation: .75s linear infinite spinner-grow;
}
.spinner-grow-sm {
@@ -6668,6 +6714,14 @@ a.close.disabled {
height: 1rem;
}
@media (prefers-reduced-motion: reduce) {
.spinner-border,
.spinner-grow {
-webkit-animation-duration: 1.5s;
animation-duration: 1.5s;
}
}
.align-baseline {
vertical-align: baseline !important;
}
@@ -7933,6 +7987,26 @@ button.bg-dark:focus {
}
}
.user-select-all {
-webkit-user-select: all !important;
-moz-user-select: all !important;
user-select: all !important;
}
.user-select-auto {
-webkit-user-select: auto !important;
-moz-user-select: auto !important;
-ms-user-select: auto !important;
user-select: auto !important;
}
.user-select-none {
-webkit-user-select: none !important;
-moz-user-select: none !important;
-ms-user-select: none !important;
user-select: none !important;
}
.overflow-auto {
overflow: auto !important;
}
@@ -8088,18 +8162,6 @@ button.bg-dark:focus {
height: 100vh !important;
}
.stretched-link::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
pointer-events: auto;
content: "";
background-color: rgba(0, 0, 0, 0);
}
.m-0 {
margin: 0 !important;
}
@@ -9912,6 +9974,18 @@ button.bg-dark:focus {
}
}
.stretched-link::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1;
pointer-events: auto;
content: "";
background-color: rgba(0, 0, 0, 0);
}
.text-monospace {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
}
@@ -10128,7 +10202,7 @@ a.text-dark:hover, a.text-dark:focus {
.text-break {
word-break: break-word !important;
overflow-wrap: break-word !important;
word-wrap: break-word !important;
}
.text-reset {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,5 @@
/* Show it is fixed to the top */
body {
min-height: 75rem;
padding-top: 4.5rem;
}

View File

@@ -1 +0,0 @@
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,30 +0,0 @@
!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:"0"<=a&&a<="7"?parseInt(e.substring(1),8):a==="u"||a==="x"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return e==="\\"||e==="-"||e==="]"||e==="^"?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),e=[],a=
b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,f=b.length;a<f;++a){var h=b[a];if(/\\[bdsw]/i.test(h))c.push(h);else{var h=d(h),l;a+2<f&&"-"===b[a+1]?(l=d(b[a+2]),a+=2):l=h;e.push([h,l]);l<65||h>122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;a<e.length;++a)h=e[a],h[0]<=f[1]+1?f[1]=Math.max(f[1],h[1]):b.push(f=h);for(a=0;a<b.length;++a)h=b[a],c.push(g(h[0])),
h[1]>h[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(g(h[1])));c.push("]");return c.join("")}function s(e){for(var a=e.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],f=0,h=0;f<c;++f){var l=a[f];l==="("?++h:"\\"===l.charAt(0)&&(l=+l.substring(1))&&(l<=h?d[l]=-1:a[f]=g(l))}for(f=1;f<d.length;++f)-1===d[f]&&(d[f]=++x);for(h=f=0;f<c;++f)l=a[f],l==="("?(++h,d[h]||(a[f]="(?:")):"\\"===l.charAt(0)&&(l=+l.substring(1))&&l<=h&&
(a[f]="\\"+d[l]);for(f=0;f<c;++f)"^"===a[f]&&"^"!==a[f+1]&&(a[f]="");if(e.ignoreCase&&m)for(f=0;f<c;++f)l=a[f],e=l.charAt(0),l.length>=2&&e==="["?a[f]=b(l):e!=="\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k<c;++k){var i=a[k];if(i.ignoreCase)j=!0;else if(/[a-z]/i.test(i.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){m=!0;j=!1;break}}for(var r={b:8,t:9,n:10,v:11,
f:12,r:13},n=[],k=0,c=a.length;k<c;++k){i=a[k];if(i.global||i.multiline)throw Error(""+i);n.push("(?:"+s(i)+")")}return RegExp(n.join("|"),j?"gi":"g")}function T(a,d){function g(a){var c=a.nodeType;if(c==1){if(!b.test(a.className)){for(c=a.firstChild;c;c=c.nextSibling)g(c);c=a.nodeName.toLowerCase();if("br"===c||"li"===c)s[j]="\n",m[j<<1]=x++,m[j++<<1|1]=a}}else if(c==3||c==4)c=a.nodeValue,c.length&&(c=d?c.replace(/\r\n?/g,"\n"):c.replace(/[\t\n\r ]+/g," "),s[j]=c,m[j<<1]=x,x+=c.length,m[j++<<1|1]=
a)}var b=/(?:^|\s)nocode(?:\s|$)/,s=[],x=0,m=[],j=0;g(a);return{a:s.join("").replace(/\n$/,""),d:m}}function H(a,d,g,b){d&&(a={a:d,e:a},g(a),b.push.apply(b,a.g))}function U(a){for(var d=void 0,g=a.firstChild;g;g=g.nextSibling)var b=g.nodeType,d=b===1?d?a:g:b===3?V.test(g.nodeValue)?a:d:d;return d===a?void 0:d}function C(a,d){function g(a){for(var j=a.e,k=[j,"pln"],c=0,i=a.a.match(s)||[],r={},n=0,e=i.length;n<e;++n){var z=i[n],w=r[z],t=void 0,f;if(typeof w==="string")f=!1;else{var h=b[z.charAt(0)];
if(h)t=z.match(h[1]),w=h[0];else{for(f=0;f<x;++f)if(h=d[f],t=z.match(h[1])){w=h[0];break}t||(w="pln")}if((f=w.length>=5&&"lang-"===w.substring(0,5))&&!(t&&typeof t[1]==="string"))f=!1,w="src";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c<i;++c){var r=
g[c],n=r[3];if(n)for(var e=n.length;--e>=0;)b[n.charAt(e)]=r;r=r[1];n=""+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\S\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,q])):d.push(["com",
/^#[^\n\r]*/,q,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,q]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?"":"\n\r")?".":"[\\S\\s]";g.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+s+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+
s+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&g.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&g.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),q]);d.push(["pln",/^\s+/,q," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");g.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,
q],["pun",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if("br"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=
c?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,j=a.ownerDocument,k=j.createElement("li");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i<c.length;++i)b(c[i]);d===(d|0)&&c[0].setAttribute("value",d);var r=j.createElement("ol");
r.className="linenums";for(var d=Math.max(0,d-1|0)||0,i=0,n=c.length;i<n;++i)k=c[i],k.className="L"+(i+d)%10,k.firstChild||k.appendChild(j.createTextNode("\u00a0")),r.appendChild(k);a.appendChild(r)}function p(a,d){for(var g=d.length;--g>=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn("cannot override language handler %s",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\s*</.test(d)?"default-markup":"default-code";return F[a]}function K(a){var d=a.h;try{var g=T(a.c,a.i),b=g.a;
a.a=b;a.d=g.d;a.e=0;I(d,b)(a);var s=/\bMSIE\s(\d+)/.exec(navigator.userAgent),s=s&&+s[1]<=8,d=/\n/g,x=a.a,m=x.length,g=0,j=a.d,k=j.length,b=0,c=a.g,i=c.length,r=0;c[i]=m;var n,e;for(e=n=0;e<i;)c[e]!==c[e+2]?(c[n++]=c[e++],c[n++]=c[e++]):e+=2;i=n;for(e=n=0;e<i;){for(var p=c[e],w=c[e+1],t=e+2;t+2<=i&&c[t+1]===w;)t+=2;c[n++]=p;c[n++]=w;e=t}c.length=n;var f=a.c,h;if(f)h=f.style.display,f.style.display="none";try{for(;b<k;){var l=j[b+2]||m,B=c[r+2]||m,t=Math.min(l,B),A=j[b+1],G;if(A.nodeType!==1&&(G=x.substring(g,
t))){s&&(G=G.replace(d,"\r"));A.nodeValue=G;var L=A.ownerDocument,o=L.createElement("span");o.className=c[r+1];var v=A.parentNode;v.replaceChild(o,A);o.appendChild(A);g<l&&(j[b+1]=A=L.createTextNode(x.substring(t,l)),v.insertBefore(A,o.nextSibling))}g=t;g>=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=["break,continue,do,else,for,if,return,while"],E=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],M=[E,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],N=[E,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],
O=[N,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],E=[E,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],P=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
Q=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],W=[y,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,
V=/\S/,X=v({keywords:[M,O,E,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,["default-code"]);p(C([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",
/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);p(C([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],
["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);p(C([],[["atv",/^[\S\s]+/]]),["uq.val"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),["c","cc","cpp","cxx","cyc","m"]);p(v({keywords:"null,true,false"}),["json"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),
["cs"]);p(v({keywords:N,cStyleComments:!0}),["java"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);p(v({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);p(v({keywords:Q,
hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);p(v({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);
p(C([],[["str",/^[\S\s]+/]]),["regex"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement("div");b.innerHTML="<pre>"+a+"</pre>";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});
return b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i<p.length&&c.now()<b;i++){for(var d=p[i],j=h,k=d;k=k.previousSibling;){var m=k.nodeType,o=(m===7||m===8)&&k.nodeValue;if(o?!/^\??prettify\b/.test(o):m!==3||/\S/.test(k.nodeValue))break;if(o){j={};o.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(a,b,c){j[b]=c});break}}k=d.className;if((j!==h||e.test(k))&&!v.test(k)){m=!1;for(o=d.parentNode;o;o=o.parentNode)if(f.test(o.tagName)&&
o.className&&e.test(o.className)){m=!0;break}if(!m){d.className+=" prettyprinted";m=j.lang;if(!m){var m=k.match(n),y;if(!m&&(y=U(d))&&t.test(y.tagName))m=y.className.match(n);m&&(m=m[1])}if(w.test(d.tagName))o=1;else var o=d.currentStyle,u=s.defaultView,o=(o=o?o.whiteSpace:u&&u.getComputedStyle?u.getComputedStyle(d,q).getPropertyValue("white-space"):0)&&"pre"===o.substring(0,3);u=j.linenums;if(!(u=u==="true"||+u))u=(u=k.match(/\blinenums\b(?::(\d+))?/))?u[1]&&u[1].length?+u[1]:!0:!1;u&&J(d,u,o);r=
{h:m,c:d,j:u,i:o};K(r)}}}i<p.length?setTimeout(g,250):"function"===typeof a&&a()}for(var b=d||document.body,s=b.ownerDocument||document,b=[b.getElementsByTagName("pre"),b.getElementsByTagName("code"),b.getElementsByTagName("xmp")],p=[],m=0;m<b.length;++m)for(var j=0,k=b[m].length;j<k;++j)p.push(b[m][j]);var b=q,c=Date;c.now||(c={now:function(){return+new Date}});var i=0,r,n=/\blang(?:uage)?-([\w.]+)(?!\S)/,e=/\bprettyprint\b/,v=/\bprettyprinted\b/,w=/pre|xmp/i,t=/^code$/i,f=/^(?:pre|code|xmp)$/i,
h={};g()}};typeof define==="function"&&define.amd&&define("google-code-prettify",[],function(){return Y})})();}()

View File

@@ -0,0 +1,25 @@
= Announce
:jbake-type: page
:jbake-status: published
Releases can be announced to several media once they have been successfully created.
[source,yaml]
[subs="+macros"]
----
# [optional]
announce:
# Enable or disable all configured announcers.
# Defaults to `true`.
# [optional]
enabled: true
----
The following announcers are currently available:
:leveloffset: 3
include::sdkman.adoc[]
include::twitter.adoc[]
include::zulip.adoc[]
:leveloffset: 2

View File

@@ -0,0 +1,56 @@
= Sdkman
:jbake-type: page
:jbake-status: published
Publishes a release to link:https://sdkman.io[SDKMAN!]. Please follow the instructions at
link:https://sdkman.io/vendors[] to register your project as a candidate and obtain publishing credentials.
[source,yaml]
[subs="+macros"]
----
announce:
# [optional]
sdkman:
# Enable or disable this announcer.
# Defaults to `true`.
# [optional]
enabled: true
# The name of the candidate registered in thew SDKMAN! database.
# If unspecified, will use ${project.name}.
# [optional]
candidate:
# Announce a major release if `true`, minor release if `false`.
# Defaults to `true`.
# [optional]
major: true
# The consumer key for publishing to SDKMAN!.
# If left unspecified, the JRELEASER_SDKMAN_CONSUMER_KEY environment variable must be defined.
# [required]
consumerKey:
# The consumer token for publishing to SDKMAN!.
# If left unspecified, the JRELEASER_SDKMAN_CONSUMER_TOKEN environment variable must be defined.
# [required]
consumerToken:
----
This announcer has the following considerations:
* No snapshot releases are supported.
* Only `zip` artifacts are supported.
* The default platform is set to `UNIVERSAL` if the artifact did not define a value for its `platform` field.
* If there's more than one artifact then each artifact requires distinct `platform` values, otherwise the latest
artifact will override any previous matches by platform.
* Announcing will be skipped if no suitable artifacts are found.
Supported platform values are:
* `mac`, `osx`.
* `win`, `windows`.
* `linux`.

View File

@@ -0,0 +1,48 @@
= Twitter
:jbake-type: page
:jbake-status: published
:icons: font
Tweets a new release. You must register a new Twitter application and obtain the set of credentaials. Follow the
instructions from link:https://developer.twitter.com/en/portal/projects-and-apps[Twitter] to complete this task.
[source,yaml]
[subs="+macros"]
----
announce:
# [optional]
twitter:
# Enable or disable this announcer.
# Defaults to `true`.
# [optional]
enabled: true
# The consumer key.
# If left unspecified, the JRELEASER_TWITTER_CONSUMER_KEY environment variable must be defined.
# [required]
consumerKey:
# The consumer token.
# If left unspecified, the JRELEASER_TWITTER_CONSUMER_TOKEN environment variable must be defined.
# [required]
consumerToken:
# The access token.
# If left unspecified, the JRELEASER_TWITTER_ACCESS_TOKEN environment variable must be defined.
# [required]
accessToken:
# The access token secret.
# If left unspecified, the JRELEASER_TWITTER_ACCESS_TOKEN_SECRET environment variable must be defined.
# [required]
accessTokenSecret:
# The announcement message.
# Review the available <<_templates,template>> names.
# [optional]
status: icon:rocket[] {{projectNameCapitalized}} {{projectVersion}} has been released! {{releaseNotesUrl}}
----

View File

@@ -0,0 +1,50 @@
= Zulip
:jbake-type: page
:jbake-status: published
:icons: font
Enables posting a message to a link:https://zulip.com/[Zulip] server. You must procure an account and apiKey to use
this announcer.
[source,yaml]
[subs="+macros"]
----
announce:
# [optional]
zulip:
# Enable or disable this announcer.
# Defaults to `true`.
# [optional]
enabled: true
# The Zulip account (typically an email address) to use.
# [required]
account: announce-bot@my.zulipchat.com
# The Zulip server endpoint
# [required]
apiHost: https://my.zulipchat.com/api/v1
# The ApiKey associated with the given account.
# If left unspecified, the JRELEASER_ZULIP_API_KEY environment variable must be defined.
# [required]
apiKey: true
# The channel where the message will be sent to
# Defaults to `announce`.
# [optional]
channel: announce
# The messages' subject.
# Review the available <<_templates,template>> names.
# [optional]
subject: {{projectNameCapitalized}} {{projectVersion}}
# The announcement message.
# Review the available <<_templates,template>> names.
# [optional]
message: icon:rocket[] {{projectNameCapitalized}} {{projectVersion}} has been released! {{releaseNotesUrl}}
----

View File

@@ -0,0 +1,103 @@
= Distributions
:jbake-type: page
:jbake-status: published
Distributions define artifacts that may be published using supported packages and announced with supported announcers.
Each distribution is responsible for defining a unique name and a list of artifacts that belong to it.
JReleaser requires at least 1 distribution to be configured. A distribution requires at least 1 artifact to be listed.
Distributions inherit the configuration specified in the <<_packagers,packagers>> block and may override it.
[source,yaml]
[subs="+macros"]
----
# [required]
distributions:
# A named distribution
# [required]
app:
# Enables or disables the distribution.
# Defaults to `true`.
# [optional]
enabled: true
# The distribution type.
# Used to determine packager templates.
# Supported values are: [BINARY].
# [required]
type: BINARY
# Name of the executable launcher.
# If left undefined, will use {$distribution.name}.
# [optional]
executable: app
# The minimum Java version required by consumers to run the application.
# If left undefined, will use {project.javaVersion}.
# [optional]
javaVersion: 8
# Maven coordinates: groupId.
# f left undefined, will use {project.groupId}
# [optional]
groupId: com.acme
# Maven coordinates: artifactId.
# f left undefined, will use {project.artifactId}
# [optional]
artifactId: app
# The application's entry point.
# Required by <<_jbang,jbang>>.
# [optional]
mainClass: com.acme.Main
# A list of tags.
# [optional]
tags:
- cli
- awesome
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
foo: bar
# A list of artifacts.
# At least on entry must be present
# [required]
artifacts:
- path: path/to/{{distributionName}}-{{projectVersion}}.zip
# If left undefined, will use {distribution.javaVersion}.
javaVersion: 8
- path: path/to/{{distributionName}}-{{projectVersion}}-mac.zip
platform: osx
- path: path/to/{{distributionName}}-{{projectVersion}}-win.zip
platform: windows
----
It's recommended to list universal artifacts first, then platform specific.
The value of `platform` is dictated by the normalized values detected by
link:https://github.com/trustin/os-maven-plugin[os-maven-plugin]. You may use the plain `platform` value or append a
`arch` classifier. The following values are currently recognized
[horizontal]
platform:: `aix`, `hpux`, `os400`, `linux`, `osx`, `freebsd`, `openbsd`, `netbsd`, `sunos`, `windows`, `zos`.
arch:: `x86_64`, `x86_32`, `itanium_64`, `itanium_32`, `sparc_32`, `sparc_64`, `arm_32`, `aarch_64`, `mips_32`,
`mipsel_32`, `mips_64`, `mipsel_64`, `ppc_32`, `ppcle_32`, `ppc_64`, `ppcle_64`, `s390_32`, `s390_64`, `riscv`
Examples:
* `osx`
* `osx-arm`
* `windows`
* `linux`
* `linux-x86_32`

View File

@@ -0,0 +1,19 @@
= Files
:jbake-type: page
:jbake-status: published
You can define a set of additional files that should be uploaded as part of the release. These files may also
be checksumed and signed before uploading.
[source,yaml]
[subs="+macros"]
----
# Defines a list of files.
# Each entry must define a path: field.
# The path may be relative to the project's basedir or absolute.
# [optional]
files:
- path: path/to/some/file.txt
- path: path/to/another/file.md
----

View File

@@ -0,0 +1,19 @@
= Configuration
:jbake-type: page
:jbake-status: published
This section describes elements that can be configured in `.jrelease.yml`. This file can be generated by running
`jreleaser init --format yml` or start from scratch. Other configuration formats besides YAML may be supported as well,
such as JSON, the <<_maven,Maven>> DSL, the <<_gradle,Gradle>> DSL.
:leveloffset: 2
include::project.adoc[]
include::signing.adoc[]
include::release/index.adoc[]
include::packagers/index.adoc[]
include::distributions.adoc[]
include::files.adoc[]
include::announce/index.adoc[]
include::templates.adoc[]
:leveloffset: 1

View File

@@ -0,0 +1,147 @@
= Chocolatey
:jbake-type: page
:jbake-status: published
Publishes packages to link:https://chocolatey.org[].
NOTE: At the moment, only artifacts with `.zip` extension may be packaged with Chocolatey.
WARNING: Local publication of packages is currently not supported. Please set `remoteBuild` to `true` and trigger a
build in CI. Local publication will be added at a later release.
WARNING: Snapshots are not supported.
[source,yaml]
[subs="+macros"]
----
# [optional]
packagers:
# [optional]
chocolatey:
# Enables or disables Chocolatey.
# Defaults to `false`.
# [optional]
enabled: true
# Directory with file templates used to prepare the Chocolatey distribution
# Defaults to `src/distribution/${distribution.name}/chocolatey`.
# If specified, path must exist.
# [optional]
templateDirectory: path/to/chocolatey/templates
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
foo: bar
# The username that can publish Chocolatey packages.
# If left unspecified, the release owner will be used.
# [required]
username: duke
# Whether to build the package on a remote server or locally.
# Defaults to `false`.
# [optional]
remoteBuild: false
# Git author used to commit to the bucket repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Git repository to push the package it remoteBuild is `true`.
# Defaults are shown.
# [optional]
bucket:
# The owner of the bucket repository.
# Defaults to the same owner as the release repository.
# [optional]
owner: duke
# The name of the bucket repository.
# Defaults to `${distribution.name}-chocolatey-bucket`.
# [optional]
name: app-chocolatey-bucket
# Username used for authoring commits. Must have write access to the bucket repository.
# Defaults to the same username as the release repository.
# [optional]
username: duke
# Password or OAuth token with write access to the bucket repository.
# If left unspecified, the JRELEASER_CHOCOLATEY_GITHUB_TOKEN environment variable may be defined.
# [optional]
token: 1n$3cUrEP@s$w0rd
----
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
the following files in `out/jreleaser/app/prepare`, which may be published to `app-chocolatey-bucket`
[source,xml]
[subs="verbatim"]
.app.nuspec
----
<?xml version="1.0" encoding="utf-8"?>
<!-- Do not remove this test for UTF-8: if “Ω” doesnt appear as greek uppercase omega letter enclosed in quotation marks, you should use an editor that supports UTF-8, not this one. -->
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<!-- required -->
<id>app</id>
<version>1.2.3</version>
<authors>Duke</authors>
<description>Sample app</description>
<!-- optional -->
<title>app</title>
<projectUrl>https://acme.com/app</projectUrl>
<license type="expression">Apache-2.0</license>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<tags></tags>
<summary>Sample app</summary>
<releaseNotes>https://github.com/duke/app/releases/tag/v1.2.3</releaseNotes>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>
----
[source]
.tools/chocolateyinstall.ps1
----
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'
Install-ChocolateyZipPackage `
-PackageName 'app' `
-Url 'https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip' `
-Checksum '812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466' `
-ChecksumType 'sha256' `
-UnzipLocation $package
Install-BinFile -Name 'app' -Path $app_bat
----
[source]
.tools/chocolateyuninstall.ps1
----
$tools = Split-Path $MyInvocation.MyCommand.Definition
$package = Split-Path $tools
$app_home = Join-Path $package 'app-1.2.3'
$app_bat = Join-Path $app_home 'bin/app.cmd'
Uninstall-BinFile -Name 'app' -Path $app_bat
----

View File

@@ -0,0 +1,129 @@
= Homebrew
:jbake-type: page
:jbake-status: published
The `brew` section specifies how the formula should be created. You can check the
link:https://github.com/Homebrew/brew/blob/master/docs/How-to-Create-and-Maintain-a-Tap.md[Homebrew documentation] and the
link:https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md[formula cookbook] for more details.
NOTE: At the moment, only artifacts with `.zip` extension may be packaged with Homebrew.
WARNING: Snapshots are not supported.
[source,yaml]
[subs="+macros"]
----
# [optional]
packagers:
# [optional]
brew:
# Enables or disables Homebrew.
# Defaults to `false`.
# [optional]
enabled: true
# Directory with file templates used to prepare the Homebrew distribution
# Defaults to `src/distribution/${distribution.name}/brew`.
# If specified, path must exist.
# [optional]
templateDirectory: path/to/brew/templates
# A map of Homebrew dependencies.
# The key `:java` will be added automatically if not defined.
# [optional]
dependencies:
# key in symbol format
# mapped as `depends_on :key1 => "value1"`
':key1': value1
# plain key
# mapped as `depends_on "key2" => "value2"`
key2: value2
# key in symbol format without value
# mapped as `depends_on `:key3`
':key3': 'null'
# plain key without value
# mapped as `depends_on `"key4"`
key4: 'null'
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
foo: bar
# Git author used to commit to the tap repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Git repository to push the formula to.
# Defaults are shown.
# [optional]
tap:
# The owner of the tap repository.
# Defaults to the same owner as the release repository.
# [optional]
owner: duke
# The name of the tap repository.
# Defaults to `homebrew-tap`.
# [optional]
name: homebrew-tap
# Username used for authoring commits. Must have write access to the tap repository.
# Defaults to the same username as the release repository.
# [optional]
username: duke
# Password or OAuth token with write access to the tap repository.
# If left unspecified, the JRELEASER_HOMEBREW_GITHUB_TOKEN environment variable may be defined.
# [optional]
token: 1n$3cUrEP@s$w0rd
----
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
a `app.rb` formula in the `duke/homebrew-tap` repository:
[source,ruby]
----
class App < Formula
desc "Sample app"
homepage "https://acme.com/app"
version "1.2.3"
url "https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip"
sha256 "812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466"
license "Apache-2.0"
bottle :unneeded
depends_on :java => "8"
def install
libexec.install Dir["*"]
bin.install_symlink "#{libexec}/bin/app"
end
test do
output = shell_output("#{bin}/app --version")
assert_match "1.2.3", output
end
end
----
NOTE: JReleaser does not generate a valid homebrew-core formula. The generated formulas are meant to be published as
link:https://docs.brew.sh/Taps.html[homebrew taps], and in their current form will not be accepted in any of the official
homebrew repositories.

View File

@@ -0,0 +1,48 @@
= Packagers
:jbake-type: page
:jbake-status: published
After a release is created at the desired remote Git host, JReleaser can generate and publish specialized packagers
into their respective distribution media, such a Git repository you have access to, or a packager store.
The sections defined here can be applied globally (for all distributions) or per distribution. Global configuration is
inherited by distribution configuration. Here's for example how <<_homebrew,Homebrew>> and <<_scoop,Scoop>> can be activated
for all distributions:
[source,yaml]
[subs="+macros"]
----
packagers:
brew:
enabled: true
scoop:
enabled: true
----
Given this setup here's how a distribution may inherit that configuration and disable Scoop while keeping Homebrew active:
[source,yaml]
[subs="+macros"]
----
packagers:
brew:
enabled: true
scoop:
enabled: true
distributions:
app:
scoop:
enabled: false
artifacts:
- path: path/to/app-1.0.0.zip
----
:leveloffset: 3
include::chocolatey.adoc[]
include::homebrew.adoc[]
include::jbang.adoc[]
include::scoop.adoc[]
include::snap.adoc[]
:leveloffset: 2

View File

@@ -0,0 +1,141 @@
= Jbang
:jbake-type: page
:jbake-status: published
Unleash the power of Java with link:https://github.com/jbangdev/jbang[jbang]. You can publish distributions as jbang
catalogs.
Each separate executable will have it's own jbang script. All executables will be collected in the same catalog. Existing
catalogs located at the target repository will be merged into a single catalog.
Snapshots are supported, in which case executables will bear the `-snapshot` suffix in their alias.
[source,yaml]
[subs="+macros"]
----
# [optional]
packagers:
# [optional]
jbang:
# Enables or disables Jbang.
# Defaults to `false`.
# [optional]
enabled: true
# Directory with file templates used to prepare the Jbang distribution
# Defaults to `src/distribution/${distribution.name}/jbang`.
# If specified, path must exist.
# [optional]
templateDirectory: path/to/jbang/templates
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `jbang`, i.e, `jbangFoo`.
foo: bar
# Git author used to commit to the catalog repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Git repository to push the catalog to.
# Defaults are shown.
# [optional]
catalog:
# The owner of the catalog repository.
# Defaults to the same owner as the release repository.
# [optional]
owner: duke
# The name of the catalog repository.
# Defaults to `jbang-catalog`.
# [optional]
name: jbang-catalog
# Username used for authoring commits. Must have write access to the catalog repository.
# Defaults to the same username as the release repository.
# [optional]
username: duke
# Password or OAuth token with write access to the catalog repository.
# If left unspecified, the JRELEASER_JBANG_GITHUB_TOKEN environment variable may be defined.
# [optional]
token: 1n$3cUrEP@s$w0rd
----
NOTE: You must define a value for `mainClass` in the owning distribution.
NOTE: When the project's version is snapshot, unless manually updated, the default prepared template assumes JARs may be
resolved from link:https://jitpack.io[].
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
a `app.java` file in the `duke/jbang-catalog` repository:
[source,json]
.jbang-catalog.json
----
{
"aliases": {
"app": {
"script-ref": "app.java",
"description": "Sample app"
}
}
}
----
[source,java]
.app.java
----
//usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 8
//DEPS com.acme:app:1.2.3
public class app {
public static void main(String... args) throws Exception {
com.acme.Main.main(args);
}
}
----
When the version is snapshot then the catalog and the script template change to:
[source,json]
.jbang-catalog.json
----
{
"aliases": {
"app-snapshot": {
"script-ref": "app_snapshot.java",
"description": "Sample app"
}
}
}
----
[source,java]
.app_snapshot.java
----
//usr/bin/env jbang "$0" "$@" ; exit $?
//JAVA 8
//REPOS jitpack
//DEPS com.github.duke:app:main-SNAPSHOT
public class app_snapshot {
public static void main(String... args) throws Exception {
com.acme.Main.main(args);
}
}
----

View File

@@ -0,0 +1,128 @@
= Scoop
:jbake-type: page
:jbake-status: published
JReleaser can generate and publish a _Scoop App Manifest_ into a repository that you have access to.
The `scoop` section specifies how the manifest should be created.
NOTE: At the moment, only artifacts with `.zip` extension may be packaged with Scoop.
WARNING: Snapshots are not supported.
[source,yaml]
[subs="+macros"]
----
# [optional]
packagers:
# [optional]
scoop:
# Enables or disables Scoop.
# Defaults to `false`.
# [optional]
enabled: true
# Directory with file templates used to prepare the Scoop distribution
# Defaults to `src/distribution/${distribution.name}/scoop`.
# If specified, path must exist.
# [optional]
templateDirectory: path/to/scoop/templates
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `scoop`, i.e, `scoopFoo`.
foo: bar
# URL used to check the latest version.
# Defaults to the releaser's `latestReleaseUrlFormat`.
# [optional]
checkverUrl:
# URL used to download a new version.
# Defaults to the releaser's `downloadUrlFormat`.
# [optional]
autoupdateUrl:
# Git author used to commit to the bucket repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Git repository to push the app manifest.
# Defaults are shown.
# [optional]
bucket:
# The owner of the bucket repository.
# Defaults to the same owner as the release repository.
# [optional]
owner: duke
# The name of the bucket repository.
# Defaults to `${distribution.name}-scoop-bucket`.
# [optional]
name: app-scoop-bucket
# Username used for authoring commits. Must have write access to the bucket repository.
# Defaults to the same username as the release repository.
# [optional]
username: duke
# Password or OAuth token with write access to the bucket repository.
# If left unspecified, the JRELEASER_SCOOP_GITHUB_TOKEN environment variable may be defined.
# [optional]
token: 1n$3cUrEP@s$w0rd
----
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
a `manifest.json` formula in the `duke/app-scoop-bucket` repository:
[source,json]
----
{
"homepage": "https://acme.com/app",
"description": "Sample app",
"version": "1.2.3",
"license": "Apache-2.0",
"url": "https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.zip",
"hash": "sha256:812121a64bbd3f49286f7b0be3c9209068f71fcf9541f313708979602e8de466",
"extract_dir": "app-1.2.3",
"env_add_path": "bin",
"suggest": {
"JDK": [
"java/oraclejdk",
"java/openjdk"
]
},
"checkver": {
"url": "https://github.com/duke/app/releases/latest",
"re": "v([\\d.]+).zip"
},
"autoupdate": {
"url": "https://github.com/duke/app/releases/download/v1.2.3/app-$version.zip",
"extract_dir": "app-$version",
"hash": {
"url": "$url.sha256"
}
}
}
----
Your users can then install your app by doing:
[source]
----
scoop bucket add duke https://github.com/duke/app-scoop-bucket.git
scoop install duke/app
----

View File

@@ -0,0 +1,191 @@
= Snap
:jbake-type: page
:jbake-status: published
link:http://snapcraft.io[Snaps] are a new packaging format, that will let you publish your project directly to the
Ubuntu store. From there it will be installable in all the link:https://snapcraft.io/docs/core/install[supported Linux distros],
with automatic and transactional updates.
You can read more about it in the link:https://snapcraft.io/docs/[snapcraft docs].
NOTE: At the moment, only artifacts with `.tar.gz` or `.tar` extension may be packaged with Snapcraft.
WARNING: Snapshots are not supported.
[source,yaml]
[subs="+macros"]
----
# [optional]
packagers:
# [optional]
snap:
# Enables or disables Snapcraft.
# Defaults to `false`.
# [optional]
enabled: true
# Directory with file templates used to prepare the Snapcraft distribution
# Defaults to `src/distribution/${distribution.name}/snap`.
# If specified, path must exist.
# [optional]
templateDirectory: path/to/snap/templates
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `snap`, i.e, `snapFoo`.
foo: bar
# Git author used to commit to the snap repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# If left undefined, will use the releaser's commit name.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# If left undefined, will use the releaser's commit email.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Exported snapcraft login credentials.
# Will be sent to local snapcraft build with `snapcraft login --with ${exportedLogin`.
# Required if `remoteBuild` is set to `false`.
exportedLogin:
# Whether to build the package on a remote server or locally.
# If set to `true` then the package must be configured to be built
# via link:https://snapcraft.io[].
# Review the docs at link:https://snapcraft.io/build[].
# Defaults to `false`.
# [optional]
remoteBuild: false
# Git repository to push the package it remoteBuild is `true`.
# Defaults are shown.
# [optional]
snap:
# The owner of the snap repository.
# Defaults to the same owner as the release repository.
# [optional]
owner: duke
# The name of the tap repository.
# Defaults to `homebrew-tap`.
# [optional]
name: homebrew-tap
# Username used for authoring commits. Must have write access to the snap repository.
# Defaults to the same username as the release repository.
# [optional]
username: duke
# Password or OAuth token with write access to the snap repository.
# If left unspecified, the JRELEASER_SNAP_GITHUB_TOKEN environment variable may be defined.
# [optional]
token: 1n$3cUrEP@s$w0rd
# A snap of type base to be used as the execution environment for this snap.
# Valid values are:
# * bare - Empty base snap;
# * core - Ubuntu Core 16;
# * core18 - Ubuntu Core 18.
# Defaults to `core18`.
# [optional]
base: core18
# A guardrail to prevent you from releasing a snap to all your users before
# it is ready.
# `devel` will let you release only to the `edge` and `beta` channels in the
# store. `stable` will let you release also to the `candidate` and `stable`
# channels. More info about channels here:
# link:https://snapcraft.io/docs/reference/channels[].
# Defaults to `stable`.
# [optional]
grade: stable
# Snaps can be setup to follow three different confinement policies:
# `strict`, `devmode` and `classic`. A strict confinement where the snap
# can only read and write in its own namespace is recommended. Extra
# permissions for strict snaps can be declared as `plugs` for the app, which
# are explained later. More info about confinement here:
# link:https://snapcraft.io/docs/reference/confinement[].
# Defaults to `strict`.
# [optional]
confinement: strict
# List of plug names the application is associated with.
# When a plug is connected to one of these slots, the application
# will be granted the permissions specified for that interface.
# If attributes are required, or the plug name does not match the
# interface name, more details must be declared in the `plugs` field.
# link:https://snapcraft.io/docs/reference/interfaces[].
# [optional]
localPlugs:
- some_plug_name
# List of slot names the application is associated with.
# When a plug is connected to one of these slots, the application
# will be granted the permissions specified for that interface.
# If attributes are required, or the slot name does not match the
# interface name, more details must be declared in the `slots` field.
# link:https://snapcraft.io/docs/reference/interfaces[].
# [optional]
localSlots:
- some_slot_name
# Allows plugs to be configured.
# [optional]
plugs:
some_plug_name:
key: value
# Allows slots to be configured.
# [optional]
slots:
some_slot_name:
key: value
read:
- $HOME/.foo
write:
- $HOME/.foo
- $HOME/.foobar
----
Assuming that the current version is `1.2.3`, and a distribution named `app`, the above configuration will generate
a `snapcraft.yaml` file `out/jreleaser/snap/prepare`, which may be published to `app-snap`
[source,yaml]
.snapcraft.yaml
----
name: app
base: core18
version: 1.2.3
license: Apache-2.0
grade: stable
type: app
confinement: strict
summary: Sample app
description: Sample app
apps:
app:
command: bin/app
environment:
JAVA_HOME: $SNAP/usr/lib/jvm/java
parts:
app:
plugin: dump
source: https://github.com/duke/app/releases/download/v1.2.3/app-1.2.3.tar.gz
source-checksum: sha256/8e74020ca5e7d01d25c34cf1bd53adcf78c77adf7b53530ae5e0baeb841cb43e
stage-packages:
- openjdk-8-jdk
organize:
usr/lib/jvm/java-8-openjdk*: usr/lib/jvm/java
----

View File

@@ -0,0 +1,79 @@
= Project
:jbake-type: page
:jbake-status: published
Defines general information about the project.
[source,yaml]
[subs="+macros"]
----
project:
# The name of the project.
# [required]
name: app
# The version to be released.
# May define a JRELEASER_PROJECT_VERSION environment variable instead.
# [required]
version: 1.0.0
# Maven coordinates: groupId.
# Inherited by distributions if they do not define a value for it.
# [required]
groupId: com.acme
# Maven coordinates: artifactId.
# If undefined, will use ${project.name}.
# Inherited by distributions if they do not define a value for it.
# [required]
artifactId: app
# Identifies the project as being mermber of a multi-project build.
# Defaults to `false`.
# [optional]
multiProject : false
# A short description (60 chars max).
# [required]
description: My awesome app
# A more thorough explanation of the project's capabilities.
# May use markdown syntax.
# If left unspecified, will use the value of `description`.
# [optional]
longDescription: |
My Awesome app is the bees knees
# The project's website.
# [required]
website: pass:[https://acme.com/app]
# A list of author names.
# [required]
authors:
- Duke
# A list of tags.
# [optional]
tags:
- cli
- awesome
# The project's license.
# It's recommended to use a valid SPDX identifier if the project is Open Source.
# See link:https://spdx.org/licenses[].
# [required]
license: Apache-2.0
# The minimum Java version required by consumers to run the application.
# [required]
javaVersion: 8
# Additional properties used when evaluating templates.
# [optional]
extraProperties:
# Key will be capitalized and prefixed with `project`, i.e, `projectFoo`.
foo: bar
----

View File

@@ -0,0 +1,143 @@
= Github
:jbake-type: page
:jbake-status: published
[source,yaml]
[subs="+macros"]
----
# [required]
release:
# Repo in which the release will be created.
# [required]
github:
# Disables or enables publication to GitHub.
# defaults to `true`.
enabled: true
# The user or organization that owns the repository.
# [required]
owner: duke
# The name of the repository.
# If unspecified, will use ${project.name}.
# [optional]
name: app
# The GitHub host url.
# Defaults to `github.com`.
# [required]
host: github.com
# Username used for authoring commits. Must have write access to the repository.
# [required]
username: duke
# Password or OAuth token with write access to the repository.
# If left unspecified, the JRELEASER_GITHUB_TOKEN environment variable must be defined.
# [required]
token: 1n$3cUrEP@s$w0rd
# The tag associated with the release.
# If left unspecified, will use `v${project.version}`.
# [optional]
tagName: v1.0.0
# The name of the release.
# If left unspecified, will use `Release ${tagName}`.
# [optional]
releaseName: Release v1.0.0
# Drops and creates an existing release with matching tag.
# Defaults to `false`.
# [optional]
overwrite: true
# Appends artifacts to an existing release with matching tag,
# useful if `overwrite` is set to `false`.
# Defaults to `false`.
# [optional]
allowUploadToExisting: true
# The GitHub API endpoint to use.
# Update it if using GitHub Enterprise.
# Defaults to `pass:[https://api.github.com]`.
# [optional]
apiEndpoint: pass:[https://api.github.com]
# Git author used to commit to the repository.
# [optional]
commitAuthor:
# Name used when authoring commits.
# Defaults to `jreleaser-bot`.
# [optional]
name: jreleaser-bot
# E-mail used when authoring commits.
# Defaults to `pass:[jreleaser-bot@jreleaser.org]`.
# [optional]
email: pass:[jreleaser-bot@jreleaser.org]
# Signs commits with the configured credentials.
# The <<_signing,signing>> section must be configured as well.
# Defaults to `false`.
# [optional]
sign: false
# Changelog customization.
# [optional]
changelog:
# Disables or enables the changelog.
# defaults to `true`.
# [optional]
enabled: true
# Sorts commits in ascending (oldest first) or descending (newer first).
# Valid values are: `ASC`, `DESC`.
# Defaults to `DESC`.
# [optional]
sort: DESC
# Path to an external file that contains the changelog, read as is.
# May be a relative path to the configuration file or an absolute path.
# If unspecified, JReleaser will automatically calculate the changelog.
# [optional]
external: path/to/changelog.md
# Create explicit markdown links for commit hashes.
# Defaults to `false`.
# [optional]
links: false
# The target branch to use.
# Defaults to `main`.
# [optional]
targetCommitish: main
# Marks the release as a draft.
# Defaults to `false`.
# [optional]
draft: false
# Marks the release as prerelease.
# Defaults to `false`.
# [optional]
prerelease: false
# The following properties define [optional] URL formats.
# Defaults are shown.
# Review the available <<_templates,template>> names.
repoUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}]
commitUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}/commits]
downloadUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}/releases/download/{{tagName}}/{{artifactFileName}}]
releaseNotesUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}/releases/tag/{{tagName}}]
latestReleaseUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}/releases/latest]
issueTrackerUrlFormat: pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}/issues]
----

View File

@@ -0,0 +1,14 @@
= Release
:jbake-type: page
:jbake-status: published
JReleaser can create and tag a GitHub release, upload all files and generate the changelog based on the new commits since
the previous tag.
The `release` section allows the following options to be customized
:leveloffset: 3
include::github.adoc[]
:leveloffset: 2

View File

@@ -0,0 +1,43 @@
= Signing
:jbake-type: page
:jbake-status: published
Signing ensures that the artifacts have been generated by yourself and your users can verify that by comparing the
generated signature with your public signing key.
JReleaser can sign all files, including distribution archives and any extra files attached to the project. This section
must be configured if you intent to sign commits as well.
Use the following options to customize how files may be signed:
[source,yaml]
[subs="+macros"]
----
# [optional]
signing:
# Enables or disables file signing.
# Defaults to `false`.
enabled: true
# Generates an armored signature.
# Defaults to `true`.
armored: true
# The public GPG (ascii armored) used to sign files and commits.
# If left unspecified, the JRELEASER_GPG_PUBLIC_KEY environment variable must be defined.
# [required]
publicKey:
# The private GPG (ascii armored) used to sign files and commits.
# If left unspecified, the JRELEASER_GPG_SECRET_KEY environment variable must be defined.
# [required]
secretKey:
# The passphrase required to read secret keys.
# If left unspecified, the JRELEASER_GPG_PASSPHRASE environment variable must be defined.
# [required]
passphrase: My$3cR3tP@a$sw0rD
----
WARNING: Prefer the use of environment variables if the configuration is stored at a public repository.

View File

@@ -0,0 +1,310 @@
= Templates
:jbake-type: page
:jbake-status: published
Several fields in the JReleaser config file support templating. JReleaser makes use of the
link:https://mustache.github.io/[Mustache] format for its templating support. Packagers rely on input files that
also support templates. A template name can be used as `{{ name }}`
The following is a list of pre-defined template names:
.Project
The following names are related to the <<_project,Project>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| projectName | the project name
| projectNameCapitalized | the project name, capitalized, hyphens replaced by spaces.
| projectVersion | the project version
| projectDescription | the project description
| projectLongDescription | the project long description
| projectWebsite | link to the project website
| projectLicense | the project license, typically an SPDX identifier
| projectAuthorsBySpace | space separated list of author names
| projectAuthorsByComma | commma separated list of author names
| projectTagsBySpace | space separate list of project tags
| projectTagsByComma | comma separate list of project tags
| javaVersion | the project Java version
| groupId | the project groupId (Maven coordinates)
| artifactId | the project artifactId (Maven coordinates)
|===
Additionally, every key/value from `project.extraProperties` is mapped with `project` as key prefix and the capitalized
key, such that
[source,yaml]
----
project:
extraProperties:
# Key will be capitalized and prefixed with `project`, i.e, `projectFoo`.
foo: bar
----
.Release
The following names are related to the <<_release,Release>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| repoHost | the Git host, i.e. "github.com"
| repoOwner | the owner of the Git repository
| repoName | the name of the Git repository
| repoBranch | the branch on which the release is made
| tagName | the tag being release, defaults to `v{{projectVersion}}`
| releaseName | the release name, defaults to `Release {{tagName}}`
| repoCanonicalName | the canonical name of the repository, `{{repoOwner}}/{{repoName}}`
| repoUrl | the repository URL, `pass:[https://{{repoHost}}/{{repoOwner}}/{{repoName}}]`
| commitsUrl | the URL to find commits
| releaseNotesUrl | the URL pointing to the release
| latestReleaseUrl | the URL pointing to latest release
| issueTrackerUrl | the URL of the issue tracker
| reverseRepoHost | reversed Git host, i.e. "com.github"
|===
.Distribution
The following names are related to <<_distribution,Distribution>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| distributionName | the name of the distribution
| distributionExecutable | the name of the executable script launcher
| distributionTagsBySpace | space separate list of distribution tags
| distributionTagsByComma | comma separate list of distribution tags
| distributionGroupId | the distribution groupId (Maven coordinates)
| distributionArtifactId | the distribution artifactId (Maven coordinates)
| mainClass | the main class launched by the executable script launcher
|===
Additionally, every key/value from `distribution.<name>.extraProperties` is mapped with `distribution` as key prefix
and the capitalized key, such that
[source,yaml]
----
distributions:
theName:
extraProperties:
# Key will be capitalized and prefixed with `distribution`, i.e, `distributionFoo`.
foo: bar
----
.Artifact
The following names identify an artifact without explicit `platform`
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| artifactJavaVersion | the artifact Java version
| artifactUrl | the URL required to download the artifact
| artifactSha256 | the SHA256 checksum of the artifact's file
| artifactFileName | the name of the artifact file
|===
The following names match the first artifact in a distribution
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| distributionJavaVersion | the artifact Java version
| distributionUrl | the URL required to download the artifact
| distributionSha256 | the SHA256 checksum of the artifact's file
| distributionFileName | the name of the artifact file
|===
Additional names become available when the artifact defines a `platform`
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| artifact{{CapitalizedPlatform}}JavaVersion | the distribution Java version
| artifact{{CapitalizedPlatform}}Url | the URL required to download the artifact
| artifact{{CapitalizedPlatform}}Sha256 | the SHA256 checksum of the artifact's file
| artifact{{CapitalizedPlatform}}FileName | the name of the artifact file
|===
Thus, for artifacts defined as
[source,yaml]
----
distributions:
app:
artifacts:
- path: path/to/{{distributionName}}-{{projectVersion}}.zip
- path: path/to/{{distributionName}}-{{projectVersion}}-mac.zip
platform: osx
----
The following names will be calculated:
*1st artifact*
* artifactJavaVersion
* artifactUrl
* artifactSha256
* artifactFileName
* distributionJavaVersion
* distributionUrl
* distributionSha256
* distributionFileName
*Platform specific artifact*
* artifactOsxJavaVersion
* artifactOsxUrl
* artifactOsxSha256
* artifactOsxFileName
.Brew
The following names are related to <<_homebrew,Homebrew>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| brewDependencies | a map of key/value pairs
|===
Additionally, every key/value from `brew.extraProperties` is mapped with `brew` as key prefix and the capitalized
key, such that
[source,yaml]
----
packagers:
brew:
extraProperties:
# Key will be capitalized and prefixed with `brew`, i.e, `brewFoo`.
foo: bar
----
.Chocolatey
The following names are related to <<_chocolatey,Chocolatey>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| chocolateyUsername | the name of the Chocolatey username
|===
Additionally, every key/value from `chocolatey.extraProperties` is mapped with `chocolatey` as key prefix and the capitalized
key, such that
[source,yaml]
----
packagers:
chocolatey:
extraProperties:
# Key will be capitalized and prefixed with `chocolatey`, i.e, `chocolateyFoo`.
foo: bar
----
.Jbang
The following names are related to <<_jbang,Jbang>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| jbangAliasName | the name of the jbang alias, `{{distributionName}}` or `{{distributionName}}-snapshot`
| jbangAliasClassName | the name of the Jbang executable, `{{distributionName}}` or `{{distributionName}}_snapshot`
| jbangDistributionGA a| calculated Maven coordinates for link:https://jitpack.io[],
* single: `{{reverseRepoHost}}.{{repoOwner}}:{{distributionArtifactId}` +
* multi: `{{reverseRepoHost}}.{{repoOwner}}.{{repoName}}:{{distributionArtifactId}`
|===
Additionally, every key/value from `jbang.extraProperties` is mapped with `jbang` as key prefix and the capitalized
key, such that
[source,yaml]
----
packagers:
jbang:
extraProperties:
# Key will be capitalized and prefixed with `jbang`, i.e, `jbangFoo`.
foo: bar
----
.Scoop
The following names are related to <<_scoop_,Scoop>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| scoopCheckverUrl | the URL used to check for a release version
| scoopAutoupdateUrl | the URL pattern used to update the package
|===
Additionally, every key/value from `scoop.extraProperties` is mapped with `scoop` as key prefix and the capitalized
key, such that
[source,yaml]
----
packagers:
scoop:
extraProperties:
# Key will be capitalized and prefixed with `scoop`, i.e, `scoopFoo`.
foo: bar
----
.Snap
The following names are related to <<_snap_,Snap>>
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| snapBase | the snap base
| snapGrade | the snap grade
| snapConfinement | the snap confinement
| snapHasPlugs | a boolean, when there snap defines plugs
| snapPlugs | a list of `Plugs`
| snapHasSlots | a boolean, when the snap defines slots
| snapSlots | a list of `Slots`
| snapHasLocalPlugs | a boolean, when the snap defines plug names
| snapLocalPlugs | a list of plug names
| snapHasLocalSlots | a boolean, when the snap defines slot names
| snapLocalSlots | a list of slot names
|===
A `Plug` defines the following fields
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| name | the plug's name
| attributes | a map of key/value attributes
|===
A `Slot` defines the following fields
[%header, cols="<2,<5", width="100%"]
|===
| Key | Description
| name | the slot's name
| attributes | a map of key/value attributes
| reads | a list of read names
| writes | a list of write names
| hasReads | a boolean, when the slot defines reads
| hasWrites | a boolean, when the slot defines writes
|===
Additionally, every key/value from `snap.extraProperties` is mapped with `snap` as key prefix and the capitalized
key, such that
[source,yaml]
----
packagers:
snap:
extraProperties:
# Key will be capitalized and prefixed with `snap`, i.e, `snapFoo`.
foo: bar
----

View File

@@ -0,0 +1,65 @@
= Getting Started
:jbake-type: page
:jbake-status: published
Once JReleaser is installed you may initialize its config file by invoking the following command:
[source]
----
$ jreleaser init --format yml
[INFO] Writing file /Home/duke/app/.jreleaser.yml
[INFO] JReleaser initialized at /Home/duke/app
----
This generates a `.jreleaser.yml` file with the following configuration
[source,yaml]
..jreleaser.yml
----
project:
name: app
groupId: com.acme
version: 0.0.0-SNAPSHOT
description: Awesome App
longDescription: Awesome App
website: https://acme.com/app
authors:
- Duke
license: Apache-2
javaVersion: 8
release:
github:
owner: duke
distributions:
app:
artifacts:
- path: path/to/{{distributionName}}-{{projectVersion}}.zip
----
Edit the file to suite your needs. JReleaser does not create artifact files for you. It assumes those are created using
other tools; JReleaser only cares if the resolved artifact paths exist. Once you have edited the file you may verify its
configuration by invoking
[source]
----
$ jreleaser config
----
At any time you may invoke any of the other commands, but when it's time to make a release you have to invoke
[source]
----
$ jreleaser full-release
----
This command performs the following actions:
* checksums all artifacts.
* signs all files (if signing is enabled).
* creates a release at the chosen Git repository.
* prepares, packages, and uploads configured packagers (brew, jbang, etc).
* announces the release.

View File

@@ -0,0 +1,15 @@
= JReleaser Guide
:jbake-type: page
:jbake-status: published
:linkattrs:
:icons: font
:toc: left
:toclevels: 3
:leveloffset: 1
include::introduction.adoc[]
include::install.adoc[]
include::getting-started.adoc[]
include::workflow.adoc[]
include::configuration/index.adoc[]
include::tools/index.adoc[]

View File

@@ -0,0 +1,88 @@
= Install
:jbake-type: page
:jbake-status: published
There are multiple choices depending on your preference.
== CLI
The <<_jreleaser_cli,CLI tool>> can be installed in the following ways:
*homebrew tap* (only on OSX for now):
[source]
----
brew install jreleaser/tap/jreleaser
----
*scoop*:
[source]
----
scoop bucket add jreleaser https://github.com/jreleaser/scoop-bucket.git
scoop install jreleaser
----
*sdkman*:
[source]
----
sdk install jreleaser
----
*jbang*
[source]
----
// Download, cache, and run
jbang jreleaser@jreleaser <args>
----
*manually*:
Download the pre-compiled binary from the link:https://github.com/jreleaser/jreleaser/releases[releases page],
uncompress and copy to the desired location.
== Maven
Configure the <<_jreleaser_maven,jreleaser-maven-plugin>> in your POM file
[source,xml]
[subs="verbatim,attributes"]
.pom.xml
----
<plugin>
<groupId>org.jreleaser</groupId>
<artifactId>jreleaser-maven-plugin</artifactId>
<version>{jbake-jreleaser-version}</version>
</plugin>
----
== Gradle
Configure the <<_jreleaser_gradle,jreleaser-gradle-plugin>> in your `build.gradle` or `settings.gradle` file
[source,groovy]
[subs="attributes"]
.build.gradle
----
plugins {
id 'org.jreleaser' version '{jbake-jreleaser-version}'
}
----
== Ant
Download the <<_jreleaser_ant,jreleaser-ant-tasks>> ZIP bundle from the link:https://github.com/jreleaser/jreleaser/releases[releases page]
and unzip it in your project. Place all JARs inside the `lib` folder. Create this folder if there is none.
Add the following elements to your `build.xml` file
[source,xml]
[subs="verbatim,attributes"]
.build.xml
----
<path id="jreleaser.classpath">
<fileset dir="lib">
<include name="jreleaser-ant-tasks-{jbake-jreleaser-version}/*.jar"/>
</fileset>
</path>
<import>
<javaresource name="org/jreleaser/ant/targets.xml"
classpathref="jreleaser.classpath"/>
</import>
----

View File

@@ -0,0 +1,18 @@
= Introduction
:jbake-type: page
:jbake-status: published
JReleaser is a release automation tool for Java projects. Its goal is to simplify creating releases and publishing artifacts
to multiple package managers while providing customizable options.
A release process can be customized with a `.jreleaser.yml` file if using the <<_jreleaser_cli,CLI>> or
<<_jreleaser_ant,Ant>> options, or direct DSL configuration inside a `pom.xml` (<<_jreleaser_maven,Maven>>) or
`build.gradle` (<<_jreleaser_gradle,Gradle>>) file.
Once setup, you can create a new release by invoking the `full-release` command.
*Acknowledgment*
JReleaser is heavily inspired by link:https://goreleaser.com[GoReleaser].

View File

@@ -0,0 +1,5 @@
= JReleaser Ant Tasks
:jbake-type: page
:jbake-status: published

View File

@@ -0,0 +1,5 @@
= JReleaser CLI
:jbake-type: page
:jbake-status: published

View File

@@ -0,0 +1,5 @@
= JReleaser Gradle Plugin
:jbake-type: page
:jbake-status: published

View File

@@ -0,0 +1,12 @@
= Tools
:jbake-type: page
:jbake-status: published
:leveloffset: 2
include::cli.adoc[]
include::maven.adoc[]
include::gradle.adoc[]
include::ant.adoc[]
include::tool-provider.adoc[]
:leveloffset: 1

View File

@@ -0,0 +1,5 @@
= JReleaser Maven Plugin
:jbake-type: page
:jbake-status: published

View File

@@ -0,0 +1,5 @@
= JReleaser Tool Provider
:jbake-type: page
:jbake-status: published

View File

@@ -0,0 +1,29 @@
= Workflow
:jbake-type: page
:jbake-status: published
JReleaser follows a series of steps to create, verify, and publish a release. All <<_tools,tools>> let you invoke these
steps in isolation or together.
== Checksum
Calculates checksums for all files.
== Sign
Signs all artifacts with the given PGP credentials.
== Release
Creates and tags a release at a remote Git repository. Also, uploads all files, including checksums and signatures.
== Prepare
Setups input files for packaging tools, based on templates.
== Package
Creates packages based on the prepared input files.
== Upload
Uploads all packages to their corresponding destinations.
== FullRelease
Performs all operations in the order described above.

View File

@@ -1,19 +1,14 @@
</div>
<div id="push"></div>
<footer class="mastfoot mt-auto">
<div class="inner">
<p>&copy; 2021 Andres Almiray</p>
</div>
</footer>
</div>
<div id="footer">
<div class="container">
<p class="muted credit">&copy; 2021 Andres Almiray</p>
</div>
</div>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>js/jquery-1.11.1.min.js"></script>
<script src="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>js/bootstrap.min.js"></script>
<script src="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>js/prettify.js"></script>
</body>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/run_prettify.min.js"></script>
</body>
</html>

View File

@@ -1,33 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>JReleaser</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<meta name="keywords" content="">
<meta name="generator" content="JBake">
<!-- Le styles -->
<link href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>css/font-awesome.min.css" rel="stylesheet">
<link href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>css/bootstrap.min.css" rel="stylesheet">
<link href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>css/asciidoctor.css" rel="stylesheet">
<link href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>css/base.css" rel="stylesheet">
<link href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>css/prettify.css" rel="stylesheet">
<link href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>css/font-awesome.min.css"
rel="stylesheet">
<link href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>css/bootstrap.min.css"
rel="stylesheet">
<link href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>css/asciidoctor.css"
rel="stylesheet">
<link href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>css/navbar-top-fixed.css"
rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>js/html5shiv.min.js"></script>
<![endif]-->
<link rel="shortcut icon" href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>favicon.ico">
<!-- Fav and touch icons -->
<!--<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">-->
<link rel="shortcut icon" href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>favicon.ico">
</head>
<body onload="prettyPrint()">
<div id="wrap">
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
@media only screen and (min-width:768px){
#toctitle{font-size:1.375em}
#toc.toc{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto; padding-top: 60px;}
#toc.toc #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc>ul{font-size:.9em;margin-bottom:0}
#toc.toc ul ul{margin-left:0;padding-left:1em}
#toc.toc ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
}
@media only screen and (min-width:1280px){
body.toc2{padding-left:20em;padding-right:0}
#toc.toc{width:20em; padding-top: 60px;}
#toc.toc #toctitle{font-size:1.375em}
#toc.toc>ul{font-size:.95em}
#toc.toc ul ul{padding-left:1.25em}
}
</style>
</head>
<body <% if (content.uri) { %>class="toc2 toc-left"<% } else { %><% } %>>

View File

@@ -2,20 +2,27 @@
<% include "menu.gsp" %>
<div class="container">
<div class="page-header">
</div>
<div class="row">
<div class="col-md-8">
<div class="sect1">
<h2>Coming up ...</h2>
</div>
<main role="main" class="container">
<div class="jumbotron">
<h1>JReleaser</h1>
<p class="lead">The quick and effortless way to release Java projects!</p>
<p>with JReleaser, you can:
<ul>
<li>Calculate file checksums</li>
<li>Sign files</li>
<li>Release to GitHub</li>
<li>Create Homebrew taps</li>
<li>Create Scoop buckets</li>
<li>Configure Snaps</li>
<li>Announce releases to SDKMAN!, Twitter, Zulip</li>
<li>... and much more!</li>
</ul>
</p>
<div class="d-grid gap-2 d-md-block">
<a class="btn btn-lg btn-primary" href="/guide" role="button">Get started</a>
<a class="btn btn-lg btn-outline-primary" href="https://github.com/jreleaser/jreleaser" role="button">Go to GitHub</a>
</div>
</div>
</div>
</main>
<% include "footer.gsp" %>

View File

@@ -1,16 +1,23 @@
<!-- Fixed navbar -->
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>#">JReleaser</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse"
aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="<%if (content.rootpath) {%>${content.rootpath}<% } else { %><% }%>index.html">Home <span class="sr-only">(current)</span></a>
</li>
</ul>
</div>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="<% if (content.rootpath) { %>${content.rootpath}<% } else { %><% } %>#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/guide">Guide</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://github.com/jreleaser/jreleaser">Code</a>
</li>
</ul>
</div>
</nav>
<div class="container">

View File

@@ -1,6 +1,6 @@
<%include "header.gsp"%>
<%include "menu.gsp"%>
<%include "menu.gsp"%>
<div class="page-header">
<h1>${content.title}</h1>
@@ -10,6 +10,4 @@
<p>${content.body}</p>
<hr />
<%include "footer.gsp"%>