Speedup build with custom docker image and dag layout

Recently GitLab added the needs keyword which allows implementing dag
layouts for pipelines. CI also spends a lot of time building
dependencies. A custom image currently hosted in
https://github.com/pmatos/racket-ci contains the dependencies to build
racket properly.

Enabling both features that cuts CI time by 60%.

Note that we use an empty needs keyword to mean that a job depends on
nothing but it is currently ignored pending a fix for
https://gitlab.com/gitlab-org/gitlab/issues/30631
This commit is contained in:
Paulo Matos 2019-09-25 15:46:50 +02:00
parent 487d3bfd7d
commit 2ef7c550e5

View File

@ -51,13 +51,13 @@ prepare-cache:llvm:
# Build cgc
build:racket:cgc:
stage: stage2
image: pmatos/racket-ci:builddeps
needs: []
tags:
- linux
- x86_64
variables:
INSTALL_DIR: $CI_PROJECT_DIR/install/racketcgc
before_script:
- apt-get update && apt-get install -y unzip python libxml2-dev libfindbin-libs-perl make gcc g++
script:
- cd racket/src
- ./configure --prefix=$INSTALL_DIR --enable-cgcdefault --enable-jit --enable-foreign --enable-places --enable-futures --enable-float --disable-docs --enable-cify --enable-pthread
@ -70,14 +70,14 @@ build:racket:cgc:
build:racket:3m:
stage: stage3
image: pmatos/racket-ci:builddeps
needs: ["build:racket:cgc"]
tags:
- linux
- x86_64
variables:
CGC_INSTALL_DIR: $CI_PROJECT_DIR/install/racketcgc
INSTALL_DIR: $CI_PROJECT_DIR/install/racket3m
before_script:
- apt-get update && apt-get install -y unzip python libxml2-dev libfindbin-libs-perl make gcc g++
script:
- cd racket/src
- ./configure --prefix=$INSTALL_DIR --enable-jit --enable-foreign --enable-places --enable-futures --enable-float --disable-docs --enable-cify --enable-pthread --enable-racket=$CGC_INSTALL_DIR/bin/racket
@ -92,14 +92,14 @@ build:racket:3m:
build:racket:cs:
stage: stage4
image: pmatos/racket-ci:builddeps
needs: ["build:racket:3m"]
tags:
- linux
- x86_64
variables:
MMM_INSTALL_DIR: $CI_PROJECT_DIR/install/racket3m
INSTALL_DIR: $CI_PROJECT_DIR/install/racketcs
before_script:
- apt-get update && apt-get install -y unzip python libxml2-dev libfindbin-libs-perl make gcc g++ uuid-dev git
script:
- cd racket/src
- rm -r ChezScheme || true
@ -117,6 +117,7 @@ build:racket:cs:
# Build racket with scan-build
scan:racket:cgc:
stage: stage2
needs: ["prepare-cache:llvm"]
tags:
- linux
- x86_64
@ -141,6 +142,7 @@ scan:racket:cgc:
scan:racket:3m:
stage: stage3
needs: ["prepare-cache:llvm", "build:racket:cgc"]
tags:
- linux
- x86_64
@ -167,6 +169,7 @@ scan:racket:3m:
scan:racket:cs:
stage: stage4
needs: ["prepare-cache:llvm", "build:racket:3m"]
tags:
- linux
- x86_64
@ -368,6 +371,7 @@ scan:racket:cs:
# Test: test:racket:test
test:racket:test:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:racket:test
allow_failure: true
dependencies:
@ -382,6 +386,7 @@ test:racket:test:cgc:
test:racket:test:3m:
stage: stage4
needs: ["build:racket:3m"]
allow_failure: true
extends: .test:racket:test
dependencies:
@ -396,6 +401,7 @@ test:racket:test:3m:
test:racket:test:cs:
stage: stage5
needs: ["build:racket:cs"]
allow_failure: true
extends: .test:racket:test
dependencies:
@ -411,6 +417,7 @@ test:racket:test:cs:
# Test: test:racket:contract:all
test:racket:contract:all:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:racket:contract:all
dependencies:
- build:racket:cgc
@ -424,6 +431,7 @@ test:racket:contract:all:cgc:
test:racket:contract:all:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:racket:contract:all
dependencies:
- build:racket:3m
@ -437,6 +445,7 @@ test:racket:contract:all:3m:
test:racket:contract:all:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:racket:contract:all
dependencies:
- build:racket:cs
@ -451,6 +460,7 @@ test:racket:contract:all:cs:
# Test: test:json:json
test:json:json:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:json:json
dependencies:
- build:racket:cgc
@ -464,6 +474,7 @@ test:json:json:cgc:
test:json:json:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:json:json
dependencies:
- build:racket:3m
@ -477,6 +488,7 @@ test:json:json:3m:
test:json:json:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:json:json
dependencies:
- build:racket:cs
@ -491,6 +503,7 @@ test:json:json:cs:
# Test: test:file:main
test:file:main:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:file:main
dependencies:
- build:racket:cgc
@ -504,6 +517,7 @@ test:file:main:cgc:
test:file:main:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:file:main
dependencies:
- build:racket:3m
@ -517,6 +531,7 @@ test:file:main:3m:
test:file:main:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:file:main
dependencies:
- build:racket:cs
@ -531,6 +546,7 @@ test:file:main:cs:
# Test: test:net:head
test:net:head:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:net:head
dependencies:
- build:racket:cgc
@ -542,6 +558,7 @@ test:net:head:cgc:
test:net:head:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:net:head
dependencies:
- build:racket:3m
@ -555,6 +572,7 @@ test:net:head:3m:
test:net:head:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:net:head
dependencies:
- build:racket:cs
@ -569,6 +587,7 @@ test:net:head:cs:
# Test: test:net:uri-codec
test:net:uri-codec:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:net:uri-codec
dependencies:
- build:racket:cgc
@ -582,6 +601,7 @@ test:net:uri-codec:cgc:
test:net:uri-codec:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:net:uri-codec
dependencies:
- build:racket:3m
@ -595,6 +615,7 @@ test:net:uri-codec:3m:
test:net:uri-codec:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:net:uri-codec
dependencies:
- build:racket:cs
@ -609,6 +630,7 @@ test:net:uri-codec:cs:
# Test: test:net:url
test:net:url:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:net:url
dependencies:
- build:racket:cgc
@ -622,6 +644,7 @@ test:net:url:cgc:
test:net:url:3m:
stage: stage4
needs: ["build:racket:3m"]
allow_failure: true
extends: .test:net:url
dependencies:
@ -636,6 +659,7 @@ test:net:url:3m:
test:net:url:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:net:url
dependencies:
- build:racket:cs
@ -650,6 +674,7 @@ test:net:url:cs:
# Test: test:net:url-port
test:net:url-port:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:net:url-port
dependencies:
- build:racket:cgc
@ -663,6 +688,7 @@ test:net:url-port:cgc:
test:net:url-port:3m:
stage: stage4
needs: ["build:racket:3m"]
allow_failure: true
extends: .test:net:url-port
dependencies:
@ -677,6 +703,7 @@ test:net:url-port:3m:
test:net:url-port:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:net:url-port
dependencies:
- build:racket:cs
@ -691,6 +718,7 @@ test:net:url-port:cs:
# Test: test:net:encoders
test:net:encoders:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:net:encoders
dependencies:
- build:racket:cgc
@ -704,6 +732,7 @@ test:net:encoders:cgc:
test:net:encoders:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:net:encoders
dependencies:
- build:racket:3m
@ -717,6 +746,7 @@ test:net:encoders:3m:
test:net:encoders:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:net:encoders
dependencies:
- build:racket:cs
@ -731,6 +761,7 @@ test:net:encoders:cs:
# Test: test:openssl ca-certificates libfontconfig1-dev libpango1.0-dev libcairo2-dev libjpeg-dev libturbojpeg0-dev:basic
test:openssl:cgc:
stage: stage3
needs: ["build:racket:cgc"]
allow_failure: true
extends: .test:openssl
dependencies:
@ -745,6 +776,7 @@ test:openssl:cgc:
test:openssl:3m:
stage: stage4
needs: ["build:racket:3m"]
allow_failure: true
extends: .test:openssl
dependencies:
@ -759,6 +791,7 @@ test:openssl:3m:
test:openssl:cs:
stage: stage5
needs: ["build:racket:cs"]
allow_failure: true
extends: .test:openssl
dependencies:
@ -774,6 +807,7 @@ test:openssl:cs:
# Test: test:match:main
test:match:main:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:match:main
dependencies:
- build:racket:cgc
@ -787,6 +821,7 @@ test:match:main:cgc:
test:match:main:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:match:main
dependencies:
- build:racket:3m
@ -800,6 +835,7 @@ test:match:main:3m:
test:match:main:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:match:main
dependencies:
- build:racket:cs
@ -814,6 +850,7 @@ test:match:main:cs:
# Test: test:zo-path
test:zo-path:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:zo-path
dependencies:
- build:racket:cgc
@ -827,6 +864,7 @@ test:zo-path:cgc:
test:zo-path:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:zo-path
dependencies:
- build:racket:3m
@ -840,6 +878,7 @@ test:zo-path:3m:
test:zo-path:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:zo-path
dependencies:
- build:racket:cs
@ -854,6 +893,7 @@ test:zo-path:cs:
# Test: test:xml:test
test:xml:test:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:xml:test
dependencies:
- build:racket:cgc
@ -867,6 +907,7 @@ test:xml:test:cgc:
test:xml:test:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:xml:test
dependencies:
- build:racket:3m
@ -880,6 +921,7 @@ test:xml:test:3m:
test:xml:test:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:xml:test
dependencies:
- build:racket:cs
@ -894,6 +936,7 @@ test:xml:test:cs:
# Test: test:db:all-tests
test:db:all-tests:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:db:all-tests
dependencies:
- build:racket:cgc
@ -907,6 +950,7 @@ test:db:all-tests:cgc:
test:db:all-tests:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:db:all-tests
dependencies:
- build:racket:3m
@ -920,6 +964,7 @@ test:db:all-tests:3m:
test:db:all-tests:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:db:all-tests
dependencies:
- build:racket:cs
@ -934,6 +979,7 @@ test:db:all-tests:cs:
# Test: test:stxparse
test:stxparse:cgc:
stage: stage3
needs: ["build:racket:cgc"]
extends: .test:stxparse
dependencies:
- build:racket:cgc
@ -947,6 +993,7 @@ test:stxparse:cgc:
test:stxparse:3m:
stage: stage4
needs: ["build:racket:3m"]
extends: .test:stxparse
dependencies:
- build:racket:3m
@ -960,6 +1007,7 @@ test:stxparse:3m:
test:stxparse:cs:
stage: stage5
needs: ["build:racket:cs"]
extends: .test:stxparse
dependencies:
- build:racket:cs
@ -979,6 +1027,7 @@ test:stxparse:cs:
.prepare:
stage: stage5
image: ubuntu:18.04
needs: []
before_script:
- apt-get update && apt-get install -y git lsb-release gcc gcc-8 g++ g++-8 make libfontconfig1-dev libcairo2-dev openssl libpango1.0-dev libjpeg-turbo8-dev libncurses5-dev uuid-dev
- update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 700 --slave /usr/bin/g++ g++ /usr/bin/g++-7
@ -1065,6 +1114,7 @@ test:ubsan:cs:
prepare-cache:qemu:
image: ubuntu:18.04
stage: stage1
needs: []
tags:
- linux
- x86_64
@ -1095,6 +1145,7 @@ prepare-cache:qemu:
.preparearch:
image: ubuntu:18.04
needs: []
stage: stage6
tags:
- x86_64
@ -1208,6 +1259,7 @@ test:emulation:ppc64el:
.preparearch:nogenerations:
image: ubuntu:18.04
needs: []
stage: stage6
only:
- schedules
@ -1286,6 +1338,7 @@ test:emulation:nogenerations:ppc64el:
# CS
.preparearch:cs:
image: ubuntu:18.04
needs: []
stage: stage5
tags:
- x86_64