├── .gitignore ├── views ├── error.jade ├── index.jade └── layout.jade ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── routes ├── index.js └── trains.js ├── test └── index.test.js ├── package.json ├── README.md ├── public ├── stylesheets │ └── style.css └── javascripts │ └── global.js ├── app.js ├── data └── trains.json ├── bin └── www ├── gradlew.bat └── gradlew /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .gradle -------------------------------------------------------------------------------- /views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxacademy/cicd-pipeline-train-schedule-gradle/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('index', { title: 'Express' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1 Find your train! 5 | p Select your train below to see its current schedule. 6 | #wrapper 7 | #trainList 8 | h2 Trains 9 | #trains.d-flex.flex-row 10 | #trainInfo 11 | strong 12 | #trainSchedule 13 | strong Select a train to view its current schedule. -------------------------------------------------------------------------------- /routes/trains.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var low = require('lowdb') 4 | var FileSync = require('lowdb/adapters/FileSync') 5 | 6 | var adapter = new FileSync('data/trains.json') 7 | var db = low(adapter) 8 | 9 | /* GET trains listing. */ 10 | router.get('/', function(req, res, next) { 11 | res.send(db.get('trains').sortBy('name').value()); 12 | }); 13 | 14 | module.exports = router; 15 | -------------------------------------------------------------------------------- /views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css', integrity='sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm', crossorigin='anonymous') 7 | body 8 | block content 9 | script(src='http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js') 10 | script(src='/javascripts/global.js') -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | var request = require('supertest'); 2 | var express = require('express'); 3 | 4 | var app = require('../app'); 5 | 6 | describe('Index Page', function() { 7 | it("renders successfully", function(done) { 8 | request(app).get('/').expect(200, done); 9 | }) 10 | }) 11 | 12 | describe('Trains API', function() { 13 | it("returns data successfully", function(done) { 14 | request(app).get('/trains').expect(200).expect('Content-Length', '1093').expect('Content-Type', /json/, done); ; 15 | }) 16 | }) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cicd-pipeline-train-schedule-git", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www", 7 | "test": "./node_modules/.bin/mocha" 8 | }, 9 | "dependencies": { 10 | "cookie-parser": "~1.4.3", 11 | "debug": "~2.6.9", 12 | "express": "~4.16.0", 13 | "http-errors": "~1.6.2", 14 | "jade": "~1.11.0", 15 | "lowdb": "^1.0.0", 16 | "morgan": "~1.9.0", 17 | "npm": "^5.8.0" 18 | }, 19 | "devDependencies": { 20 | "mocha": "^5.0.5", 21 | "supertest": "^3.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cicd-pipeline-train-schedule-gradle 2 | 3 | This is a simple train schedule app written using nodejs. It is intended to be used as a sample application for a series of hands-on learning activities. 4 | 5 | ## Running the app 6 | 7 | It is not necessary to run this app locally in order to complete the learning activities, but if you wish to do so you will need a local installation of npm. Begin by installing the npm dependencies with: 8 | 9 | npm install 10 | 11 | Then, you can run the app with: 12 | 13 | npm start 14 | 15 | Once it is running, you can access it in a browser at [http://localhost:3000](http://localhost:3000) -------------------------------------------------------------------------------- /public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 30px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | h2 { 7 | margin:0 0 .5em 0; 8 | } 9 | 10 | a { 11 | color: #00B7FF; 12 | } 13 | 14 | #wrapper { 15 | position:relative; 16 | } 17 | 18 | #trains { 19 | top:0; left:0; margin-bottom:25px; 20 | padding:15px; 21 | border:1px solid #CCC; 22 | background:rgba(80,120,255,0.05); 23 | } 24 | 25 | #trainInfo { 26 | top:0; left:0; 27 | padding:15px; 28 | border:1px solid #CCC; 29 | background:rgba(80,120,255,0.05); 30 | } 31 | #trainInfo p { 32 | padding:15px; 33 | } 34 | #trainInfo table { 35 | border-collapse:separate; 36 | border-spacing:1px; 37 | background:#CCC; 38 | } 39 | #trainInfo table th { 40 | background:#EEE; 41 | font-weight:600; 42 | padding:10px 20px; 43 | text-align:center; 44 | } 45 | #trainInfo table tbody { 46 | padding:0; margin:0; 47 | border-collapse:collapse; 48 | border-spacing:0px; 49 | } 50 | #trainInfo table td { 51 | background:#FFF; 52 | padding:5px 10px; 53 | text-align:center; 54 | } 55 | 56 | fieldset { 57 | border:0; 58 | padding:0; margin:0; 59 | } -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var createError = require('http-errors'); 2 | var express = require('express'); 3 | var path = require('path'); 4 | var cookieParser = require('cookie-parser'); 5 | var logger = require('morgan'); 6 | 7 | var indexRouter = require('./routes/index'); 8 | var trainsRouter = require('./routes/trains'); 9 | 10 | var app = express(); 11 | 12 | // view engine setup 13 | app.set('views', path.join(__dirname, 'views')); 14 | app.set('view engine', 'jade'); 15 | 16 | app.use(logger('dev')); 17 | app.use(express.json()); 18 | app.use(express.urlencoded({ extended: false })); 19 | app.use(cookieParser()); 20 | app.use(express.static(path.join(__dirname, 'public'))); 21 | 22 | app.use('/', indexRouter); 23 | app.use('/trains', trainsRouter); 24 | 25 | // catch 404 and forward to error handler 26 | app.use(function(req, res, next) { 27 | next(createError(404)); 28 | }); 29 | 30 | // error handler 31 | app.use(function(err, req, res, next) { 32 | // set locals, only providing error in development 33 | res.locals.message = err.message; 34 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 35 | 36 | // render the error page 37 | res.status(err.status || 500); 38 | res.render('error'); 39 | }); 40 | 41 | module.exports = app; 42 | -------------------------------------------------------------------------------- /public/javascripts/global.js: -------------------------------------------------------------------------------- 1 | var userListData = []; 2 | 3 | $(document).ready(function() { 4 | 5 | populateTrains(); 6 | 7 | }); 8 | 9 | function populateTrains() { 10 | var trainsContent = ''; 11 | 12 | $.getJSON( '/trains', function( data ) { 13 | 14 | trains = data 15 | 16 | $.each(data, function(index){ 17 | trainsContent += '
' + this.name + '
'; 18 | }); 19 | $('#trains').html(trainsContent); 20 | $('#trains').on('click', 'div a.linkshowtrain', showTrainInfo); 21 | }); 22 | }; 23 | 24 | function showTrainInfo(event) { 25 | event.preventDefault(); 26 | var train = trains[$(this).attr('rel')]; 27 | var tableContent = ''; 28 | $.each(train.stops, function(index){ 29 | tableContent += ''; 30 | tableContent += ''; 31 | var onTime = (this.status == 'ON-TIME'); 32 | tableContent += ''; 33 | tableContent += ''; 40 | tableContent += ''; 47 | tableContent += ''; 48 | }); 49 | tableContent += '
Station
' + this.station + '' + this.status + 'Arrives '; 34 | if (onTime || this.arrival == this.delayedArrival) { 35 | tableContent += this.arrival; 36 | } else { 37 | tableContent += '' + this.arrival + ' ' + this.delayedArrival; 38 | } 39 | tableContent += 'Departs '; 41 | if (onTime || this.departure == this.delayedDeparture) { 42 | tableContent += this.departure; 43 | } else { 44 | tableContent += '' + this.departure + ' ' + this.delayedDeparture; 45 | } 46 | tableContent += '
'; 50 | $('#trainName').text(train.name); 51 | $('#trainSchedule').html(tableContent); 52 | } -------------------------------------------------------------------------------- /data/trains.json: -------------------------------------------------------------------------------- 1 | { 2 | "trains": [ 3 | { 4 | "name": "Hogwarts Express", 5 | "stops": [ 6 | { 7 | "station": "Sycamore", 8 | "status": "ON-TIME", 9 | "arrival": "12:00pm", 10 | "departure": "12:10pm" 11 | }, 12 | { 13 | "station": "Pine", 14 | "status": "ON-TIME", 15 | "arrival": "1:00pm", 16 | "departure": "1:10pm" 17 | } 18 | ] 19 | }, 20 | { 21 | "name": "Flying Scotsman", 22 | "stops": [ 23 | { 24 | "station": "Pine", 25 | "status": "ON-TIME", 26 | "arrival": "12:00pm", 27 | "departure": "12:10pm" 28 | }, 29 | { 30 | "station": "Sycamore", 31 | "status": "DELAYED", 32 | "arrival": "1:00pm", 33 | "departure": "1:10pm", 34 | "delayedArrival": "1:00pm", 35 | "delayedDeparture": "1:17pm" 36 | } 37 | ] 38 | }, 39 | { 40 | "name": "Orient Express", 41 | "stops": [ 42 | { 43 | "station": "Sycamore", 44 | "status": "ON-TIME", 45 | "arrival": "12:00pm", 46 | "departure": "12:10pm" 47 | }, 48 | { 49 | "station": "Cypress", 50 | "status": "DELAYED", 51 | "arrival": "1:00pm", 52 | "departure": "1:10pm", 53 | "delayedArrival": "1:07pm", 54 | "delayedDeparture": "1:17pm" 55 | } 56 | ] 57 | }, 58 | { 59 | "name": "Golden Arrow", 60 | "stops": [ 61 | { 62 | "station": "Cypress", 63 | "status": "ON-TIME", 64 | "arrival": "12:00pm", 65 | "departure": "12:10pm" 66 | }, 67 | { 68 | "station": "Pine", 69 | "status": "DELAYED", 70 | "arrival": "1:00pm", 71 | "departure": "1:10pm", 72 | "delayedArrival": "1:07pm", 73 | "delayedDeparture": "1:17pm" 74 | }, 75 | { 76 | "station": "Hickory", 77 | "status": "DELAYED", 78 | "arrival": "1:00pm", 79 | "departure": "1:10pm", 80 | "delayedArrival": "1:07pm", 81 | "delayedDeparture": "1:17pm" 82 | } 83 | ] 84 | } 85 | ] 86 | } -------------------------------------------------------------------------------- /bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('cicd-pipeline-train-schedule-git:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | --------------------------------------------------------------------------------