Run test_manifest when the docker is changed
[platform/upstream/gstreamer.git] / .gitlab-ci.yml
1 stages:
2   - "build docker"
3   - "preparation"
4   # Test just one basic build, if succeds procced to test the rest
5   - "build"
6   - "test"
7   # Run multiple builds and tests, multi-distro, multi-arch
8   - "full builds"
9   - "full tests"
10
11 test manifest:
12   variables:
13     GIT_STRATEGY: fetch
14   image: "registry.freedesktop.org/gstreamer/gst-ci/amd64/test-manifest:6f7e01e1e30a73efa880acdc8e911f1f20c58dbb"
15   stage: "preparation"
16   script:
17     - pytest-3 --junitxml=junit.xml --cov=build_manifest gitlab/build_manifest.py
18   coverage: '/TOTAL.*\s+(\d+%)$/'
19   artifacts:
20     reports:
21       junit:
22         - "junit.xml"
23   only:
24     changes:
25       - 'gitlab/build_manifest.py'
26       - 'docker/test_manifest/*'
27
28 .base:
29   image: "docker:stable"
30   services:
31     - docker:dind
32   variables:
33     # When using dind, it's wise to use the overlayfs driver for
34     # improved performance.
35     DOCKER_DRIVER: "overlay2"
36     GIT_STRATEGY: fetch
37   script:
38     - export IMAGE="${CI_REGISTRY_IMAGE}/${ARCH}/${TAG}"
39     - export REF="${IMAGE}:${CI_COMMIT_SHA}"
40     - export LATEST="${IMAGE}:latest"
41
42     - docker build --pull -f ${DOCKERFILE} -t ${LATEST} ${CONTEXT_DIR}
43
44     # If we are in a fork, push the image to the reigstry regardless the branch
45     - |
46       if [ "$CI_PROJECT_NAMESPACE" != "gstreamer" ]; then
47         docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
48         docker push ${LATEST}
49       fi
50
51     # Push the images to the upstream registry
52     - |
53       if [ "$CI_COMMIT_REF_NAME" = "master" -a "$CI_PROJECT_NAMESPACE" = "gstreamer" ]; then
54         # Tag the image with the git ref
55         docker image tag ${LATEST} ${REF}
56         # Push the tags
57         docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
58         docker push ${REF}
59         docker push ${LATEST}
60       fi
61
62 alpine amd64 manifest builder docker:
63   stage: "build docker"
64   variables:
65     ARCH: "amd64"
66     TAG: "build-manifest"
67     CONTEXT_DIR: "docker/build_manifest/"
68     DOCKERFILE: "docker/build_manifest/Dockerfile"
69   extends: .base
70   only:
71     changes:
72       - 'docker/build_manifest/*'
73       - 'gitlab/build_manifest.py'
74
75 test manifest amd64 docker:
76   stage: "build docker"
77   variables:
78     ARCH: "amd64"
79     TAG: "test-manifest"
80     CONTEXT_DIR: "docker/test_manifest/"
81     DOCKERFILE: "docker/test_manifest/Dockerfile"
82   extends: .base
83   only:
84     changes:
85       - 'docker/test_manifest/*'
86
87 gst-indent amd64 docker:
88   stage: "build docker"
89   variables:
90     ARCH: "amd64"
91     TAG: "gst-indent"
92     CONTEXT_DIR: "docker/indent/"
93     DOCKERFILE: "docker/indent/Dockerfile"
94   extends: .base
95   only:
96     changes:
97       - 'docker/indent/*'
98
99 fedora amd64 docker:
100   stage: "build docker"
101   variables:
102     ARCH: "amd64"
103     TAG: "fedora"
104     CONTEXT_DIR: "docker/fedora/"
105     DOCKERFILE: "docker/fedora/Dockerfile"
106   extends: .base
107   only:
108     changes:
109       - 'docker/fedora/*'
110
111 # Cross compile image
112 android 28 amd64 docker:
113   stage: "build docker"
114   variables:
115     ARCH: "amd64"
116     TAG: "android_28"
117     CONTEXT_DIR: "docker/android/"
118     DOCKERFILE: "docker/android/Dockerfile"
119   extends: .base
120   only:
121     changes:
122       - 'docker/android/*'
123
124 include: "gitlab/ci_template.yml"
125
126 # Test the build job against the latest build image tag and the local manifest
127 build fedora x86_64 local:
128   extends: '.build'
129   stage: 'build'
130   image: "${CI_REGISTRY_IMAGE}/amd64/fedora:latest"
131
132 build android 28 local:
133   extends: '.build'
134   variables:
135     MESON_ARGS: >
136       -Dbad=enabled
137       -Dbad:androidmedia=enabled
138       --cross-file /android_arm64_28.txt
139   image: "${CI_REGISTRY_IMAGE}/amd64/android_28:latest"