title: ERROR: Application Version does not exist locally. Error while uploading a war artifact to aws beanstalk environment
body: <p>I am facing an error while uploading a war file to the staging environment. 
  Have written a shell script which uses eb cli to deploy artifact to the environment. </p>
  
  <p>config.yml looks like this:</p>
  
  <pre><code>branch-defaults:
    default:
      environment: testseries-stag-env
  deploy:
    artifact: temp/servercp/testseries/testseries-service/target/testseries-service-1.0.0.war
  environment-defaults:
    testseries-stag-env:
      branch: null
      repository: null
  global:
    application_name: testseries
    default_ec2_keyname: testseries-stag
    default_platform: arn:aws:elasticbeanstalk:us-east-1::platform/Tomcat 8 with Java
      8 running on 64bit Amazon Linux/2.7.5
    default_region: us-east-1
    instance_profile: null
    platform_name: null
    platform_version: null
    profile: null
    sc: null
    workspace_type: Application
  </code></pre>
  
  <p>build.sh looks like this:</p>
  
  <pre><code>#!/usr/bin/env bash
  
  # Takes a fresh clone of the dependent repositories and installs them locally.
  # Deploys test-series to staging env. See .elasticbeanstalk for more details on this
  # Access key Id and secret must be configured in the system to use this shell script
  # If you have key and secret with you but system is not configured with it, this script will do it for you. You will
  # need to provide the values when requested
  
  # This may contain system dependent bugs. Please report any to devops@adda247.com
  
  timestamp() {
    date +"%d-%h_%H:%M:%S"
  }
  
  function installHomeBrew()
  {
     /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  }
  
  function installEbCliMac()
  {
      brew install awsebcli
  }
  
  function installEbCliLinux()
  {
      pip install --upgrade --user awsebcli
  }
  
  function installPip()
  {
      curl -O https://bootstrap.pypa.io/get-pip.py
      if [[ -x $(command -v python) ]]; then
          echo "Python found"
          python get-pip.py --user
      else
          if [[ -x $(command -v python3) ]]; then
              echo "Python3 found"
              python3 get-pip.py --user
          else
  #           Only valid for nix instances which support python3. Fails on other systems
              echo "Python not found. Installing..."
              sudo apt-get install python3
              python3 get-pip.py --user
          fi
      fi
      echo "Installing pip with python"
      pip install --upgrade --user pip
  }
  
  function installAWSCLI()
  {
      if [[ ${OSTYPE} == 'linux-gnu' ]]; then
          pip install awscli --upgrade --user
      elif [[ ${OSTYPE} == 'darwin'* ]]; then
          brew install awscli
      fi
  }
  
  function ifEnvVariablesExist()
  {
      if [[  -z ${AWS_ACCESS_KEY_ID} || -z ${AWS_SECRET_ACCESS_KEY} ]]; then
          echo false
      else
          echo true
      fi
  }
  
  function ifConfigExists()
  {
      if [[ -e ${HOME}/.aws/credentials ]]; then
          echo true
      else
          echo false
      fi
  }
  
  function deployWar()
  {
      version_label=testseries-dev-$(timestamp)
      eb deploy --label=${version_label}
  }
  
  function credentialsExist()
  {
      env_var=$(ifEnvVariablesExist)
      if [[ ${env_var} == true ]]; then
          echo "reading from environment variables"
      else
          config_file=$(ifConfigExists)
          if [[ ${config_file} == true ]]; then
              echo "reading from config file"
          else
              echo "Neither environment variables nor config file found"
              echo "******   Configuring AWS for you. Please enter aws id and secret when prompted  ******"
              aws_exists=$(command -v aws)
              if [[ -x ${aws_exists} ]]; then
                  echo "aws cli is present. Configuring"
              else
                  echo "aws cli is absent. Installing"
                  installAWSCLI
              fi
              aws configure
              if [[ $? -ne 0 ]]; then
                  echo "Unsuccessful configuration. Exiting"
                  exit $?
              fi
          fi
      fi
  }
  
  function proceedForMac()
  {
      eb_cli_exists=$(command -v eb)
      if [[ -x ${eb_cli_exists} ]]; then
          echo "eb cli is present"
      else
          echo "eb cli is absent. Installing with HomeBrew"
          brew_exists=$(command -v brew)
          if [[ -x ${brew_exists} ]]; then
              echo "HomeBrew is present"
          else
              echo "HomeBrew is absent. Installing"
              installHomeBrew
          fi
          installEbCliMac
      fi
  
      credentialsExist
      deployWar
  }
  
  function proceedForLinux()
  {
      eb_cli_exists=$(command -v eb)
      if [[ -x ${eb_cli_exists} ]]; then
          echo "eb cli is present"
      else
          echo "eb cli is absent. Installing with pip"
          pip_exists=$(command -v pip)
          if [[ -x ${pip_exists} ]]; then
              echo "pip is present"
          else
              echo "pip is absent. Installing"
              installPip
          fi
          export PATH=~/.local/bin:$PATH
          if [ -f ~/.bash_profile ]; then
              source ~/.bash_profile
          fi
          installEbCliLinux
      fi
  
      credentialsExist
      deployWar
  }
  
  WD=$(pwd)
  BUILD_DIR=$(pwd)/temp
  
  if [[ -d ${BUILD_DIR} ]]; then
      rm -rf ${BUILD_DIR}
  fi
  
  mkdir ${BUILD_DIR}
  chmod 777 ${BUILD_DIR}
  
  cd ${BUILD_DIR}
  SSH_KEY_PATH=~/.ssh/id_rsa.pub
  
  if [[ -f ${SSH_KEY_PATH} ]]; then
      git clone git@github.com:metiseduventures/servercp.git
  else
      git clone https://github.com/metiseduventures/servercp.git
  fi
  
  
  echo "Building servercp"
  cd ${BUILD_DIR}/servercp/testseries
  git checkout dev
  mvn clean install
  if [[ $? -ne 0 ]]; then
      echo "Project build unsuccessful. Please correct testseries project in servercp and run again"
      exit $?
  fi
  
  echo "Build Successful. Deploying Artifact"
  if [[ ${OSTYPE} == 'linux-gnu' ]]; then
      proceedForLinux
  elif [[ ${OSTYPE} == 'darwin'* ]]; then
      proceedForMac
  fi
  </code></pre>
  
  <p><code>eb deploy</code> command is in <code>deployWar</code> function where it fails</p>
  
  <p>Folder structure is</p>
  
  <pre><code>/--* .elasticbeanstalk/config.yml
     * build.sh
  </code></pre>
  
  <p>The <code>build.sh</code> shell script clones the repository inside temp folder and builds the project which completes successfully</p>
  
  <p>Console Output after running is:</p>
  
  <pre><code>Build Successful. Deploying Artifact
  eb cli is present
  reading from config file
  ERROR: Application Version does not exist locally 
  (temp/servercp/testseries/testseries-service/target/testseries-service- 
  1.0.0.war). Try uploading the Application Version again.
  </code></pre>
  
  <p>However, <code>temp/servercp/testseries/testseries-service/target/testseries-service-1.0.0.war</code> exists alright.</p>
  
  <p>If I immediately run <code>eb deploy --version-label="my-label"</code> after that, artifact gets deployed alright. But when same thing is being executed from inside a script, it gives the above error.  I tried sleeping for 2 secs before eb deploy command, but still nothing</p>
  
  <p>Any help appreciated. Thanks in advance</p>