Skip to content
Snippets Groups Projects
dev-shell 2.59 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/bin/bash
    
    ## =============================================================================
    ## Setup (if needed) and start a development shell environment on Linux or MacOS
    ## =============================================================================
    
    ## make sure we launch this script from the project root directory
    PROJECT_ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"/..
    pushd ${PROJECT_ROOT}
    
    ## We do not load the global development environment here, as this script is 
    ## to be executed on a "naked" system outside of any container 
    
    ## =============================================================================
    ## Step 1: Parse command line options
    
    ## do we want to force-update the container (only affects Linux)
    ## default: we do not want to do this.
    FORCE_UPDATE=
    
    function print_the_help {
      echo "USAGE:    ./util/start_dev_shell [-f]"
      echo "OPTIONS:"
      echo "          -f,--force    Force-update container (Only affects Linux)"
      echo "          -h,--help     Print this message"
      echo ""
      echo "  This script will setup and launch a containerized development
      environment"
      exit
    }
    while [ $# -gt 0 ]
    do
      key="$1"
      case $key in
        -f|--force)
          FORCE_UPDATE="true"
          shift # past value
          ;;
        -h|--help)
          print_the_help
          shift
          ;;
        *)    # unknown option
          echo "unknown option $1"
          exit 1
          ;;
      esac
    done
    
    ## get OS type
    OS=`uname -s`
    
    ## =============================================================================
    ## Step 2: Update container and launch shell
    echo "Launching a containerized development shell"
    
    case ${OS} in
      Linux)
        echo "  - Detected OS: Linux"
        ## Use the same prefix as we use for other local packages
        export PREFIX=.local/lib
        if [ ! -f $PREFIX/juggler_latest.sif ] || [ ! -z ${FORCE_UPDATE} ]; then
          echo "  - Fetching singularity image"
          mkdir -p $PREFIX
          wget https://eicweb.phy.anl.gov/eic/juggler/-/jobs/artifacts/master/raw/build/juggler.sif?job=singularity:latest -O $PREFIX/juggler_latest.sif
        fi
        echo "  - Using singularity to launch shell..."
        singularity exec $PREFIX/juggler_latest.sif eic-shell
        ;;
      Darwin)
        echo "  - Detector OS: MacOS"
        echo "  - Syncing docker container"
        docker pull sly2j/juggler:latest
        echo "  - Using docker to launch shell..."
        docker run -v /Users:/Users -w=$PWD -i -t --rm sly2j/juggler:latest eic-shell
        ;;
      *)
        echo "ERROR: dev shell not available for this OS (${OS})"
        exit 1
    esac
    
    ## =============================================================================
    ## Step 3: All done
    echo "Exiting development environment..."