Detox + Expo build failure

:bug: Bug Report

Environment

NOTE: This is my local environment and not the travis environment

  Expo CLI 3.12.0 environment info:
    System:
      OS: macOS 10.14.4
      Shell: 3.2.57 - /bin/bash
    Binaries:
      Node: 12.12.0 - /usr/local/bin/node
      Yarn: 1.19.1 - /usr/local/bin/yarn
      npm: 6.11.3 - /usr/local/bin/npm
    IDEs:
      Android Studio: 2.3 AI-162.3871768
      Xcode: 11.3.1/11C504 - /usr/bin/xcodebuild
    npmPackages:
      expo: ^36.0.2 => 36.0.2 
      react: 16.9.0 => 16.9.0 
      react-native: https://github.com/expo/react-native/archive/sdk-36.0.1.tar.gz => 0.61.4 
      react-navigation: ^3.11.1 => 3.13.0 
    npmGlobalPackages:
      expo-cli: 3.12.0

Steps to Reproduce

Push code to travis with the following .travis.yml, package.json, and setup.sh

---
language: node_js

node_js:
  - node
  - lts/*

env:
  global:
  - NODE_VERSION=stable

addons:
  homebrew:
    packages:
    - applesimutils
    taps: wix/brew

install:
  - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
  - export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
  - nvm install $NODE_VERSION
  - nvm use $NODE_VERSION
  - nvm alias default $NODE_VERSION

  - npm install -g react-native-cli
  - npm install -g expo-detox-cli && expotox clean-framework-cache && expotox build-framework-cache
  - yarn add --dev detox \ detox-expo-helpers \ expo-detox-hook

cache:
  directories:
    - ~/.npm
    - .jest

before_script:
  - npm install -g npm@latest

script:
  - npm ci
  - npx jest --ci
  - ./script.sh
  - detox build --configuration ios.sim
  - detox test --configuration ios.sim --cleanup
{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "eject": "expo eject",
    "test": "jest"
  },
  "dependencies": {
    "@expo/vector-icons": "^10.0.6",
    "@ptomasroos/react-native-multi-slider": "^1.0.0",
    "@react-native-community/masked-view": "0.1.5",
    "@react-native-community/netinfo": "4.6.0",
    "apollo-boost": "^0.3.1",
    "apollo-cache-hermes": "^0.8.10",
    "apollo-cache-inmemory": "^1.5.1",
    "apollo-cache-persist": "^0.1.1",
    "apollo-client": "^2.6.8",
    "apollo-link": "^1.2.9",
    "apollo-link-context": "^1.0.15",
    "apollo-link-error": "^1.1.8",
    "apollo-link-http": "^1.5.12",
    "apollo-link-state": "^0.4.2",
    "apollo-link-ws": "^1.0.15",
    "aws-sdk": "^2.432.0",
    "axios": "^0.19.0",
    "expo": "^36.0.2",
    "expo-analytics-amplitude": "~8.0.0",
    "expo-app-auth": "~8.0.0",
    "expo-asset": "~8.0.0",
    "expo-av": "~8.0.0",
    "expo-facebook": "~8.0.0",
    "expo-file-system": "~8.0.0",
    "expo-font": "~8.0.0",
    "expo-google-app-auth": "^6.0.0",
    "expo-image-picker": "~8.0.1",
    "expo-linear-gradient": "~8.0.0",
    "expo-permissions": "~8.0.0",
    "graphql": "^14.1.1",
    "lodash.flowright": "^3.5.0",
    "moment": "^2.24.0",
    "react": "16.9.0",
    "react-apollo": "^3.1.3",
    "react-native": "https://github.com/expo/react-native/archive/sdk-36.0.1.tar.gz",
    "react-native-appearance": "~0.3.1",
    "react-native-aws3-cognito": "0.0.2",
    "react-native-check-box": "^2.1.7",
    "react-native-datepicker": "^1.7.2",
    "react-native-dialog": "^5.6.0",
    "react-native-dotenv": "^0.2.0",
    "react-native-easy-toast": "^1.2.0",
    "react-native-email-link": "^1.7.1",
    "react-native-emoji": "^1.8.0",
    "react-native-gesture-handler": "~1.5.0",
    "react-native-image-view": "^2.1.4",
    "react-native-keyboard-aware-scroll-view": "^0.8.0",
    "react-native-modal": "^11.5.3",
    "react-native-modalbox": "^2.0.0",
    "react-native-picker-select": "^6.1.0",
    "react-native-reanimated": "~1.4.0",
    "react-native-safe-area-context": "0.6.0",
    "react-native-screens": "2.0.0-alpha.12",
    "react-native-snap-carousel": "^3.7.5",
    "react-native-svg": "9.13.3",
    "react-native-svg-charts": "^5.2.0",
    "react-native-swipe-list-view": "^2.1.3",
    "react-native-thumbnail-video": "^0.1.2",
    "react-navigation": "^3.11.1",
    "react-redux": "^6.0.1",
    "redux": "^4.0.1",
    "redux-thunk": "^2.3.0",
    "sentry-expo": "^2.0.1",
    "subscriptions-transport-ws": "^0.9.15"
  },
  "devDependencies": {
    "babel-eslint": "^10.0.1",
    "babel-plugin-react": "^1.0.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-inline-environment-variables": "^0.4.3",
    "babel-plugin-transform-remove-console": "^6.9.4",
    "babel-preset-expo": "^5.0.0",
    "detox": "^15.3.0",
    "detox-expo-helpers": "^0.6.0",
    "eslint": "^5.15.1",
    "eslint-config-equimper": "^2.2.2",
    "eslint-config-react-app": "^3.0.7",
    "eslint-plugin-babel": "^5.3.0",
    "eslint-plugin-class-property": "^1.1.0",
    "eslint-plugin-flowtype": "^3.4.2",
    "eslint-plugin-import": "^2.16.0",
    "eslint-plugin-jsx-a11y": "^6.2.1",
    "eslint-plugin-react": "^7.12.4",
    "eslint-plugin-react-native": "^3.6.0",
    "expo-codemod": "^1.0.6",
    "expo-detox-hook": "^1.0.10",
    "jest-expo": "^36.0.1",
    "metro-react-native-babel-preset": "^0.53.1",
    "react-native-testing-library": "^1.12.0",
    "react-test-renderer": "^16.12.0",
    "reactotron-react-native": "^3.2.1",
    "url": "^0.11.0"
  },
  "jest": {
    "preset": "jest-expo",
    "transformIgnorePatterns": [
      "node_modules/(?!(jest-)?react-native|react-clone-referenced-element|@react-native-community|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|@sentry/.*|sentry-expo|native-base|react-native-multi-slider|@ptomasroos/.*)"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/setupTests.js"
    ],
    "collectCoverage": true,
    "collectCoverageFrom": [
      "**/*.{js,jsx}",
      "!**/coverage/**",
      "!**/node_modules/**",
      "!**/babel.config.js",
      "!**/jest.setup.js"
    ]
  },
  "private": true,
  "detox": {
    "test-runner": "jest",
    "configurations": {
      "ios.sim": {
        "binaryPath": "bin/Exponent.app",
        "type": "ios.simulator",
        "name": "iPhone 8"
      }
    }
  }
}
#!/bin/bash -e
  
