Skip to content

eas workflow:validate fails on slack job type when webhook_url uses a template expression #3404

@chrisforerunner

Description

@chrisforerunner

Build/Submit details page URL

No response

Summary

eas workflow:validate rejects valid slack job configurations when webhook_url uses a ${{ }} template expression (e.g. ${{ env.SLACK_WEBHOOK_URL }}). The same workflow validates successfully server-side and runs correctly on EAS.

The workflow JSON schema at https://api.expo.dev/v2/workflows/schema defines webhook_url as:

{
  "type": "string",
  "format": "uri"
}

The format: "uri" constraint is applied to the raw YAML value before template expressions are resolved. ${{ env.SLACK_WEBHOOK_URL }} is not a valid URI, so it fails format validation. Since the slack params use an anyOf schema (message variant vs. payload variant), the webhook_url format failure causes neither variant to match, and the validator falls through to try every other job type, producing a large and confusing error cascade.

Managed or bare?

Managed

Environment

  expo-env-info 2.0.8 environment info:
    System:
      OS: macOS 15.7.3
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 24.13.0 - ~/.local/state/fnm_multishells/84465_1770958971575/bin/node
      Yarn: 4.12.0 - ~/.local/state/fnm_multishells/84465_1770958971575/bin/yarn
      npm: 11.6.2 - ~/.local/state/fnm_multishells/84465_1770958971575/bin/npm
      Watchman: 2026.01.12.00 - /opt/homebrew/bin/watchman
    Managers:
      CocoaPods: 1.16.2 - /Users/chris/.rbenv/shims/pod
    SDKs:
      iOS SDK:
        Platforms: DriverKit 25.0, iOS 26.0, macOS 26.0, tvOS 26.0, visionOS 26.0, watchOS 26.0
    IDEs:
      Android Studio: 2025.1 AI-251.26094.121.2513.14007798
      Xcode: 26.0.1/17A400 - /usr/bin/xcodebuild
    npmPackages:
      babel-preset-expo: ~54.0.0 => 54.0.3 
      expo: ~54.0.0 => 54.0.12 
      expo-updates: ~29.0.16 => 29.0.16 
      react: 19.1.0 => 19.1.0 
      react-native: 0.81.5 => 0.81.5 
    npmGlobalPackages:
      eas-cli: 18.0.1
    Expo Workflow: bare

Error output

(truncated)

$ eas workflow:validate .eas/workflows/slack-repro.yml

✖ Workflow configuration YAML is not valid.
Error: The value at /jobs/notify/type must be equal to constant.
The value at /jobs/notify/params is missing the required field 'platform'.
The value at /jobs/notify/params has an unexpected property, webhook_url, which is not in the list of allowed properties (platform, profile, message).
The value at /jobs/notify is missing the required field 'steps'.
...
The value at /jobs/notify/params/webhook_url must be a valid URI string but it was not.
...
The value at /jobs/notify must match a schema in anyOf.

Reproducible demo or steps to reproduce from a blank project

name: Slack Repro

on:
  workflow_dispatch: {}

jobs:
  notify:
    name: Notify
    type: slack
    environment: preview
    params:
      webhook_url: ${{ env.SLACK_WEBHOOK_URL }}
      message: "Hello world"

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions