diff mbox series

Add travis-ci config file

Message ID 20190212170033.68143-1-agraf@suse.de
State Superseded
Headers show
Series Add travis-ci config file | expand

Commit Message

Alexander Graf Feb. 12, 2019, 5 p.m. UTC
There is a really convenient service for open source project from Travis
CI: They allow for free CI testing using their infrastructure.

Grub has had issues with broken builds for various targets for a long time
already. The main reason is a lack of CI to just do smoke tests on whether
all targets still at least compile.

This patch adds a travis config file which builds (almost) all currently
available targets.

On top of that, this travis config also runs a small execution test on the
x86_64-efi target.

All of this config file can easily be extended further on. It probably makes
sense to do something similar to the u-boot test infrastructure that
communicates with the payload properly. Going forward, we also will want to
do more qemu runtime checks for other targets.

Currently, with this config alone, I already see about half of the available
targets as broken. So it's definitely desperately needed :).

Signed-off-by: Alexander Graf <agraf@suse.de>

---
 .travis.yml | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 118 insertions(+)
 create mode 100644 .travis.yml

-- 
2.12.3


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Comments

Konrad Rzeszutek Wilk Feb. 12, 2019, 6:29 p.m. UTC | #1
On Tue, Feb 12, 2019 at 06:00:33PM +0100, Alexander Graf wrote:
> There is a really convenient service for open source project from Travis

> CI: They allow for free CI testing using their infrastructure.

> 

> Grub has had issues with broken builds for various targets for a long time

> already. The main reason is a lack of CI to just do smoke tests on whether

> all targets still at least compile.

> 

> This patch adds a travis config file which builds (almost) all currently

> available targets.

> 

> On top of that, this travis config also runs a small execution test on the

> x86_64-efi target.

> 

> All of this config file can easily be extended further on. It probably makes

> sense to do something similar to the u-boot test infrastructure that

> communicates with the payload properly. Going forward, we also will want to

> do more qemu runtime checks for other targets.

> 

> Currently, with this config alone, I already see about half of the available

> targets as broken. So it's definitely desperately needed :).


This is awesome.. However is grub on github to automatically kick of CI ?
> 

> Signed-off-by: Alexander Graf <agraf@suse.de>

> ---

>  .travis.yml | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

>  1 file changed, 118 insertions(+)

>  create mode 100644 .travis.yml

> 

> diff --git a/.travis.yml b/.travis.yml

> new file mode 100644

> index 000000000..05608fc21

> --- /dev/null

> +++ b/.travis.yml

> @@ -0,0 +1,118 @@

> +# SPDX-License-Identifier: GPL-3.0+

> +# Originally Copyright Roger Meier <r.meier@siemens.com>

> +# Adapted for grub by Alexander Graf <agraf@suse.de>

> +

> +# build grub on Travis CI - https://travis-ci.org/

> +

> +dist: xenial

> +

> +language: c

> +

> +addons:

> +  apt:

> +    packages:

> +    - cppcheck

> +    - sloccount

> +    - sparse

> +    - bc

> +    - build-essential

> +    - libsdl1.2-dev

> +    - python

> +    - python-virtualenv

> +    - swig

> +    - libpython-dev

> +    - iasl

> +    - rpm2cpio

> +    - wget

> +    - device-tree-compiler

> +    - lzop

> +    - liblz4-tool

> +    - libisl15

> +    - qemu-system

> +    - ovmf

> +    - unifont

> +

> +env:

> +  global:

> +    - PATH=/tmp/qemu-install/bin:/tmp/grub/bin:/usr/bin:/bin:/tmp/cross/gcc-8.1.0-nolibc/aarch64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/arm-linux-gnueabi/bin:/tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/mips64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/powerpc64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv32-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/sparc64-linux/bin

> +

> +before_script:

> +  # install toolchains based on TOOLCHAIN} variable

> +  - mkdir /tmp/cross

> +  # results in binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc

> +  - for i in $CROSS_TARGETS; do

> +        ( cd /tmp/cross; wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | xzcat | tar x );

> +    done

> +

> +script:

> +  # Comments must be outside the command strings below, or the Travis parser

> +  # will get confused.

> +  - ./autogen.sh

> +

> +  # Build all selected grub targets:

> +  - for target in $GRUB_TARGETS; do

