summaryrefslogtreecommitdiff
path: root/src/edu/stsci/CondaInstaller.groovy
blob: 917dabf723a98868e90197d80211a663e0399ef0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package edu.stsci
import edu.stsci.OSInfo

class CondaInstaller implements Serializable {
    OSInfo os
    String prefix
    String dist_version
    String url
    def dist = [:]

    CondaInstaller(prefix, dist="miniconda", variant="3", version="latest") {
        def distributions = [
            miniconda: [name: 'Miniconda',
                        variant: variant,
                        baseurl: 'https://repo.continuum.io/miniconda'],
            anaconda: [name: 'Anaconda',
                       variant: variant,
                       baseurl: 'https://repo.continuum.io/archive']
        ]
        this.os = new OSInfo()
        this.dist = distributions."${dist}"
        this.dist_version = version
        this.prefix = prefix
        this.url = "${this.dist.baseurl}/" +
                  "${this.dist.name}${this.dist.variant}-" +
                  "${this.dist_version}-${this.os.name}-${this.os.arch}.sh"
    }

    void download() {

        println("Downloading $url")
        File fp = new File('installer.sh')
        def installer = fp.newOutputStream()
        installer << new URL(this.url).openStream()
        installer.close()
        println("Received ${fp.length()} bytes")
    }

    int install() {
        if (new File(this.prefix).exists()) {
            println("Skipping installation: ${this.prefix} exists.")
            return 0xFF
        }

        if (!new File('installer.sh').exists()) {
            this.download()
        }

        def cmd = "bash installer.sh -b -p ${this.prefix}"
        def proc = cmd.execute()
        def stdout = new StringBuffer()

        proc.inputStream.eachLine { println(it) }

        //proc.waitForProcessOutput(stdout, System.err)
        //print(stdout.toString())

        return proc.exitValue()
    }

    private void detect() {
    }
}