{"product":"edge-apps-actions","releases":[{"date":"2026-09-08","entries":[{"areas":["developers"],"breaking":false,"content_html":"\u003cp\u003eAn Edge App that runs in stage and production has 2 ids, and until now each one lived in its own\nmanifest: \u003ccode\u003escreenly_qc.yml\u003c/code\u003e for stage and \u003ccode\u003escreenly.yml\u003c/code\u003e for production. A setting added to one file\nhad to be added to the other.\u003c/p\u003e\n\u003cp\u003eWith the new \u003ccode\u003eedge_app_id\u003c/code\u003e input, the id comes from the workflow instead. Keep each environment\u0026rsquo;s id\nin a repository variable and pass the matching one:\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.0\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\u003eWhen \u003ccode\u003eedge_app_id\u003c/code\u003e is set, the action reads \u003ccode\u003escreenly.yml\u003c/code\u003e in both environments, and the id you pass\nwins over any \u003ccode\u003eid\u003c/code\u003e in the manifest. So 1 manifest serves stage and production, and only the variable\nchanges between them.\u003c/p\u003e\n\u003cp\u003eLeave it out and nothing changes: stage still reads \u003ccode\u003escreenly_qc.yml\u003c/code\u003e, and production reads\n\u003ccode\u003escreenly.yml\u003c/code\u003e, each with its own \u003ccode\u003eid\u003c/code\u003e.\u003c/p\u003e\n","description":"initialize and update take an edge_app_id input, so stage and production can share 1 screenly.yml and keep their ids in repository variables.","title":"Each environment's Edge App id comes from a repository variable","type":"release","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/edge-app-id-input/"},{"areas":["developers"],"breaking":false,"content_html":"\u003cp\u003eReleases of the Edge Apps GitHub Actions are numbered by year and month now, so the release after\n1.3.0 is 26.9.0. That\u0026rsquo;s the same scheme Screenly, ScreenlyOS, the CLI, and the Edge Apps library\nuse.\u003c/p\u003e\n\u003cp\u003eEach release is 1 fixed tag, such as \u003ccode\u003ev26.9.0\u003c/code\u003e, and there\u0026rsquo;s no moving tag that follows the latest\nrelease. \u003ccode\u003ev1\u003c/code\u003e stays on 1.3.0 for good. A workflow that uses \u003ccode\u003e@v1\u003c/code\u003e keeps running exactly what it ran\nbefore, and it won\u0026rsquo;t get anything released from here on.\u003c/p\u003e\n\u003cp\u003eNothing about the actions\u0026rsquo; behavior changes with the numbering.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eIf this affects you:\u003c/strong\u003e a workflow that uses \u003ccode\u003e@v1\u003c/code\u003e won\u0026rsquo;t pick up new releases. Replace \u003ccode\u003e@v1\u003c/code\u003e with\nan exact tag, such as \u003ccode\u003eScreenly/edge-apps-actions/update@v26.9.0\u003c/code\u003e, and bump it when you want a\nnewer release. Dependabot\u0026rsquo;s \u003ccode\u003egithub-actions\u003c/code\u003e updates can open those bumps for you.\u003c/p\u003e\n\u003c/blockquote\u003e\n","description":"Releases jumped from 1.3.0 to 26.9.0 and are now named by year and month, and the v1 tag stays where it is.","title":"The actions' version numbers moved to CalVer","type":"improvement","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/calver-version-numbers/"},{"areas":[],"breaking":false,"content_html":"\u003ch2 id=\"fixes\"\u003eFixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003einitialize\u003c/code\u003e and \u003ccode\u003eupdate\u003c/code\u003e build your app when \u003ccode\u003e@screenly/edge-apps\u003c/code\u003e is listed under\n\u003ccode\u003edependencies\u003c/code\u003e, not only under \u003ccode\u003edevDependencies\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"improvements\"\u003eImprovements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003einitialize\u003c/code\u003e and \u003ccode\u003eupdate\u003c/code\u003e run Screenly CLI 26.9.0 instead of whichever CLI release is newest, so a\nnew CLI release doesn\u0026rsquo;t change how your app deploys until you move to a newer version of the\nactions.\u003c/li\u003e\n\u003c/ul\u003e\n","description":"initialize and update build your app when @screenly/edge-apps is listed under dependencies, and run a fixed CLI version so a new CLI release can't change your deploys.","title":"Builds work with the Edge Apps library in dependencies, and other improvements","type":"roundup","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/fixes-and-improvements/"}],"json":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/v1.json","product":"edge-apps-actions","product_label":"Edge Apps GitHub Actions","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/","version":"26.9.0"}],"title":"Edge Apps GitHub Actions 26.9.0","url":"https://www.screenly.io/releases/edge-apps-actions/26.9.0/","version":1}