From cbb94c128e7cfc91ce836ac7dee3993d8ef37937 Mon Sep 17 00:00:00 2001 From: Baptiste Mathus Date: Mon, 29 Oct 2018 21:46:07 +0100 Subject: [PATCH] Add footer with current Update Level --- .../EvergreenUpdateLevelPageDecorator.java | 48 +++++++++++++++++++ .../footer.jelly | 4 ++ ...EvergreenUpdateLevelPageDecoratorTest.java | 17 +++++++ .../jenkins/plugins/evergreen/manifest.json | 1 + 4 files changed, 70 insertions(+) create mode 100644 src/main/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator.java create mode 100644 src/main/resources/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator/footer.jelly create mode 100644 src/test/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecoratorTest.java create mode 100644 src/test/resources/io/jenkins/plugins/evergreen/manifest.json diff --git a/src/main/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator.java b/src/main/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator.java new file mode 100644 index 0000000..4be34ec --- /dev/null +++ b/src/main/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator.java @@ -0,0 +1,48 @@ +package io.jenkins.plugins.evergreen; + +import com.google.common.annotations.VisibleForTesting; +import hudson.Extension; +import hudson.model.PageDecorator; +import net.sf.json.JSONException; +import net.sf.json.JSONObject; +import net.sf.json.groovy.JsonSlurper; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Logger; + + +@Extension +public class EvergreenUpdateLevelPageDecorator extends PageDecorator { + + private static final Logger LOGGER = Logger.getLogger(EvergreenUpdateLevelPageDecorator.class.getName()); + private File manifest; + + @VisibleForTesting + EvergreenUpdateLevelPageDecorator(File manifestFilePath) { + this.manifest = manifestFilePath; + } + + public EvergreenUpdateLevelPageDecorator() { + final String evergreenData = System.getenv("EVERGREEN_DATA"); + manifest = new File(evergreenData, "updates.json"); + } + + public String getUpdateLevel() { + String updateLevel = "N/A"; + + if (manifest.exists()) { + try { + final JSONObject parsedJson = (JSONObject) new JsonSlurper().parse(manifest); + updateLevel = "" + ((JSONObject) parsedJson.get("meta")).get("level"); + } catch (IOException e) { + updateLevel = "Unable to parse: " + e.getMessage(); + } catch (JSONException e) { + updateLevel = "Corrupted manifest: " + e.getMessage(); + } + } else { + LOGGER.warning("No Evergreen manifest found!"); + } + return updateLevel; + } +} diff --git a/src/main/resources/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator/footer.jelly b/src/main/resources/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator/footer.jelly new file mode 100644 index 0000000..9ccd056 --- /dev/null +++ b/src/main/resources/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecorator/footer.jelly @@ -0,0 +1,4 @@ + + + Evergreen UL- + diff --git a/src/test/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecoratorTest.java b/src/test/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecoratorTest.java new file mode 100644 index 0000000..4cd4ce5 --- /dev/null +++ b/src/test/java/io/jenkins/plugins/evergreen/EvergreenUpdateLevelPageDecoratorTest.java @@ -0,0 +1,17 @@ +package io.jenkins.plugins.evergreen; + +import org.junit.Test; + +import java.io.File; + +import static org.assertj.core.api.Assertions.assertThat; + +public class EvergreenUpdateLevelPageDecoratorTest { + @Test + public void getUpdateLevel() { + + final File manifestFile = new File(getClass().getResource("manifest.json").getPath()); + assertThat(manifestFile).exists(); + assertThat(new EvergreenUpdateLevelPageDecorator(manifestFile).getUpdateLevel()).isEqualTo("2"); + } +} \ No newline at end of file diff --git a/src/test/resources/io/jenkins/plugins/evergreen/manifest.json b/src/test/resources/io/jenkins/plugins/evergreen/manifest.json new file mode 100644 index 0000000..16e7811 --- /dev/null +++ b/src/test/resources/io/jenkins/plugins/evergreen/manifest.json @@ -0,0 +1 @@ +{"meta":{"channel":"general","level":2},"core":{"url":"http://mirrors.jenkins.io/war/2.149/jenkins.war","checksum":{"type":"sha256","signature":"9283a72b5560802134c52ea2c46608cfb9d2f6cdae7c5dd2f08da09fc7ae4eca"}},"plugins":{"updates":[{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/ui/ace-editor/1.1/ace-editor-1.1.hpi","artifactId":"ace-editor","checksum":{"type":"sha256","signature":"abc97028893c8a71581a5f559ea48e8e1f1a65164faee96dabfed9e95e9abad2"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/apache-httpcomponents-client-4-api/4.5.5-3.0/apache-httpcomponents-client-4-api-4.5.5-3.0.hpi","artifactId":"apache-httpcomponents-client-4-api","checksum":{"type":"sha256","signature":"5a70481070d87aa977159450038c54f77ad3e11e8c97e3e915c4e0ac668bdde7"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/authentication-tokens/1.3/authentication-tokens-1.3.hpi","artifactId":"authentication-tokens","checksum":{"type":"sha256","signature":"f05736bc7da0df3bba5ceb4d893089706812ced3134adb2edc9ae341467f1ae3"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean/1.9.0/blueocean-1.9.0.hpi","artifactId":"blueocean","checksum":{"type":"sha256","signature":"98f96932ada78401ca3d667b7c59768f7a82d7d739954765b9922a2cbe8e04c4"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/blueocean-autofavorite/1.2.2/blueocean-autofavorite-1.2.2.hpi","artifactId":"blueocean-autofavorite","checksum":{"type":"sha256","signature":"fb0daef66308b1c3ab03ba07bb70ce03d880f46e79650f7f32d8f657d4585700"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-bitbucket-pipeline/1.9.0/blueocean-bitbucket-pipeline-1.9.0.hpi","artifactId":"blueocean-bitbucket-pipeline","checksum":{"type":"sha256","signature":"3f09f3f3e0ee17ad038108b6e4ede42e61293e3a5aad365edb52063f237f03e0"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-commons/1.9.0/blueocean-commons-1.9.0.hpi","artifactId":"blueocean-commons","checksum":{"type":"sha256","signature":"bcf21de68f09a5cd0556158968b998b4be4b1054cac6198cc5d0b28761c664e7"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-config/1.9.0/blueocean-config-1.9.0.hpi","artifactId":"blueocean-config","checksum":{"type":"sha256","signature":"977efc526b285529ff962024bf9432e6e0fe677a82282414e0f11872dae77955"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-core-js/1.9.0/blueocean-core-js-1.9.0.hpi","artifactId":"blueocean-core-js","checksum":{"type":"sha256","signature":"10f4ea4488e194623acf590624dde06cd5591bf166e7c9b05f15dd1b3de8bf86"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-dashboard/1.9.0/blueocean-dashboard-1.9.0.hpi","artifactId":"blueocean-dashboard","checksum":{"type":"sha256","signature":"8ad50ac3e523556092c454d7fd1b79db4a2b32dd793bac370819c4382462169a"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/blueocean-display-url/2.2.0/blueocean-display-url-2.2.0.hpi","artifactId":"blueocean-display-url","checksum":{"type":"sha256","signature":"4392cff3f4d75c678abadb7aad040b782be7ea61c5c87bdd5e3a62fa633e10ca"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-events/1.9.0/blueocean-events-1.9.0.hpi","artifactId":"blueocean-events","checksum":{"type":"sha256","signature":"97dc22f6c7fc0f19abbf698d6161740214ffec8a70b176d61fb61b666eb1a2ad"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-git-pipeline/1.9.0/blueocean-git-pipeline-1.9.0.hpi","artifactId":"blueocean-git-pipeline","checksum":{"type":"sha256","signature":"83e68a57b433aaa6bb9935c920ef1b17271faba1ec86f77bcf529c776184e7d7"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-github-pipeline/1.9.0/blueocean-github-pipeline-1.9.0.hpi","artifactId":"blueocean-github-pipeline","checksum":{"type":"sha256","signature":"13e7cfb9a7331300cdf64bccace2957cac370f95923619c8837439b4d29f1b49"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-i18n/1.9.0/blueocean-i18n-1.9.0.hpi","artifactId":"blueocean-i18n","checksum":{"type":"sha256","signature":"98f8cfe2493a928b02522ebd1bf4e17491b76e52b9ea412d79949ba7591f5daf"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-jira/1.9.0/blueocean-jira-1.9.0.hpi","artifactId":"blueocean-jira","checksum":{"type":"sha256","signature":"cf3da9d3213ae610d04d5b14d850869e6cf146e1a52bb65e2ee8b280760fdd71"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-jwt/1.9.0/blueocean-jwt-1.9.0.hpi","artifactId":"blueocean-jwt","checksum":{"type":"sha256","signature":"63dae1652d8dcebd14b39c2443f2f39d180b29705f3aa86735b2a11777da234f"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-personalization/1.9.0/blueocean-personalization-1.9.0.hpi","artifactId":"blueocean-personalization","checksum":{"type":"sha256","signature":"c4183b91e01b7d87a6191042d9141a71b2806f299c9ddcc960007e386b700031"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-pipeline-api-impl/1.9.0/blueocean-pipeline-api-impl-1.9.0.hpi","artifactId":"blueocean-pipeline-api-impl","checksum":{"type":"sha256","signature":"ddb3f226e9457bdddd8b9d3e5378eb998985c28724df6d3350e758279095bc63"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-pipeline-editor/1.9.0/blueocean-pipeline-editor-1.9.0.hpi","artifactId":"blueocean-pipeline-editor","checksum":{"type":"sha256","signature":"23c42019652db860a160fc6a7e1426035426f5d9807062174492658246c8f213"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-pipeline-scm-api/1.9.0/blueocean-pipeline-scm-api-1.9.0.hpi","artifactId":"blueocean-pipeline-scm-api","checksum":{"type":"sha256","signature":"6434da1525111a3832b0f7762c3ffb515c547db3f85a947237db3f7ea92df704"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-rest/1.9.0/blueocean-rest-1.9.0.hpi","artifactId":"blueocean-rest","checksum":{"type":"sha256","signature":"122c0573d93c3f9b35cc928953753971185730c5cdd14482a1d5d2b915176717"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-rest-impl/1.9.0/blueocean-rest-impl-1.9.0.hpi","artifactId":"blueocean-rest-impl","checksum":{"type":"sha256","signature":"7d1facca5e8c56ca981afcda90c162c26e4cb6ca5e77e46db2eb906cfa560111"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/blueocean-web/1.9.0/blueocean-web-1.9.0.hpi","artifactId":"blueocean-web","checksum":{"type":"sha256","signature":"6808ec6cb19c023fff39e16ec7d67e350a665560b1dbc10edc6cf4a3de3c6099"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/bouncycastle-api/2.17/bouncycastle-api-2.17.hpi","artifactId":"bouncycastle-api","checksum":{"type":"sha256","signature":"bf71f88eda34bd304ded9ac374bbcdaeb0dccb8618dd94bdfa2af486d7971f21"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/branch-api/2.0.20/branch-api-2.0.20.hpi","artifactId":"branch-api","checksum":{"type":"sha256","signature":"7c8d4890b51257d7a52da2307e98a4dbb11ef64fb353e3c0c4cb7f4579bc5e9e"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/buildtriggerbadge/2.9/buildtriggerbadge-2.9.hpi","artifactId":"buildtriggerbadge","checksum":{"type":"sha256","signature":"d7624bbfeae442c467ef9faeaa6f29e11d5f3b23774e500af7ccddbb9d34fc36"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/cloudbees-bitbucket-branch-source/2.2.12/cloudbees-bitbucket-branch-source-2.2.12.hpi","artifactId":"cloudbees-bitbucket-branch-source","checksum":{"type":"sha256","signature":"8c26f832c5559d5ba4a17489fa40b70f0645232a9cf81ee075f83b71a27349a4"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/cloudbees-folder/6.6/cloudbees-folder-6.6.hpi","artifactId":"cloudbees-folder","checksum":{"type":"sha256","signature":"04de2128d98dae2162ac5c7b3d347a83b49091348c4621f18f200817d70659e1"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/config-file-provider/3.3/config-file-provider-3.3.hpi","artifactId":"config-file-provider","checksum":{"type":"sha256","signature":"d572ffc67fcb8687867fd81a0be435d3e335a43adc076ad2e94f9c466129da5b"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/configuration-as-code/1.2/configuration-as-code-1.2.hpi","artifactId":"configuration-as-code","checksum":{"type":"sha256","signature":"b1eb67aa9793a680c3774c709fbe5f19c79af09a415da24105addbf78869aa4d"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/credentials/2.1.18/credentials-2.1.18.hpi","artifactId":"credentials","checksum":{"type":"sha256","signature":"50a63aa0633dc39a51a979d8952de1b6ac424f76404d33330e66935c8180fcce"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/credentials-binding/1.16/credentials-binding-1.16.hpi","artifactId":"credentials-binding","checksum":{"type":"sha256","signature":"14ba179ac02923b78218340b55b8c6203e1664c5e407f4021a986653ba9564e2"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/display-url-api/2.2.0/display-url-api-2.2.0.hpi","artifactId":"display-url-api","checksum":{"type":"sha256","signature":"f9a7acb09a0c649d2cfe25ed52d6a974e664f3a00e76d9dccf24f845d20bb754"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/docker-commons/1.13/docker-commons-1.13.hpi","artifactId":"docker-commons","checksum":{"type":"sha256","signature":"33039e977d93adf6f57a8938d2b9d3725464f7dedcf248feb754434d4fa0104a"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/docker-workflow/1.17/docker-workflow-1.17.hpi","artifactId":"docker-workflow","checksum":{"type":"sha256","signature":"2e661e881dbf700cae09bf97514e9ad13853e0acbbdd366c14b1584e288f5f04"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/durable-task/1.26/durable-task-1.26.hpi","artifactId":"durable-task","checksum":{"type":"sha256","signature":"2e492f353534664dae6234f0903babc469f5c8bf80fa2d65bbe758365d920ce6"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/plugins/essentials/0.5.1/essentials-0.5.1.hpi","artifactId":"essentials","checksum":{"type":"sha256","signature":"63610d131fad3eb6f3cca6b7f21d55833aa7990b82bf087afc6071af9f5d31f3"}},{"url":"https://repo.jenkins-ci.org/incrementals/io/jenkins/plugins/evergreen/1.0-rc59.be213f9c9f7b/evergreen-1.0-rc59.be213f9c9f7b.hpi","artifactId":"evergreen","checksum":{"type":"sha256","signature":"4be8134840738d867555ffdfdf156d8db6be6f29d7443e80130227975aca4e64"}},{"url":"https://repo.jenkins-ci.org/releases/org/jvnet/hudson/plugins/favorite/2.3.2/favorite-2.3.2.hpi","artifactId":"favorite","checksum":{"type":"sha256","signature":"d51563ddf4541e20fb568a81d2b64632b940eaa0338d01e41c8ff51fec35c1b3"}},{"url":"https://repo.jenkins-ci.org/incrementals/org/jenkins-ci/plugins/git/4.0.0-rc2892.70634f157021/git-4.0.0-rc2892.70634f157021.hpi","artifactId":"git","checksum":{"type":"sha256","signature":"f0def98957cd14d69e8fc3e6debed91311f784ab7c91c79323fbca0d8e80de84"}},{"url":"https://repo.jenkins-ci.org/incrementals/org/jenkins-ci/plugins/git-client/3.0.0-beta6-rc1776.912790760394/git-client-3.0.0-beta6-rc1776.912790760394.hpi","artifactId":"git-client","checksum":{"type":"sha256","signature":"352f6608d97be2ed0fbddd1778c0dc9b094a5cc623a0abb28247fb894ca41f6b"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/git-server/1.7/git-server-1.7.hpi","artifactId":"git-server","checksum":{"type":"sha256","signature":"1a5dc733495681a6d1a6adce07e614e50f4e5d22580e6fafbd5ca260aa4367fc"}},{"url":"https://repo.jenkins-ci.org/releases/com/coravy/hudson/plugins/github/github/1.29.3/github-1.29.3.hpi","artifactId":"github","checksum":{"type":"sha256","signature":"bb07d5dee0ae289c21aa47d32f5ccd9d328863905b245d5f9140b40e43d0d0c3"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/github-api/1.92/github-api-1.92.hpi","artifactId":"github-api","checksum":{"type":"sha256","signature":"1508aa442b40baef777b7a48b8c7c7b0c44139cf843c11c7a2947d4a9682a7e2"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/github-branch-source/2.4.1/github-branch-source-2.4.1.hpi","artifactId":"github-branch-source","checksum":{"type":"sha256","signature":"2cdef15d605cb8cee45360c003c53d0e217584f40d0cd3ccd70711640568ca70"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/ui/handlebars/1.1.1/handlebars-1.1.1.hpi","artifactId":"handlebars","checksum":{"type":"sha256","signature":"bc5cc7b3eca17ba6cec0a8def94f3aa78ad7a19387a19aa3a56f857a18966afa"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/handy-uri-templates-2-api/2.1.6-1.0/handy-uri-templates-2-api-2.1.6-1.0.hpi","artifactId":"handy-uri-templates-2-api","checksum":{"type":"sha256","signature":"09446d387f5e87a846469334579292f3047b3d4cabf3dd05cd057a2f34b39814"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/htmlpublisher/1.17/htmlpublisher-1.17.hpi","artifactId":"htmlpublisher","checksum":{"type":"sha256","signature":"eb441f7deddf22b7a38a4e5dc070b74faeea6f7c7b93397467b17fbf4f71c30a"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/icon-shim/icon-shim/2.0.3/icon-shim-2.0.3.hpi","artifactId":"icon-shim","checksum":{"type":"sha256","signature":"8ab2f1617b68561a7f0254fb27578840aa9b7e158d0bd8c51628dbc64e8ab0ca"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/jackson2-api/2.9.7.0-beta/jackson2-api-2.9.7.0-beta.hpi","artifactId":"jackson2-api","checksum":{"type":"sha256","signature":"fcb92626a2ea21f880d611f47953e621c00d8665c4043279677512dab56375a7"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/jdk-tool/1.1/jdk-tool-1.1.hpi","artifactId":"jdk-tool","checksum":{"type":"sha256","signature":"87ffa354eb3c3eba1185d6086abdd32d60e22fabdd98dfb52cbeba7b1a1a3d4c"}},{"url":"https://repo.jenkins-ci.org/releases/io/jenkins/blueocean/jenkins-design-language/1.9.0/jenkins-design-language-1.9.0.hpi","artifactId":"jenkins-design-language","checksum":{"type":"sha256","signature":"32423ac45c7bb65ad464c5581b65f1fc0ad61fde197282055bef3c47202d8b55"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/jira/3.0.4/jira-3.0.4.hpi","artifactId":"jira","checksum":{"type":"sha256","signature":"10150f0e38b61191fbf0dd3d6f0ad17deb64026e55223fbc275d5d72c894a483"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/ui/jquery-detached/1.2.1/jquery-detached-1.2.1.hpi","artifactId":"jquery-detached","checksum":{"type":"sha256","signature":"a05273cd20c11557ffcb7dcb75150f21d35dc8be28355548b831c2960d7f11c0"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/jsch/0.1.54.2/jsch-0.1.54.2.hpi","artifactId":"jsch","checksum":{"type":"sha256","signature":"f2988fb4d8fdf1dff395b4cda966a5d542eb25afa5469c144aeb9031f4b28e2f"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/junit/1.26.1/junit-1.26.1.hpi","artifactId":"junit","checksum":{"type":"sha256","signature":"55d03fb3cdbb21c32d52b9b938ed3e807e7caccc2b49c507bc417d75e3e8b364"}},{"url":"https://repo.jenkins-ci.org/releases/org/6wind/jenkins/lockable-resources/2.3/lockable-resources-2.3.hpi","artifactId":"lockable-resources","checksum":{"type":"sha256","signature":"17a3693cb31cd59a480e739e86eb736415038ee70c98a71820708f17b6d012a4"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/mailer/1.22/mailer-1.22.hpi","artifactId":"mailer","checksum":{"type":"sha256","signature":"216879f833ba2f5f1a9d4af1bc19902d14f3f065a93ad6fd9a71a4789b767b21"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/matrix-project/1.13/matrix-project-1.13.hpi","artifactId":"matrix-project","checksum":{"type":"sha256","signature":"eb5d98e05520318fa348a8f41bf033c606849ea1a2e3301c217c5a1c3228af13"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/mercurial/2.4/mercurial-2.4.hpi","artifactId":"mercurial","checksum":{"type":"sha256","signature":"a45f67b963329eae13eb454e2d5b3f9859af76decaf1ebdeaa4338fb6a820ef8"}},{"url":"https://repo.jenkins-ci.org/incrementals/org/jenkins-ci/plugins/metrics/4.0.2.3-rc229.d9b0eb3c576d/metrics-4.0.2.3-rc229.d9b0eb3c576d.hpi","artifactId":"metrics","checksum":{"type":"sha256","signature":"1c1b95da5a0131a1af73ca81d90e4135ee3d05919a7382cc0c4f8195c9133aba"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/ui/momentjs/1.1.1/momentjs-1.1.1.hpi","artifactId":"momentjs","checksum":{"type":"sha256","signature":"ca3c2d264cff55f71e900dc7de1f13c0bfbffdb9b3419b854dce175bcb8a4848"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-build-step/2.7/pipeline-build-step-2.7.hpi","artifactId":"pipeline-build-step","checksum":{"type":"sha256","signature":"d02fd27988328435c0bc4211e4e45fee88b28b5d633c3bbce6cb4dca9480a9cb"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-graph-analysis/1.7/pipeline-graph-analysis-1.7.hpi","artifactId":"pipeline-graph-analysis","checksum":{"type":"sha256","signature":"9934e518f55c0bc8be27775622b0f3bebef354550b19931ffa45dfb51a4e381c"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-input-step/2.8/pipeline-input-step-2.8.hpi","artifactId":"pipeline-input-step","checksum":{"type":"sha256","signature":"8e9fa1654ec0c0ec726c894b079828737b8ce6d9ea3d05cd4378c37acc3235db"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-milestone-step/1.3.1/pipeline-milestone-step-1.3.1.hpi","artifactId":"pipeline-milestone-step","checksum":{"type":"sha256","signature":"d3a26629b656821c60a14fe403ab8afc50f084e338406dbc27e2b6b403f7cb20"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-model-api/1.3.2/pipeline-model-api-1.3.2.hpi","artifactId":"pipeline-model-api","checksum":{"type":"sha256","signature":"7cf8a34e6c37805e0353a3b85e21c24479bf72d2bc82e9d72dd6777f2358deba"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-model-declarative-agent/1.1.1/pipeline-model-declarative-agent-1.1.1.hpi","artifactId":"pipeline-model-declarative-agent","checksum":{"type":"sha256","signature":"d5540c3973bf5f568910f93b3a002c413148b9d3dd4211ce5faf4a2a1214d4ef"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-model-definition/1.3.2/pipeline-model-definition-1.3.2.hpi","artifactId":"pipeline-model-definition","checksum":{"type":"sha256","signature":"b4f237c550520fcec43f7d4733de200eef386ef1492e0f43df74a15388d024e7"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-model-extensions/1.3.2/pipeline-model-extensions-1.3.2.hpi","artifactId":"pipeline-model-extensions","checksum":{"type":"sha256","signature":"d5669f3a98f42526c3abc78813cbdd856c25bc76ab2b9cf360b8fde15bf53053"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-stage-view/pipeline-rest-api/2.10/pipeline-rest-api-2.10.hpi","artifactId":"pipeline-rest-api","checksum":{"type":"sha256","signature":"39ff14bddd40519100c7ba4b31b5c5aa067561ed5b4f857118f0ec915c17e8d4"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-stage-step/2.3/pipeline-stage-step-2.3.hpi","artifactId":"pipeline-stage-step","checksum":{"type":"sha256","signature":"f6caab90742664289b0cb57b27755c3b8b963c3764894129fb954efbf796d310"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkinsci/plugins/pipeline-stage-tags-metadata/1.3.2/pipeline-stage-tags-metadata-1.3.2.hpi","artifactId":"pipeline-stage-tags-metadata","checksum":{"type":"sha256","signature":"1d02c829b497c34ac0f40435f5fdb4421319ed8a3ef11a89070bde329bb6d973"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pipeline-stage-view/pipeline-stage-view/2.10/pipeline-stage-view-2.10.hpi","artifactId":"pipeline-stage-view","checksum":{"type":"sha256","signature":"bb551d1e9e421868a4e8b58a0159b54e3660fdfc3b7f8178b92dea3d029e0f95"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/plain-credentials/1.4/plain-credentials-1.4.hpi","artifactId":"plain-credentials","checksum":{"type":"sha256","signature":"4f1834f99ffd7f2a7db1972fe46ee42d06af819b27297193ac89eb33a14292d8"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/pubsub-light/1.12/pubsub-light-1.12.hpi","artifactId":"pubsub-light","checksum":{"type":"sha256","signature":"666cbc579d82849bef8d0396a57335c9994222e8b0ba52f07be76dab9fb56c40"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/scm-api/2.2.8/scm-api-2.2.8.hpi","artifactId":"scm-api","checksum":{"type":"sha256","signature":"fc7276e65dfb96b7a9d915bd04f9717148111994d64eea882f83a963902e0c91"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/script-security/1.48/script-security-1.48.hpi","artifactId":"script-security","checksum":{"type":"sha256","signature":"ee0f7accb88afd125d631e4f27c1843f40b3340a2e60d1184a4717065103231e"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/sse-gateway/1.16/sse-gateway-1.16.hpi","artifactId":"sse-gateway","checksum":{"type":"sha256","signature":"6252df0fdcab3f1ef1ae5cf707f9d367e3071e5f5e2e6e1a98004f535b2fe076"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/ssh-agent/1.17/ssh-agent-1.17.hpi","artifactId":"ssh-agent","checksum":{"type":"sha256","signature":"196a6bc5c8e41a57d9d1f2db0b5fce16b2544143409e85f1b83455ad94728a50"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/ssh-credentials/1.14/ssh-credentials-1.14.hpi","artifactId":"ssh-credentials","checksum":{"type":"sha256","signature":"f5fc11e306cd0fe0abb25ffcf40014d6bc3c31318e9d2d3309e965320dfdde34"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/structs/1.17/structs-1.17.hpi","artifactId":"structs","checksum":{"type":"sha256","signature":"d74800569fde448a50805cd103b38f48d55875717ecdffcf26bb81d209126236"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/token-macro/2.5/token-macro-2.5.hpi","artifactId":"token-macro","checksum":{"type":"sha256","signature":"c6575d030ef6e0b416dad38094355eed30e860ade38759ff0a76e2f588350e6b"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/variant/1.1/variant-1.1.hpi","artifactId":"variant","checksum":{"type":"sha256","signature":"971893fb05da213631b8ea977a32a5d4953f1cb7ab6fbdec9020d503550275ff"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-aggregator/2.6/workflow-aggregator-2.6.hpi","artifactId":"workflow-aggregator","checksum":{"type":"sha256","signature":"bdcc467277e6e589853ef2d1dab9ca8cf6872017a306b6bf6223b9a90be24bf6"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-api/2.31/workflow-api-2.31.hpi","artifactId":"workflow-api","checksum":{"type":"sha256","signature":"725eb038151ec50e9bb47d9fa6eeda907864740f3f51ffd6d8e6514415b19867"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-basic-steps/2.11/workflow-basic-steps-2.11.hpi","artifactId":"workflow-basic-steps","checksum":{"type":"sha256","signature":"37d44d9591d39c06db0a25d17cd52b56b241e1a26a9d0409e3deadc55402b9a0"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-cps/2.59/workflow-cps-2.59.hpi","artifactId":"workflow-cps","checksum":{"type":"sha256","signature":"a70512ad02a09c2578f80259b39c8c0544efe576d7ce94e0180c715922ac3291"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-cps-global-lib/2.12/workflow-cps-global-lib-2.12.hpi","artifactId":"workflow-cps-global-lib","checksum":{"type":"sha256","signature":"ca413354864f316825ad737274509c310af217b0dd8b926a5e44eaa183002dd6"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-durable-task-step/2.22/workflow-durable-task-step-2.22.hpi","artifactId":"workflow-durable-task-step","checksum":{"type":"sha256","signature":"8a181169c2106d61898c01b1b8ebcbd4b183a6276004c869667fb6bf2be1364e"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-job/2.26-beta-1/workflow-job-2.26-beta-1.hpi","artifactId":"workflow-job","checksum":{"type":"sha256","signature":"0c7813f425a5e36e68a4c0bb72c6a3a116a3437f07bb6e5063a5797a6f9c9b60"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-multibranch/2.20/workflow-multibranch-2.20.hpi","artifactId":"workflow-multibranch","checksum":{"type":"sha256","signature":"c32aee40afd0684fd64dc4b13ea292667e26a33552c29fe8a02f72d57c6d1e1a"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-scm-step/2.7/workflow-scm-step-2.7.hpi","artifactId":"workflow-scm-step","checksum":{"type":"sha256","signature":"97a2d8e75b1216e4f9da9f9e988f1086b44e7276abd8c3132de709f7d5391a2d"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-step-api/2.16/workflow-step-api-2.16.hpi","artifactId":"workflow-step-api","checksum":{"type":"sha256","signature":"d642a4099d49be3cac71270e52565a367348c7ed45cde4d9e32ed0624c78759f"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/workflow/workflow-support/2.21/workflow-support-2.21.hpi","artifactId":"workflow-support","checksum":{"type":"sha256","signature":"c18cdba47c3f6a4ebae732df51e6e195ff74c1dddde5986395d0af11d4892f9f"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/docker-java-api/3.0.14/docker-java-api-3.0.14.hpi","artifactId":"docker-java-api","checksum":{"type":"sha256","signature":"14a48f9092863c7680c939c3163d9539e3b66f8e277fbe4c0e26a68cc60c4ba0"}},{"url":"https://repo.jenkins-ci.org/incrementals/io/jenkins/docker/docker-plugin/1.1.6-rc865.abf142391212/docker-plugin-1.1.6-rc865.abf142391212.hpi","artifactId":"docker-plugin","checksum":{"type":"sha256","signature":"0d4e1f98dded7d9850603c2d7f9951886816ab7f569bd2ca5a97af7cd7ae812e"}},{"url":"https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/ssh-slaves/1.22/ssh-slaves-1.22.hpi","artifactId":"ssh-slaves","checksum":{"type":"sha256","signature":"4a8f37338cf1740fcff0fbd7474d7f9532e954ccc276eb89f11cf91c2ac273e1"}}],"deletes":[]}} \ No newline at end of file