<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Optional Components on Prow</title>
    <link>https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/</link>
    <description>Recent content in Optional Components on Prow</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://deploy-preview-674--k8s-prow.netlify.app/docs/components/optional/index.xml" rel="self" type="application/rss+xml" />
    <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>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>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>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>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>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>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>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>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>
  </channel>
</rss>
