<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Prow</title>
    <link>https://deploy-preview-674--k8s-prow.netlify.app/</link>
    <description>Recent content on Prow</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://deploy-preview-674--k8s-prow.netlify.app/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>admission</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/undocumented/admission/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/undocumented/admission/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcements</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/announcements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/announcements/</guid>
      <description>&lt;h2 id=&#34;new-features&#34;&gt;New features&lt;/h2&gt;&#xA;&lt;p&gt;New features added to each component:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;April 20, 2024&lt;/em&gt; The &lt;code&gt;ghcache_cache_parititions&lt;/code&gt; Prometheus metric has been deprecated in favor&#xA;of &lt;code&gt;ghcache_cache_partitions&lt;/code&gt;. Besides spelling both metrics are identical.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;April 20, 2024&lt;/em&gt; The &lt;code&gt;validate-supplemental-prow-config-hirarchy&lt;/code&gt; check in &lt;code&gt;checkconfig&lt;/code&gt; has been&#xA;renamed to &lt;code&gt;validate-supplemental-prow-config-hierarchy&lt;/code&gt;; the old name is now deprecated.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;em&gt;October 20, 2023&lt;/em&gt; The &lt;a href=&#34;https://github.com/kubernetes/test-infra/pull/30400&#34;&gt;update to Inrepoconfig&#xA;handling&lt;/a&gt; will break&#xA;users if they have symlinks inside &lt;code&gt;.prow/&lt;/code&gt; that point to targets elsewhere&#xA;in the codebase. See &lt;a href=&#34;https://github.com/kubernetes/test-infra/pull/30400#issuecomment-1773207300&#34;&gt;this&#xA;comment&lt;/a&gt;&#xA;for details.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Architecture</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/overview/architecture/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/overview/architecture/</guid>
      <description>&lt;h2 id=&#34;prow-in-a-nutshell&#34;&gt;Prow in a Nutshell&lt;/h2&gt;&#xA;&lt;p&gt;Prow creates jobs based on various types of events, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;GitHub events (e.g., a new PR is created, or is merged, or a person comments&#xA;&amp;ldquo;/retest&amp;rdquo; on a PR),&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Pub/Sub messages,&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;time (these are created by &lt;strong&gt;Horologium&lt;/strong&gt; and are called &lt;strong&gt;periodic&lt;/strong&gt; jobs),&#xA;and&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;retesting (triggered by &lt;strong&gt;Tide&lt;/strong&gt;).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Jobs are created inside the Service Cluster as Kubernetes Custom Resources.  The&#xA;&lt;strong&gt;Prow Controller Manager&lt;/strong&gt; takes triggered jobs and schedules them into a build&#xA;cluster, where they run as Kubernetes pods. &lt;strong&gt;Crier&lt;/strong&gt; then reports the results&#xA;back to GitHub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>branchcleaner</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/branchcleaner/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/branchcleaner/</guid>
      <description>&lt;p&gt;The &lt;code&gt;branchcleaner&lt;/code&gt; plugin automatically deletes source branches for merged PRs between two branches&#xA;on the same repository. This is helpful to keep repos that don&amp;rsquo;t allow forking clean.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Enable the &lt;code&gt;branchcleaner&lt;/code&gt; in the desired repos via the &lt;code&gt;plugins.yaml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;plugins&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;org/repo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;branchcleaner&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Branchprotector</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/branchprotector/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/branchprotector/</guid>
      <description>&lt;p&gt;branchprotector configures &lt;a href=&#34;https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/about-protected-branches&#34;&gt;github branch protection&lt;/a&gt; according to a specified&#xA;policy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;policy-configuration&#34;&gt;Policy configuration&lt;/h2&gt;&#xA;&lt;p&gt;Extend the primary prow &lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/prow/config.yaml&#34;&gt;&lt;code&gt;config.yaml&lt;/code&gt;&lt;/a&gt; document to include a top-level&#xA;&lt;code&gt;branch-protection&lt;/code&gt; key that looks like the following:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;branch-protection&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;orgs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;repos&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;test-infra&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Protect all branches in kubernetes/test-infra&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;protect&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Always allow the org&amp;#39;s oncall-team to push&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;restrictions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;teams&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;oncall-team&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Ensure that the extra-process-followed github status context passes.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# In addition, adds any required prow jobs (aka always_run: true)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;          &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;required_status_checks&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;            &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;contexts&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;extra-process-followed&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;presubmits&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kubernetes/test-infra&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fancy-job-name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;context&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fancy-job-name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;always_run&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# podspec that runs job&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This config will:&lt;/p&gt;</description>
    </item>
    <item>
      <title>checkconfig</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/checkconfig/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/checkconfig/</guid>
      <description>&lt;p&gt;&lt;code&gt;checkconfig&lt;/code&gt; loads the Prow configuration given with &lt;code&gt;--config-path&lt;/code&gt;,&#xA;&lt;code&gt;--job-config-path&lt;/code&gt; and &lt;code&gt;--plugin-config&lt;/code&gt; in order to validate it.&#xA;Use &lt;code&gt;checkconfig&lt;/code&gt; as a pre-submit for any repository holding Prow&#xA;configuration to ensure that check-ins do not break anything.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cherrypicker</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/external-plugins/cherrypicker/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/external-plugins/cherrypicker/</guid>
      <description>&lt;p&gt;Cherrypicker is an external prow plugin that can also run as a standalone bot.&#xA;It automates cherry-picking merged PRs into different branches. Cherrypicks are&#xA;triggered from either comments or labels in GitHub PRs that need to be cherrypicked.&lt;/p&gt;&#xA;&lt;p&gt;For comments:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/cherrypick release-1.10&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The above comment will result in opening a new PR against the &lt;code&gt;release-1.10&lt;/code&gt; branch&#xA;once the PR where the comment was made gets merged or is already merged.&lt;/p&gt;&#xA;&lt;p&gt;To use label, you need to apply labels that contain the name of the branch in the form:&lt;/p&gt;</description>
    </item>
    <item>
      <title>clonerefs</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/clonerefs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/clonerefs/</guid>
      <description>&lt;p&gt;&lt;code&gt;clonerefs&lt;/code&gt; clones code under test at the specified locations. Regardless of the success or failure&#xA;of clone operations, this utility will have an exit code of &lt;code&gt;0&lt;/code&gt; and will record the clone operation&#xA;status to the specified log file. Clone records have the form:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;failed&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;false&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;refs&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;org&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kubernetes&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;repo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kubernetes&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;base_ref&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;master&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;base_sha&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;a36820b10cde020818b8dd437e285d0e2e7d5e98&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;pulls&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;number&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;123&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;author&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;smarterclayton&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;sha&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2b58234a8aee0d55918b158a3b38c292d6a95ef7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;commands&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;git init&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;output&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Reinitialized existing Git repository in /go/src/k8s.io/kubernetes/.git/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: the utility &lt;em&gt;will&lt;/em&gt; exit with a non-zero status if a fatal error is detected and no clone&#xA;operations can even begin to run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cm2kc (clustermap to kubeconfig)</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/cm2kc/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/cm2kc/</guid>
      <description>&lt;h2 id=&#34;description&#34;&gt;Description&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;cm2kc&lt;/code&gt; is a CLI tool used to convert a &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-deploy/#run-test-pods-in-different-clusters&#34;&gt;clustermap file&lt;/a&gt; to a &lt;a href=&#34;https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/&#34;&gt;kubeconfig file&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go run ./cmd/cm2kc &amp;lt;options&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following is a list of supported options for &lt;code&gt;cm2kc&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-style:italic&#34;&gt;  -i, --input string    Input clustermap file. (default &amp;#34;/dev/stdin&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-style:italic&#34;&gt;  -o, --output string   Output kubeconfig file. (default &amp;#34;/dev/stdout&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;examples&#34;&gt;Examples&lt;/h2&gt;&#xA;&lt;h4 id=&#34;add-a-kubeconfig-file-in-a-secret-kubeconfig-from-a-clustermap-file-in-another-secret-build-cluster-for-context-my-context&#34;&gt;Add a kubeconfig file in a secret: &lt;code&gt;kubeconfig&lt;/code&gt; from a clustermap file in another secret: &lt;code&gt;build-cluster&lt;/code&gt; for context: &lt;code&gt;my-context&lt;/code&gt;&lt;/h4&gt;&#xA;&lt;p&gt;The following command will:&lt;/p&gt;</description>
    </item>
    <item>
      <title>config-bootstrapper</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/config-bootstrapper/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/config-bootstrapper/</guid>
      <description>&lt;p&gt;&lt;code&gt;config-bootstrapper&lt;/code&gt; is used to bootstrap a configuration that would be incrementally updated by the&#xA;config-updater Prow plugin.&lt;/p&gt;&#xA;&lt;p&gt;When a set of configurations do not exist (for example, on a clean redeployment or in a disaster&#xA;recovery situation), the config-updater plugin is not useful as it can only upload incremental&#xA;updates. This tool is meant to be used in those situations to set up the config to the correct&#xA;base state and hand off ownership to the plugin for updates.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuring Tide</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/config/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/config/</guid>
      <description>&lt;p&gt;Configuration of Tide is located under the &lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/prow/config.yaml&#34;&gt;config/prow/config.yaml&lt;/a&gt; file. All configuration for merge behavior and criteria belongs in the &lt;code&gt;tide&lt;/code&gt; yaml struct, but it may be necessary to also configure presubmits for Tide to run against PRs (see &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/config/#configuring-presubmit-jobs&#34;&gt;&amp;lsquo;Configuring Presubmit Jobs&amp;rsquo;&lt;/a&gt; below).&lt;/p&gt;&#xA;&lt;p&gt;This document will describe the fields of the &lt;code&gt;tide&lt;/code&gt; configuration and how to populate them, but you can also check out the &lt;a href=&#34;https://godoc.org/github.com/kubernetes/test-infra/prow/config#Tide&#34;&gt;GoDocs&lt;/a&gt; for the most up to date configuration specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crier</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/crier/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/crier/</guid>
      <description>&lt;p&gt;Crier reports your prowjobs on their status changes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage--how-to-enable-existing-available-reporters&#34;&gt;Usage / How to enable existing available reporters&lt;/h2&gt;&#xA;&lt;p&gt;For any reporter you want to use, you need to mount your prow configs and specify &lt;code&gt;--config-path&lt;/code&gt; and &lt;code&gt;job-config-path&lt;/code&gt;&#xA;flag as most of other prow controllers do.&lt;/p&gt;&#xA;&lt;h3 id=&#34;gerrit-reporter&#34;&gt;&lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/pkg/crier/reporters/gerrit&#34;&gt;Gerrit reporter&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;You can enable gerrit reporter in crier by specifying &lt;code&gt;--gerrit-workers=n&lt;/code&gt; flag.&lt;/p&gt;&#xA;&lt;p&gt;Similar to the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gerrit/&#34;&gt;gerrit adapter&lt;/a&gt;, you&amp;rsquo;ll need to specify &lt;code&gt;--gerrit-projects&lt;/code&gt; for&#xA;your gerrit projects, and also &lt;code&gt;--cookiefile&lt;/code&gt; for the gerrit auth token (leave it unset for anonymous).&lt;/p&gt;</description>
    </item>
    <item>
      <title>entrypoint</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/entrypoint/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/entrypoint/</guid>
      <description>&lt;p&gt;&lt;code&gt;entrypoint&lt;/code&gt; wraps a process and records its output to &lt;code&gt;stdout&lt;/code&gt; and &lt;code&gt;stderr&lt;/code&gt; as well as its exit&#xA;code, recording both to disk. The utility will exit with a non-zero exit code if the wrapped&#xA;process fails or if the utility has a fatal error.&lt;/p&gt;&#xA;&lt;p&gt;This utility is intended to be used with &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/sidecar/&#34;&gt;&lt;code&gt;sidecar&lt;/code&gt;&lt;/a&gt;, which will&#xA;watch the files written by this utility and report on the status of the wrapped process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exporter</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/exporter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/exporter/</guid>
      <description>&lt;p&gt;The prow-exporter exposes metrics about prow jobs while the&#xA;metrics are not directly related to a specific prow-component.&lt;/p&gt;&#xA;&lt;h2 id=&#34;metrics&#34;&gt;Metrics&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Metric name&lt;/th&gt;&#xA;          &lt;th&gt;Metric type&lt;/th&gt;&#xA;          &lt;th&gt;Labels/tags&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;prow_job_labels&lt;/td&gt;&#xA;          &lt;td&gt;Gauge&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;job_name&lt;/code&gt;=&amp;lt;prow_job-name&amp;gt; &lt;br&gt; &lt;code&gt;job_namespace&lt;/code&gt;=&amp;lt;prow_job-namespace&amp;gt; &lt;br&gt; &lt;code&gt;job_agent&lt;/code&gt;=&amp;lt;prow_job-agent&amp;gt; &lt;br&gt; &lt;code&gt;label_PROW_JOB_LABEL_KEY&lt;/code&gt;=&amp;lt;PROW_JOB_LABEL_VALUE&amp;gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;prow_job_annotations&lt;/td&gt;&#xA;          &lt;td&gt;Gauge&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;job_name&lt;/code&gt;=&amp;lt;prow_job-name&amp;gt; &lt;br&gt; &lt;code&gt;job_namespace&lt;/code&gt;=&amp;lt;prow_job-namespace&amp;gt; &lt;br&gt; &lt;code&gt;job_agent&lt;/code&gt;=&amp;lt;prow_job-agent&amp;gt; &lt;br&gt; &lt;code&gt;annotation_PROW_JOB_ANNOTATION_KEY&lt;/code&gt;=&amp;lt;PROW_JOB_ANNOTATION_VALUE&amp;gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;prow_job_runtime_seconds&lt;/td&gt;&#xA;          &lt;td&gt;Histogram&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;job_name&lt;/code&gt;=&amp;lt;prow_job-name&amp;gt; &lt;br&gt; &lt;code&gt;job_namespace&lt;/code&gt;=&amp;lt;prow_job-namespace&amp;gt; &lt;br&gt; &lt;code&gt;type&lt;/code&gt;=&amp;lt;prow_job-type&amp;gt; &lt;br&gt; &lt;code&gt;last_state&lt;/code&gt;=&amp;lt;last-state&amp;gt; &lt;br&gt; &lt;code&gt;state&lt;/code&gt;=&amp;lt;state&amp;gt; &lt;br&gt; &lt;code&gt;org&lt;/code&gt;=&amp;lt;org&amp;gt; &lt;br&gt; &lt;code&gt;repo&lt;/code&gt;=&amp;lt;repo&amp;gt; &lt;br&gt; &lt;code&gt;base_ref&lt;/code&gt;=&amp;lt;base_ref&amp;gt; &lt;br&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For example, the metric &lt;code&gt;prow_job_labels&lt;/code&gt; is similar to &lt;code&gt;kube_pod_labels&lt;/code&gt; defined&#xA;in &lt;a href=&#34;https://github.com/kubernetes/kube-state-metrics/blob/master/docs/pod-metrics.md&#34;&gt;kubernetes/kube-state-metrics&lt;/a&gt;.&#xA;A typical usage of &lt;code&gt;prow_job_labels&lt;/code&gt; is to &lt;a href=&#34;https://github.com/kubernetes/kube-state-metrics/tree/master/docs#join-metrics&#34;&gt;join&lt;/a&gt;&#xA;it with other metrics using a &lt;a href=&#34;https://prometheus.io/docs/prometheus/latest/querying/operators/#vector-matching&#34;&gt;Prometheus matching operator&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>fallbackcheck</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/tot/fallbackcheck/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/tot/fallbackcheck/</guid>
      <description>&lt;p&gt;Ensure your GCS bucket layout is what &lt;code&gt;tot&lt;/code&gt; expects to use. Useful when you want to transition&#xA;from versioning your GCS buckets away from Jenkins build numbers to build numbers vended&#xA;by prow.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;fallbackcheck&lt;/code&gt; checks the existence of latest-build.txt files as per the &lt;a href=&#34;https://github.com/kubernetes/test-infra/tree/master/gubernator#gcs-bucket-layout&#34;&gt;documented GCS layout&lt;/a&gt;.&#xA;It ignores jobs that have no GCS buckets.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go get sigs.k8s.io/prow/cmd/tot/fallbackcheck&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;run&#34;&gt;Run&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fallbackcheck -bucket GCS_BUCKET -prow-url LIVE_DECK_DEPLOYMENT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fallbackcheck -bucket https://gcsweb-ci.svc.ci.openshift.org/gcs/origin-ci-test/ -prow-url https://deck-ci.svc.ci.openshift.org/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>gcsupload</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gcsupload/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gcsupload/</guid>
      <description>&lt;p&gt;&lt;code&gt;gcsupload&lt;/code&gt; uploads artifacts to cloud storage at a path resolved from the job configuration.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;gcsupload&lt;/code&gt; can be configured by either passing in flags or by specifying a full set of options&#xA;as JSON in the &lt;code&gt;$GCSUPLOAD_OPTIONS&lt;/code&gt; environment variable, which has the following form:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;bucket&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kubernetes-jenkins&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;sub_dir&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/logs/artifacts/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;path_strategy&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;legacy&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;default_org&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kubernetes&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;default_repo&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;kubernetes&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;gcs_credentials_file&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;/secrets/gcs/service-account.json&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;dry_run&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In addition to this configuration for the tool, the &lt;code&gt;$JOB_SPEC&lt;/code&gt; environment variable should be&#xA;present to provide the contents of the Prow downward API for jobs. This data is used to resolve&#xA;the exact location in GCS to which artifacts and logs will be pushed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>generic-autobumper</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/generic-autobumper/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/generic-autobumper/</guid>
      <description>&lt;p&gt;This tool automates the version upgrading of images such as the &lt;a href=&#34;https://prow.k8s.io&#34;&gt;prow.k8s.io&lt;/a&gt; Prow deployment.&#xA;Its workflow is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Given a local git repo containing the manifests of Prow component deployment,&#xA;e.g., &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/config/prow/cluster&#34;&gt;/config/prow/cluster&lt;/a&gt; folder in this repo.&lt;/li&gt;&#xA;&lt;li&gt;Find out the most recent tags of given prefixes in &lt;code&gt;gcr.io&lt;/code&gt; registry&#xA;and modify the yaml files with them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;git-commit&lt;/code&gt; the change, push it to the remote repo, and create/update a PR,&#xA;e.g., &lt;a href=&#34;https://github.com/kubernetes/test-infra/pull/14249&#34;&gt;test-infra/pull/14249&lt;/a&gt;, for the change.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The cluster admins can upgrade the version of images by approving the PR.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gerrit</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gerrit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gerrit/</guid>
      <description>&lt;p&gt;Gerrit is a Prow-gerrit adapter for handling CI on gerrit workflows. It can poll gerrit&#xA;changes from multiple gerrit instances, and trigger presubmits on Prow upon new patchsets&#xA;on Gerrit changes, and postsubmits when Gerrit changes are merged.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment-usage&#34;&gt;Deployment Usage&lt;/h2&gt;&#xA;&lt;p&gt;When deploy the gerrit component, you need to specify &lt;code&gt;--config-path&lt;/code&gt; to your prow config, and optionally&#xA;&lt;code&gt;--job-config-path&lt;/code&gt; to your prowjob config if you have split them up.&lt;/p&gt;&#xA;&lt;p&gt;Set &lt;code&gt;--gerrit-projects&lt;/code&gt; to the gerrit projects you want to poll against.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ghCache</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/ghproxy/ghcache/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/ghproxy/ghcache/</guid>
      <description>&lt;h2 id=&#34;what&#34;&gt;What?&lt;/h2&gt;&#xA;&lt;p&gt;ghCache is an HTTP cache optimized for caching responses from the GitHub API (&lt;a href=&#34;https://api.github.com&#34;&gt;https://api.github.com&lt;/a&gt;).&#xA;Specifically, it has the following non-standard caching behavior:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Every cache hit is revalidated with a conditional HTTP request to GitHub&#xA;regardless of cache entry freshness (TTL).&#xA;The &amp;lsquo;Cache-Control&amp;rsquo; header is ignored and overwritten to achieve this.&lt;/li&gt;&#xA;&lt;li&gt;Concurrent requests for the same resource are coalesced and&#xA;share a single request/response from GitHub&#xA;instead of each request resulting in a corresponding upstream request and response.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ghCache also provides prometheus instrumentation to expose cache activity,&#xA;request duration, and API token usage/savings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HMAC</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/hmac/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/hmac/</guid>
      <description>&lt;p&gt;&lt;code&gt;hmac&lt;/code&gt; is a tool to update the HMAC token, GitHub webhooks and HMAC secret&#xA;for the orgs/repos as per the &lt;code&gt;managed_webhooks&lt;/code&gt; configuration changes in the Prow config file.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;To run this tool, you&amp;rsquo;ll need:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A github account that has admin permission to the orgs/repos.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://github.com/settings/tokens&#34;&gt;personal access token&lt;/a&gt; for the github account.&#xA;Note the token must be granted &lt;code&gt;admin:repo_hook&lt;/code&gt; and &lt;code&gt;admin:org_hook&lt;/code&gt; scopes.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Permissions to read&amp;amp;write the hmac secret in the Prow cluster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to setup GitHub Oauth</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/deck/github-oauth-setup/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/deck/github-oauth-setup/</guid>
      <description>&lt;p&gt;This document helps configure GitHub Oauth, which is required for &lt;a href=&#34;https://prow.k8s.io/pr&#34;&gt;PR Status&lt;/a&gt;&#xA;and for the rerun button on &lt;a href=&#34;https://prow.k8s.io&#34;&gt;Prow Status&lt;/a&gt;.&#xA;If OAuth is configured, Prow will perform GitHub actions on behalf of the authenticated users.&#xA;This is necessary to fetch information about pull requests for the PR Status page and to&#xA;authenticate users when checking if they have permission to rerun jobs via the rerun button on Prow Status.&lt;/p&gt;&#xA;&lt;h2 id=&#34;set-up-secrets&#34;&gt;Set up secrets&lt;/h2&gt;&#xA;&lt;p&gt;The following steps will show you how to set up an OAuth app.&lt;/p&gt;</description>
    </item>
    <item>
      <title>initupload</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/initupload/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/initupload/</guid>
      <description>&lt;p&gt;&lt;code&gt;initupload&lt;/code&gt; reads clone records placed by &lt;code&gt;clonerefs&lt;/code&gt; in order to determine job status. The status&#xA;and logs from the clone operations are uploaded to cloud storage at a path resolved from the job&#xA;configuration. This utility will exit with a non-zero exit code if the clone records indicate that&#xA;any clone operations failed, as well as if any fatal errors are encountered in this utility itself.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;initupload&lt;/code&gt; can be configured by either passing in flags or by specifying a full set of options&#xA;as JSON in the &lt;code&gt;$INITUPLOAD_OPTIONS&lt;/code&gt; environment variable, which has the same form as that for&#xA;&lt;code&gt;gcsupload&lt;/code&gt;, plus the &lt;code&gt;&amp;quot;log&amp;quot;&lt;/code&gt; field. See &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gcsupload/&#34;&gt;that documentation&lt;/a&gt; for&#xA;an explanation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>invitations-accepter</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/invitations-accepter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/invitations-accepter/</guid>
      <description>&lt;p&gt;The &lt;code&gt;invitations-accepter&lt;/code&gt; tool approves all pending repository invitations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;example&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;invitations-accepter --dry-run&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;false&lt;/span&gt; --github-token-path&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;/etc/github/oauth&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;using with GitHub Apps&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;invitations-accepter --dry-run&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;false&lt;/span&gt; --github-app-id&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;12345&lt;/span&gt; --github-app-private-key-path&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;/etc/github/cert&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>jenkins-operator</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/jenkins-operator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/jenkins-operator/</guid>
      <description>&lt;p&gt;&lt;code&gt;jenkins-operator&lt;/code&gt; is a controller that enables Prow to use Jenkins&#xA;as a backend for running jobs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;jenkins-configuration&#34;&gt;Jenkins configuration&lt;/h2&gt;&#xA;&lt;p&gt;A Jenkins master needs to be provided via &lt;code&gt;--jenkins-url&lt;/code&gt; in order for&#xA;the operator to make requests to. By default, &lt;code&gt;--dry-run&lt;/code&gt; is set to &lt;code&gt;true&lt;/code&gt;&#xA;so the operator will not make any mutating requests to Jenkins, GitHub,&#xA;and Kubernetes, but you most probably want to set it to &lt;code&gt;false&lt;/code&gt;.&#xA;The Jenkins operator expects to read the Prow configuration by default&#xA;in &lt;code&gt;/etc/config/config.yaml&lt;/code&gt; which can be configured with &lt;code&gt;--config-path&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>lgtm</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/lgtm/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/lgtm/</guid>
      <description>&lt;p&gt;See &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/approve/approvers/#lgtm-label&#34;&gt;the documentation in the approve plugin for details on the LGTM flow&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maintainer&#39;s Guide to Tide</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/maintainers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/maintainers/</guid>
      <description>&lt;h2 id=&#34;best-practices&#34;&gt;Best practices&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t let humans (or other bots) merge especially if tests have a long duration. Every merge invalidates currently running tests for that pool.&lt;/li&gt;&#xA;&lt;li&gt;Try to limit the total number of queries that you configure. Individual queries can cover many repos and include many criteria without using additional API tokens, but separate queries each require additional API tokens.&lt;/li&gt;&#xA;&lt;li&gt;Ensure that merge requirements configured in GitHub match the merge requirements configured for Tide. If the requirements differ, Tide may try to merge a PR that GitHub considers unmergeable.&lt;/li&gt;&#xA;&lt;li&gt;If you are using the &lt;code&gt;lgtm&lt;/code&gt; plugin and requiring the &lt;code&gt;lgtm&lt;/code&gt; label for merge, don&amp;rsquo;t make queries exclude the &lt;code&gt;needs-ok-to-test&lt;/code&gt; label. The &lt;code&gt;lgtm&lt;/code&gt; plugin triggers one round of testing when applied to an untrusted PR and removes the &lt;code&gt;lgtm&lt;/code&gt; label if the PR changes so it indicates to Tide that the current version of the PR is considered trusted and can be retested safely.&lt;/li&gt;&#xA;&lt;li&gt;Do not enable the &amp;ldquo;Require branches to be up to date before merging&amp;rdquo; GitHub setting for repos managed by Tide. This requires all PRs to be rebased before merge so that PRs are always simple fast-forwards. This is a simplistic way to ensure that PRs are tested against the most recent base branch commit, but Tide already provides this guarantee through a more sophisticated mechanism that does not force PR authors to rebase their PR whenever another PR merges first. Enabling this GH setting may cause unexpected Tide behavior, provides absolutely no benefit over Tide&amp;rsquo;s natural behavior, and forces PR author&amp;rsquo;s to needlessly rebase their PRs. Don&amp;rsquo;t use it on Tide managed repos.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;expected-behavior-that-might-seem-strange&#34;&gt;Expected behavior that might seem strange&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Any merge to a pool kicks all other PRs in the pool back into &lt;code&gt;Queued for retest&lt;/code&gt;. This is because Tide requires PRs to be tested against the most recent base branch commit in order to be merged. When a merge occurs, the base branch updates so any existing or in-progress tests can no longer be used to qualify PRs for merge. All remaining PRs in the pool must be retested.&lt;/li&gt;&#xA;&lt;li&gt;Waiting to merge a successful PR because a batch is pending. This is because Tide prioritizes batches over individual PRs and the previous point tells us that merging the individual PR would invalidate the pending batch. In this case Tide will wait for the batch to complete and will merge the individual PR only if the batch fails. If the batch succeeds, the batch is merged.&lt;/li&gt;&#xA;&lt;li&gt;If the merge requirements for a pool change it may be necessary to &amp;ldquo;poke&amp;rdquo; or &amp;ldquo;bump&amp;rdquo; PRs to trigger an update on the PRs so that Tide will resync the status context. Alternatively, Tide can be restarted to resync all statuses.&lt;/li&gt;&#xA;&lt;li&gt;Tide may merge a PR without retesting if the existing test results are already against the latest base branch commit.&lt;/li&gt;&#xA;&lt;li&gt;It is possible for &lt;code&gt;tide&lt;/code&gt; status contexts on PRs to temporarily differ from the Tide dashboard or Tide&amp;rsquo;s behavior. This is because status contexts are updated asynchronously from the main Tide sync loop and have a separate rate limit and loop period.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;If Prow&amp;rsquo;s PR dashboard indicates that a PR is ready to merge and it appears to meet all merge requirements, but the PR is being ignored by Tide, you may have encountered a rare bug with GitHub&amp;rsquo;s search indexing. &lt;strong&gt;TLDR: If this is the problem, then any update to the PR (e.g. adding a comment) will make the PR visible to Tide again after a short delay.&lt;/strong&gt;&#xA;The longer explanation is that when GitHub&amp;rsquo;s background jobs for search indexing PRs fail, the search index becomes corrupted and the search API will have some incorrect belief about the affected PR, e.g. that it is missing a required label or still has a forbidden one. This causes the search query Tide uses to identify the mergeable PRs to incorrectly omit the PR. Since the same search engine is used by both the API and GitHub&amp;rsquo;s front end, you can confirm that the affected PR is not included in the query for mergeable PRs by using the appropriate &amp;ldquo;GitHub search link&amp;rdquo; from the expandable &amp;ldquo;Merge Requirements&amp;rdquo; section on the Tide status page. You can actually determine which particular index is corrupted by incrementally tweaking the query to remove requirements until the PR is included.&#xA;Any update to the PR causes GitHub to kick off a new search indexing job in the background. Once it completes, the corrupted index should be fixed and Tide will be able to see the PR again in query results, allowing Tide to resume processing the PR. It appears any update to the PR is sufficient to trigger reindexing so we typically just leave a comment. &lt;a href=&#34;https://kubernetes.slack.com/archives/C7J9RP96G/p1671494352250439&#34;&gt;Slack thread&lt;/a&gt; about an example of this.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;other-resources&#34;&gt;Other resources&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/config/&#34;&gt;Configuring Tide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>mkpj</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/mkpj/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/mkpj/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>mkpod</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/mkpod/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/mkpod/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Peribolos</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/peribolos/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/peribolos/</guid>
      <description>&lt;p&gt;Peribolos allows the org settings, teams and memberships to be declared in a yaml file. GitHub is then updated to match the declared configuration.&lt;/p&gt;&#xA;&lt;p&gt;See the &lt;a href=&#34;https://github.com/kubernetes/org&#34;&gt;kubernetes/org&lt;/a&gt; repo, in particular the &lt;a href=&#34;https://github.com/kubernetes/org/tree/master/cmd/merge&#34;&gt;merge&lt;/a&gt; and &lt;a href=&#34;https://github.com/kubernetes/org/blob/master/admin/update.sh&#34;&gt;&lt;code&gt;update.sh&lt;/code&gt;&lt;/a&gt; parts of that repo for this tool in action.&lt;/p&gt;&#xA;&lt;p&gt;Peribolos was the subject of a KubeCon talk: &lt;a href=&#34;https://www.youtube.com/watch?v=te3Xj2zr1Co&#34;&gt;How Kubernetes Uses GitOps to Manage GitHub Communities at Scale&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;etymology&#34;&gt;Etymology&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;https://en.wikipedia.org/wiki/Peribolos&#34;&gt;peribolos&lt;/a&gt; is a wall that encloses a court in Greek/Roman architecture.&lt;/p&gt;&#xA;&lt;h2 id=&#34;org-configuration&#34;&gt;Org configuration&lt;/h2&gt;&#xA;&lt;p&gt;Extend the primary prow &lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/prow/config.yaml&#34;&gt;&lt;code&gt;config.yaml&lt;/code&gt;&lt;/a&gt; document to include a top-level &lt;code&gt;orgs&lt;/code&gt; key that looks like the following:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Phaino</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/phaino/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/phaino/</guid>
      <description>&lt;p&gt;Run prowjobs on your local workstation with &lt;code&gt;phaino&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Plato believed that &lt;a href=&#34;https://en.wikipedia.org/wiki/Theory_of_forms#Forms&#34;&gt;ideas and forms&lt;/a&gt; are the ultimate truth,&#xA;whereas we only see the imperfect physical appearances of those idea.&lt;/p&gt;&#xA;&lt;p&gt;He linkens this in his &lt;a href=&#34;https://en.wikipedia.org/wiki/Allegory_of_the_Cave&#34;&gt;Allegory of the Cave&lt;/a&gt; to someone living in a cave&#xA;who can only see the shadows projected on the wall&#xA;from objects passing in front of a fire.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://en.wiktionary.org/wiki/%CF%86%CE%B1%CE%AF%CE%BD%CF%89&#34;&gt;Phaino&lt;/a&gt; is act of making those imperfect shadows appear.&lt;/p&gt;&#xA;&lt;p&gt;Phaino shares a prefix with &lt;a href=&#34;https://en.wikipedia.org/wiki/Lighthouse_of_Alexandria&#34;&gt;Pharos&lt;/a&gt;, meaning lighthouse and in particular the ancient one in Alexandria.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Phony</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/phony/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/cli-tools/phony/</guid>
      <description>&lt;p&gt;&lt;code&gt;phony&lt;/code&gt; sends fake GitHub webhooks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;running-a-github-event-manager&#34;&gt;Running a GitHub event manager&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;phony&lt;/code&gt; is most commonly used for testing &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/hook/&#34;&gt;&lt;code&gt;hook&lt;/code&gt;&lt;/a&gt; and its &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/&#34;&gt;plugins&lt;/a&gt;, but can be used for testing any externally exposed service configured to receive GitHub events (external plugins).&lt;/p&gt;&#xA;&lt;p&gt;To get an idea of &lt;code&gt;phony&lt;/code&gt;&amp;rsquo;s behavior, start a local instance of &lt;code&gt;hook&lt;/code&gt; with&#xA;this:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go run cmd/hook/main.go \&#xA; --config-path=config/prow/config.yaml \&#xA; --plugin-config=config/prow/plugins.yaml \&#xA; --hmac-secret-file=path/to/hmac \&#xA; --github-token-path=path/to/github-token&#xA;&#xA;# Note:&#xA;# --hmac-secret-file is required for running locally, use the same hmac token for phony below&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Once you have a running server that manages github webhook events, generate an&#xA;&lt;code&gt;hmac&lt;/code&gt; token (same process as in &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/overview/&#34;&gt;prow&lt;/a&gt;), and point a &lt;code&gt;phony&lt;/code&gt; pull&#xA;request event at it with the following:&lt;/p&gt;</description>
    </item>
    <item>
      <title>pipeline</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/undocumented/pipeline/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/undocumented/pipeline/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Plank</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/plank/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/plank/</guid>
      <description>&lt;p&gt;Plank is the controller that manages the job execution and lifecycle for jobs running in k8s.&lt;/p&gt;&#xA;&lt;h3 id=&#34;usage&#34;&gt;Usage&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go run ./cmd/prow-controller-manager --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configuration&#34;&gt;Configuration&lt;/h3&gt;&#xA;&lt;p&gt;GCS and S3 are supported as the job log storage.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# config.yaml&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;plank&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# used to link to job results for decorated jobs (with pod utilities)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;job_url_prefix_config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://&amp;lt;domain&amp;gt;/view&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# used to link to job results for non decorated jobs (without pod utilities)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;job_url_template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;https://&amp;lt;domain&amp;gt;/view/&amp;lt;bucket-name&amp;gt;/pr-logs/pull/{{.Spec.Refs.Repo}}/{{with index .Spec.Refs.Pulls 0}}{{.Number}}{{end}}/{{.Spec.Job}}/{{.Status.BuildID}}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;report_template&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;[Full PR test history](https://&amp;lt;domain&amp;gt;/pr-history?org={{.Spec.Refs.Org}}&amp;amp;repo={{.Spec.Refs.Repo}}&amp;amp;pr={{with index .Spec.Refs.Pulls 0}}{{.Number}}{{end}})&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default_decoration_config_entries&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# All entries that match a job are used, later entries override previous values.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Omission of &amp;#39;repo&amp;#39; and &amp;#39;cluster&amp;#39; fields makes this entry match all jobs.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;timeout&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;4h&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;grace_period&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;15s&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;utility_images&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# pull specs for container images used to construct job pods&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;clonerefs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcr.io/k8s-prow/clonerefs:v20190221-d14461a&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;initupload&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcr.io/k8s-prow/initupload:v20190221-d14461a&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;entrypoint&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcr.io/k8s-prow/entrypoint:v20190221-d14461a&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sidecar&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcr.io/k8s-prow/sidecar:v20190221-d14461a&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;gcs_configuration&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# configuration for uploading job results to GCS&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;bucket&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;bucket-name&amp;gt; or s3://&amp;lt;bucket-name&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;path_strategy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;explicit&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# or `legacy`, `single`&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default_org&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;github-org&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# should not need this if `strategy` is set to explicit&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;default_repo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;github-repo&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# should not need this if `strategy` is set to explicit&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;gcs_credentials_secret&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;secret-name&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# the name of the secret that stores cloud provider credentials&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ssh_key_secrets&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;ssh-secret&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# name of the secret that stores the bot&amp;#39;s ssh keys for GitHub, doesn&amp;#39;t matter what the key of the map is and it will just uses the values&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;repo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;^org/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# some regexp to match against &amp;lt;org/repo&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;timeout:2h&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;cluster&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;-trusted$&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#some regexp to match against the cluster name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# example override to use k8s SA with GCP workload identity rather than&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# a GCP service account key file.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;gcs_credentials_secret&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>PR Author&#39;s Guide to Tide</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/pr-authors/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/pr-authors/</guid>
      <description>&lt;p&gt;If you just want to figure out how to get your PR to merge this is the document for you!&lt;/p&gt;&#xA;&lt;h2 id=&#34;sources-of-information&#34;&gt;Sources of Information&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;The &lt;code&gt;tide&lt;/code&gt; status context at the bottom of your PR.&#xA;The status either indicates that your PR is in the merge pool or explains why it is not in the merge pool. The &amp;lsquo;Details&amp;rsquo; link will take you to either the Tide or PR dashboard.&#xA;&lt;img src=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/tide/status-context.png&#34; alt=&#34;Tide Status Context&#34;&gt;&lt;/li&gt;&#xA;&lt;li&gt;The PR dashboard at &amp;ldquo;&lt;code&gt;&amp;lt;deck-url&amp;gt;&lt;/code&gt;/pr&amp;rdquo; where &lt;code&gt;&amp;lt;deck-url&amp;gt;&lt;/code&gt; is something like &amp;ldquo;&lt;a href=&#34;https://prow.k8s.io&#34;&gt;https://prow.k8s.io&lt;/a&gt;&amp;rdquo;.&#xA;This dashboard shows a card for each of your PRs. Each card shows the current test results for the PR and the difference between the PR state and the merge criteria. &lt;a href=&#34;https://prow.k8s.io/pr&#34;&gt;K8s PR dashboard&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;The Tide dashboard at &amp;ldquo;&lt;code&gt;&amp;lt;deck-url&amp;gt;&lt;/code&gt;/tide&amp;rdquo;.&#xA;This dashboard shows the state of every merge pool so that you can see what Tide is currently doing and what position your PR has in the retest queue. &lt;a href=&#34;https://prow.k8s.io/tide&#34;&gt;K8s Tide dashboard&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;get-your-pr-merged-by-asking-these-questions&#34;&gt;Get your PR merged by asking these questions&lt;/h2&gt;&#xA;&lt;h4 id=&#34;is-my-pr-in-the-merge-pool&#34;&gt;&amp;ldquo;Is my PR in the merge pool?&amp;rdquo;&lt;/h4&gt;&#xA;&lt;p&gt;If the &lt;code&gt;tide&lt;/code&gt; status at the bottom of your PR is successful (green) it is in the merge pool. If it is pending (yellow) it is &lt;em&gt;not&lt;/em&gt; in the merge pool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sidecar</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/sidecar/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/sidecar/</guid>
      <description>&lt;p&gt;&lt;code&gt;sidecar&lt;/code&gt; watches disk for files containing a the &lt;code&gt;std{out,err}&lt;/code&gt; output from a process as well as&#xA;its exit code; when the exit code has been written, this utility uploads a status object, the logs&#xA;from the process and any other specified artifacts to cloud storage. The utility will exit with the&#xA;exit code of the wrapped process or otherwise non-zero if the utility has a fatal error.&lt;/p&gt;&#xA;&lt;p&gt;This utility is intended to be used with &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/pod-utilities/entrypoint/&#34;&gt;&lt;code&gt;entrypoint&lt;/code&gt;&lt;/a&gt;, which will&#xA;write the files watched by this utility.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spyglass Architecture</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/architecture/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/architecture/</guid>
      <description>&lt;p&gt;Spyglass is split into two major parts: the Spyglass core, and a set of independent lenses.&#xA;Lenses are designed to run statelessly and without any knowledge of the world outside being&#xA;provided with a list of artifacts. The core is responsible for selecting lenses and providing them&#xA;with artifacts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;spyglass-core&#34;&gt;Spyglass Core&lt;/h2&gt;&#xA;&lt;p&gt;The Spyglass Core is split across &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/pkg/spyglass&#34;&gt;&lt;code&gt;pkg/spyglass&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/cmd/deck&#34;&gt;&lt;code&gt;cmd/deck&lt;/code&gt;&lt;/a&gt;. It has&#xA;the following responsibilities:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Looking up artifacts for a given job and mapping those to lenses&lt;/li&gt;&#xA;&lt;li&gt;Generating a page that loads the required lenses&lt;/li&gt;&#xA;&lt;li&gt;Framing lenses with their boilerplate&lt;/li&gt;&#xA;&lt;li&gt;Facilitating communication between the lens frontends and backends&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;spyglass-lenses&#34;&gt;Spyglass Lenses&lt;/h2&gt;&#xA;&lt;p&gt;Spyglass Lenses currently all live in &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/pkg/spyglass/lenses&#34;&gt;&lt;code&gt;pkg/spyglass/lenses&lt;/code&gt;&lt;/a&gt;, though hopefully in the&#xA;future they can live elsewhere. Spyglass lenses have the following responsibilities:&lt;/p&gt;</description>
    </item>
    <item>
      <title>status-reconciler</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/status-reconciler/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/status-reconciler/</guid>
      <description>&lt;p&gt;&lt;code&gt;status-reconciler&lt;/code&gt; ensures that changes to blocking presubmits in Prow configuration while PRs are&#xA;in flight do not cause those PRs to get stuck.&lt;/p&gt;&#xA;&lt;p&gt;When the set of blocking presubmits changes for a repository, one of three cases occurs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a new blocking presubmit exists and should be triggered for every trusted pull request in flight&lt;/li&gt;&#xA;&lt;li&gt;an existing blocking presubmit is removed and should have its&amp;rsquo; status retired&lt;/li&gt;&#xA;&lt;li&gt;an existing blocking presubmit is renamed and should have its&amp;rsquo; status migrated&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The &lt;code&gt;status-reconciler&lt;/code&gt; watches the job configuration for Prow and ensures that the above actions&#xA;are taken as necessary.&lt;/p&gt;</description>
    </item>
    <item>
      <title>tackle</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/tackle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/tackle/</guid>
      <description>&lt;p&gt;Prow&amp;rsquo;s &lt;code&gt;tackle&lt;/code&gt; utility walks you through deploying a new instance of prow&#xA;in a couple of minutes, try it out!&lt;/p&gt;&#xA;&lt;h3 id=&#34;installing-tackle&#34;&gt;Installing tackle&lt;/h3&gt;&#xA;&lt;p&gt;Tackle at this point in time needs to be built from source. The following&#xA;steps will walk you through the process:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Clone the &lt;code&gt;test-infra&lt;/code&gt; repository:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone git@github.com:kubernetes/test-infra.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Build &lt;code&gt;tackle&lt;/code&gt; (This requires a working go installation on your system)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; test-infra/prow/cmd/tackle &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; go build -o tackle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Optionally move &lt;code&gt;tackle&lt;/code&gt; to your &lt;code&gt;$PATH&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mv tackle /usr/sbin/tackle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;deploying-prow&#34;&gt;Deploying prow&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Creating a cluster using the &lt;code&gt;tackle&lt;/code&gt; utility assumes you&#xA;have the &lt;code&gt;gcloud&lt;/code&gt; application in your &lt;code&gt;$PATH&lt;/code&gt; and are logged in. If you are&#xA;doing this on another cloud skip to the &lt;strong&gt;Manual deployment&lt;/strong&gt; below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>updateconfig</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/updateconfig/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/updateconfig/</guid>
      <description>&lt;p&gt;&lt;code&gt;updateconfig&lt;/code&gt; allows prow to update configmaps when files in a repo change.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;updateconfig&lt;/code&gt; also supports glob match, or multi-key updates.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;Update your &lt;code&gt;plugins.yaml&lt;/code&gt; file to something along the following lines:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;plugins&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;my-github/repo&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;plugins&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;config-updater&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config_updater&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;maps&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the thing-config configmap whenever thing changes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;path/to/some/other/thing&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;thing-config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# If cluster and namespace configuration are unset, it will be put into the default cluster in the prowjob namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;path/to/some/other/thing2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;thing2-config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Specify the clusters and namespaces that the configmap targets&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# which requires that the --kubeconfig arg is enabled for Hook&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# https://docs.prow.k8s.io/docs/getting-started-deploy/#run-test-pods-in-different-clusters&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# if not set or empty, it uses the cluster where prow components are running&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# and the specified namespace(s)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;clusters&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;others&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;        &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;namespace1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the config configmap whenever config.yaml changes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config/prow/config.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;config&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the plugin configmap whenever plugins.yaml changes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;config/prow/plugins.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;plugin&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the `this` or/and `that` key in the `data` configmap whenever `data.yaml` or/and `other-data.yaml` changes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;some/data.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;this&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;some/other-data.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;that&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the fejtaverse configmap whenever any `.yaml` file under `fejtaverse` changes&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;fejtaverse/**/*.yaml&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;fejtaverse&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Additional throttling algorithm</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/ghproxy/throttling-algorithm/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/ghproxy/throttling-algorithm/</guid>
      <description>&lt;h2 id=&#34;motivation&#34;&gt;Motivation&lt;/h2&gt;&#xA;&lt;p&gt;An additional throttling algorithm was introduced to &lt;code&gt;ghproxy&lt;/code&gt; to prevent secondary rate&#xA;limiting issues (code &lt;code&gt;403&lt;/code&gt;) in large Prow installations, consisting of several organizations.&#xA;Its purpose is to schedule incoming requests to adjust to the GitHub general rate-limiting&#xA;&lt;a href=&#34;https://docs.github.com/en/rest/guides/best-practices-for-integrators#dealing-with-secondary-rate-limits&#34;&gt;guidelines&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;An incoming request is analyzed whether it is targeting GitHub API v3 or API v4.&#xA;Separate queues are formed not only per API but also per organization if Prow installation is&#xA;using GitHub Apps. If a user account in a form of the bot is used, every request coming&#xA;from that user account is categorized as coming from the same organization. This is due to&#xA;the fact, that such a request identifies not using &lt;code&gt;AppID&lt;/code&gt; and organization name, but &lt;code&gt;sha256&lt;/code&gt; token hash.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build a Spyglass Lens</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/write-a-lens/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/write-a-lens/</guid>
      <description>&lt;p&gt;Spyglass lenses consist of two components: a frontend (which may be trivial) and a backend.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lens-backend&#34;&gt;Lens backend&lt;/h2&gt;&#xA;&lt;p&gt;Today, a lens backend must be linked in to the &lt;code&gt;deck&lt;/code&gt; binary. As such, lenses must live under&#xA;&lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/pkg/spyglass/lenses&#34;&gt;&lt;code&gt;pkg/spyglass/lenses&lt;/code&gt;&lt;/a&gt;. Additionally lenses &lt;strong&gt;must&lt;/strong&gt; be in a folder that matches the&#xA;name of the lens. The content of this folder will be served by &lt;code&gt;deck&lt;/code&gt;, enabling you to reference&#xA;static content such as images, stylesheets, or scripts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSRF attacks</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/deck/csrf/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/deck/csrf/</guid>
      <description>&lt;p&gt;In Deck, we make a number of &lt;code&gt;POST&lt;/code&gt; requests that require user authentication. These requests are susceptible&#xA;to &lt;a href=&#34;https://en.wikipedia.org/wiki/Cross-site_request_forgery&#34;&gt;cross site request forgery (CSRF) attacks&lt;/a&gt;,&#xA;in which a malicious actor tricks an already authenticated user into submitting a form to one of these endpoints&#xA;and performing one of these protected actions on their behalf.&lt;/p&gt;&#xA;&lt;h2 id=&#34;protection&#34;&gt;Protection&lt;/h2&gt;&#xA;&lt;p&gt;If &lt;code&gt;--cookie-secret&lt;/code&gt; is 32 or more bytes long, CSRF protection is automatically enabled.&#xA;If &lt;code&gt;--rerun-creates-job&lt;/code&gt; is specified, CSRF protection is required, and accordingly,&#xA;&lt;code&gt;--cookie-secret&lt;/code&gt; must be 32 bytes long.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hook</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/hook/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/hook/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>REST API coverage lens</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/lenses/restcoverage/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/spyglass/lenses/restcoverage/</guid>
      <description>&lt;p&gt;Presents REST endpoints statistics&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;threshold_warning&lt;/code&gt; set threshold for warning highlight&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;threshold_error&lt;/code&gt; set threshold for error highlight&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;expected-input&#34;&gt;Expected input&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;uniqueHits&lt;/code&gt; total number of unique params calls (first hit of any leaf should increase this value)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;expectedUniqueHits&lt;/code&gt; total number of params (leaves)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;percent&lt;/code&gt; is &lt;code&gt;uniqueHits&lt;/code&gt; * 100 / &lt;code&gt;expectedUniqueHits&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;methodCalled&lt;/code&gt; whether the method was called&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;body&lt;/code&gt; body params&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;query&lt;/code&gt; query params&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;root&lt;/code&gt; root of the tree&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;hits&lt;/code&gt; number of all params hits&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;items&lt;/code&gt; collection of nodes, if not present then the node is a leaf&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;height&lt;/code&gt; height of the tree&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;size&lt;/code&gt; size of the tree&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;uniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;expectedUniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;percent&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;50.00&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;endpoints&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;/pets&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;uniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;expectedUniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;percent&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;50.00&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;methodCalled&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;params&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;uniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;expectedUniqueHits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;percent&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;50.00&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;15&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;origin&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                       &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;country&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                           &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                           &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;items&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                               &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                   &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                               &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                               &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;region&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                                   &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                               &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                           &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                       &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;color&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;size&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Fake Git Server (FGS)</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/test/integration/fakegitserver/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/test/integration/fakegitserver/</guid>
      <description>&lt;p&gt;FGS is actually not a fake at all. It is a real web server that serves real Git&#xA;repositories them over HTTP. FGS wraps around the vanilla &lt;code&gt;git http-backend&lt;/code&gt;&#xA;subcommand that comes with Git, calling it as a CGI executable. It supports both&#xA;read (e.g., &lt;code&gt;git clone&lt;/code&gt;, &lt;code&gt;git fetch&lt;/code&gt;) and write (e.g., &lt;code&gt;git push&lt;/code&gt;) operations&#xA;against it.&lt;/p&gt;&#xA;&lt;p&gt;FGS is used for integration tests. See &lt;code&gt;TestClonerefs&lt;/code&gt; for an example.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage-in-integration-testing&#34;&gt;Usage in Integration Testing&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;fakegitserver.go&lt;/code&gt; file is built automatically by &lt;code&gt;hack/prowimagebuilder&lt;/code&gt;,&#xA;and we deploy it to the KIND cluster. Inside the cluster, it accepts web traffic&#xA;at the endpoint &lt;code&gt;http://fakegitserver.default&lt;/code&gt; (&lt;code&gt;http://localhost/fakegitserver&lt;/code&gt;&#xA;from outside of the KIND cluster).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gangway (Prow API)</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gangway/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gangway/</guid>
      <description>&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;&#xA;&lt;p&gt;See the &lt;a href=&#34;https://docs.google.com/document/d/1v77jp1Nb5C2C2-PdV02SGViO9CyZ9SvNxCPOHyIUQeo/edit?usp=sharing&#34;&gt;design doc&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Gangway uses gRPC to serve several endpoints. These can be seen in the&#xA;&lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/gangway/gangway.proto&#34;&gt;&lt;code&gt;gangway.proto&lt;/code&gt;&lt;/a&gt; file, which describes the gRPC endpoints. The&#xA;proto describes the interface at a high level, and is converted into low-level&#xA;Golang types into &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/gangway/gangway.pb.go&#34;&gt;&lt;code&gt;gangway.pb.go&lt;/code&gt;&lt;/a&gt; and&#xA;&lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/gangway/gangway_grpc.pb.go&#34;&gt;&lt;code&gt;gangway_grpc.pb.go&lt;/code&gt;&lt;/a&gt;. These low-level Golang types are&#xA;then used in the  &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/gangway/gangway.go&#34;&gt;&lt;code&gt;gangway.go&lt;/code&gt;&lt;/a&gt; file to implement the high-level&#xA;intent of the proto file.&lt;/p&gt;&#xA;&lt;p&gt;As Gangway only understands gRPC natively, if you want to use a REST client&#xA;against it you must deploy Gangway. For example, on GKE you can use Cloud&#xA;Endpoints and deploy Gangway behind a reverse proxy called &amp;ldquo;ESPv2&amp;rdquo;. This ESPv2&#xA;container will forward HTTP requests made to it to the equivalent gRPC endpoint&#xA;in Gangway and back again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GKE Build Clusters</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/build-clusters/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/build-clusters/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This page discusses build clusters that use GKE. Technically speaking, a&#xA;build cluster could be any Kubernetes cluster (not just GKE) because the only&#xA;thing Prow needs is the ability to authenticate as a Kubernetes Service Account&#xA;with cluster-admin role permissions to the build cluster.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;By default Prow will schedule jobs in the cluster that maps to a kubeconfig&#xA;alias named &amp;ldquo;default&amp;rdquo; (imagine running &lt;code&gt;kubectl config set-context &amp;quot;default&amp;quot; --cluster=&amp;lt;CLUSTER_CONTEXT&amp;gt;&lt;/code&gt;, where the &lt;code&gt;&amp;lt;CLUSTER_CONTEXT&amp;gt;&lt;/code&gt; could be any&#xA;cluster). So the jobs can be scheduled either in the same cluster that is&#xA;hosting Prow itself, or a different one. For example the &amp;ldquo;default&amp;rdquo; cluster&#xA;in &lt;a href=&#34;https://prow.k8s.io&#34;&gt;https://prow.k8s.io&lt;/a&gt; is the build cluster located in&#xA;the &lt;code&gt;k8s-prow-builds&lt;/code&gt; GCP project and not the &lt;code&gt;k8s-prow&lt;/code&gt; GCP project where the&#xA;Prow services actually run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Horologium</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/horologium/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/horologium/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prow-Controller-Manager</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/prow-controller-manager/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/prow-controller-manager/</guid>
      <description>&lt;p&gt;&lt;code&gt;prow-controller-manager&lt;/code&gt; manages the job execution and lifecycle for jobs running in k8s.&lt;/p&gt;&#xA;&lt;p&gt;It currently acts as a replacement for &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/plank/&#34;&gt;Plank&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It is intended to eventually replace other components, such as &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/sinker/&#34;&gt;Sinker&lt;/a&gt; and &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/crier/&#34;&gt;Crier&lt;/a&gt;.&#xA;See the tracking issue &lt;a href=&#34;https://github.com/kubernetes/test-infra/issues/17024&#34;&gt;#17024&lt;/a&gt; for details.&lt;/p&gt;&#xA;&lt;h3 id=&#34;advantages&#34;&gt;Advantages&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Eventbased rather than cronbased, hence reacting much faster to changes in prowjobs or pods&lt;/li&gt;&#xA;&lt;li&gt;Per-Prowjob retrying, meaning genuinely broken prowjobs will not be retried forever and transient errors will be retried much quicker&lt;/li&gt;&#xA;&lt;li&gt;Uses a cache for the build cluster rather than doing a LIST every 30 seconds, reducing the load on the build clusters api server&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;exclusion-with-other-components&#34;&gt;Exclusion with other components&lt;/h3&gt;&#xA;&lt;p&gt;This is mutually exclusive with only &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/deprecated/plank/&#34;&gt;Plank&lt;/a&gt;.&#xA;Only one of them may have more than zero replicas at the same time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sinker</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/sinker/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/sinker/</guid>
      <description>&lt;p&gt;This is a placeholder page. Some contents needs to be filled.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building, Testing, and Updating Prow</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/build-test-update/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/build-test-update/</guid>
      <description>&lt;p&gt;This guide is directed at Prow developers and maintainers who want to build/test individual components or deploy changes to an existing Prow cluster. &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-deploy/&#34;&gt;&amp;ldquo;Deploying Prow&amp;rdquo;&lt;/a&gt; is a better reference for deploying a new Prow cluster.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-build-and-test-prow&#34;&gt;How to build and test Prow&lt;/h2&gt;&#xA;&lt;p&gt;You can build, test, and deploy Prow’s binaries, container images, and cluster resources.&lt;/p&gt;&#xA;&lt;p&gt;Build locally with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make build-images&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Push to remote with&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make push-images &lt;span style=&#34;color:#000&#34;&gt;REGISTRY&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&amp;lt;YOUR_REGISTRY&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unit test with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;make &lt;span style=&#34;color:#204a87&#34;&gt;test&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Integration test with(&lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/test/integration/&#34;&gt;more details&lt;/a&gt;):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying Prow</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-deploy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-deploy/</guid>
      <description>&lt;p&gt;This document will walk you through deploying your own Prow instance to a new Kubernetes cluster. If you encounter difficulties, please open an issue so that we can make this process easier.&lt;/p&gt;&#xA;&lt;p&gt;Prow runs in any kubernetes cluster. The guide below is focused on &lt;a href=&#34;https://cloud.google.com/kubernetes-engine/&#34;&gt;Google Kubernetes Engine&lt;/a&gt; but should work on any kubernetes distro with no/minimal changes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;github-app&#34;&gt;GitHub App&lt;/h2&gt;&#xA;&lt;p&gt;First, you need to create a GitHub app. GitHub itself &lt;a href=&#34;https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app&#34;&gt;documents this.&lt;/a&gt;&#xA;Initially, it is sufficient to set a dummy url for the Webhook.&#xA;The exact set of permissions needed varies based on what functionality you use. Below is a minimum&#xA;set of permissions needed. Please keep in mind that any changes to the permissions your&#xA;app requests (both added and removed) require everyone to re-install it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developing and Contributing to Prow</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-develop/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-develop/</guid>
      <description>&lt;h2 id=&#34;contributing&#34;&gt;Contributing&lt;/h2&gt;&#xA;&lt;p&gt;Please consider upstreaming any changes or additions you make! Contributions in any form (issues, pull requests, even constructive comments in discussions) are more than welcome!&#xA;You can develop in-tree for more help and review, or out-of-tree if you need to for whatever reason. If you upstream a new feature or a change that impacts the default behavior of Prow, consider adding an &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/announcements/&#34;&gt;announcement&lt;/a&gt; about it and dropping an email at the &lt;a href=&#34;https://groups.google.com/forum/#!forum/kubernetes-sig-testing&#34;&gt;sig-testing&lt;/a&gt; mailing list.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting more out of Prow</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/more-prow/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/more-prow/</guid>
      <description>&lt;p&gt;If you want more functionality from your Prow instance this guide is for you. It primarily links to other resources that catalogue existing components and features.&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-more-prow-components-and-plugins&#34;&gt;Use more Prow components and plugins&lt;/h2&gt;&#xA;&lt;p&gt;Prow has a number of optional cluster components and a suite of plugins for &lt;code&gt;hook&lt;/code&gt; that provide all sorts of automation. Check out the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/&#34;&gt;Components&lt;/a&gt; for a list of cluster components and the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/&#34;&gt;Plugins&lt;/a&gt; for information about available plugins.&lt;/p&gt;&#xA;&lt;h2 id=&#34;consume-prometheus-metrics&#34;&gt;Consume Prometheus metrics&lt;/h2&gt;&#xA;&lt;p&gt;Some Prow components expose prometheus metrics that can be used for monitoring, alerting, and pretty graphs. You can find details in the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/metrics/&#34;&gt;Metrics&lt;/a&gt; document.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub API Library</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/github/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/github/</guid>
      <description>&lt;p&gt;This GitHub API library is used by multiple parts of Prow.&#xA;It uses both &lt;a href=&#34;https://developer.github.com/v3/&#34;&gt;v3&lt;/a&gt; and &lt;a href=&#34;https://developer.github.com/v4/&#34;&gt;v4&lt;/a&gt;&#xA;of GitHub&amp;rsquo;s API. It is subject to change as needed without notice, but you can reuse and extend it&#xA;within this repository.&lt;/p&gt;&#xA;&lt;p&gt;Its primary component is &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/github/client.go&#34;&gt;client.go&lt;/a&gt;, a GitHub client that sends and receives API calls.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recommended-usage&#34;&gt;Recommended Usage&lt;/h2&gt;&#xA;&lt;h3 id=&#34;instantiation&#34;&gt;Instantiation&lt;/h3&gt;&#xA;&lt;p&gt;An application that takes flags may want to set GitHub flags, such as a proxy endpoint. To do that,&#xA;&lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/flagutil/github.go&#34;&gt;GitHubOptions&lt;/a&gt; has a method that returns a GitHub client.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inrepoconfig</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/inrepoconfig/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/inrepoconfig/</guid>
      <description>&lt;p&gt;Inrepoconfig is a Prow feature that allows versioning Presubmit and Postsubmit&#xA;jobs in the same repository that also holds the code (with a &lt;code&gt;.prow&lt;/code&gt; directory&#xA;or &lt;code&gt;.prow.yaml&lt;/code&gt; file, akin to a &lt;code&gt;.travis.yaml&lt;/code&gt; file). So instead of having all&#xA;your jobs defined centrally, you could instead define the jobs in a distributed&#xA;manner, coupled closely with the source code repos that they work on.&lt;/p&gt;&#xA;&lt;p&gt;If enabled, Prow will use both the centrally-defined jobs and the ones defined&#xA;in the code repositories. The latter ones are dynamically loaded on-demand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Life of a Prow Job</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/life-of-a-prow-job/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/life-of-a-prow-job/</guid>
      <description>&lt;p&gt;NOTE: This document uses &lt;a href=&#34;https://github.com/kubernetes/test-infra/tree/5df7636b83cab54e248e550a31dbf1e4731197a6&#34;&gt;5df7636b83cab54e248e550a31dbf1e4731197a6&lt;/a&gt; (July 21, 2021) as a reference point for all code links.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s pretend a user comments &lt;code&gt;/test all&lt;/code&gt; on a Pull Request (PR).&#xA;In response, GitHub posts this comment to Prow via a &lt;a href=&#34;https://developer.github.com/webhooks/&#34;&gt;webhook&lt;/a&gt;.&#xA;See &lt;a href=&#34;https://github.com/kubernetes/test-infra/tree/5df7636b83cab54e248e550a31dbf1e4731197a6/prow/cmd/phony/examples&#34;&gt;examples for webhook payloads&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Prow&amp;rsquo;s Kubernetes cluster uses an &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/ingress/&#34;&gt;ingress resource&lt;/a&gt; for terminating TLS, and routes traffic to the &lt;strong&gt;hook&lt;/strong&gt; &lt;a href=&#34;https://kubernetes.io/docs/concepts/services-networking/service/&#34;&gt;service resource&lt;/a&gt;, finally sending the traffic to the &lt;strong&gt;hook&lt;/strong&gt; application, which is defined as a &lt;a href=&#34;https://kubernetes.io/docs/concepts/workloads/controllers/deployment/&#34;&gt;deployment&lt;/a&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prow Configuration</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/config/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/config/</guid>
      <description>&lt;p&gt;Core Prow component configuration is managed by the &lt;code&gt;config&lt;/code&gt; package and stored in the &lt;a href=&#34;https://godoc.org/sigs.k8s.io/prow/pkg/config#Config&#34;&gt;&lt;code&gt;Config&lt;/code&gt; struct&lt;/a&gt;. If a configuration guide is available for a component it can be found in the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/&#34;&gt;&amp;ldquo;Components&amp;rdquo;&lt;/a&gt; directory. See &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/jobs/&#34;&gt;&lt;code&gt;jobs.md&lt;/code&gt;&lt;/a&gt; for a guide to configuring ProwJobs.&#xA;Configuration for plugins is handled and stored separately. See the &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/&#34;&gt;&lt;code&gt;plugins&lt;/code&gt;&lt;/a&gt; package for details.&lt;/p&gt;&#xA;&lt;p&gt;You can find a sample config with all possible options and a documentation of them &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/blob/main/pkg/config/prow-config-documented.yaml&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prow Secrets Management</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/prow-secrets/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/prow-secrets/</guid>
      <description>&lt;p&gt;Secrets in prow service/build clusters are managed with &lt;a href=&#34;https://github.com/external-secrets/kubernetes-external-secrets&#34;&gt;Kubernetes External&#xA;Secrets&lt;/a&gt;, which is responsible for one-way syncing secret values from major&#xA;secret manager providers such as GCP, Azure, and AWS secret managers into&#xA;kubernetes clusters, based on &lt;code&gt;ExternalSecret&lt;/code&gt; custom resource defined in&#xA;cluster (As shown in example below).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note: the instructions below are only for GCP secret manager, for&#xA;authenticating with other providers please refer to&#xA;&lt;a href=&#34;https://github.com/external-secrets/kubernetes-external-secrets#backends&#34;&gt;https://github.com/external-secrets/kubernetes-external-secrets#backends&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;set-up-prow-maintainers&#34;&gt;Set Up (Prow maintainers)&lt;/h2&gt;&#xA;&lt;p&gt;This is performed by prow service/build clusters maintainer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gerrit</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/gerrit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/gerrit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.gerritcodereview.com/&#34;&gt;Gerrit&lt;/a&gt; is a free, web-based team code collaboration tool.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-deployments&#34;&gt;Related Deployments&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prow-gerrit adapter (&lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/gerrit/&#34;&gt;doc&lt;/a&gt;, &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/cmd/gerrit&#34;&gt;code&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Crier (the reporter) (&lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/core/crier/&#34;&gt;doc&lt;/a&gt;, &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/cmd/crier&#34;&gt;code&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;related-packages&#34;&gt;Related packages&lt;/h2&gt;&#xA;&lt;h4 id=&#34;client&#34;&gt;Client&lt;/h4&gt;&#xA;&lt;p&gt;We have a &lt;a href=&#34;https://github.com/kubernetes-sigs/prow/tree/main/pkg/gerrit/client&#34;&gt;gerrit-client package&lt;/a&gt; that provides a thin wrapper around&#xA;&lt;a href=&#34;https://github.com/andygrunwald/go-gerrit&#34;&gt;andygrunwald/go-gerrit&lt;/a&gt;, which is a go client library&#xA;for accessing the &lt;a href=&#34;https://gerrit-review.googlesource.com/Documentation/rest-api.html&#34;&gt;Gerrit Code Review REST API&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can create a client instance by pass in a map of instance-name:project-ids, and pass in an oauth token path to&#xA;start the client, like:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;projects&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;map&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;string&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;][]&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;string&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;foo.googlesource.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;project-bar&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;project-baz&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;gerrit&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;NewClient&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;projects&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;// handle error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Start&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;cookiefilePath&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The client will try to refetch token from the path every 10 minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sub</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/sub/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/sub/</guid>
      <description>&lt;p&gt;Sub is a Prow component that can trigger new Prow jobs (PJs) using Pub/Sub&#xA;messages.  The message does not need to have the full PJ defined; instead you&#xA;just need to have the job name and some other key pieces of information (more on&#xA;this below). The rest of the data needed to create a full-blown PJ is derived&#xA;from the main Prow configuration (or inrepoconfig).&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment-usage&#34;&gt;Deployment Usage&lt;/h2&gt;&#xA;&lt;p&gt;Sub can listen to Pub/Sub subscriptions (known as &amp;ldquo;pull subscriptions&amp;rdquo;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ProwJobs</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/jobs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/jobs/</guid>
      <description>&lt;p&gt;For a brief overview of how Prow runs jobs take a look at &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/life-of-a-prow-job/&#34;&gt;&amp;ldquo;Life of a Prow Job&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For a brief cookbook for jobs intended for &lt;a href=&#34;https://prow.k8s.io/&#34;&gt;prow.k8s.io&lt;/a&gt;, please refer to&#xA;&lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/jobs/README.md&#34;&gt;&lt;code&gt;config/jobs/README.md&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Make sure Prow has been &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/getting-started-deploy/&#34;&gt;deployed&lt;/a&gt; correctly:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The &lt;code&gt;horologium&lt;/code&gt; component schedules periodic jobs.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;hook&lt;/code&gt; component schedules presubmit and postsubmit jobs, ensuring the repo:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;enabled &lt;code&gt;trigger&lt;/code&gt; in &lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/prow/plugins.yaml&#34;&gt;&lt;code&gt;plugins.yaml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;sends GitHub webhooks to prow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;plank&lt;/code&gt; component schedules the pod requested by a prowjob.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;crier&lt;/code&gt; component reports status back to github.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-to-configure-new-jobs&#34;&gt;How to configure new jobs&lt;/h2&gt;&#xA;&lt;p&gt;To configure a new job you&amp;rsquo;ll need to add an entry into &lt;a href=&#34;https://github.com/kubernetes/test-infra/blob/master/config/prow/config.yaml&#34;&gt;config.yaml&lt;/a&gt;.&#xA;If you have &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/components/plugins/updateconfig/&#34;&gt;update-config&lt;/a&gt; plugin deployed then the&#xA;config will be automatically updated once the PR is merged, else you will need&#xA;to run &lt;code&gt;make update-config&lt;/code&gt;. This does not require redeploying any binaries,&#xA;and will take effect within a few minutes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up Private Deck</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/private-deck/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/private-deck/</guid>
      <description>&lt;h2 id=&#34;1-user-create-a-pr-to-set-up-tenantids-for-prowjobs-and-repos&#34;&gt;1) [User] Create a PR to Set up TenantIDs for prowjobs and Repos&lt;/h2&gt;&#xA;&lt;p&gt;Prow users should create a PR creating tenantID defaults for their org/repos and clusters. Once you set up a tenantID, all prowjobs labelled with that tenantID will only be visible on Deck instances created with the same tenantID. If you already have prowjobs that you don&amp;rsquo;t want to lose access to on Deck, do this step last. If not, do it first to make sure prowjobs you want to keep sequestered do not appear on other instances of Deck.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Prow at Scale</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/scaling/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/scaling/</guid>
      <description>&lt;p&gt;If you are maintaining a Prow instance that will need to scale to handle a large&#xA;load, consider using the following best practices, features, and additional tools.&#xA;You may also be interested in &lt;a href=&#34;https://deploy-preview-674--k8s-prow.netlify.app/docs/more-prow/&#34;&gt;&amp;ldquo;Getting more out of Prow&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features-and-tools&#34;&gt;Features and Tools&lt;/h2&gt;&#xA;&lt;h3 id=&#34;separate-build-clusters&#34;&gt;Separate Build Cluster(s)&lt;/h3&gt;&#xA;&lt;p&gt;It is frequently not secure to run all ProwJobs in the same cluster that runs&#xA;Prow&amp;rsquo;s service components (&lt;code&gt;hook&lt;/code&gt;, &lt;code&gt;plank&lt;/code&gt;, etc.). In particular, ProwJobs that&#xA;execute presubmit tests for OSS projects should typically be isolated from&#xA;Prow&amp;rsquo;s microservices. This isolation prevents a malicious PR author from&#xA;modifying the presubmit test to do something evil like breaking out of the&#xA;container and stealing secrets that live in the cluster or DOSing a&#xA;cluster-internal Prow component service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Started.json and Finished.json</title>
      <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/metadata-artifacts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://deploy-preview-674--k8s-prow.netlify.app/docs/metadata-artifacts/</guid>
      <description>&lt;h3 id=&#34;context&#34;&gt;Context&lt;/h3&gt;&#xA;&lt;p&gt;Prow uploads a host of artifacts throughout the life cycle of a job. Two of these artifacts that are present in each run are &lt;code&gt;started.json&lt;/code&gt; and &lt;code&gt;finished.json&lt;/code&gt; which contain a host of information pertaining to the job/run. These files have existed through the evolution of Kubernetes CI: from Jenkins -&amp;gt; Containerized Jenkins -&amp;gt; Bootstrap Containerized Jenkins -&amp;gt; Bootstrap Prow -&amp;gt; PodUtils. As of 2021, all jobs exist within either Bootstrap Prow or PodUtils. As the CI has evolved, so has &lt;code&gt;started/finished.json&lt;/code&gt; and it&amp;rsquo;s function.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
