Free Screenly Player with every Business or Enterprise yearly plan. How it works →

October 26, 2026

Checks, initialize, and update now come as reusable workflows

Until this release, every Edge App repo carried its own full copy of the example workflows: the triggers, the jobs for each environment, the production tag check, and the id expressions. Now those live in this repo as reusable workflows, and an app’s workflow file calls them:

name: Update Edge App

on:
  workflow_dispatch:
  push:
    branches: [main, master]
    tags: ['v[0-9]*']

permissions:
  contents: read

jobs:
  update:
    uses: Screenly/edge-apps-actions/.github/workflows/[email protected]
    secrets:
      SCREENLY_API_TOKEN: ${{ secrets.SCREENLY_API_TOKEN }}

When a later release changes how deploys work, bumping that pin is all it takes. Copy the 3 files in examples/ into your app’s .github/workflows/ to start.

WorkflowInputsSecrets
checks.ymlbun-version (default latest)none
initialize.ymlenvironment, edge_app_name, edge_app_titleSCREENLY_API_TOKEN
update.ymldelete_missing_settings (default true)SCREENLY_API_TOKEN

update.yml deploys to stage on a push or a manual run on the default branch, and other branches never deploy. It deploys to production when you push a v* tag whose commit is on the default branch, through the production environment and its reviewers. checks.yml cancels a check still running on a branch when a newer push to that branch arrives.

Setting up an app

  1. Create the GitHub environments stage and production, and add SCREENLY_API_TOKEN to each as an environment secret. An environment secret only reaches jobs that run in that environment, so the production token stays behind production’s reviewers.
  2. Run “Initialize Edge App” for stage. Once the run has finished successfully, set the repository variable STAGE_EDGE_APP_ID to the id in its job summary. Setting it earlier lets a deploy start while Initialize is still running.
  3. Do the same for production and PRODUCTION_EDGE_APP_ID.

delete_missing_settings is true in update.yml, so the manifest decides which settings exist. The update action on its own still defaults to false. To keep settings that aren’t in your manifest, pass delete_missing_settings: false under with:.

The checks, initialize, and update actions are still there to use as steps in a workflow of your own.