Skip to content

workflow:run rejects "environment" field on update jobs despite schema/docs allowing it #3413

@AmitRDesai

Description

@AmitRDesai

Build/Submit details page URL

No response

Summary

  • environment on update job type causes: Invalid workflow definition. [jobs]: Invalid input: expected record, received undefined
    • eas workflow:validate passes locally (CLI v18.0.1), but the server API rejects it
    • environment works fine on fingerprint jobs, only fails on update jobs
    • Request ID: 7bb69830-4069-4aa5-97ea-cbd3b319f41d
    • The published JSON schema at api.expo.dev/v2/workflows/schema explicitly lists environment as valid for update jobs
    • Removing environment from update jobs resolves the error

Managed or bare?

Managed

Environment

expo-env-info 2.0.8 environment info:
System:
OS: macOS 26.3
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.16.0 - ~/.nvm/versions/node/v22.16.0/bin/node
Yarn: 1.22.22 - /usr/local/bin/yarn
npm: 10.9.2 - ~/.nvm/versions/node/v22.16.0/bin/npm
Watchman: 2026.01.12.00 - /opt/homebrew/bin/watchman
Managers:
CocoaPods: 1.16.2 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 25.2, iOS 26.2, macOS 26.2, tvOS 26.2, visionOS 26.2, watchOS 26.2
IDEs:
Android Studio: 2025.1 AI-251.26094.121.2512.13991807
Xcode: 26.2/17C52 - /usr/bin/xcodebuild
npmPackages:
expo: ~54.0.33 => 54.0.33
expo-router: ~6.0.23 => 6.0.23
expo-updates: ~29.0.16 => 29.0.16
react: 19.1.0 => 19.1.0
react-dom: 19.1.0 => 19.1.0
react-native: 0.81.5 => 0.81.5
react-native-web: ~0.21.0 => 0.21.2
npmGlobalPackages:
eas-cli: 18.0.1
Expo Workflow: bare

npx expo-doctor
17/17 checks passed. No issues detected!

Error output

Failed to start the workflow with the API.
Invalid workflow definition. [jobs]: Invalid input: expected record, received undefined.
Request ID: e94e3e0e-be01-4e3c-94c9-97d427c9390e

Reproducible demo or steps to reproduce from a blank project

name: Preview Deploy

on:
push:
branches: ['main']

jobs:
fingerprint:
name: Fingerprint
type: fingerprint
environment: preview

get_android_build:
name: Check existing Android build
needs: [fingerprint]
type: get-build
params:
fingerprint_hash: ${{ needs.fingerprint.outputs.android_fingerprint_hash }}
profile: preview

get_ios_build:
name: Check existing iOS build
needs: [fingerprint]
type: get-build
params:
fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }}
profile: preview

build_android:
name: Build Android
needs: [get_android_build]
if: ${{ !needs.get_android_build.outputs.build_id }}
type: build
params:
platform: android
profile: preview

build_ios:
name: Build iOS
needs: [get_ios_build]
if: ${{ !needs.get_ios_build.outputs.build_id }}
type: build
params:
platform: ios
profile: preview

submit_android:
name: Submit Android to Internal Testing
needs: [build_android]
type: submit
params:
build_id: ${{ needs.build_android.outputs.build_id }}
profile: preview

submit_ios:
name: Submit iOS to TestFlight
needs: [build_ios]
type: submit
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
profile: preview

update_android:
name: OTA Update Android
needs: [get_android_build]
if: ${{ needs.get_android_build.outputs.build_id }}
type: update
environment: preview
params:
branch: preview
platform: android

update_ios:
name: OTA Update iOS
needs: [get_ios_build]
if: ${{ needs.get_ios_build.outputs.build_id }}
type: update
environment: preview
params:
branch: preview
platform: ios

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs reviewIssue is ready to be reviewed by a maintainer

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions