<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ecosystem Guides on Sonatype Open Source Community Handbook</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/</link><description>Recent content in Ecosystem Guides on Sonatype Open Source Community Handbook</description><generator>Hugo</generator><language>en</language><atom:link href="https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/dotnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/dotnet/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. No current community Project uses .NET, so this guide is the least exercised. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/nuget-application-analysis.html"&gt;NuGet Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Sonatype&amp;rsquo;s documentation says Lifecycle scans &lt;code&gt;.nupkg&lt;/code&gt; files and PE binaries (&lt;code&gt;.dll&lt;/code&gt;, &lt;code&gt;.exe&lt;/code&gt; and others), as a &lt;strong&gt;binary&lt;/strong&gt; scan, and project files (&lt;code&gt;.csproj&lt;/code&gt;, &lt;code&gt;packages.config&lt;/code&gt;) as a &lt;strong&gt;manifest&lt;/strong&gt; scan. In manifest mode &amp;ldquo;only components with an exact version specified are evaluated&amp;rdquo;, floating versions such as &lt;code&gt;3.6.*&lt;/code&gt; are not supported, and transitive dependencies are not included.&lt;/p&gt;</description></item><item><title>C/C++</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/cpp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/cpp/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. No current community Project uses Conan, so this guide is the least exercised. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/c-c---application-analysis.html"&gt;C/C++ Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Sonatype&amp;rsquo;s documentation says it analyses files named &lt;code&gt;conanfile.txt&lt;/code&gt;, &lt;code&gt;conanfile.py&lt;/code&gt; or &lt;code&gt;conaninfo.txt&lt;/code&gt;, taking dependencies &amp;ldquo;with an exact version&amp;rdquo; from the &lt;code&gt;requires&lt;/code&gt; and &lt;code&gt;build_requires&lt;/code&gt; sections. It describes a scan of &amp;ldquo;a directory or subdirectories containing&amp;rdquo; those files. It does not describe a lockfile or a binary scan, and does not say that &lt;code&gt;conan install&lt;/code&gt; is needed first.&lt;/p&gt;</description></item><item><title>Docker</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/docker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/docker/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Container images are the largest scan input, and the one with the most open questions. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/docker-image-analysis.html"&gt;Docker Image Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Docker is a &lt;strong&gt;binary&lt;/strong&gt; ecosystem. Sonatype&amp;rsquo;s documentation describes the scan target as an image saved to a tar archive with &lt;code&gt;docker save&lt;/code&gt;, which the CLI then accepts directly: for example &lt;code&gt;docker save webgoat/webgoat-7.1:latest &amp;gt; webgoat-7.1.tar&lt;/code&gt;. It says the Sonatype CLI &amp;ldquo;relies on the Docker daemon to package the image as an archive file&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Go</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/go/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/go-application-analysis.html"&gt;Go Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Go is a &lt;strong&gt;manifest&lt;/strong&gt; ecosystem. Lifecycle matches Go components by module path and version. Sonatype&amp;rsquo;s documentation says:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A valid &lt;code&gt;go.mod&lt;/code&gt; is required for Go module analysis.&lt;/li&gt;&#10;&lt;li&gt;The &lt;strong&gt;recommended&lt;/strong&gt; scan target is a &lt;code&gt;go.list&lt;/code&gt; file generated with &lt;code&gt;go list&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;go.sum&lt;/code&gt; is also supported, but &amp;ldquo;may include dependencies that are not used by the application&amp;rdquo;, so it can report more than your build actually uses.&lt;/li&gt;&#10;&lt;li&gt;The Go toolchain does not need to be present when Lifecycle scans the file.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="why-golist-and-not-gosum"&gt;Why &lt;code&gt;go.list&lt;/code&gt; and not &lt;code&gt;go.sum&lt;/code&gt;&lt;a class="td-heading-self-link" href="#why-golist-and-not-gosum" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;go.sum&lt;/code&gt; records every module version your module graph has ever needed, including ones the build does not use. &lt;code&gt;go.list&lt;/code&gt; is produced from what the compiler would actually link, so it matches your real dependencies. The tradeoff is that producing it needs the Go toolchain and module downloads, which is why it happens in Tier 1.&lt;/p&gt;</description></item><item><title>Java</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/java/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/java/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/java-application-analysis.html"&gt;Java Application Analysis&lt;/a&gt;. Gradle guidance is thinner than Maven, and this guide says where.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Java is a &lt;strong&gt;binary&lt;/strong&gt; ecosystem. Sonatype&amp;rsquo;s documentation says Lifecycle scans packaged archives (&lt;code&gt;.ear&lt;/code&gt;, &lt;code&gt;.war&lt;/code&gt;, &lt;code&gt;.jar&lt;/code&gt;, &lt;code&gt;.zip&lt;/code&gt;, &lt;code&gt;.tar.gz&lt;/code&gt;) and post-build artifacts, using Advanced Binary Fingerprinting, and that &amp;ldquo;for the best results&amp;rdquo; the post-build artifact you plan to deploy should be the scan target.&lt;/p&gt;</description></item><item><title>JavaScript</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/javascript/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/javascript/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Sources: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/npm-application-analysis.html"&gt;npm Application Analysis&lt;/a&gt; and &lt;a href="https://help.sonatype.com/en/preparing-to-run-npm-application-analysis.html"&gt;Preparing to Run npm Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;JavaScript can be scanned two ways, and the choice sets the accuracy:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Scan input&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Mode&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Accuracy&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;package.json&lt;/code&gt; plus a lockfile (&lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;npm-shrinkwrap.json&lt;/code&gt;, &lt;code&gt;yarn.lock&lt;/code&gt;, &lt;code&gt;pnpm-lock.yaml&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Manifest&lt;/strong&gt; matching&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Good. Evaluates dependencies from metadata only.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;package.json&lt;/code&gt;, the lockfile &lt;strong&gt;and&lt;/strong&gt; &lt;code&gt;node_modules&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Binary&lt;/strong&gt; (ABF)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Best. Sonatype recommends this for &amp;ldquo;the most precise results&amp;rdquo;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Sonatype&amp;rsquo;s documentation says that when JavaScript files are included, ABF is used and the JavaScript files are the primary identification source, and that &amp;ldquo;manifest entries without corresponding JavaScript files are ignored&amp;rdquo;. &lt;code&gt;package.json&lt;/code&gt; must come with a &lt;code&gt;package-lock.json&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>PHP</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/php/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/php-application-analysis.html"&gt;PHP Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;PHP is a &lt;strong&gt;manifest&lt;/strong&gt; ecosystem and the documentation describes one file only: &amp;ldquo;files named &lt;code&gt;composer.lock&lt;/code&gt; (a JSON file generated by PHP composer) will be analyzed&amp;rdquo;. It does not scan &lt;code&gt;composer.json&lt;/code&gt; or the &lt;code&gt;vendor/&lt;/code&gt; directory. Sonatype recommends generating and committing &lt;code&gt;composer.lock&lt;/code&gt; before scanning, so the Project must &lt;strong&gt;commit &lt;code&gt;composer.lock&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="tier-1-job"&gt;Tier 1 job&lt;a class="td-heading-self-link" href="#tier-1-job" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;prepare-scan-input&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Prepare Lifecycle scan input&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;runs-on&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;ubuntu-latest&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;permissions&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;contents&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;read&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;steps&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Checkout&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;uses&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# v7.0.1&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;with&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;persist-credentials&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;false&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Gather scan input&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;run&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;|&lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt; mkdir scan-input&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt; cp composer.lock scan-input/&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;- &lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;Upload scan input&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;uses&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#8f5902;font-style:italic"&gt;# v7.0.2&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;with&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;name&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;lifecycle-scan-input&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;path&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;scan-input/&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;if-no-files-found&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;error&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;retention-days&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;3&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This job runs nothing from the Pull Request, and does not need &lt;code&gt;composer install&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Python</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/python/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/python-application-analysis.html"&gt;Python Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Python can be scanned from manifests or from binaries:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Scan input&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Notes&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;requirements.txt&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Must use &lt;code&gt;==&lt;/code&gt; with a version and no wildcards. Variable ranges and environment ranges are ignored.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;poetry.lock&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Parsed automatically. For Poetry 1.5.1 and later, development dependencies are excluded when &lt;code&gt;pyproject.toml&lt;/code&gt; is present and discoverable.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Pipfile.lock&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Needs IQ CLI 2.0 or later. Only dependencies under the &lt;code&gt;default&lt;/code&gt; key are parsed.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;.whl&lt;/code&gt; and &lt;code&gt;.tar.gz&lt;/code&gt; files&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Binary&lt;/strong&gt; scan of the actual packages.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Sonatype&amp;rsquo;s recommendation for the best results is to first create a virtual environment, resolve dependencies with &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;, and use &lt;code&gt;pip download&lt;/code&gt; or &lt;code&gt;pip wheel&lt;/code&gt; to gather the packages as the scan target.&lt;/p&gt;</description></item><item><title>R</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/r/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/r/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end, and the thinnest guide: Sonatype&amp;rsquo;s documentation for R is brief. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/r--cran--application-analysis.html"&gt;R (CRAN) Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The only input Sonatype&amp;rsquo;s documentation describes is a file named &lt;code&gt;cran-installed.packages&lt;/code&gt;, &amp;ldquo;exported via &lt;code&gt;installed.packages()&lt;/code&gt; command in CRAN console&amp;rdquo;. It does not describe scanning &lt;code&gt;DESCRIPTION&lt;/code&gt;, &lt;code&gt;renv.lock&lt;/code&gt; or package tarballs. Matching is by package name and version.&lt;/p&gt;&#10;&lt;p&gt;That means the scan input has to be generated from an R installation that has the package&amp;rsquo;s dependencies installed. The Project&amp;rsquo;s own repository does not contain it.&lt;/p&gt;</description></item><item><title>Ruby</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/ruby/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/ruby-application-analysis.html"&gt;Ruby Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Ruby is a &lt;strong&gt;manifest&lt;/strong&gt; ecosystem, with a binary option. Sonatype&amp;rsquo;s documentation says it scans &lt;code&gt;Gemfile.lock&lt;/code&gt;, &lt;code&gt;.gem&lt;/code&gt; files and &lt;code&gt;vendor/bundle&lt;/code&gt;. For the lockfile, &amp;ldquo;components from sections GIT, GEM and PATH and with an exact version will be analyzed&amp;rdquo;. For the best results it recommends scanning &amp;ldquo;after either installing the packages from a clean environment or storing the gems in a local cache&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Rust</title><link>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/rust/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contribute.sonatype.com/docs/standards/pull-request-ci/ecosystems/rust/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&#10;&lt;p&gt;&lt;strong&gt;DRAFT.&lt;/strong&gt; Not yet run end to end. Source: Sonatype&amp;rsquo;s &lt;a href="https://help.sonatype.com/en/rust-application-analysis.html"&gt;Rust Application Analysis&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="what-lifecycle-reads"&gt;What Lifecycle reads&lt;a class="td-heading-self-link" href="#what-lifecycle-reads" aria-label="Heading self-link"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Rust is a &lt;strong&gt;manifest&lt;/strong&gt; ecosystem, and the only file Sonatype&amp;rsquo;s documentation describes is &lt;code&gt;Cargo.lock&lt;/code&gt;: &amp;ldquo;the Cargo coordinate-based matching feature provides the ability to scan and evaluate Rust dependencies found in the Cargo.lock file&amp;rdquo;. The &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;version&lt;/code&gt; of each &lt;code&gt;package&lt;/code&gt; entry are evaluated. The documentation does not mention &lt;code&gt;Cargo.toml&lt;/code&gt; or built binaries.&lt;/p&gt;&#10;&lt;p&gt;Because the lockfile is the input, the Project must &lt;strong&gt;commit &lt;code&gt;Cargo.lock&lt;/code&gt;&lt;/strong&gt;. Library crates often do not. A Project that does not commit it has nothing to scan, and should either start committing it or generate it in Tier 1 with &lt;code&gt;cargo generate-lockfile&lt;/code&gt; (which resolves to the newest versions, not the ones the Project tested against, and is therefore a weaker signal).&lt;/p&gt;</description></item></channel></rss>