> +      plat=${target#*-};

> +      arch=${target%-*};

> +      [ "$arch" = "arm64" ] && arch=aarch64-linux;

> +      [ "$arch" = "arm" ] && arch=arm-linux-gnueabi;

> +      [ "$arch" = "ia64" ] && arch=ia64-linux;

> +      [ "$arch" = "mipsel" ] && arch=mips64-linux;

> +      [ "$arch" = "powerpc" ] && arch=powerpc64-linux;

> +      [ "$arch" = "riscv32" ] && arch=riscv32-linux;

> +      [ "$arch" = "riscv64" ] && arch=riscv64-linux;

> +      [ "$arch" = "sparc64" ] && arch=sparc64-linux;

> +      echo "Building $target";

> +      mkdir obj-$target;

> +      ( cd obj-$target && ../configure --target=$arch --with-platform=$plat --prefix=/tmp/grub && make -j4 && make -j4 install ) &> log || ( cat log; false );

> +    done

> +

> +  # Our test canary

> +  - echo -e "insmod echo\\ninsmod reboot\\necho hello world\\nreboot" > grub.cfg

> +

> +  # Assemble images and possibly run them

> +  - for target in $GRUB_TARGETS; do grub-mkimage -c grub.cfg -p / -O $target -o grub-$target echo reboot normal; done

> +

> +  # Run images we know how to run

> +  - if [[ "$GRUB_TARGETS" == *"x86_64-efi"* ]]; then qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -m 512 -no-reboot -nographic -net nic -net user,tftp=.,bootfile=grub-x86_64-efi | tee grub.log && grep "hello world" grub.log; fi

> +

> +matrix:

> +  include:

> +  # each env setting here is a dedicated build

> +    - name: "x86_64"

> +      env:

> +        - GRUB_TARGETS="x86_64-efi x86_64-xen"

> +    - name: "i386"

> +      env:

> +        - GRUB_TARGETS="i386-efi i386-xen i386-xen_pvh i386-pc i386-multiboot i386-coreboot i386-ieee1275 i386-qemu"

> +    - name: "powerpc"

> +      env:

> +        - GRUB_TARGETS="powerpc-ieee1275"

> +        - CROSS_TARGETS=powerpc64-linux"

> +    - name: "sparc64"

> +      env:

> +        - GRUB_TARGETS="sparc64-ieee1275"

> +        - CROSS_TARGETS=sparc64-linux"

> +    - name: "ia64"

> +      env:

> +        - GRUB_TARGETS="ia64-efi"

> +        - CROSS_TARGETS=ia64-linux"

> +    - name: "mips"

> +      env:

> +        - GRUB_TARGETS="mips-qemu_mips mips-arc mipsel-arc mipsel-qemu_mips"

> +        - CROSS_TARGETS=mips64-linux"

> +    - name: "arm"

> +      env:

> +        - GRUB_TARGETS="arm-uboot arm-coreboot arm-efi"

> +        - CROSS_TARGETS="arm-linux-gnueabi"

> +    - name: "arm64"

> +      env:

> +        - GRUB_TARGETS="arm64-efi"

> +        - CROSS_TARGETS=aarch64-linux"

> +    - name: "riscv32"

> +      env:

> +        - GRUB_TARGETS="riscv32-efi"

> +        - CROSS_TARGETS=riscv32-linux"

> +    - name: "riscv64"

> +      env:

> +        - GRUB_TARGETS="riscv64-efi"

> +        - CROSS_TARGETS=riscv64-linux"

> -- 

> 2.12.3

> 

> 

> _______________________________________________

> Grub-devel mailing list

> Grub-devel@gnu.org

> https://lists.gnu.org/mailman/listinfo/grub-devel


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
Paul Menzel Feb. 13, 2019, 12:04 p.m. UTC | #2
Dear Alexander,


On 02/12/19 18:00, Alexander Graf wrote:
> There is a really convenient service for open source project from Travis

> CI: They allow for free CI testing using their infrastructure.

> 

> Grub has had issues with broken builds for various targets for a long time

> already. The main reason is a lack of CI to just do smoke tests on whether

> all targets still at least compile.

> 

> This patch adds a travis config file which builds (almost) all currently

> available targets.

> 

> On top of that, this travis config also runs a small execution test on the

> x86_64-efi target.

> 

> All of this config file can easily be extended further on. It probably makes

> sense to do something similar to the u-boot test infrastructure that

> communicates with the payload properly. Going forward, we also will want to

> do more qemu runtime checks for other targets.

> 

> Currently, with this config alone, I already see about half of the available

> targets as broken. So it's definitely desperately needed :).


Thank you very much for this patch. Could you please post the URL where the
test results are available for the run you did?

There is one small typo further down.

> Signed-off-by: Alexander Graf <agraf@suse.de>

> ---

>  .travis.yml | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

>  1 file changed, 118 insertions(+)

>  create mode 100644 .travis.yml

> 

> diff --git a/.travis.yml b/.travis.yml

> new file mode 100644

> index 000000000..05608fc21

> --- /dev/null

> +++ b/.travis.yml

> @@ -0,0 +1,118 @@


[…]

> +before_script:

> +  # install toolchains based on TOOLCHAIN} variable


Remove the bracket }?

