diff mbox

[v3,10/13] docker: Add travis tool

Message ID 1457086720-30391-11-git-send-email-famz@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Fam Zheng March 4, 2016, 10:18 a.m. UTC
The script is not named test-travis.sh so it won't run with "make
docker-run", because it can take too long.

Run it with "make docker-run-travis.sh@ubuntu".

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 tests/docker/travis    | 21 +++++++++++++++++++++
 tests/docker/travis.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100755 tests/docker/travis
 create mode 100755 tests/docker/travis.py

Comments

Alex Bennée March 11, 2016, 4:14 p.m. UTC | #1
Fam Zheng <famz@redhat.com> writes:

> The script is not named test-travis.sh so it won't run with "make
> docker-run", because it can take too long.
>
> Run it with "make docker-run-travis.sh@ubuntu".

16:08 alex@zen/x86_64  [qemu.git/review/docker-v3] >make docker-run-travis.sh@ubuntu
ARCHIVE qemu.tgz
COPY RUNNER
RUN travis.sh in ubuntu
./run: line 49: /tmp/qemu-test/src/tests/docker/travis.sh: No such file or directory

>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  tests/docker/travis    | 21 +++++++++++++++++++++
>  tests/docker/travis.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 69 insertions(+)
>  create mode 100755 tests/docker/travis
>  create mode 100755 tests/docker/travis.py
>
> diff --git a/tests/docker/travis b/tests/docker/travis
> new file mode 100755
> index 0000000..d345393
> --- /dev/null
> +++ b/tests/docker/travis
> @@ -0,0 +1,21 @@
> +#!/bin/bash -e
> +#
> +# Mimic a travis testing matrix
> +#
> +# Copyright (c) 2016 Red Hat Inc.
> +#
> +# Authors:
> +#  Fam Zheng <famz@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2
> +# or (at your option) any later version. See the COPYING file in
> +# the top-level directory.
> +
> +. common.rc
> +
> +requires pyyaml
> +cmdfile=/tmp/travis_cmd_list.sh
> +$QEMU_SRC/tests/docker/travis.py $QEMU_SRC/.travis.yml > $cmdfile
> +chmod +x $cmdfile
> +cd "$QEMU_SRC"
> +$cmdfile
> diff --git a/tests/docker/travis.py b/tests/docker/travis.py
> new file mode 100755
> index 0000000..8dcc964
> --- /dev/null
> +++ b/tests/docker/travis.py
> @@ -0,0 +1,48 @@
> +#!/usr/bin/env python
> +#
> +# Travis YAML config parser
> +#
> +# Copyright (c) 2016 Red Hat Inc.
> +#
> +# Authors:
> +#  Fam Zheng <famz@redhat.com>
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2
> +# or (at your option) any later version. See the COPYING file in
> +# the top-level directory.
> +
> +import sys
> +import yaml
> +import itertools
> +
> +def load_yaml(fname):
> +    return yaml.load(open(fname, "r").read())
> +
> +def conf_iter(conf):
> +    def env_to_list(env):
> +        return env if isinstance(env, list) else [env]
> +    global_env = conf["env"]["global"]
> +    for entry in conf["matrix"]["include"]:
> +        yield {"env": global_env + env_to_list(entry["env"]),
> +               "compiler": entry["compiler"]}
> +    for entry in itertools.product(conf["compiler"],
> +                                   conf["env"]["matrix"]):
> +        yield {"env": global_env + env_to_list(entry[1]),
> +               "compiler": entry[0]}
> +
> +def main():
> +    if len(sys.argv) < 2:
> +        sys.stderr.write("Usage: %s <travis-file>\n" % sys.argv[0])
> +        return 1
> +    conf = load_yaml(sys.argv[1])
> +    for config in conf_iter(conf):
> +        print "("
> +        print "\n".join(config["env"])
> +        print "alias cc=" + config["compiler"]
> +        print "\n".join(conf["before_script"])
> +        print "\n".join(conf["script"])
> +        print ")"
> +    return 0
> +
> +if __name__ == "__main__":
> +    sys.exit(main())


