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