{"product":"edge-apps-actions","releases":[{"date":"2026-09-21","entries":[{"areas":["developers"],"breaking":true,"content_html":"\u003cp\u003e\u003ccode\u003einitialize\u003c/code\u003e and \u003ccode\u003eupdate\u003c/code\u003e read \u003ccode\u003escreenly.yml\u003c/code\u003e in stage and production alike. \u003ccode\u003escreenly_qc.yml\u003c/code\u003e isn\u0026rsquo;t\nread anymore, whether or not you pass \u003ccode\u003eedge_app_id\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThat also means an app with only \u003ccode\u003escreenly.yml\u003c/code\u003e can run its first \u003ccode\u003einitialize\u003c/code\u003e in stage. Leave\n\u003ccode\u003eedge_app_id\u003c/code\u003e out for that first run, then set the environment\u0026rsquo;s variable to the id of the app it\ncreated. Every run after that passes the id:\u003c/p\u003e\n\u003cdiv class=\"code-block\"\u003e\n  \u003cbutton type=\"button\" class=\"code-copy\" aria-label=\"Copy code\" data-copy-code\u003e\n    \u003csvg data-copy viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003crect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"\u003e\u003c/rect\u003e\n      \u003cpath d=\"M5 15V5a2 2 0 0 1 2-2h10\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n    \u003csvg data-check viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\u003e\n      \u003cpath d=\"M20 6 9 17l-5-5\"\u003e\u003c/path\u003e\n    \u003c/svg\u003e\n  \u003c/button\u003e\n  \u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- \u003cspan style=\"color:#6ab825;font-weight:bold\"\u003euses\u003c/span\u003e:\u003cspan style=\"color:#666\"\u003e \u003c/span\u003eScreenly/edge-apps-actions/update@v26.9.1\u003cspan style=\"color:#666\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#666\"\u003e  \u003c/span\u003e\u003cspan style=\"color:#6ab825;font-weight:bold\"\u003ewith\u003c/span\u003e:\u003cspan style=\"color:#666\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#666\"\u003e    \u003c/span\u003e\u003cspan style=\"color:#6ab825;font-weight:bold\"\u003escreenly_api_token\u003c/span\u003e:\u003cspan style=\"color:#666\"\u003e \u003c/span\u003e${{ secrets.SCREENLY_API_TOKEN }}\u003cspan style=\"color:#666\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#666\"\u003e    \u003c/span\u003e\u003cspan style=\"color:#6ab825;font-weight:bold\"\u003eenvironment\u003c/span\u003e:\u003cspan style=\"color:#666\"\u003e \u003c/span\u003estage\u003cspan style=\"color:#666\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#666\"\u003e    \u003c/span\u003e\u003cspan style=\"color:#6ab825;font-weight:bold\"\u003eedge_app_id\u003c/span\u003e:\u003cspan style=\"color:#666\"\u003e \u003c/span\u003e${{ vars.STAGE_EDGE_APP_ID }}\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cp\u003eThe id you pass wins over any \u003ccode\u003eid\u003c/code\u003e in \u003ccode\u003escreenly.yml\u003c/code\u003e, so 1 manifest serves both environments.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e if your repo has a \u003ccode\u003escreenly_qc.yml\u003c/code\u003e, move to 1 manifest before you bump\nyour pin to \u003ccode\u003ev26.9.1\u003c/code\u003e. Copy anything that differs into \u003ccode\u003escreenly.yml\u003c/code\u003e and delete \u003ccode\u003escreenly_qc.yml\u003c/code\u003e.\nAdd the repository variables \u003ccode\u003eSTAGE_EDGE_APP_ID\u003c/code\u003e (the \u003ccode\u003eid\u003c/code\u003e from \u003ccode\u003escreenly_qc.yml\u003c/code\u003e) and\n\u003ccode\u003ePRODUCTION_EDGE_APP_ID\u003c/code\u003e (the \u003ccode\u003eid\u003c/code\u003e from \u003ccode\u003escreenly.yml\u003c/code\u003e), and pass\n\u003ccode\u003eedge_app_id: ${{ vars.STAGE_EDGE_APP_ID }}\u003c/code\u003e to your stage steps and\n\u003ccode\u003eedge_app_id: ${{ vars.PRODUCTION_EDGE_APP_ID }}\u003c/code\u003e to your production steps.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"initialize and update read screenly.yml in every environment, and stage no longer reads screenly_qc.yml, even when no edge_app_id is passed.","title":"Stage and production both deploy from screenly.yml","type":"removed","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.1/one-manifest-for-both-environments/"}],"json":"https://www.screenly.io/releases/edge-apps-actions/26.9.1/v1.json","product":"edge-apps-actions","product_label":"Edge Apps GitHub Actions","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.1/","version":"26.9.1"}],"title":"Edge Apps GitHub Actions 26.9.1","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.1/","version":1}