> +  - mkdir /tmp/cross

> +  # results in binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc

> +  - for i in $CROSS_TARGETS; do

> +        ( cd /tmp/cross; wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | xzcat | tar x );

> +    done


[…]


Thanks,

Paul
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
Alexander Graf Feb. 14, 2019, 1:07 p.m. UTC | #3
On 13.02.19 13:04, Paul Menzel wrote:
> Dear Alexander,
> 
> 
> On 02/12/19 18:00, Alexander Graf wrote:
>> There is a really convenient service for open source project from Travis
>> CI: They allow for free CI testing using their infrastructure.
>>
>> Grub has had issues with broken builds for various targets for a long time
>> already. The main reason is a lack of CI to just do smoke tests on whether
>> all targets still at least compile.
>>
>> This patch adds a travis config file which builds (almost) all currently
>> available targets.
>>
>> On top of that, this travis config also runs a small execution test on the
>> x86_64-efi target.
>>
>> All of this config file can easily be extended further on. It probably makes
>> sense to do something similar to the u-boot test infrastructure that
>> communicates with the payload properly. Going forward, we also will want to
>> do more qemu runtime checks for other targets.
>>
>> Currently, with this config alone, I already see about half of the available
>> targets as broken. So it's definitely desperately needed :).
> 
> Thank you very much for this patch. Could you please post the URL where the
> test results are available for the run you did?

Oh, definitely!

  https://travis-ci.org/agraf/grub/builds/492262122

> 
> There is one small typo further down.
> 
>> Signed-off-by: Alexander Graf <agraf@suse.de>
>> ---
>>  .travis.yml | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 118 insertions(+)
>>  create mode 100644 .travis.yml
>>
>> diff --git a/.travis.yml b/.travis.yml
>> new file mode 100644
>> index 000000000..05608fc21
>> --- /dev/null
>> +++ b/.travis.yml
>> @@ -0,0 +1,118 @@
> 
> […]
> 
>> +before_script:
>> +  # install toolchains based on TOOLCHAIN} variable
> 
> Remove the bracket }?

Well, the whole comment is stale. Thanks for catching it :)


Alex

> 
>> +  - mkdir /tmp/cross
>> +  # results in binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc
>> +  - for i in $CROSS_TARGETS; do
>> +        ( cd /tmp/cross; wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | xzcat | tar x );
>> +    done
> 
> […]
> 
> 
> Thanks,
> 
> Paul
>
Alexander Graf Feb. 14, 2019, 1:12 p.m. UTC | #4
On 12.02.19 19:29, Konrad Rzeszutek Wilk wrote:
> On Tue, Feb 12, 2019 at 06:00:33PM +0100, Alexander Graf wrote:

>> There is a really convenient service for open source project from Travis

>> CI: They allow for free CI testing using their infrastructure.

>>

>> Grub has had issues with broken builds for various targets for a long time

>> already. The main reason is a lack of CI to just do smoke tests on whether

>> all targets still at least compile.

>>

>> This patch adds a travis config file which builds (almost) all currently

>> available targets.

>>

>> On top of that, this travis config also runs a small execution test on the

>> x86_64-efi target.

>>

>> All of this config file can easily be extended further on. It probably makes

>> sense to do something similar to the u-boot test infrastructure that

>> communicates with the payload properly. Going forward, we also will want to

>> do more qemu runtime checks for other targets.

>>

>> Currently, with this config alone, I already see about half of the available

>> targets as broken. So it's definitely desperately needed :).

> 

> This is awesome.. However is grub on github to automatically kick of CI ?


I've seen multiple projects now that have their main mirror hosted
themselves with some magic syncing it to github (Linux, U-Boot).

I haven't quite figured out *how* they do that, but since it's been done
before I guess there must be a way. My gut feeling is that mirroring is
built into github itself even.


Alex

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel
diff mbox series