# query expo.io to find most recent ipaUrl
IPA_URL=`curl https://expo.io/--/api/v2/versions |  python -c 'import sys, json; print json.load(sys.stdin)["iosUrl"]'`

# download tar.gz
TMP_PATH=/tmp/exponent.tar.gz
wget -O $TMP_PATH $IPA_URL

# recursively make app dir
APP_PATH=bin/Exponent.app
mkdir -p $APP_PATH

# unzip tar.gz into APP_PATH
tar -C $APP_PATH -xzf $TMP_PATH

Expected Behavior

Travis environment is setup and tests run successfully

Actual Behavior

Tests fail due to what appears to be a missing dependency

ERROR:

    expo-detox-hook is not installed in your osx Library. Run `npm install -g expo-detox-cli && expotox clean-framework-cache && expotox build-framework-cache` to fix this.

Reproducible Demo

Can attempt to provide a demo project if necessary

When reporting problems, please consider including:

  1. What you are trying to achieve
  2. What you have tried (probably a link to the configuration)
  3. What happened instead (often, pointing to a build log URL, in the form of https://travis-ci.com/OWNER/REPO/build/NNNNNNN would be helpful).

I have an expo project setup with detox successfully running tests on my machine. I’d like the detox tests to also run with Travis. I get the above error when Travis attempts to build my repo with the above .travis.yml

Link to build!

https://travis-ci.com/Project9a/redpoint_client/jobs/290788236

Why is it complaining about osx Library when your job is running on Linux?

Tried adding to os: osx but still not luck. Creating a sample project so there’s less moving parts and it can be shared.

I got a different error for a bare bones sample implementation. Starting a new Travis community issue here:

Please do not split the issues into different places, and please read our documentation, too.

Sorry to fragment things! Figured I would start a new issue since I was changing repo’s and the error was different.

Will keep things consolidated in the future.

The new issue is up to date with your suggestion to specify a language in .travis.yml. The same error occurred after specifying a language. Will plan to continue the discussion there.

Imprint