<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Edge Apps GitHub Actions 26.9.1 | Screenly</title><description>What has shipped across Screenly, newest first.</description><link>https://www.screenly.io/releases/edge-apps-actions/26.9.1/</link><language>en</language><atom:link href="https://www.screenly.io/releases/edge-apps-actions/26.9.1/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Mon, 21 Sep 2026 00:00:00 +0000</lastBuildDate><item><title>Edge Apps GitHub Actions 26.9.1: Stage and production both deploy from screenly.yml</title><link>https://www.screenly.io/releases/edge-apps-actions/26.9.1/one-manifest-for-both-environments/</link><guid isPermaLink="true">https://www.screenly.io/releases/edge-apps-actions/26.9.1/one-manifest-for-both-environments/</guid><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><category>removed</category><category>developers</category><description>&lt;p&gt;&lt;code&gt;initialize&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt; read &lt;code&gt;screenly.yml&lt;/code&gt; in stage and production alike. &lt;code&gt;screenly_qc.yml&lt;/code&gt; isn&amp;rsquo;t
read anymore, whether or not you pass &lt;code&gt;edge_app_id&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That also means an app with only &lt;code&gt;screenly.yml&lt;/code&gt; can run its first &lt;code&gt;initialize&lt;/code&gt; in stage. Leave
&lt;code&gt;edge_app_id&lt;/code&gt; out for that first run, then set the environment&amp;rsquo;s variable to the id of the app it
created. Every run after that passes the id:&lt;/p&gt;
&lt;div class="code-block"&gt;
&lt;button type="button" class="code-copy" aria-label="Copy code" data-copy-code&gt;
&lt;svg data-copy viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;rect x="9" y="9" width="11" height="11" rx="2"&gt;&lt;/rect&gt;
&lt;path d="M5 15V5a2 2 0 0 1 2-2h10"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;svg data-check viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;
&lt;path d="M20 6 9 17l-5-5"&gt;&lt;/path&gt;
&lt;/svg&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#6ab825;font-weight:bold"&gt;uses&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;Screenly/edge-apps-actions/update@v26.9.1&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;with&lt;/span&gt;:&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;screenly_api_token&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;${{ secrets.SCREENLY_API_TOKEN }}&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;environment&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;stage&lt;span style="color:#666"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt; &lt;/span&gt;&lt;span style="color:#6ab825;font-weight:bold"&gt;edge_app_id&lt;/span&gt;:&lt;span style="color:#666"&gt; &lt;/span&gt;${{ vars.STAGE_EDGE_APP_ID }}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The id you pass wins over any &lt;code&gt;id&lt;/code&gt; in &lt;code&gt;screenly.yml&lt;/code&gt;, so 1 manifest serves both environments.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If this affects you:&lt;/strong&gt; if your repo has a &lt;code&gt;screenly_qc.yml&lt;/code&gt;, move to 1 manifest before you bump
your pin to &lt;code&gt;v26.9.1&lt;/code&gt;. Copy anything that differs into &lt;code&gt;screenly.yml&lt;/code&gt; and delete &lt;code&gt;screenly_qc.yml&lt;/code&gt;.
Add the repository variables &lt;code&gt;STAGE_EDGE_APP_ID&lt;/code&gt; (the &lt;code&gt;id&lt;/code&gt; from &lt;code&gt;screenly_qc.yml&lt;/code&gt;) and
&lt;code&gt;PRODUCTION_EDGE_APP_ID&lt;/code&gt; (the &lt;code&gt;id&lt;/code&gt; from &lt;code&gt;screenly.yml&lt;/code&gt;), and pass
&lt;code&gt;edge_app_id: ${{ vars.STAGE_EDGE_APP_ID }}&lt;/code&gt; to your stage steps and
&lt;code&gt;edge_app_id: ${{ vars.PRODUCTION_EDGE_APP_ID }}&lt;/code&gt; to your production steps.&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>