Only run CI automatically on merge_request
[platform/upstream/gstreamer.git] / .gitlab-ci.yml
1 include: "gitlab/ci_template.yml"
2
3 stages:
4   - "build docker"
5   - "preparation"
6   - "pre-build"
7   - "build"
8   - "test"
9   # use the binaries in some way
10   - "integrate"
11
12 test manifest:
13   variables:
14     GIT_STRATEGY: fetch
15   rules:
16     - when: 'always'
17   image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/test-manifest:2019-10-23-793476'
18   stage: "preparation"
19   script:
20     - pytest-3 --junitxml=junit.xml --cov=build_manifest gitlab/build_manifest.py
21   coverage: '/TOTAL.*\s+(\d+%)$/'
22   artifacts:
23     reports:
24       junit:
25         - "junit.xml"
26
27 .base:
28   image: "docker:stable"
29   extends:
30     - '.global_ci_policy'
31   rules:
32     - when: 'manual'
33       allow_failure: true
34   services:
35     - docker:dind
36   variables:
37     # When using dind, it's wise to use the overlayfs driver for
38     # improved performance.
39     DOCKER_DRIVER: "overlay2"
40     GIT_STRATEGY: fetch
41   script:
42     - export DATE=$(date +"%Y-%m-%d")
43     - export IMAGE="${CI_REGISTRY_IMAGE}/${ARCH}/${TAG}"
44     - export _UID="${IMAGE}:${DATE}-${CI_JOB_ID}"
45     - export LATEST="${IMAGE}:latest"
46
47     - docker build --pull --build-arg DEFAULT_BRANCH=${GST_UPSTREAM_BRANCH} -f ${DOCKERFILE} -t ${LATEST} ${CONTEXT_DIR}
48
49     # If we are in a fork, push the image to the reigstry regardless the branch
50     - |
51       if [ "$CI_PROJECT_NAMESPACE" != "gstreamer" ]; then
52         docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
53         docker push ${LATEST}
54       fi
55
56     # Push the images to the upstream registry
57     - |
58       if [ "$CI_PROJECT_NAMESPACE" = "gstreamer" ]; then
59         # Tag the image with the git ref
60         docker image tag ${LATEST} ${_UID}-${CI_COMMIT_REF_NAME}
61         # Push the tags
62         docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
63         docker push ${_UID}-${CI_COMMIT_REF_NAME}
64         docker push ${LATEST}
65       fi
66
67 alpine amd64 manifest builder docker:
68   stage: "build docker"
69   variables:
70     ARCH: "amd64"
71     TAG: "build-manifest"
72     CONTEXT_DIR: "docker/build_manifest/"
73     DOCKERFILE: "docker/build_manifest/Dockerfile"
74   extends: .base
75
76 test manifest amd64 docker:
77   stage: "build docker"
78   variables:
79     ARCH: "amd64"
80     TAG: "test-manifest"
81     CONTEXT_DIR: "docker/test_manifest/"
82     DOCKERFILE: "docker/test_manifest/Dockerfile"
83   extends: .base
84
85 gst-indent amd64 docker:
86   stage: "build docker"
87   variables:
88     ARCH: "amd64"
89     TAG: "gst-indent"
90     CONTEXT_DIR: "docker/indent/"
91     DOCKERFILE: "docker/indent/Dockerfile"
92   extends: .base
93
94 fedora amd64 docker:
95   stage: "build docker"
96   variables:
97     ARCH: "amd64"
98     TAG: "fedora"
99     CONTEXT_DIR: "docker/fedora/"
100     DOCKERFILE: "docker/fedora/Dockerfile"
101   extends: .base
102
103 cerbero fedora amd64 docker:
104   stage: "build docker"
105   variables:
106     ARCH: "amd64"
107     TAG: "cerbero-fedora"
108     CONTEXT_DIR: "docker/cerbero/"
109     DOCKERFILE: "docker/cerbero/Dockerfile-fedora"
110   extends: .base
111
112 android docker:
113   stage: "build docker"
114   variables:
115     ARCH: "amd64"
116     TAG: "android"
117     CONTEXT_DIR: "docker/android/"
118     DOCKERFILE: "docker/android/Dockerfile"
119   extends: .base
120
121 .local_rules: &local_rules
122   rules:
123     - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PROJECT_PATH == "gstreamer/gst-ci"'
124       when: 'never'
125     - when: 'manual'
126       allow_failure: true
127
128 .local_template: &local_template
129   <<: *local_rules
130   needs:
131     - 'manifest'
132
133 # Test the build job against the latest build image tag and the local manifest
134 build fedora x86_64 local:
135   extends: '.build'
136   stage: 'build'
137   image: "${CI_REGISTRY_IMAGE}/amd64/fedora:latest"
138   artifacts:
139     expire_in: '5 days'
140     when: always
141     paths:
142       - "manifest.xml"
143       - "gst-build/"
144   <<: *local_template
145
146 build cerbero fedora x86_64 local:
147   extends: '.cerbero fedora x86_64'
148   image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
149   <<: *local_template
150
151 build cerbero cross-android universal local:
152   extends: '.cerbero cross-android universal'
153   image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
154   <<: *local_template
155
156 build cerbero cross win32 local:
157   extends: '.cerbero cross win32'
158   image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
159   <<: *local_template
160
161 build cerbero cross win64 local:
162   extends: '.cerbero cross win64'
163   image: "${CI_REGISTRY_IMAGE}/amd64/cerbero-fedora:latest"
164   <<: *local_template
165
166 # Note: dependencies: will be deprecated in the future, but current manual
167 # jobs with needs: (even if they are allowed to fail) will leave the pipeline
168 # pending.
169 .test fedora x86_64 local:
170   image: '${CI_REGISTRY_IMAGE}/amd64/fedora:latest'
171   extends: '.test'
172   <<: *local_rules
173   dependencies:
174     - 'build fedora x86_64 local'
175
176 check fedora local:
177   extends: '.test fedora x86_64 local'
178   variables:
179     TEST_SUITE: 'check.gst*'
180
181 cross-android universal examples local:
182   extends: '.cross-android universal examples'
183   image: "${CI_REGISTRY_IMAGE}/amd64/android:latest"
184   <<: *local_rules
185   dependencies:
186     - 'build cerbero cross-android universal local'
187
188 integration testsuites fedora local:
189   extends: '.test fedora x86_64 local'
190   before_script:
191     - rm -f gst-build/build/subprojects/gstreamer-vaapi/gst/vaapi/libgstvaapi.so
192   variables:
193     EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures"
194     TEST_SUITE: "validate ges"