main
1package procfile
2
3import (
4 "bufio"
5 "io"
6 "os"
7 "strings"
8)
9
10func ParseFile(path string) ([]*Proc, error) {
11 file, err := os.Open(path)
12 if err != nil {
13 return nil, err
14 }
15 defer file.Close()
16
17 return Parse(file), nil
18}
19
20func Parse(file io.Reader) []*Proc {
21 var processes []*Proc
22 scanner := bufio.NewScanner(file)
23
24 for scanner.Scan() {
25 line := strings.TrimSpace(scanner.Text())
26 if line == "" || strings.HasPrefix(line, "#") {
27 continue
28 }
29
30 parts := strings.SplitN(line, ":", 2)
31 if len(parts) != 2 {
32 continue
33 }
34
35 args := strings.Fields(os.ExpandEnv(strings.TrimSpace(parts[1])))
36 if len(args) == 0 {
37 continue
38 }
39
40 processes = append(processes, New(parts[0], args))
41 }
42
43 return processes
44}