aboutsummaryrefslogtreecommitdiff
path: root/sj
blob: 7a418c6aaceaf0d13b2c317d26784c9820921aaa (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash

set -eu

usage () {
    echo "usage: sj [options] JOB_FILE param=value"
}

SHOW_JOB=no
SHOW_PARAMS=no
OPEN=no
SUBSTS=''
while [ $# -gt 0 ]; do
    case $1 in
        --show-job)
            SHOW_JOB=yes
            ;;
        --show-params)
            SHOW_PARAMS=yes
            SHOW_JOB=yes
            ;;
        --open)
            OPEN=yes
            ;;
        --*)
            echo "unrecognized option $1"
            usage
            exit 1
            ;;
        *)
            if [ "${FILENAME+set}" = "set" ]; then
                SUBSTS="${SUBSTS:+$SUBSTS,}$1"
            else
                FILENAME=$1
            fi
    esac
    shift
done

if [ "${FILENAME+set}" != "set" ]; then
    echo "Must pass a filename"
    usage
    exit 1
fi

tmpdir=$(mktemp -d)
cleanup () { rm -rf $tmpdir; }
trap cleanup 0
if [ "${FILENAME%%.yaml}" != "${FILENAME}" ] || [ "${FILENAME%%.yml}" != "${FILENAME}" ]; then
    python -c "import json, yaml, sys; print json.dumps(yaml.safe_load(open(sys.argv[1])), indent=2)" $FILENAME > $tmpdir/job.json
else
    python -c "import json, sys; print json.dumps(json.load(open(sys.argv[1])), indent=2)" $FILENAME > $tmpdir/job.json
fi
if [ -n "$SUBSTS" ]; then
    python -c "
import json,sys
job = json.load(open(sys.argv[1]))
substs = {}
for kv in sys.argv[2].split(','):
    k, v = kv.split('=', 1)
    substs[k] = v
show_params = (sys.argv[3] == 'yes')
for action in job['actions']:
    if action['command'] != 'lava_test_shell':
        continue
    for parameter, values in action.get('parameters', {}).items():
        if parameter != 'testdef_repos':
            continue
        for value in values:
            if 'parameters' not in value:
                continue
            ps = value['parameters']
            if not ps:
                continue
            newps = {}
            if show_params:
                if 'git-repo' in value:
                    print value['git-repo']
                if 'bzr-repo' in value:
                    print value['bzr-repo']
            for k, v in sorted(ps.items()):
                newps[k] = substs.get(k, v)
                if show_params:
                    print '    ' + k + ':', newps[k]
            value['parameters'] = newps
if not show_params:
    print json.dumps(job, indent=2)
" $tmpdir/job.json "$SUBSTS" "$SHOW_PARAMS" > $tmpdir/job2.json
    mv $tmpdir/job2.json $tmpdir/job.json
fi

if [ "$SHOW_JOB" = "yes" ]; then
    cat $tmpdir/job.json
    exit 0
fi

lava scheduler submit-job https://$USER@validation.linaro.org/RPC2/ $tmpdir/job.json | tee $tmpdir/output.txt
if [ ${PIPESTATUS[0]} -eq 0 ] && [ "$OPEN" = yes ]; then
    job_id=$(awk '/submitted as/ { print $5 }' $tmpdir/output.txt)
    gnome-open https://validation.linaro.org/scheduler/job/$job_id
fi