diff --git a/.gitignore b/.gitignore index b1ceda130..eaf9fe99b 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ docs/.jekyll-metadata docs/vendor docs/jacoco docs/apidocs +docs/sboms diff --git a/README.md b/README.md index 611567595..3988b8eae 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@
Full Docs · +SBOMReport Bug · Request Feature diff --git a/docs/README.md b/docs/README.md index ada36d672..78c5dbd16 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3801,6 +3801,14 @@ root --- +# SBOM + +Spectrum's Software Bill of Materials is available here: + +{% include sboms.html %} + +--- + # Bugs Report and Feature Requests Found a bug? Want to request a new feature? Just follow these links and provide the requested details: diff --git a/docs/_config.yml b/docs/_config.yml index 4a51663f4..2c75d089e 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -2,3 +2,4 @@ theme: jekyll-theme-modernist repository_url: https://github.com/giulong/spectrum/blob/main docs_url: https://giulong.github.io/spectrum json_schemas_endpoint: json-schemas/ +sboms_endpoint: sboms/ diff --git a/docs/_includes/sboms.html b/docs/_includes/sboms.html new file mode 100644 index 000000000..65c789a67 --- /dev/null +++ b/docs/_includes/sboms.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + +
VersionFull PathCopy URL
+ +
+ Older Versions + + + + + + + + + + +
VersionFull PathCopy URL
+
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html index 7a858dcc1..00188b4ef 100644 --- a/docs/_layouts/default.html +++ b/docs/_layouts/default.html @@ -54,5 +54,6 @@ + diff --git a/docs/assets/scripts/sboms.js b/docs/assets/scripts/sboms.js new file mode 100644 index 000000000..a1b062d00 --- /dev/null +++ b/docs/assets/scripts/sboms.js @@ -0,0 +1,79 @@ +--- +--- +const copySbomCodeHtml = ` + + +`; + +(async () => { + fetch('https://api.github.com/repos/giulong/spectrum/contents/docs/sboms') + .then(response => response.json()) + .then(json => json.sort(compareSemanticVersions)) + .then(json => { + const latestJson = json.pop(); + const rows = json + .map(sbom => { + const xmlUrl = "{{ site.docs_url }}/{{ site.sboms_endpoint }}" + sbom.name + "/sbom.xml"; + const xmlVersionColumn = '' + sbom.name + ''; + const xmlFullPathColumn = '' + xmlUrl + ''; + + const jsonUrl = "{{ site.docs_url }}/{{ site.sboms_endpoint }}" + sbom.name + "/sbom.json"; + const jsonVersionColumn = '' + sbom.name + ''; + const jsonFullPathColumn = '' + jsonUrl + ''; + + const copyCodeColumn = '' + copySbomCodeHtml + ''; + + return xmlVersionColumn + xmlFullPathColumn + copyCodeColumn + '' + jsonVersionColumn + jsonFullPathColumn + copyCodeColumn; + }) + .reverse() + .join(''); + + const latestXmlUrl = "{{ site.docs_url }}/{{ site.sboms_endpoint }}" + latestJson.name + "/sbom.xml"; + document.getElementById('latest-sbom-xml-version').innerHTML = '' + latestJson.name + ''; + document.getElementById('latest-sbom-xml-path').innerText = latestXmlUrl; + document.getElementById('latest-sbom-xml-copy-header').innerHTML = copySbomCodeHtml; + + const latestJsonUrl = "{{ site.docs_url }}/{{ site.sboms_endpoint }}" + latestJson.name + "/sbom.json"; + document.getElementById('latest-sbom-json-version').innerHTML = '' + latestJson.name + ''; + document.getElementById('latest-sbom-json-path').innerText = latestJsonUrl; + document.getElementById('latest-sbom-json-copy-header').innerHTML = copySbomCodeHtml; + + document.getElementById('sboms-body').innerHTML = '' + rows + ''; + }) + .catch(error => { + document.getElementById('latest-sbom-xml-version').innerText = 'N/A'; + document.getElementById('latest-sbom-xml-path').innerText = '{{ site.docs_url }}/{{ site.sboms_endpoint }}/sbom.xml'; + document.getElementById('latest-sbom-xml-copy-header').innerHTML = copySbomCodeHtml; + + document.getElementById('latest-sbom-json-version').innerText = 'N/A'; + document.getElementById('latest-sbom-json-path').innerText = '{{ site.docs_url }}/{{ site.sboms_endpoint }}/sbom.json'; + document.getElementById('latest-sbom-json-copy-header').innerHTML = copySbomCodeHtml; + }) + .finally(() => { + const sbomHeaders = document.querySelectorAll('.sbom-copy-header'); + const sbomButtons = document.querySelectorAll('.sbom-copy-button'); + sbomButtons.forEach((copyButton, index) => { + try { + const url = sbomHeaders[index].parentElement.previousElementSibling.textContent; + copyButton.addEventListener('click', () => { + window.navigator.clipboard.writeText(url); + const copyText = copyButton.querySelector('.sbom-copy-text'); + const copyIcon = copyButton.querySelector('.copy-icon'); + + copyText.style.display = 'inline'; + copyIcon.src = 'assets/images/check.png'; + + setTimeout(() => { + copyText.style.display = 'none'; + copyIcon.src = 'assets/images/copy.png'; + }, 2000); + }); + } catch (error) { + console.error(error); + } + }); + }); +})() diff --git a/pom.xml b/pom.xml index 0573d3746..2a5bd7e11 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ 1.29.3 UTF-8 UTF-8 - docs + ${maven.multiModuleProjectDirectory}/docs ${docs.folder}/jacoco src/main/resources src/test/resources @@ -46,13 +46,41 @@ true true - 6.0.3 - 5.21.0 - 2.21.0 - 8.12.6 - 5.0.0 - 2.0.17 - 4.40.0 + 6.0.3 + 5.21.0 + 3.0 + 1.2.1 + 2.21.1 + 8.12.6 + 5.0.0 + 2.0.17 + 4.41.0 + 1.18.42 + 1.0.0 + 10.0.0 + 5.1.2 + 1.5.32 + 2.3.34 + 2.5.2.Final + 1.47.0 + 0.2.5 + 2.5.4 + + 3.5.0 + 3.6.0 + 13.2.0 + 1.44.1 + 3.2.1 + 3.15.0 + 3.4.0 + 3.5.5 + 3.5.5 + 1.5.3 + 3.5.0 + 3.6.2 + 1.7.3 + 5.0.0 + 2.9.1 @@ -140,167 +168,167 @@ org.projectlombok lombok - 1.18.42 + ${dependency.lombok.version} org.jspecify jspecify - 1.0.0 + ${dependency.jspecify.version} org.junit.jupiter junit-jupiter-api - ${junit.version} + ${dependency.junit.version} org.junit.jupiter junit-jupiter-engine - ${junit.version} + ${dependency.junit.version} org.junit.jupiter junit-jupiter-params - ${junit.version} + ${dependency.junit.version} org.junit.platform junit-platform-launcher - ${junit.version} + ${dependency.junit.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${dependency.jackson.version} com.fasterxml.jackson.dataformat jackson-dataformat-yaml - ${jackson.version} + ${dependency.jackson.version} com.fasterxml.jackson.dataformat jackson-dataformat-xml - ${jackson.version} + ${dependency.jackson.version} com.fasterxml.jackson.datatype jackson-datatype-jsr310 - ${jackson.version} + ${dependency.jackson.version} org.seleniumhq.selenium selenium-java - ${selenium.version} + ${dependency.selenium.version} org.seleniumhq.selenium selenium-grid - ${selenium.version} + ${dependency.selenium.version} io.appium java-client - 10.0.0 + ${dependency.appium.version} com.aventstack extentreports - 5.1.2 + ${dependency.extent.version} ch.qos.logback logback-classic - 1.5.32 + ${dependency.logback.version} org.slf4j slf4j-api - ${slf4j.version} + ${dependency.slf4j.version} org.slf4j jul-to-slf4j - ${slf4j.version} + ${dependency.slf4j.version} org.freemarker freemarker - 2.3.34 + ${dependency.freemarker.version} org.mvel mvel2 - 2.5.2.Final + ${dependency.mvel.version} com.slack.api slack-api-client - 1.47.0 + ${dependency.slack.version} org.simplejavamail simple-java-mail - ${simplejavamail.version} + ${dependency.simplejavamail.version} org.simplejavamail authenticated-socks-module - ${simplejavamail.version} + ${dependency.simplejavamail.version} org.jcodec jcodec-javase - 0.2.5 + ${dependency.jcodec.version} net.datafaker datafaker - 2.5.4 + ${dependency.datafaker.version} com.github.victools jsonschema-generator - ${jsonschemagenerator.version} + ${dependency.jsonschemagenerator.version} provided com.github.victools jsonschema-module-jackson - ${jsonschemagenerator.version} + ${dependency.jsonschemagenerator.version} provided org.mockito mockito-junit-jupiter - ${mockito.version} + ${dependency.mockito.version} test org.hamcrest hamcrest - 3.0 + ${dependency.hamcrest.version} test com.github.stefanbirkner system-lambda - 1.2.1 + ${dependency.systemlambda.version} test @@ -330,22 +358,22 @@ org.apache.maven.plugins maven-clean-plugin - 3.5.0 + ${plugin.clean.version} org.apache.maven.plugins maven-checkstyle-plugin - 3.6.0 + ${plugin.checkstyle.version} com.puppycrawl.tools checkstyle - 13.2.0 + ${plugin.puppycrawl.version} com.github.sevntu-checkstyle sevntu-checks - 1.44.1 + ${plugin.sevntu.version} @@ -382,7 +410,7 @@ com.diffplug.spotless spotless-maven-plugin - 3.2.1 + ${plugin.spotless.version} @@ -407,7 +435,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.15.0 + ${plugin.compiler.version} 21 UTF-8 @@ -418,20 +446,25 @@ org.apache.maven.plugins maven-resources-plugin - 3.4.0 + ${plugin.resources.version} UTF-8 + + org.cyclonedx + cyclonedx-maven-plugin + ${plugin.cyclonedx.version} + org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + ${plugin.surefire.version} @{argLine} -Dfile.encoding=UTF-8 - -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar + -javaagent:${settings.localRepository}/org/mockito/mockito-core/${dependency.mockito.version}/mockito-core-${dependency.mockito.version}.jar ${reportsDirectory} true @@ -443,7 +476,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.4 + ${plugin.failsafe.version} -Dfile.encoding=UTF-8 true @@ -459,18 +492,18 @@ com.google.code.maven-replacer-plugin replacer - 1.5.3 + ${plugin.replacer.version} false org.apache.maven.plugins maven-jar-plugin - 3.5.0 + ${plugin.jar.version} com.github.victools jsonschema-maven-plugin - ${jsonschemagenerator.version} + ${plugin.jsonschemagenerator.version} @@ -479,7 +512,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.6.2 + ${plugin.enforcer.version} @@ -531,7 +564,7 @@ org.codehaus.mojo flatten-maven-plugin - 1.7.3 + ${plugin.flatten.version} true ossrh diff --git a/spectrum/pom.xml b/spectrum/pom.xml index 72f7bb0a6..6491ff961 100644 --- a/spectrum/pom.xml +++ b/spectrum/pom.xml @@ -45,6 +45,14 @@ false false false + + 3.9.12 + + 0.8.14 + 3.4.0 + 3.12.0 + 3.2.8 + 0.10.0 @@ -163,7 +171,7 @@ org.apache.maven maven-model - 3.9.12 + ${dependency.maven-model.version} provided @@ -209,7 +217,7 @@ maven-surefire-plugin @{argLine} - -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar + -javaagent:${settings.localRepository}/org/mockito/mockito-core/${dependency.mockito.version}/mockito-core-${dependency.mockito.version}.jar --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.nio.fs=ALL-UNNAMED @@ -220,7 +228,7 @@ org.jacoco jacoco-maven-plugin - 0.8.14 + ${plugin.jacoco.version} io/github/giulong/spectrum/pojos/**/* @@ -244,7 +252,7 @@ report - ${project.parent.basedir}/${jacoco.outputDirectory} + ${jacoco.outputDirectory} @@ -306,6 +314,25 @@ + + org.cyclonedx + cyclonedx-maven-plugin + + framework + ${docs.folder}/sboms/${revision} + sbom + all + false + + + + package + + makeBom + + + + org.apache.maven.plugins maven-jar-plugin @@ -320,7 +347,7 @@ org.apache.maven.plugins maven-source-plugin - 3.4.0 + ${plugin.source.version} attach-sources @@ -333,7 +360,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.12.0 + ${plugin.javadoc.version} -Xdoclint:none @@ -349,7 +376,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.2.8 + ${plugin.gpg.version} sign-artifacts @@ -368,7 +395,7 @@ org.sonatype.central central-publishing-maven-plugin - 0.10.0 + ${plugin.central-publishing.version} true central diff --git a/spectrum/src/main/java/io/github/giulong/spectrum/internals/jackson/json_schema/JsonSchemaInternalGeneratorModule.java b/spectrum/src/main/java/io/github/giulong/spectrum/internals/jackson/json_schema/JsonSchemaInternalGeneratorModule.java index f495e1f12..4c17ac57e 100644 --- a/spectrum/src/main/java/io/github/giulong/spectrum/internals/jackson/json_schema/JsonSchemaInternalGeneratorModule.java +++ b/spectrum/src/main/java/io/github/giulong/spectrum/internals/jackson/json_schema/JsonSchemaInternalGeneratorModule.java @@ -15,7 +15,7 @@ import com.github.victools.jsonschema.generator.Module; import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; -import com.github.victools.jsonschema.module.jackson.JacksonModule; +import com.github.victools.jsonschema.module.jackson.JacksonSchemaModule; import com.github.victools.jsonschema.module.jackson.JsonSubTypesResolver; import io.github.giulong.spectrum.interfaces.JsonSchemaTypes; @@ -36,7 +36,7 @@ public void applyToConfigBuilder(final SchemaGeneratorConfigBuilder schemaGenera protected SchemaGeneratorConfigBuilder commonSetupFor(final SchemaGeneratorConfigBuilder schemaGeneratorConfigBuilder) { schemaGeneratorConfigBuilder - .with(new JacksonModule(SKIP_SUBTYPE_LOOKUP, FLATTENED_ENUMS_FROM_JSONVALUE)) + .with(new JacksonSchemaModule(SKIP_SUBTYPE_LOOKUP, FLATTENED_ENUMS_FROM_JSONVALUE)) .with(FORBIDDEN_ADDITIONAL_PROPERTIES_BY_DEFAULT, MAP_VALUES_AS_ADDITIONAL_PROPERTIES, TRANSIENT_FIELDS,