Patch

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..05608fc21
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,118 @@ 
+# SPDX-License-Identifier: GPL-3.0+
+# Originally Copyright Roger Meier <r.meier@siemens.com>
+# Adapted for grub by Alexander Graf <agraf@suse.de>
+
+# build grub on Travis CI - https://travis-ci.org/
+
+dist: xenial
+
+language: c
+
+addons:
+  apt:
+    packages:
+    - cppcheck
+    - sloccount
+    - sparse
+    - bc
+    - build-essential
+    - libsdl1.2-dev
+    - python
+    - python-virtualenv
+    - swig
+    - libpython-dev
+    - iasl
+    - rpm2cpio
+    - wget
+    - device-tree-compiler
+    - lzop
+    - liblz4-tool
+    - libisl15
+    - qemu-system
+    - ovmf
+    - unifont
+
+env:
+  global:
+    - PATH=/tmp/qemu-install/bin:/tmp/grub/bin:/usr/bin:/bin:/tmp/cross/gcc-8.1.0-nolibc/aarch64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/arm-linux-gnueabi/bin:/tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/mips64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/powerpc64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv32-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/sparc64-linux/bin
+
+before_script:
+  # install toolchains based on TOOLCHAIN} variable
+  - mkdir /tmp/cross
+  # results in binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc
+  - for i in $CROSS_TARGETS; do
+        ( cd /tmp/cross; wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | xzcat | tar x );
+    done
+
+script:
+  # Comments must be outside the command strings below, or the Travis parser
+  # will get confused.
+  - ./autogen.sh
+
+  # Build all selected grub targets:
+  - for target in $GRUB_TARGETS; do
+      plat=${target#*-};
+      arch=${target%-*};
+      [ "$arch" = "arm64" ] && arch=aarch64-linux;
+      [ "$arch" = "arm" ] && arch=arm-linux-gnueabi;
+      [ "$arch" = "ia64" ] && arch=ia64-linux;
+      [ "$arch" = "mipsel" ] && arch=mips64-linux;
+      [ "$arch" = "powerpc" ] && arch=powerpc64-linux;
+      [ "$arch" = "riscv32" ] && arch=riscv32-linux;
+      [ "$arch" = "riscv64" ] && arch=riscv64-linux;
+      [ "$arch" = "sparc64" ] && arch=sparc64-linux;
+      echo "Building $target";
+      mkdir obj-$target;
+      ( cd obj-$target && ../configure --target=$arch --with-platform=$plat --prefix=/tmp/grub && make -j4 && make -j4 install ) &> log || ( cat log; false );
+    done
+
+  # Our test canary
+  - echo -e "insmod echo\\ninsmod reboot\\necho hello world\\nreboot" > grub.cfg
+
+  # Assemble images and possibly run them
+  - for target in $GRUB_TARGETS; do grub-mkimage -c grub.cfg -p / -O $target -o grub-$target echo reboot normal; done
+
+  # Run images we know how to run
+  - if [[ "$GRUB_TARGETS" == *"x86_64-efi"* ]]; then qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -m 512 -no-reboot -nographic -net nic -net user,tftp=.,bootfile=grub-x86_64-efi | tee grub.log && grep "hello world" grub.log; fi
+
+matrix:
+  include:
+  # each env setting here is a dedicated build
+    - name: "x86_64"
+      env:
+        - GRUB_TARGETS="x86_64-efi x86_64-xen"
+    - name: "i386"
+      env:
+        - GRUB_TARGETS="i386-efi i386-xen i386-xen_pvh i386-pc i386-multiboot i386-coreboot i386-ieee1275 i386-qemu"
+    - name: "powerpc"
+      env:
+        - GRUB_TARGETS="powerpc-ieee1275"
+        - CROSS_TARGETS=powerpc64-linux"
+    - name: "sparc64"
+      env:
+        - GRUB_TARGETS="sparc64-ieee1275"
+        - CROSS_TARGETS=sparc64-linux"
+    - name: "ia64"
+      env:
+        - GRUB_TARGETS="ia64-efi"
+        - CROSS_TARGETS=ia64-linux"
+    - name: "mips"
+      env:
+        - GRUB_TARGETS="mips-qemu_mips mips-arc mipsel-arc mipsel-qemu_mips"
+        - CROSS_TARGETS=mips64-linux"
+    - name: "arm"
+      env:
+        - GRUB_TARGETS="arm-uboot arm-coreboot arm-efi"
+        - CROSS_TARGETS="arm-linux-gnueabi"
+    - name: "arm64"
+      env:
+        - GRUB_TARGETS="arm64-efi"
+        - CROSS_TARGETS=aarch64-linux"
+    - name: "riscv32"
+      env:
+        - GRUB_TARGETS="riscv32-efi"
+        - CROSS_TARGETS=riscv32-linux"
+    - name: "riscv64"
+      env:
+        - GRUB_TARGETS="riscv64-efi"
+        - CROSS_TARGETS=riscv64-linux"