diff --git a/RELEASING.md b/RELEASING.md index 0deb3c6fe..317c056f7 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -5,6 +5,7 @@ These are the steps to release the Maven-based Job DSL plugin. * Set `compatibleSinceVersion` to the new version if deprecated features have been removed * Prepare and perform the release: `mvn release:prepare release:perform` * Edit the [draft release notes](https://github.com/jenkinsci/job-dsl-plugin/releases) and publish them +* File a pull request to add the newly-released version to the API viewer in `job-dsl-plugin/pom.xml` and `job-dsl-plugin/src/main/hbs/root.hbs` * Close all resolved issues in [JIRA](https://issues.jenkins-ci.org/secure/Dashboard.jspa?selectPageId=15341) * Open a pull request to update the [Job DSL Playground](https://github.com/sheehan/job-dsl-playground) * Open a pull request to update the [Job DSL Gradle Example](https://github.com/sheehan/job-dsl-gradle-example) diff --git a/job-dsl-plugin/copyData.groovy b/job-dsl-plugin/copyData.groovy new file mode 100644 index 000000000..08afc4f92 --- /dev/null +++ b/job-dsl-plugin/copyData.groovy @@ -0,0 +1,43 @@ +import groovy.io.FileType +import java.io.File +import java.io.InputStream +import java.util.jar.JarFile +import java.util.TreeSet +import java.util.zip.ZipEntry +import org.apache.maven.artifact.versioning.ComparableVersion + +def fileToVersion = [:] +def versionToFile = [:] +def versions = new TreeSet() +def versionsDir = new File("${project['build']['directory']}/versions") +versionsDir.eachFile(FileType.FILES) { file -> + def matcher = file.name =~ /^job-dsl-core-(.*)\.jar$/ + if (matcher.matches()) { + def version = new ComparableVersion(matcher.group(1)) + fileToVersion[file] = version + versionToFile[version] = file + versions << version + } +} + +def jars = versions.toList().reverse().collect({ versionToFile[it] }) +jars.eachWithIndex { File jar, int index -> + JarFile jarFile = new JarFile(jar) + try { + ZipEntry entry = jarFile.getEntry('javaposse/jobdsl/dsl/dsl.json') + if (entry) { + InputStream is = jarFile.getInputStream(entry) + try { + def filename = index == 0 ? 'dsl.json' : "job-dsl-core-${fileToVersion[jar]}-apidoc.json" + def dest = new File("${project['build']['directory']}/versions/${filename}") + log.info("Writing ${dest}") + dest.delete() + dest.append(is) + } finally { + is.close() + } + } + } finally { + jarFile.close() + } +} diff --git a/job-dsl-plugin/pom.xml b/job-dsl-plugin/pom.xml index 8ec3cfa68..7d9b87cf1 100644 --- a/job-dsl-plugin/pom.xml +++ b/job-dsl-plugin/pom.xml @@ -168,6 +168,216 @@ + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-versions + + copy + + generate-sources + + + + ${project.groupId} + job-dsl-core + ${project.version} + + + + ${project.groupId} + job-dsl-core + 1.81.1 + + + ${project.groupId} + job-dsl-core + 1.81 + + + ${project.groupId} + job-dsl-core + 1.80 + + + ${project.groupId} + job-dsl-core + 1.79 + + + ${project.groupId} + job-dsl-core + 1.78 + + + ${project.groupId} + job-dsl-core + 1.77 + + + ${project.groupId} + job-dsl-core + 1.76 + + + ${project.groupId} + job-dsl-core + 1.75 + + + ${project.groupId} + job-dsl-core + 1.74 + + + ${project.groupId} + job-dsl-core + 1.73 + + + ${project.groupId} + job-dsl-core + 1.72 + + + ${project.groupId} + job-dsl-core + 1.71 + + + ${project.groupId} + job-dsl-core + 1.70 + + + ${project.groupId} + job-dsl-core + 1.69 + + + ${project.groupId} + job-dsl-core + 1.68 + + + ${project.groupId} + job-dsl-core + 1.67 + + + ${project.groupId} + job-dsl-core + 1.66 + + + ${project.groupId} + job-dsl-core + 1.65 + + + ${project.groupId} + job-dsl-core + 1.64 + + + ${project.groupId} + job-dsl-core + 1.63 + + + ${project.groupId} + job-dsl-core + 1.62 + + + ${project.groupId} + job-dsl-core + 1.61 + + + ${project.groupId} + job-dsl-core + 1.60 + + + ${project.groupId} + job-dsl-core + 1.59 + + + ${project.groupId} + job-dsl-core + 1.58 + + + ${project.groupId} + job-dsl-core + 1.57 + + + ${project.groupId} + job-dsl-core + 1.56 + + + ${project.groupId} + job-dsl-core + 1.55 + + + ${project.groupId} + job-dsl-core + 1.54 + + + ${project.groupId} + job-dsl-core + 1.53 + + + ${project.groupId} + job-dsl-core + 1.52 + + + ${project.groupId} + job-dsl-core + 1.51 + + + ${project.groupId} + job-dsl-core + 1.50 + + + ${project.groupId} + job-dsl-core + 1.49 + + + ${project.groupId} + job-dsl-core + 1.48 + + + ${project.groupId} + job-dsl-core + 1.47 + + + ${project.groupId} + job-dsl-core + 1.46 + + + ${project.build.directory}/versions + true + + + + org.codehaus.gmavenplus gmavenplus-plugin @@ -184,6 +394,18 @@ removeTestStubs + + copy-data + + execute + + generate-sources + + + + + + diff --git a/job-dsl-plugin/src/main/hbs/root.hbs b/job-dsl-plugin/src/main/hbs/root.hbs index aaece01c4..6e776ad80 100644 --- a/job-dsl-plugin/src/main/hbs/root.hbs +++ b/job-dsl-plugin/src/main/hbs/root.hbs @@ -17,6 +17,51 @@
  • GitHub
  • Playground
  • + + diff --git a/job-dsl-plugin/src/main/js/components/App.js b/job-dsl-plugin/src/main/js/components/App.js index d9b4eaa96..1926eafaf 100644 --- a/job-dsl-plugin/src/main/js/components/App.js +++ b/job-dsl-plugin/src/main/js/components/App.js @@ -45,8 +45,16 @@ import TreeView from "../views/TreeView"; $('.loading-outer').addClass('loading'); this.loadConfig().then(this.loadUpdateCenter.bind(this)).then(this.loadSelectedDsl.bind(this)).then(function() { Backbone.history.start({pushState: false}); + if (!this.config.embedded) { + $('.version-select').show() + } }.bind(this)); + $('.version-select').change(function() { + this.loadSelectedDsl().then(function() { + Backbone.history.loadUrl(Backbone.history.getHash()); + }); + }.bind(this)); $('.toggle-plugins').click(function(e) { if ($('.plugins-wrapper').is(':visible')) { this.layout.hide('east'); @@ -93,7 +101,7 @@ import TreeView from "../views/TreeView"; }, loadSelectedDsl: function() { - var url = this.config.embedded ? '../../../job-dsl-api-viewer/data' : 'dsl.json'; + var url = this.config.embedded ? '../../../job-dsl-api-viewer/data' : $('.version-select').val(); return this.dslLoader.fetch(url).then(this.onDslFetchComplete.bind(this), this.onDslFetchFailure.bind(this)); }, diff --git a/job-dsl-plugin/src/main/less/main.less b/job-dsl-plugin/src/main/less/main.less index b98c7b878..39eefbd5b 100644 --- a/job-dsl-plugin/src/main/less/main.less +++ b/job-dsl-plugin/src/main/less/main.less @@ -166,6 +166,12 @@ } } } + .form-control.version-select { + width: auto; + float: right; + margin-top: 8px; + display: none; + } } .plugins { diff --git a/job-dsl-plugin/webpack.dev.js b/job-dsl-plugin/webpack.dev.js index 1b393b552..9558ad5bf 100644 --- a/job-dsl-plugin/webpack.dev.js +++ b/job-dsl-plugin/webpack.dev.js @@ -11,9 +11,9 @@ module.exports = merge(common, { plugins: [ new CopyPlugin({ patterns: [ - { from: "../job-dsl-core/target/classes/javaposse/jobdsl/dsl/dsl.json" }, { from: "src/main/json/development/config.json" }, { from: "target/update-center.json" }, + { from: "target/versions/*.json", to: "[name][ext]" }, ], }), ],