<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Armory Docs – GitHub Integration Plugin for Spinnaker</title><link>/plugins/github-integration/</link><description>Recent content in GitHub Integration Plugin for Spinnaker on Armory Docs</description><generator>Hugo -- gohugo.io</generator><atom:link href="/plugins/github-integration/index.xml" rel="self" type="application/rss+xml"/><item><title>Plugins: GitHub Integration Plugin for Spinnaker Overview</title><link>/plugins/github-integration/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/overview/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary"> &lt;img src="/images/beta.svg" alt="Beta">&lt;/p>
&lt;h2 id="github-integration-plugin-features">GitHub Integration Plugin features&lt;/h2>
&lt;p>The GitHub Integration Plugin provides the following GitHub integration features:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="/plugins/github-integration/use/#trigger-github-workflows-from-spinnaker-pipelines">Trigger a GitHub Actions workflow&lt;/a> from a Spinnaker pipeline using &lt;strong>workflow_dispatch&lt;/strong> or &lt;strong>repository_dispatch&lt;/strong> events.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/use/#workflow-success-trigger">Trigger a Spinnaker pipeline automatically when a GitHub workflow finishes successfully&lt;/a>.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/use/#new-deployment-trigger">Trigger a Spinnaker pipeline when GitHub creates a new GitHub Deployment&lt;/a>.&lt;/li>
&lt;li>Monitor a GitHub workflow and finish pipeline execution based on the GitHub workflow result.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/use/#create-github-commit-status">Update GitHub deployment status based on Spinnaker pipeline outcome&lt;/a>.&lt;/li>
&lt;li>View GitHub Action Logs in Spinnaker &amp;ndash; there is no need to navigate to GitHub to view the logs.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/validate-github-access/">Validate GitHub access&lt;/a> based on configuration assigned to a GitHub App account.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/commit-status-notifications/">Create GitHub commit statuses&lt;/a> using Echo.&lt;/li>
&lt;li>&lt;a href="/plugins/github-integration/authz/">Use AuthZ&lt;/a> for your GitHub Accounts.&lt;/li>
&lt;/ul>
&lt;p>The GitHub Integration plugin uses &lt;a href="https://docs.github.com/en/apps/overview">GitHub Apps&lt;/a> to integrate with GitHub. GitHup Apps provide webhooks and narrow, specific permissions. You can install a GitHub App that gives the GitHub Integration plugin access to all the repos in your GitHub organization, or you can install a Github App that gives the GitHub Integration plugin access to specific repos. You can install as many GitHub Apps as your use case requires.&lt;/p>
&lt;h2 id="how-the-plugin-works-with-github">How the plugin works with GitHub&lt;/h2>
&lt;pre class="mermaid">graph TD
Orca --&amp;gt;|Workflow Trigger| Igor
Gate --&amp;gt; |Trigger based on Deployment event|Echo
Igor --&amp;gt;|Trigger/Monitor triggered workflows| GitHub
Echo --&amp;gt;|Pipeline triggers|Orca
Orca --&amp;gt;|Pipeline notifications|Echo
GitHub --&amp;gt; |Deployment event| Gate
Echo --&amp;gt; |Notifications|GitHub&lt;/pre>
&lt;p>For example, the plugin processes a GitHub Deployment event like this:&lt;/p>
&lt;pre class="mermaid">sequenceDiagram
participant ghActions as &amp;#34;GitHub Workflow job&amp;#34;
participant gh as &amp;#34;GitHub&amp;#34;
participant gate as &amp;#34;Gate&amp;#34;
participant echo as &amp;#34;Echo&amp;#34;
participant orca as &amp;#34;Orca&amp;#34;
ghActions -&amp;gt;&amp;gt; gh: &amp;#34;Create Deployment&amp;#34;
gh -&amp;gt;&amp;gt; ghActions: &amp;#34;Deployment created&amp;#34;
gh -&amp;gt;&amp;gt; gate: &amp;#34;Deployment Event&amp;#34;
gate -&amp;gt;&amp;gt; echo: &amp;#34;Deployment trigger event&amp;#34;
echo -&amp;gt;&amp;gt; orca: &amp;#34;Trigger pipelines matching the Trigger event&amp;#34;
orca -&amp;gt;&amp;gt; gh: &amp;#34;Deployment status update: in_progress, success, failure, or error&amp;#34;&lt;/pre>
&lt;h2 id="compatibility-matrix">Compatibility matrix&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Armory CD Version&lt;/th>
&lt;th style="text-align:left">Spinnaker Version&lt;/th>
&lt;th style="text-align:left">GitHub Integration Plugin Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">2.30.x&lt;/td>
&lt;td style="text-align:left">1.30.x&lt;/td>
&lt;td style="text-align:left">0.1.2&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="installation-paths">Installation paths&lt;/h2>
&lt;div class="td-card-group card-group p-0 mb-4">
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Armory CD&lt;br>Armory Operator
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use a Kustomize patch to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo or organization.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin using the Armory Operator.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/armory-cd/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Spinnaker&lt;br>Spinnaker Operator
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use a Kustomize patch to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin using the Spinnaker Operator.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/spinnaker-operator/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Spinnaker&lt;br>Halyard
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use Spinnaker local config files to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin in local config files and apply those changes using Halyard.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/spinnaker-halyard/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Plugins: Get Started with the GitHub Integration Plugin</title><link>/plugins/github-integration/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/install/</guid><description>
&lt;div class="td-card-group card-group p-0 mb-4">
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Armory CD&lt;br>Armory Operator
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use a Kustomize patch to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo or organization.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin using the Armory Operator.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/armory-cd/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Spinnaker&lt;br>Spinnaker Operator
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use a Kustomize patch to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin using the Spinnaker Operator.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/spinnaker-operator/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="td-card card border me-4">
&lt;div class="card-header">
Spinnaker&lt;br>Halyard
&lt;/div>
&lt;div class="card-body">
&lt;p class="card-text">
&lt;p>Use Spinnaker local config files to install the plugin.&lt;/p>
&lt;ol>
&lt;li>Create a GitHub App and install it in your repo.&lt;/li>
&lt;li>Configure the plugin with your GitHub repo(s) and/or organization(s).&lt;/li>
&lt;li>Install the plugin in local config files and apply those changes using Halyard.&lt;/li>
&lt;/ol>
&lt;p>&lt;a href="/plugins/github-integration/install/spinnaker-halyard/">Instructions&lt;/a>&lt;/p>
&lt;/p>
&lt;/div>
&lt;/div>
&lt;/div></description></item><item><title>Plugins: Enable and Configure AuthZ in the GitHub Integration Plugin</title><link>/plugins/github-integration/authz/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/authz/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary"> &lt;img src="/images/beta.svg" alt="Beta">&lt;/p>
&lt;h2 id="authz-plugin-overview">AuthZ plugin overview&lt;/h2>
&lt;p>This feature enables AuthZ support for GitHub App accounts and provides these features:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Compliance and Security&lt;/strong>&lt;/p>
&lt;p>Authz for GitHub App accounts allows you to enforce access controls on a per-account basis, securing access to specific repositories and/or GitHub organizations to only authorized groups/teams.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Granular Control&lt;/strong>&lt;/p>
&lt;p>Authz for GitHub App accounts provides granular control over who can perform actions within each account. This fine-grained permission control is crucial for maintaining a least privilege principle, where users have only the necessary access to perform their tasks, reducing the overall security surface.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Scalability&lt;/strong>&lt;/p>
&lt;p>Authz for GitHub App accounts scales effectively as the number of accounts grows. This scalability is essential for organizations managing diverse and expanding infrastructure, ensuring that access controls remain manageable and effective.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Fiat is the Spinnaker microservice responsible for authorization (authz) for the other Spinnaker services.
It is not enabled by default, so users are able to perform any action in Spinnaker. When enabled, Fiat checks the user&amp;rsquo;s permissions before allowing the action to proceed.&lt;/p>
&lt;h3 id="how-this-feature-works">How this feature works&lt;/h3>
&lt;p>The GitHub Integration plugin supports Fiat authz for GitHub App accounts configured to determine whether a role or group can perform the following actions:&lt;/p>
&lt;ul>
&lt;li>&lt;code>READ&lt;/code>: A user can view the GitHub App account&amp;rsquo;s configuration and/or use it as a trigger source.&lt;/li>
&lt;li>&lt;code>WRITE&lt;/code>: A user can use the GitHub App account as the target account for the GitHub integration plugin stages.&lt;/li>
&lt;/ul>
&lt;pre class="mermaid">sequenceDiagram
participant user as User
participant gate as Gate
participant orca as Orca
participant igor as Igor
participant fiat as Fiat
participant gh as GitHub
user -&amp;gt;&amp;gt; gate: Start execution for pipeline (includes plugin stage)
gate -&amp;gt;&amp;gt; orca: Submit execution for pipeline (includes plugin stage)
orca -&amp;gt;&amp;gt; igor: Submit the task operations of plugin stage
igor -&amp;gt;&amp;gt; fiat: Check hasPermissions
alt Unauthorized
fiat -&amp;gt;&amp;gt; igor: hasPermissions=false
igor -&amp;gt;&amp;gt; orca: Fail with Forbidden
orca -&amp;gt;&amp;gt; gate: TERMINAL
else Authorized
fiat -&amp;gt;&amp;gt; igor: hasPermissions=true
igor -&amp;gt;&amp;gt; orca: IN_PROGRESS
igor -&amp;gt;&amp;gt; gh: API calls
orca -&amp;gt;&amp;gt; gate: IN_PROGRESS
end&lt;/pre>
&lt;h3 id="before-you-begin">Before you begin&lt;/h3>
&lt;ul>
&lt;li>You are familiar with how Spinnaker&amp;rsquo;s &lt;a href="/continuous-deployment/overview/fiat-permissions-overview/">AuthZ&lt;/a> works.&lt;/li>
&lt;li>You have read the GitHub Integration Plugin &lt;a href="/plugins/github-integration/overview/">overview&lt;/a>.&lt;/li>
&lt;li>You have enabled Fiat in your Spinnaker or Armory CD instance integrated with an external identity provider (IDP).&lt;/li>
&lt;/ul>
&lt;h3 id="how-to-enable-authz-support">How to enable AuthZ support&lt;/h3>
&lt;p>You can enable AuthZ support per GitHub App account by setting the &lt;code>permissions&lt;/code> block in the &lt;code>github-integration-plugin.yml&lt;/code> file. For example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: FirstAppRepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-public
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repository&lt;/span>: first-app-repo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: master
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">9753&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-9753-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;read-only-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;dev-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;dev-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: SecondAppRepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-public
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repository&lt;/span>: second-app-repo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">9753&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-9753-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: CompanyPrivateOrgAllRepos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-private
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orgWideInstallation&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">includePublicRepositories&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">1357&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-1357-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;read-only-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Plugins: Enable GitHub Access Validation</title><link>/plugins/github-integration/validate-github-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/validate-github-access/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary"> &lt;img src="/images/beta.svg" alt="Beta">&lt;/p>
&lt;h2 id="validate-github-access">Validate GitHub access&lt;/h2>
&lt;p>This feature validates GitHub access based on configuration assigned to a GitHub App account, providing an additional &lt;strong>access control&lt;/strong> validation layer of a GitHub App account in Spinnaker against the defined GitHub Teams in the repository.&lt;/p>
&lt;p>Using the &lt;code>impersonateGitHubTeam&lt;/code> feature, you can validate and enforce GitHub App account access to repositories based on the GitHub team&amp;rsquo;s assigned configuration.&lt;/p>
&lt;h3 id="how-this-feature-works">How this feature works&lt;/h3>
&lt;p>Before performing any action in a pipeline stage, the plugin validates that the GitHub teams configured using the &lt;code>impersonateGitHubTeam&lt;/code> feature are assigned with one of the following roles in GitHub:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Admin&lt;/code>: Full access to the repository&lt;/li>
&lt;li>&lt;code>Write&lt;/code>: Read and write access to the repository&lt;/li>
&lt;li>&lt;code>Maintain&lt;/code>: Read and write access to the repository, including managing issues and pull requests&lt;/li>
&lt;/ul>
&lt;p>If the GitHub team does not have appropriate access to the repository, the pipeline stage fails with an error message.&lt;/p>
&lt;pre class="mermaid">sequenceDiagram
participant user as User
participant gate as Gate
participant orca as Orca
participant igor as Igor
participant fiat as Fiat
participant gh as GitHub
user -&amp;gt;&amp;gt; gate: Start execution for pipeline (includes plugin stage)
gate -&amp;gt;&amp;gt; orca: Submit execution for pipeline (includes plugin stage)
orca -&amp;gt;&amp;gt; igor: Submit the task operations of plugin stage
igor -&amp;gt;&amp;gt; fiat: Check hasPermissions
alt Unauthorized
fiat -&amp;gt;&amp;gt; igor: hasPermissions=false
igor -&amp;gt;&amp;gt; orca: Fail with Forbidden
orca -&amp;gt;&amp;gt; gate: TERMINAL
else Authorized
fiat -&amp;gt;&amp;gt; igor: hasPermissions=true
igor -&amp;gt;&amp;gt; gh: Check permissions on Repository
gh -&amp;gt;&amp;gt; igor: Permissions
igor -&amp;gt;&amp;gt; igor: Evaluate Repo permissions
alt Unauthorized_onRepo
igor -&amp;gt;&amp;gt; orca: Fail with Forbidden on Repo Access
else Authorized_onRepo
orca -&amp;gt;&amp;gt; gate: IN_PROGRESS
end
end&lt;/pre>
&lt;h3 id="how-to-enable">How to enable&lt;/h3>
&lt;p>You enable the &lt;code>impersonateGitHubTeam&lt;/code> feature per GitHub App account by setting the &lt;code>impersonateGitHubTeam&lt;/code> block in the &lt;code>github-integration-plugin.yml&lt;/code> file. For example:&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">23
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">24
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">25
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">26
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">27
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">28
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">29
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">30
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">31
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">32
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">33
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">34
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">35
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">36
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">37
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">38
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">39
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">40
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">41
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">42
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">43
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: FirstAppRepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-public
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repository&lt;/span>: first-app-repo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: master
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">9753&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-9753-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;read-only-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;dev-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;dev-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">impersonateGitHubTeam&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: SecondAppRepo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-public
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repository&lt;/span>: second-app-repo
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">9753&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-9753-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">impersonateGitHubTeam&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;dev-github-team&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-github-team&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ff79c6">name&lt;/span>: CompanyPrivateOrgAllRepos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">organization&lt;/span>: company-private
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">orgWideInstallation&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">includePublicRepositories&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">defaultBranch&lt;/span>: main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppId&lt;/span>: &lt;span style="color:#bd93f9">1357&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">githubAppPrivateKey&lt;/span>: encrypted:k8s!n:spin-secrets!k:github-app-1357-privatekey
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">impersonateGitHubTeam&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;admin-github-team&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">permissions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">READ&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;read-only-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">EXECUTE&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f1fa8c">&amp;#34;ops-role&amp;#34;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Plugins: Enable GitHub Commit Status Echo Notifications</title><link>/plugins/github-integration/commit-status-notifications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/commit-status-notifications/</guid><description>
&lt;p>&lt;img src="/images/proprietary.svg" alt="Proprietary"> &lt;img src="/images/beta.svg" alt="Beta">&lt;/p>
&lt;h2 id="configure-github-commit-status-echo-notifications">Configure GitHub Commit Status Echo notifications&lt;/h2>
&lt;p>Echo is the microservice in Spinnaker which (among other functionalities) manages notifications for Spinnaker pipelines and stages.&lt;/p>
&lt;p>Using the GitHub Integration plugin you can configure Echo to create &lt;a href="https://docs.github.com/en/rest/commits/statuses?apiVersion=2022-11-28#create-a-commit-status">GitHub Commit Statuses&lt;/a>
in a repository by authenticating using the GitHub App accounts configured in the plugin.&lt;/p>
&lt;p>By using the GitHub Integration&amp;rsquo;s plugin GitHub Commit Status notifications, you can link the deployment pipeline statuses to GitHub status checks. This feature provides clear and immediate feedback to developers about the deployment pipeline status.&lt;/p>
&lt;h2 id="how-this-feature-works">How this feature works&lt;/h2>
&lt;p>GitHub Integration plugin offers an enhanced Echo notification type which can be configured to send notifications
for pipelines and/or stages statuses with custom context and description linking to the Spinnaker UI as a target URL.&lt;/p>
&lt;h2 id="how-to-enable">How to enable&lt;/h2>
&lt;p>GitHub Commit Status notifications can be enabled per GitHub App account by enabling the feature in Echo and Deck services in the &lt;code>github-integration-plugin.yml&lt;/code> file.&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugin&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">github-status&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">accounts&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings = {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ... (content omitted for brevity)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#f1fa8c"> feature.githubIntegrationFlags = {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#f1fa8c"> githubStatus: true
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> };
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ... (content omitted for brevity)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h2 id="migrating-from-echos-default-implementation">Migrating from Echo&amp;rsquo;s default implementation&lt;/h2>
&lt;p>Migrating from the default implementation to the GitHub Integration plugin&amp;rsquo;s implementation does not require any changes in your pipelines. The GitHub Integration plugin&amp;rsquo;s implementation is used automatically when the feature is enabled in Echo and Deck services and the default implementation is disabled. To ensure a smooth migration, follow these steps:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Disable the default implementation by disabling the &lt;code>github-status&lt;/code> feature in Echo and Deck services&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnakerConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">echo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">github-status&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">token&lt;/span>: &amp;lt;PAT&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">endpoint&lt;/span>: https://api.github.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">settings-local.js&lt;/span>: |&lt;span style="color:#f1fa8c">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> window.spinnakerSettings = {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ... (content omitted for brevity)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span>&lt;span style="color:#f1fa8c"> notifications.githubStatus.enabled = false;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> ... (content omitted for brevity)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f1fa8c"> }&lt;/span> &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;/li>
&lt;li>
&lt;p>Enable the GitHub Integration plugin. See the &lt;a href="/plugins/github-integration/install/">Get Started&lt;/a> section for instructions.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ensure that you have configured the appropriate GitHub App accounts for every GitHub organization that you want to send notifications to.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Verify that the Deck UI is showing the plugin&amp;rsquo;s Commit Status notification type in the notification settings for
your pipelines and the Commit Statuses are being created in GitHub.&lt;/p>
&lt;/li>
&lt;/ol></description></item><item><title>Plugins: Use the GitHub Integration Plugin</title><link>/plugins/github-integration/use/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/use/</guid><description>
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>
&lt;p>You should be familiar with &lt;a href="https://docs.github.com/en/actions/using-workflows/about-workflows">GitHub workflows&lt;/a>.&lt;/p>
&lt;h2 id="trigger-github-workflows-from-spinnaker-pipelines">Trigger GitHub workflows from Spinnaker pipelines&lt;/h2>
&lt;p>Use the &lt;strong>Github Integration Workflow Trigger Stage&lt;/strong> to trigger your GitHub workflow from your Spinnaker pipeline.&lt;/p>
&lt;h3 id="workflow_dispatch-event">&lt;code>workflow_dispatch&lt;/code> event&lt;/h3>
&lt;p>Configure the &lt;strong>Github Integration Workflow Trigger Stage&lt;/strong> as in the following screenshot:&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/workflowDispatch.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Github Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Organization or User&lt;/strong>: (Required) The organization or username that should trigger the workflow&lt;/li>
&lt;li>&lt;strong>Project&lt;/strong>: (Required) Spinnaker project name&lt;/li>
&lt;li>&lt;strong>Workflow Name&lt;/strong>: (Required) The filename of your workflow&lt;/li>
&lt;li>&lt;strong>Git reference (branch or tag name)&lt;/strong>: (Required) The branch or tag name that receives the &lt;code>workflow_dispatch&lt;/code> event&lt;/li>
&lt;li>&lt;strong>Workflow Inputs&lt;/strong>: (Optional) Key/value pairs to pass to your GitHub workflow&lt;/li>
&lt;/ul>
&lt;h3 id="repository_dispatch-event">&lt;code>repository_dispatch&lt;/code> event&lt;/h3>
&lt;p>Configure the &lt;strong>Github Integration Workflow Trigger Stage&lt;/strong> as in the following screenshot:&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/repoDispatch.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Github Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Organization or User&lt;/strong>: (Required) The organization or username that should trigger the workflow&lt;/li>
&lt;li>&lt;strong>Project&lt;/strong>: (Required) Spinnaker project name&lt;/li>
&lt;li>&lt;strong>Event Type&lt;/strong>: (Required) The event type that should trigger the workflow&lt;/li>
&lt;li>&lt;strong>Client Payload Inputs&lt;/strong>: (Optional) Key/value pairs to pass to your GitHub workflow&lt;/li>
&lt;/ul>
&lt;h2 id="trigger-spinnaker-pipelines-from-github-workflows">Trigger Spinnaker pipelines from GitHub workflows&lt;/h2>
&lt;h3 id="workflow-success-trigger">Workflow success trigger&lt;/h3>
&lt;p>To trigger a Spinnaker pipeline when a GitHub workflow finishes successfully, configure an automated trigger in your pipeline.&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/workflowFinish.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Type&lt;/strong>: (Required) Select &lt;strong>GitHub Workflow Trigger&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Github Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Organization&lt;/strong>: (Required) Select the organization associated with the &lt;strong>Github Account&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Repository&lt;/strong>: (Required) Select the repository that contains the workflow&lt;/li>
&lt;li>&lt;strong>Workflow&lt;/strong>: (Required) Select the name of the workflow that Spinnaker should monitor&lt;/li>
&lt;li>&lt;strong>Branch&lt;/strong>: (Optional) If specified, only pushes to the branches that match this Java Regular Expression are triggered. Leave empty to trigger builds for every branch.&lt;/li>
&lt;/ul>
&lt;h3 id="new-deployment-trigger">New deployment trigger&lt;/h3>
&lt;p>To trigger a Spinnaker pipeline when GitHub creates a new deployment, first &lt;a href="https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks">create a deployment event webhook in GitHub&lt;/a>. Armory strongly recommends you create a secret for the webhook.&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/deploymentCreated.png" width="80%" height="80%"/>
&lt;/figure>
&lt;p>Next, configure an automated trigger to process the deployment event from GitHub.&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/deploymentCreated2.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Type&lt;/strong>: (Required) Select &lt;strong>GitHub Event Trigger&lt;/strong>&lt;/li>
&lt;li>&lt;strong>GitHub Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Organization&lt;/strong>: (Required) Select the organization associated with the &lt;strong>Github Account&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Repository&lt;/strong>: (Required) Select the repository that contains the workflow&lt;/li>
&lt;li>&lt;strong>Secret&lt;/strong>: (Optional) Provide the name of the GitHub secret associated with the deployment workflow event webhook; the GitHub Integration Plugin does not process the request when the secrets do not match&lt;/li>
&lt;li>&lt;strong>Environment&lt;/strong>: (Optional) If specified, only deployment to the environment that matches this Java Regular Expression is triggered. Leave empty to trigger builds for every environment.&lt;/li>
&lt;/ul>
&lt;p>When the pipeline triggered by a deployment event finishes, Spinnaker automatically update the status of the GitHub deployment based on the pipeline&amp;rsquo;s outcome.&lt;/p>
&lt;h2 id="fetch-release-information">Fetch release information&lt;/h2>
&lt;p>You can use the &lt;strong>GitHub Integration Releases Get Details&lt;/strong> stage to fetch the latest release information.&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/getDetails.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Github Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Retrieve&lt;/strong>: (Required) Select &lt;strong>Get Latest Release&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Organization or User&lt;/strong>: (Required) The organization or username that should trigger the workflow&lt;/li>
&lt;li>&lt;strong>Project&lt;/strong>: (Required) Spinnaker project name&lt;/li>
&lt;/ul>
&lt;h2 id="fetch-prerelease-information">Fetch prerelease information&lt;/h2>
&lt;p>You can use the &lt;strong>GitHub Integration Releases Get Details&lt;/strong> stage to fetch the latest prerelease information.&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/preRelease.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Github Account&lt;/strong>: (Required) Select the GitHub Account; this is one of the accounts you configured when you installed the plugin&lt;/li>
&lt;li>&lt;strong>Retrieve&lt;/strong>: (Required) Select &lt;strong>Get Latest PreRelease&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Organization or User&lt;/strong>: (Required) The organization or username that should trigger the workflow&lt;/li>
&lt;li>&lt;strong>Project&lt;/strong>: (Required) Spinnaker project name&lt;/li>
&lt;/ul>
&lt;h2 id="create-github-commit-status">Create GitHub Commit Status&lt;/h2>
&lt;p>The GitHub Commit Status pipeline stage allows you to create a GitHub Commit Status in a repository using the GitHub App accounts configured in the plugin without the need to configure a notification block in your pipelines and viewing the execution status of the stage in your pipeline&amp;rsquo;s execution details.&lt;/p>
&lt;p>Configure the &lt;strong>GitHub Integration Commit Status Stage&lt;/strong> as in the following screenshot:&lt;/p>
&lt;figure>
&lt;img src="/plugins/github-integration/use/commitStatus.png" width="80%" height="80%"/>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>GitHub Repo&lt;/strong>: (Required) The full repository name including the GitHub Org. For example myorg/mygithubrepo.&lt;/li>
&lt;li>&lt;strong>Commit Ref&lt;/strong>: (Required) The commit reference. Can be a commit SHA, branch name (heads/BRANCH_NAME), or tag name (tags/TAG_NAME).&lt;/li>
&lt;li>&lt;strong>Status&lt;/strong>: (Required) The state of the status. Can be one of: error, failure, pending, success.&lt;/li>
&lt;li>&lt;strong>Context&lt;/strong>: (Required) A string label to differentiate this status from the status of other systems. This field is case-insensitive.&lt;/li>
&lt;li>&lt;strong>Description&lt;/strong>: (Optional) A short description of the status.&lt;/li>
&lt;/ul></description></item><item><title>Plugins: GiHub Integration Plugin Release Notes</title><link>/plugins/github-integration/release-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/plugins/github-integration/release-notes/</guid><description>
&lt;h2 id="v031-20231121">v0.3.1 2023/11/21&lt;/h2>
&lt;h3 id="features">Features&lt;/h3>
&lt;ul>
&lt;li>Added support for GitHub Commit Statuses notifications for pipelines and/or stages using Echo service. See &lt;a href="/plugins/github-integration/commit-status-notifications/"}>Enable GitHub Commit Status Echo Notifications&lt;/a> for more information.&lt;/li>
&lt;li>Added GitHub Commit Status stage for pipelines. See &lt;a href="/plugins/github-integration/use/#create-github-commit-status">Create GitHub Commit Status&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;h2 id="v024-20231121">v0.2.4 2023/11/21&lt;/h2>
&lt;h3 id="features-1">Features&lt;/h3>
&lt;ul>
&lt;li>Added support for AuthZ for GitHub App accounts. See &lt;a href="/plugins/github-integration/authz/"}>Enable and Configure AuthZ in the GitHub Integration Plugin&lt;/a> for more information.&lt;/li>
&lt;li>Added support for Validating GitHub App accounts access. See &lt;a href="/plugins/github-integration/validate-github-access/"}>Enable GitHub Access Validation&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;h2 id="v012-20231101">v0.1.2 2023/11/01&lt;/h2>
&lt;h3 id="features-2">Features&lt;/h3>
&lt;ul>
&lt;li>Added support for Manual (or Rerun) Execution of pipelines with trigger type &lt;em>GitHub Workflow Trigger&lt;/em>.&lt;/li>
&lt;li>Modified &lt;em>GitHub Workflow Trigger&lt;/em> &amp;amp; &lt;em>GitHub Event Trigger&lt;/em> Types to be enabled independently in Deck configuration.&lt;/li>
&lt;/ul>
&lt;h2 id="v011-20231018">v0.1.1 2023/10/18&lt;/h2>
&lt;h3 id="fixes">Fixes&lt;/h3>
&lt;ul>
&lt;li>Fixed bug where the Igor fastForward admin endpoint didnt include the &lt;code>githubBuildMonitor&lt;/code> monitor&lt;/li>
&lt;/ul>
&lt;h2 id="v010-20231012">v0.1.0 2023/10/12&lt;/h2>
&lt;h3 id="features-3">Features&lt;/h3>
&lt;ul>
&lt;li>Initial release&lt;/li>
&lt;/ul>
&lt;h2 id="known-issues">Known issues&lt;/h2>
&lt;h3 id="armoryheader-plugin-conflict">Armory.Header plugin conflict&lt;/h3>
&lt;p>&lt;strong>Armory Continuous Deployment&lt;/strong>: The GitHub Integration plugin conflicts with the Armory.Header plugin&amp;rsquo;s default version installed in Armory Continuous Deployment 2.30.x.&lt;/p>
&lt;p>&lt;strong>Fix&lt;/strong>: Update your GitHub Integration plugin config to include the Armory.Header plugin v0.2.0&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 1
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 2
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 3
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 4
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 5
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 6
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 7
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 8
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"> 9
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">10
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">11
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">12
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">13
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">14
&lt;/span>&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">15
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">16
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">17
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">18
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">19
&lt;/span>&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">20
&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">21
&lt;/span>&lt;/span>&lt;span style="background-color:#3d3f4a">&lt;span style="white-space:pre;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">22
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ff79c6">profiles&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">gate&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">spinnaker&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">extensibility&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">repositories&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">pluginRepository&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">url&lt;/span>: https://raw.githubusercontent.com/armory-plugins/pluginRepository/master/repositories.json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.GitHubIntegration&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">Armory.ArmoryHeader&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &lt;span style="color:#bd93f9">0.2.0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">deck-proxy&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">plugins&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">Armory.GitHubIntegration&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ff79c6">version&lt;/span>: &amp;lt;version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">Armory.ArmoryHeader&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex; background-color:#3d3f4a">&lt;span> &lt;span style="color:#ff79c6">enabled&lt;/span>: &lt;span style="color:#ff79c6">true&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
&lt;h3 id="workflow-dispatch-and-repository-dispatch-run-duration">&lt;strong>Workflow Dispatch&lt;/strong> and &lt;strong>Repository Dispatch&lt;/strong> run duration&lt;/h3>
&lt;p>The workflow run for the stages &lt;strong>Workflow Dispatch&lt;/strong> and &lt;strong>Repository Dispatch&lt;/strong> must have a minimum run duration of 30 seconds. If the duration is less than 30 seconds, both Spinnaker and Armory CDSH might fail to fetch the workflow details, causing the run to fail with a timeout error.&lt;/p></description></item></channel></rss>