--
Alex Bennée
Fam Zheng March 16, 2016, 3:49 a.m. UTC | #2
On Fri, 03/11 16:14, Alex Bennée wrote:
> 
> Fam Zheng <famz@redhat.com> writes:
> 
> > The script is not named test-travis.sh so it won't run with "make
> > docker-run", because it can take too long.
> >
> > Run it with "make docker-run-travis.sh@ubuntu".
> 
> 16:08 alex@zen/x86_64  [qemu.git/review/docker-v3] >make docker-run-travis.sh@ubuntu
> ARCHIVE qemu.tgz
> COPY RUNNER
> RUN travis.sh in ubuntu
> ./run: line 49: /tmp/qemu-test/src/tests/docker/travis.sh: No such file or directory

Will update the commit message.

Fam
Alex Bennée March 16, 2016, 9:09 a.m. UTC | #3
Fam Zheng <famz@redhat.com> writes:

> On Fri, 03/11 16:14, Alex Bennée wrote:
>>
>> Fam Zheng <famz@redhat.com> writes:
>>
>> > The script is not named test-travis.sh so it won't run with "make
>> > docker-run", because it can take too long.
>> >
>> > Run it with "make docker-run-travis.sh@ubuntu".
>>
>> 16:08 alex@zen/x86_64  [qemu.git/review/docker-v3] >make docker-run-travis.sh@ubuntu
>> ARCHIVE qemu.tgz
>> COPY RUNNER
>> RUN travis.sh in ubuntu
>> ./run: line 49: /tmp/qemu-test/src/tests/docker/travis.sh: No such file or directory
>
> Will update the commit message.

I had a bit of a further play with this while trying to help with the
recent Travis breakage. I realised we need to be clearer about what this
does. It's not the same as running on travis, just a way of iterating
through the travis build matrix on whatever image you happen to be on.

It would be nice to have a travis image for local debug but that seems
to be harder to do than I thought. I couldn't find any such images on
the hub.


>
> Fam


--
Alex Bennée
Fam Zheng March 16, 2016, 9:29 a.m. UTC | #4
On Wed, 03/16 09:09, Alex Bennée wrote:
> 
> Fam Zheng <famz@redhat.com> writes:
> 
> > On Fri, 03/11 16:14, Alex Bennée wrote:
> >>
> >> Fam Zheng <famz@redhat.com> writes:
> >>
> >> > The script is not named test-travis.sh so it won't run with "make
> >> > docker-run", because it can take too long.
> >> >
> >> > Run it with "make docker-run-travis.sh@ubuntu".
> >>
> >> 16:08 alex@zen/x86_64  [qemu.git/review/docker-v3] >make docker-run-travis.sh@ubuntu
> >> ARCHIVE qemu.tgz
> >> COPY RUNNER
> >> RUN travis.sh in ubuntu
> >> ./run: line 49: /tmp/qemu-test/src/tests/docker/travis.sh: No such file or directory
> >
> > Will update the commit message.
> 
> I had a bit of a further play with this while trying to help with the
> recent Travis breakage.

Did this help?

> I realised we need to be clearer about what this
> does. It's not the same as running on travis, just a way of iterating
> through the travis build matrix on whatever image you happen to be on.

Right. I have no idea how to precisely replicate travis environment, and I
ignored python version, packages etc for simplicity, only the command matrix
was simulated. But are there any major differences you are noticing? At least
we are also on Ubuntu Trusty, the same as:

https://docs.travis-ci.com/user/ci-environment/

Fam

> 
> It would be nice to have a travis image for local debug but that seems
> to be harder to do than I thought. I couldn't find any such images on
> the hub.
Alex Bennée March 16, 2016, 10:21 a.m. UTC | #5
Fam Zheng <famz@redhat.com> writes:

