def call(Map args) {
    assert (args.environment && args.roverOperation && args.serviceName): 'environment, roverOperation, ' +
        'and serviceName arguments must be passed.'

    def dockerImage = args.dockerImage ?: '086679231553.dkr.ecr.us-east-1.amazonaws.com/graphql-rover-utility:latest'
    def runTimeout = args.runTimeout ?: '300'
    def schemaDirectory = args.schemaDirectory ?: "${env.WORKSPACE}/src/schema"

    withEcr {
        withCredentials([
            string(credentialsId: 'apollo-engine-graphql-theorchard-api-key', variable: 'APOLLO_KEY'),
        ]) {
            sh """
                set +x
                timeout ${runTimeout} docker run --rm \
                  --pull always \
                  -v \"${schemaDirectory}:/var/app/src/schema\" \
                  -e APOLLO_KEY="service:graphql-theorchard:\${APOLLO_KEY}" \
                  -e ENV="${args.environment}" \
                  -e ROVER_OPERATION="${args.roverOperation}" \
                  -e SERVICE_NAME="${args.serviceName}" \
                  ${dockerImage}
            """
        }
    }
}
