Skip to content
This repository has been archived by the owner on Dec 15, 2021. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
[JENKINS-32133] Merged #320.
  • Loading branch information
jglick committed Jan 28, 2016
2 parents 10b3bc8 + 7d1fdbd commit 71559f3
Show file tree
Hide file tree
Showing 7 changed files with 331 additions and 138 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Expand Up @@ -6,6 +6,7 @@ Only noting significant user changes, not internal code cleanups and minor bug f

* [JENKINS-32547](https://issues.jenkins-ci.org/browse/JENKINS-32547): laxer timeout on `bat` step log collection is needed for WinRM-based EC2 slaves.
* [JENKINS-30759](https://issues.jenkins-ci.org/browse/JENKINS-30759): sporadic `NullPointerException`s running very short-lived `node` blocks.
* [JENKINS-32133](https://issues.jenkins-ci.org/browse/JENKINS-32133): improved styling for generated reference documentation introduced in 1.13.

## 1.13 (Jan 18 2016)

Expand Down
Expand Up @@ -27,9 +27,11 @@ node {
see the notes below the list for Pipeline-specific details.
</p>
<!-- Cf. EnvironmentContributor/EnvVarsHtml/index.groovy -->
<j:forEach var="ec" items="${it.environmentContributors}">
<st:include it="${ec}" page="buildEnv" optional="true"/>
</j:forEach>
<dl class="env-vars">
<j:forEach var="ec" items="${it.environmentContributors}">
<st:include it="${ec}" page="buildEnv" optional="true"/>
</j:forEach>
</dl>
<p>
The following variables are currently unavailable inside a Pipeline script:
</p>
Expand Down
Expand Up @@ -6,14 +6,14 @@ import org.jenkinsci.plugins.workflow.cps.Snippetizer
def st = namespace("jelly:stapler")

p {
a(href: "${rootURL}/${Snippetizer.DSL_REF_URL}", target: "_blank") {
a(href: "${rootURL}/${Snippetizer.DSL_REF_URL}", target: "_dslRefHlp") {
raw(_("Click here for the reference in a new window."))
}

}

p {
a(href: "${rootURL}/${Snippetizer.GDSL_URL}", target: "_blank") {
a(href: "${rootURL}/${Snippetizer.GDSL_URL}", target: "_intjDsl") {
raw(_("Click here for IntelliJ GDSL."))
}

Expand Down
Expand Up @@ -10,21 +10,6 @@ l.layout(title:_("Jenkins Pipeline Reference")) {

st.include(page: "sidepanel", it: app)
l.main_panel {
p {
a(href: "${rootURL}/${Snippetizer.GDSL_URL}", target: "_blank") {
raw(_("Click here for IntelliJ GDSL."))
}

}

/* Commenting out DSLD until it's fixed.
p {
a(href: "${rootURL}/${Snippetizer.DSLD_URL}", target: "_blank") {
raw(_("Click here for Eclipse DSLD."))
}
}
*/
st.include(page: "dslReferenceContent")
}
}
Expand Down
Expand Up @@ -12,140 +12,171 @@ Snippetizer snippetizer = my;
def l = namespace(lib.LayoutTagLib)
def st = namespace("jelly:stapler")


h1(_("Steps"))
for (StepDescriptor d : snippetizer.getStepDescriptors(false)) {
generateStepHelp(d);
}

h1(_("Advanced/Deprecated Steps"))
for (StepDescriptor d : snippetizer.getStepDescriptors(true)) {
generateStepHelp(d);
}

h1(_("Variables"))

for (GlobalVariable v : snippetizer.getGlobalVariables()) {
h2 {
code(v.getName())
div(class:'dsl-reference'){
h1(_("DSL Reference"))
div(class:'sub-header'){
a(href: "${rootURL}/${Snippetizer.GDSL_URL}", target: "_blank") {
raw(_("Click to download IntelliJ GDSL"))
}
RequestDispatcher rd = request.getView(v, "help");
div(class:"help", style:"display: block") {
if (rd != null) {
st.include(page: "help", it: v)
} else {
raw("(no help)")
}

div(class:'steps-box basic'){
h2(_("Steps"))
dl(class:'steps basic root'){
for (StepDescriptor d : snippetizer.getStepDescriptors(false)) {
generateStepHelp(d);
}
}
}

div(class:'steps-box advanced'){
h2(_("Advanced/Deprecated Steps"))
dl(class:'steps advanced root'){
for (StepDescriptor d : snippetizer.getStepDescriptors(true)) {
generateStepHelp(d);
}
}
}

div(class:'steps-box variables'){

h2(_("Variables"))
dl(class:'steps variables root'){
for (GlobalVariable v : snippetizer.getGlobalVariables()) {
dt {
code(v.getName())
}
dd{
RequestDispatcher rd = request.getView(v, "help");
div(class:"help", style:"display: block") {
if (rd != null) {
st.include(page: "help", it: v)
} else {
raw("(no help)")
}
}
}
}
}
}
}


def generateStepHelp(StepDescriptor d) throws Exception {
return {
h2 {
code(d.getFunctionName())
raw(": ${d.getDisplayName()}")
}
try {
generateHelp(DescribableHelper.schemaFor(d.clazz), 3);
} catch (Exception x) {
pre {
code(x)
}
}
}.call()
return {
dt(class:'step-title'){
code(d.getFunctionName())
raw(": ${d.getDisplayName()}")
}
dd(class:'step-body'){
try {
generateHelp(DescribableHelper.schemaFor(d.clazz), 3);
} catch (Exception x) {
pre { code(x) }
}
}
}.call()
}

def generateHelp(DescribableHelper.Schema schema, int headerLevel) throws Exception {
return {
String help = schema.getHelp(null);
if (help != null && !help.equals("")) {
div(class:"help", style:"display: block") {
raw(help)
}
} // TODO else could use RequestDispatcher (as in Descriptor.doHelp) to serve template-based help
for (String attr : schema.mandatoryParameters()) {
"h${headerLevel}" {
code(attr)
}
generateAttrHelp(schema, attr, headerLevel);
return {
String help = schema.getHelp(null);
if (help != null && !help.equals("")) {
div(class:"help", style:"display: block") { raw(help) }
}
dl(class:'help-list mandatory'){
// TODO else could use RequestDispatcher (as in Descriptor.doHelp) to serve template-based help
for (String attr : schema.mandatoryParameters()) {
dt(class:'help-title'){ code(attr) }
dd(class:'help-body'){
generateAttrHelp(schema, attr, headerLevel);
}
for (String attr : schema.parameters().keySet()) {
if (schema.mandatoryParameters().contains(attr)) {
continue;
}
"h${headerLevel}" {
code(attr)
raw(" (optional)")
}
generateAttrHelp(schema, attr, headerLevel);
}
}
dl(class:'help-list optional'){
for (String attr : schema.parameters().keySet()) {
if (schema.mandatoryParameters().contains(attr)) {
continue;
}
}.call()
dt(class:'help-title'){
code(attr)
raw(" (optional)")

}
dd(class:'help-body'){
generateAttrHelp(schema, attr, headerLevel);
}
}
}
}.call()
}

def generateAttrHelp(DescribableHelper.Schema schema, String attr, int headerLevel) throws Exception {
return {
String help = schema.getHelp(attr);
if (help != null && !help.equals("")) {
div(class:"help", style:"display: block") {
raw(help)
}
}
DescribableHelper.ParameterType type = schema.parameters().get(attr);
describeType(type, headerLevel);
}.call()
return {
String help = schema.getHelp(attr);
if (help != null && !help.equals("")) {
div(class:"help", style:"display: block") { raw(help) }
}
DescribableHelper.ParameterType type = schema.parameters().get(attr);
describeType(type, headerLevel);
}.call()
}

def describeType(DescribableHelper.ParameterType type, int headerLevel) throws Exception {
return {
int nextHeaderLevel = Math.min(6, headerLevel + 1);
if (type instanceof DescribableHelper.AtomicType) {
p {
strong(_("Type:"))
text(type)
}
} else if (type instanceof DescribableHelper.EnumType) {
p {
strong(_("Values:"))
}

ul {
for (String v : ((DescribableHelper.EnumType) type).getValues()) {
li {
code(v)
}
}
}
} else if (type instanceof DescribableHelper.ArrayType) {
p {
strong(_("Array/List"))
}
describeType(((DescribableHelper.ArrayType) type).getElementType(), headerLevel)
} else if (type instanceof DescribableHelper.HomogeneousObjectType) {
p {
strong(_("Nested object"))
}
generateHelp(((DescribableHelper.HomogeneousObjectType) type).getSchemaType(), nextHeaderLevel);
} else if (type instanceof DescribableHelper.HeterogeneousObjectType) {
p {
strong(_("Nested choice of objects"))
}

ul {
for (Map.Entry<String, DescribableHelper.Schema> entry : ((DescribableHelper.HeterogeneousObjectType) type).getTypes().entrySet()) {
li {
code(DescribableHelper.CLAZZ + ": '" + entry.getKey() + "'")
}
generateHelp(entry.getValue(), nextHeaderLevel);
}
}
} else if (type instanceof DescribableHelper.ErrorType) {
Exception x = ((DescribableHelper.ErrorType) type).getError();
pre {
code(x)
return {
int nextHeaderLevel = Math.min(6, headerLevel + 1);
if (type instanceof DescribableHelper.AtomicType) {
div {
strong(_("Type:"))
text(type)
}
} else if (type instanceof DescribableHelper.EnumType) {
div(class:'values-box nested'){
div(class:'marker-title value-title'){
span(_("Values:"))
}
for (String v : ((DescribableHelper.EnumType) type).getValues()) {
div(class:'value list-item') { code(v) }
}
}
} else if (type instanceof DescribableHelper.ArrayType) {
div(class:'array-list-box marker'){
div(class:'array-title marker-title'){
span(_("Array/List:"))
}
div(class:'array-list'){
describeType(((DescribableHelper.ArrayType) type).getElementType(), headerLevel)
}
}
} else if (type instanceof DescribableHelper.HomogeneousObjectType) {
dl(class:'nested-object-box nested') {
dt(_("Nested object"))
dd{
generateHelp(((DescribableHelper.HomogeneousObjectType) type).getSchemaType(), nextHeaderLevel);
}
}
} else if (type instanceof DescribableHelper.HeterogeneousObjectType) {
dl(class:'nested-choice-box nested') {
dt(_("Nested choice of objects"))
dd{

dl(class:'schema') {
for (Map.Entry<String, DescribableHelper.Schema> entry : ((DescribableHelper.HeterogeneousObjectType) type).getTypes().entrySet()) {
dt {
code(DescribableHelper.CLAZZ + ": '" + entry.getKey() + "'")
}
dd{
generateHelp(entry.getValue(), nextHeaderLevel);
}
}
} else {
assert false: type;
}
}
}.call()
}
}
} else if (type instanceof DescribableHelper.ErrorType) {
Exception x = ((DescribableHelper.ErrorType) type).getError();
pre { code(x) }
} else {
assert false: type;
}
}.call()
}
st.adjunct(includes: 'org.jenkinsci.plugins.workflow.cps.Snippetizer.workflow')

0 comments on commit 71559f3

Please sign in to comment.