> On Wed, 03/16 09:09, Alex Bennée wrote:
>>
>> Fam Zheng <famz@redhat.com> writes:
>>
>> > On Fri, 03/11 16:14, Alex Bennée wrote:
>> >>
>> >> Fam Zheng <famz@redhat.com> writes:
>> >>
>> >> > The script is not named test-travis.sh so it won't run with "make
>> >> > docker-run", because it can take too long.
>> >> >
>> >> > Run it with "make docker-run-travis.sh@ubuntu".
>> >>
>> >> 16:08 alex@zen/x86_64  [qemu.git/review/docker-v3] >make docker-run-travis.sh@ubuntu
>> >> ARCHIVE qemu.tgz
>> >> COPY RUNNER
>> >> RUN travis.sh in ubuntu
>> >> ./run: line 49: /tmp/qemu-test/src/tests/docker/travis.sh: No such file or directory
>> >
>> > Will update the commit message.
>>
>> I had a bit of a further play with this while trying to help with the
>> recent Travis breakage.
>
> Did this help?

Daniel fixed it before I could get something up and running.

>
>> I realised we need to be clearer about what this
>> does. It's not the same as running on travis, just a way of iterating
>> through the travis build matrix on whatever image you happen to be on.
>
> Right. I have no idea how to precisely replicate travis environment, and I
> ignored python version, packages etc for simplicity, only the command matrix
> was simulated. But are there any major differences you are noticing? At least
> we are also on Ubuntu Trusty, the same as:
>
> https://docs.travis-ci.com/user/ci-environment/

No the current container based CI environment is Precise (Trusty is in
beta). I tried creating a precise image from scratch but apt got
confused about having both i386 and amd64 packages in package lists and
I didn't get the bottom of it before upstream was fixed.

>
> Fam
>
>>
>> It would be nice to have a travis image for local debug but that seems
>> to be harder to do than I thought. I couldn't find any such images on
>> the hub.


--
Alex Bennée
diff mbox

Patch

diff --git a/tests/docker/travis b/tests/docker/travis
new file mode 100755
index 0000000..d345393
--- /dev/null
+++ b/tests/docker/travis
@@ -0,0 +1,21 @@ 
+#!/bin/bash -e
+#
+# Mimic a travis testing matrix
+#
+# Copyright (c) 2016 Red Hat Inc.
+#
+# Authors:
+#  Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2
+# or (at your option) any later version. See the COPYING file in
+# the top-level directory.
+
+. common.rc
+
+requires pyyaml
+cmdfile=/tmp/travis_cmd_list.sh
+$QEMU_SRC/tests/docker/travis.py $QEMU_SRC/.travis.yml > $cmdfile
+chmod +x $cmdfile
+cd "$QEMU_SRC"
+$cmdfile
diff --git a/tests/docker/travis.py b/tests/docker/travis.py
new file mode 100755
index 0000000..8dcc964
--- /dev/null
+++ b/tests/docker/travis.py
@@ -0,0 +1,48 @@ 
+#!/usr/bin/env python
+#
+# Travis YAML config parser
+#
+# Copyright (c) 2016 Red Hat Inc.
+#
+# Authors:
+#  Fam Zheng <famz@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2
+# or (at your option) any later version. See the COPYING file in
+# the top-level directory.
+
+import sys
+import yaml
+import itertools
+
+def load_yaml(fname):
+    return yaml.load(open(fname, "r").read())
+
+def conf_iter(conf):
+    def env_to_list(env):
+        return env if isinstance(env, list) else [env]
+    global_env = conf["env"]["global"]
+    for entry in conf["matrix"]["include"]:
+        yield {"env": global_env + env_to_list(entry["env"]),
+               "compiler": entry["compiler"]}
+    for entry in itertools.product(conf["compiler"],
+                                   conf["env"]["matrix"]):
+        yield {"env": global_env + env_to_list(entry[1]),
+               "compiler": entry[0]}
+
+def main():
+    if len(sys.argv) < 2:
+        sys.stderr.write("Usage: %s <travis-file>\n" % sys.argv[0])
+        return 1
+    conf = load_yaml(sys.argv[1])
+    for config in conf_iter(conf):
+        print "("
+        print "\n".join(config["env"])
+        print "alias cc=" + config["compiler"]
+        print "\n".join(conf["before_script"])
+        print "\n".join(conf["script"])
+        print ")"
+    return 0
+
+if __name__ == "__main__":
+    sys.exit(main())