title: How can I have Travis-CI build my electron app for multiple OSes in parallel?
body: <h2>Background</h2>
  
  <p>I work on an <a href="https://briandk.com/transcriptase" rel="noreferrer">open-source Github Electron app</a> for transcribing video. I want my app to be multiplatform, so I use open-source <a href="https://travis-ci.org" rel="noreferrer">travis-ci.org</a> to <a href="https://www.electron.build/" rel="noreferrer">build it</a> for both MacOS and Linux (Ubuntu), then publish the binaries to Github releases.</p>
  
  <h2>What I'd like to have happen</h2>
  
  <p>Travis builds for OSX and Linux concurrently. </p>
  
  <h2>What actually happens</h2>
  
  <p>With my current YAML configuration, Travis tests and builds serially: it makes the linux version first, then the mac version only after the Linux build finishes. (I believe it builds in that order because it's the order in which I've specified OSes in my YAML). Here's an example of that <a href="https://travis-ci.org/briandk/transcriptase/builds/274295165" rel="noreferrer">serial build behavior</a> </p>
  
  <p>Below is my <a href="https://github.com/briandk/transcriptase/blob/bae8f8b7749c7aa8a99339876ad7385a6cf04060/.travis.yml#L1-L21" rel="noreferrer"><code>.travis.yml</code></a>, excluding my Github access token:</p>
  
  <pre><code>language: node_js
  node_js:
    - '8'
  matrix:
    include:
    - os: linux
      dist: xenial
      sudo: required
    - os: osx
  cache:
    yarn: true
  notifications:
    email: false
  script:
    - yarn dist
  deploy:
    provider: releases
    api_key: $ENCRYPTED_GITHUB_TOKEN
    skip_cleanup: true
    on:
      tags: true
  </code></pre>
  
  <h2>How I've tried to solve this on my own</h2>
  
  <p>I've read and re-read Travis-CI's documentation on <a href="https://docs.travis-ci.com/user/customizing-the-build/#Build-Matrix" rel="noreferrer">build matrices</a> and <a href="https://docs.travis-ci.com/user/build-stages/matrix-expansion/" rel="noreferrer">build matrix expansion</a>. I've also read documentation on Travis's beta <a href="https://docs.travis-ci.com/user/build-stages/" rel="noreferrer">build stages</a> feature. But, I don't think I fully understand how to define a build matrix, then have all the expanded configurations go through a stage. In this case, define two OSes, but only have to write one stage with the same command: <code>yarn dist</code> to make the distributable. (By default, that command will build a binary for the host OS.)</p>
  
  <h2>My hunch about how to answer my question</h2>
  
  <p>My guesses are that one (or more) of these are true:</p>
  
  <ol>
  <li>What I want isn't possible</li>
  <li>What I want <em>is</em> possible; I just have to make a minor tweak.</li>
  <li>What I want <em>is</em> possible, but my attempt to do it is largely wrong and/or misunderstands the relationship between matrices, jobs, and stages.</li>
  <li>I'm encountering something Electron-specific (although the build for Linux seems to go fine)</li>
  </ol>
  
  <h2>My apologies</h2>
  
  <p>I wish I understood Travis better, and I thank you for your patience and your help.</p>