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}