<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Porch Concepts on Porch Documentation</title><link>/docs/2_concepts/</link><description>Recent content in Porch Concepts on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/docs/2_concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Packages</title><link>/docs/2_concepts/package/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/package/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Warning&lt;/div&gt;
&lt;p&gt;A &amp;ldquo;Porch package&amp;rdquo; is a collection of &lt;strong&gt;package revisions on the same kpt package&lt;/strong&gt;. Porch does not have the concept of a
&amp;ldquo;Package&amp;rdquo; internally - whenever an API request is received on a package, Porch composes the response from the package revisions
associated with the kpt package. When users say they are creating, editing, or upgrading &amp;ldquo;a package&amp;rdquo; in Porch, they are
manipulating a &lt;strong&gt;PackageRevision&lt;/strong&gt; resource and its paired &lt;strong&gt;PackageRevisionResources&lt;/strong&gt; resource. These are Porch&amp;rsquo;s Kubernetes
API interpretations of kpt package metadata and contents stored in Git repositories.&lt;/p&gt;</description></item><item><title>Repositories</title><link>/docs/2_concepts/repositories/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/repositories/</guid><description>&lt;h2 id="what-is-a-repository-in-porch"&gt;What is a Repository in Porch?&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;Repository&lt;/strong&gt; is a Kubernetes resource that connects Porch to a Git repository where kpt packages are stored. When you
register a repository with Porch, you&amp;rsquo;re creating a Repository resource that tells Porch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Where the storage backend is located (Git URL)
&lt;ul&gt;
&lt;li&gt;including a particular branch within the repository - the deployment branch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;How to authenticate (via references to a Kubernetes Secret containing the credentials)&lt;/li&gt;
&lt;li&gt;Whether it&amp;rsquo;s a deployment repository (packages ready for deployment)&lt;/li&gt;
&lt;li&gt;How often to sync/refresh the package revision cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Repositories can be accessed using the short name &lt;code&gt;repo&lt;/code&gt; for convenience (e.g., &lt;code&gt;kubectl get repo&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Package Revisions</title><link>/docs/2_concepts/package-revisions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/package-revisions/</guid><description>&lt;h2 id="what-is-a-package-revision"&gt;What is a Package Revision?&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;package revision&lt;/strong&gt; is the actual working unit in Porch. While users may often refer to &amp;ldquo;working with a package&amp;rdquo;, they
are actually working with a specific revision of that package.&lt;/p&gt;
&lt;p&gt;Think of it like Git commits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Git repository contains a project&lt;/li&gt;
&lt;li&gt;Each commit is a specific version of that project&lt;/li&gt;
&lt;li&gt;You work with commits, not the abstract &amp;ldquo;project&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Similarly in Porch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A Repository contains kpt packages&lt;/li&gt;
&lt;li&gt;Each package revision is a specific version of a kpt package&lt;/li&gt;
&lt;li&gt;You work with package revisions, not the abstract &amp;ldquo;package&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="published-package-revision-numbering"&gt;Published Package Revision Numbering&lt;/h2&gt;&lt;p&gt;Package revisions use simple integer sequence versioning (&lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, etc.):&lt;/p&gt;</description></item><item><title>Workspace</title><link>/docs/2_concepts/workspace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/workspace/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Warning&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Workspace is merely a unique ID for a package revision!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The content of this page will shortly be updated to reflect this fact and moved into the PackageRevision page!&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id="what-is-a-workspace"&gt;What is a Workspace?&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;workspace&lt;/strong&gt; is a named, isolated environment for working on a package revision in Porch. Each Draft or Proposed
package revision has a unique workspace name that identifies the specific set of changes being made to a package.&lt;/p&gt;</description></item><item><title>Package Revision Lifecycle</title><link>/docs/2_concepts/package-revision-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/package-revision-lifecycle/</guid><description>&lt;h2 id="what-is-package-revision-lifecycle"&gt;What is Package Revision Lifecycle?&lt;/h2&gt;&lt;p&gt;The &lt;strong&gt;lifecycle&lt;/strong&gt; of a package revision refers to its current stage in Porch&amp;rsquo;s orchestration process. A package revision
moves through different stages from creation to publication, with approval gates between stages.&lt;/p&gt;
&lt;h2 id="lifecycle-stages"&gt;Lifecycle Stages&lt;/h2&gt;&lt;h3 id="draft"&gt;Draft&lt;/h3&gt;&lt;p&gt;A package revision in &lt;strong&gt;Draft&lt;/strong&gt; stage is work in progress. It is being actively edited and not ready for deployment. If
it is being cached by the 
&lt;a href="/docs/5_architecture_and_components/package-cache/cr-cache/"&gt;CR cache&lt;/a&gt;,
its contents are stored in a temporary branch in the Git repository (e.g., &lt;code&gt;drafts/package-name/workspace&lt;/code&gt;). If it is
being cached by the 
&lt;a href="/docs/5_architecture_and_components/package-cache/db-cache/"&gt;DB cache&lt;/a&gt;,
its contents are only stored in the database and do not appear in Git at all.&lt;/p&gt;</description></item><item><title>Upstream &amp; Downstream</title><link>/docs/2_concepts/upstream-downstream/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/upstream-downstream/</guid><description>&lt;h2 id="what-are-upstream-and-downstream-packages"&gt;What are Upstream and Downstream Packages?&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Upstream&lt;/strong&gt; and &lt;strong&gt;downstream&lt;/strong&gt; describe source-to-derivation relationship between packages and package revisions in Porch.
This relationship is fundamental to package reuse, customization, upgrade control, and lifecycle management.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Upstream package&lt;/strong&gt;: The source or template package that provides the base content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Downstream package&lt;/strong&gt;: A derived package created by cloning or copying from an upstream package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This relationship enables package reuse across teams and environments, centralized maintenance of template packages, tracking of package lineage and updates, and automated propagation of upstream changes to downstream packages.&lt;/p&gt;</description></item><item><title>KRM Functions</title><link>/docs/2_concepts/functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/functions/</guid><description>&lt;h2 id="what-are-functions-in-porch"&gt;What are Functions in Porch?&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Functions&lt;/strong&gt; in Porch are 
&lt;a href="https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md" target="_blank"&gt;KRM (Kubernetes Resource Model) functions&lt;/a&gt; -
containerized programs that transform or validate Kubernetes resource manifests within a package&amp;rsquo;s files. Functions are
declared in a package&amp;rsquo;s Kptfile and executed by Porch when rendering the package.&lt;/p&gt;
&lt;p&gt;Functions enable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automated resource generation and modification&lt;/li&gt;
&lt;li&gt;Policy enforcement and validation&lt;/li&gt;
&lt;li&gt;Configuration customization without manual editing&lt;/li&gt;
&lt;li&gt;Repeatable, auditable transformations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details on how to declare and configure functions in the Kptfile pipeline, see the 
&lt;a href="https://kpt.dev/book/04-using-functions/" target="_blank"&gt;kpt functions documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Subpackages</title><link>/docs/2_concepts/subpackages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/subpackages/</guid><description>&lt;h2 id="what-are-subpackages"&gt;What are Subpackages?&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;subpackage&lt;/strong&gt; is a kpt package nested within a parent package at a specific subdirectory. Subpackages have a &lt;code&gt;Kptfile&lt;/code&gt; that can
be used to apply specific mutations or validations to the contents of the subpackage. See

&lt;a href="https://kpt.dev/book/03-packages" target="_blank"&gt;the kpt package documentation&lt;/a&gt; for a description of dependent and independent subpackages.&lt;/p&gt;
&lt;h2 id="what-is-an-independent-subpackage"&gt;What is an Independent Subpackage?&lt;/h2&gt;&lt;p&gt;An &lt;strong&gt;independent subpackage&lt;/strong&gt; maintains its own upstream source and can be independently upgraded. Unlike regular package contents
and dependent subpackages that are managed as a single unit, independent subpackages retain upstream tracking information in their
&lt;code&gt;Kptfile&lt;/code&gt;, enabling them to be upgraded separately from the parent package.&lt;/p&gt;</description></item><item><title>Package Variants and Package Variant Sets</title><link>/docs/2_concepts/package-variant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/2_concepts/package-variant/</guid><description>&lt;h2 id="what-are-packagevariants"&gt;What are PackageVariants?&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;PackageVariant&lt;/strong&gt; is a Kubernetes custom resource that automates the creation and maintenance of downstream package
revisions based on an upstream package. It establishes a relationship between an upstream (source) package and one or
more downstream (target) packages, automatically keeping them synchronized.&lt;/p&gt;
&lt;p&gt;PackageVariants enable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatic cloning of package revisions from upstream to downstream repositories&lt;/li&gt;
&lt;li&gt;Continuous tracking of package revisions of the upstream package&lt;/li&gt;
&lt;li&gt;Automated creation of new downstream revisions when a new revision of the upstream is published&lt;/li&gt;
&lt;li&gt;Customization of downstream package revisions through injectors, functions, and package context&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-packagevariants-work"&gt;How PackageVariants Work&lt;/h2&gt;&lt;p&gt;Porch&amp;rsquo;s PackageVariant controller watches for changes to:&lt;/p&gt;</description></item></channel></rss>