Skip to content

Commit 1e18080

Browse files
author
Exploding Labs Bot
committed
Update site from docs source repo
1 parent 365a41d commit 1e18080

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

superstack/bluegreen/index.html

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,15 @@
483483
</ul>
484484
</nav>
485485

486+
</li>
487+
488+
<li class="md-nav__item">
489+
<a href="#github-actions" class="md-nav__link">
490+
<span class="md-ellipsis">
491+
Github Actions
492+
</span>
493+
</a>
494+
486495
</li>
487496

488497
</ul>
@@ -579,6 +588,15 @@
579588
</ul>
580589
</nav>
581590

591+
</li>
592+
593+
<li class="md-nav__item">
594+
<a href="#github-actions" class="md-nav__link">
595+
<span class="md-ellipsis">
596+
Github Actions
597+
</span>
598+
</a>
599+
582600
</li>
583601

584602
</ul>
@@ -683,6 +701,81 @@ <h3 id="flip-traffic">Flip traffic</h3>
683701
</code></pre></div>
684702
<p>Cutover is instant. Green is now live, and Blue is the idle stack.</p>
685703
<p>And rollback is simple: flip the <code>Caddyfile</code> back and <code>caddy reload</code> again.</p>
704+
<h2 id="github-actions">Github Actions</h2>
705+
<p>Here's a workflow for B/G deploys:</p>
706+
<details>
707+
<summary>Click to expand</summary>
708+
709+
<div class="highlight"><span class="filename">.github/workflows/ci.yaml</span><pre><span></span><code><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deploy to VPS</span>
710+
711+
<span class="nt">on</span><span class="p">:</span>
712+
<span class="w"> </span><span class="nt">push</span><span class="p">:</span>
713+
<span class="w"> </span><span class="nt">branches</span><span class="p">:</span>
714+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">main</span>
715+
716+
<span class="nt">jobs</span><span class="p">:</span>
717+
<span class="w"> </span><span class="nt">deploy</span><span class="p">:</span>
718+
<span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span>
719+
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">production</span>
720+
721+
<span class="w"> </span><span class="nt">steps</span><span class="p">:</span>
722+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Checkout code</span>
723+
<span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/checkout@v4</span>
724+
725+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Start SSH agent</span>
726+
<span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">webfactory/ssh-agent@v0.9.0</span>
727+
<span class="w"> </span><span class="nt">with</span><span class="p">:</span>
728+
<span class="w"> </span><span class="nt">ssh-private-key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_SSH_KEY }}</span>
729+
730+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Get the idle stack</span>
731+
<span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">idle</span>
732+
<span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
733+
<span class="w"> </span><span class="no">ACTIVE=$(ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no \</span>
734+
<span class="w"> </span><span class="no">${{ secrets.VPS_USER }}@${{ secrets.VPS_HOST }} \</span>
735+
<span class="w"> </span><span class="no">&#39;cat active_stack 2&gt;/dev/null || echo blue&#39;)</span>
736+
737+
<span class="w"> </span><span class="no">if [ &quot;$ACTIVE&quot; = &quot;blue&quot; ]; then</span>
738+
<span class="w"> </span><span class="no">echo &quot;IDLE=green&quot; &gt;&gt; $GITHUB_OUTPUT</span>
739+
<span class="w"> </span><span class="no">else</span>
740+
<span class="w"> </span><span class="no">echo &quot;IDLE=blue&quot; &gt;&gt; $GITHUB_OUTPUT</span>
741+
<span class="w"> </span><span class="no">fi</span>
742+
<span class="w"> </span><span class="no">echo &quot;ACTIVE=$ACTIVE&quot; &gt;&gt; $GITHUB_OUTPUT</span>
743+
744+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Copy compose.yaml to idle stack</span>
745+
<span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">appleboy/scp-action@master</span>
746+
<span class="w"> </span><span class="nt">with</span><span class="p">:</span>
747+
<span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_HOST }}</span>
748+
<span class="w"> </span><span class="nt">username</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_USER }}</span>
749+
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">22</span>
750+
<span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_SSH_KEY }}</span>
751+
<span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;compose.yaml&quot;</span>
752+
<span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;${{</span><span class="nv"> </span><span class="s">steps.idle.outputs.IDLE</span><span class="nv"> </span><span class="s">}}/&quot;</span>
753+
754+
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deploy with Docker Compose</span>
755+
<span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">appleboy/ssh-action@v1.0.3</span>
756+
<span class="w"> </span><span class="nt">with</span><span class="p">:</span>
757+
<span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_HOST }}</span>
758+
<span class="w"> </span><span class="nt">username</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_USER }}</span>
759+
<span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.VPS_SSH_KEY }}</span>
760+
<span class="w"> </span><span class="nt">envs</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">GHCR_PAT,JWT_SECRET,POSTGRES_USER,PGUSER,POSTGRES_PASSWORD,PGPASS,PGRST_AUTHENTICATOR_PASS</span>
761+
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
762+
<span class="w"> </span><span class="no">set -euo pipefail</span>
763+
<span class="w"> </span><span class="no">echo $GHCR_PAT | docker login ghcr.io -u ${{ github.actor }} --password-stdin</span>
764+
<span class="w"> </span><span class="no">cd ${{ steps.idle.outputs.IDLE }}</span>
765+
<span class="w"> </span><span class="no">docker compose pull -q</span>
766+
<span class="w"> </span><span class="no">docker compose up -d</span>
767+
<span class="w"> </span><span class="no">echo &quot;${{ steps.idle.outputs.ACTIVE }}&quot; &gt; active_stack</span>
768+
<span class="w"> </span><span class="nt">env</span><span class="p">:</span>
769+
<span class="w"> </span><span class="nt">GHCR_PAT</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.GHCR_PAT }}</span>
770+
<span class="w"> </span><span class="nt">JWT_SECRET</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.JWT_SECRET }}</span>
771+
<span class="w"> </span><span class="nt">PGRST_AUTHENTICATOR_PASS</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.PGRST_AUTHENTICATOR_PASS }}</span>
772+
<span class="w"> </span><span class="nt">PGUSER</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.PGUSER }}</span>
773+
<span class="w"> </span><span class="nt">PGPASS</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.PGPASS }}</span>
774+
<span class="w"> </span><span class="nt">POSTGRES_USER</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.POSTGRES_USER }}</span>
775+
<span class="w"> </span><span class="nt">POSTGRES_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.POSTGRES_PASSWORD }}</span>
776+
</code></pre></div>
777+
778+
</details>
686779

687780

688781

0 commit comments

Comments
 (0)