@toptal/davinci-ci 1.14.6-alpha-feature-comm-833-reusing-graphql-fragments-bc6ed661.22 → 1.14.6-alpha-feature-comm-833-reusing-graphql-fragments-7830a568.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +1000 -0
  2. package/LICENSE.MD +4 -0
  3. package/README.md +83 -0
  4. package/bin/davinci-ci.js +8 -0
  5. package/package.json +9 -7
  6. package/src/commands/danger.js +67 -0
  7. package/src/configs/danger/conventional-commits/dangerfile.js +17 -0
  8. package/src/configs/danger/conventional-commits/plugins/conventional-commits/index.js +52 -0
  9. package/src/configs/danger/conventional-commits/plugins/conventional-pr-title/index.js +53 -0
  10. package/src/configs/danger/conventional-commits/plugins/index.js +7 -0
  11. package/src/configs/danger/plugins/empty-assignee.js +24 -0
  12. package/src/configs/danger/toptal/config.js +30 -0
  13. package/src/configs/danger/toptal/dangerfile.js +17 -0
  14. package/src/configs/danger/toptal/plugins/index.js +7 -0
  15. package/src/configs/danger/toptal/plugins/toptal-commits/index.js +73 -0
  16. package/src/configs/danger/toptal/plugins/toptal-commits/toptal-commits.test.js +128 -0
  17. package/src/configs/danger/toptal/plugins/toptal-pr-title/index.js +62 -0
  18. package/src/configs/danger/toptal/plugins/toptal-pr-title/toptal-pr-title.test.js +68 -0
  19. package/src/configs/docker/Dockerfile +30 -0
  20. package/src/configs/docker/Dockerfile.gha-deploy +33 -0
  21. package/src/configs/docker/Dockerfile.release +28 -0
  22. package/src/configs/docker/Dockerfile.storybook +20 -0
  23. package/src/configs/docker/env-runtime.entrypoint.sh +47 -0
  24. package/src/configs/docker/nginx-vhost-storybook.conf +20 -0
  25. package/src/configs/docker/nginx-vhost.conf +18 -0
  26. package/src/configs/jobs/build-image/Jenkinsfile +142 -0
  27. package/src/configs/jobs/build-image/config.xml +119 -0
  28. package/src/configs/jobs/build-release-image/Jenkinsfile +154 -0
  29. package/src/configs/jobs/build-release-image/config.xml +102 -0
  30. package/src/configs/jobs/consumer-contracts-verify/Jenkinsfile +117 -0
  31. package/src/configs/jobs/consumer-contracts-verify/config.xml +114 -0
  32. package/src/configs/jobs/deploy/config.xml +107 -0
  33. package/src/configs/jobs/deploy-helm-run/Jenkinsfile +159 -0
  34. package/src/configs/jobs/deploy-helm-run/config.xml +107 -0
  35. package/src/configs/jobs/deploy-helm-run-trigger/Jenkinsfile +200 -0
  36. package/src/configs/jobs/master-main/Jenkinsfile +460 -0
  37. package/src/configs/jobs/master-main/config.xml +119 -0
  38. package/src/configs/jobs/pr-tests/Jenkinsfile +407 -0
  39. package/src/configs/jobs/pr-tests/config.xml +134 -0
  40. package/src/configs/jobs/publish-alpha-package/Jenkinsfile +189 -0
  41. package/src/configs/jobs/publish-alpha-package/config.xml +136 -0
  42. package/src/configs/jobs/temploy-helm-run/Jenkinsfile +141 -0
  43. package/src/configs/jobs/temploy-helm-run/config.xml +97 -0
  44. package/src/index.js +17 -0
@@ -0,0 +1,68 @@
1
+ const { toptalPRTitle } = require('.')
2
+ const {
3
+ MISSING_TICKET_CODE_ERROR_MESSAGE,
4
+ DEFAULT_PR_TITLE_ERROR_MESSAGE,
5
+ } = require('../../config')
6
+
7
+ const VALID_PR_TITLE = '[ASD-123] Hello world'
8
+ const INVALID_PR_TITLE = '[ASD-123] hello world'
9
+ const NO_TICKET_CODE_PR_TITLE = 'Hello world'
10
+
11
+ describe('commit danger plugin', () => {
12
+ beforeEach(() => {
13
+ global.fail = jest.fn()
14
+ global.danger = {
15
+ github: {
16
+ issue: {
17
+ labels: [{ name: 'My Team' }],
18
+ },
19
+ pr: {
20
+ title: '',
21
+ user: {
22
+ login: 'user',
23
+ },
24
+ },
25
+ },
26
+ }
27
+ })
28
+
29
+ afterEach(() => {
30
+ global.fail = undefined
31
+ global.danger = undefined
32
+ })
33
+
34
+ it('should pass valid PR title', () => {
35
+ global.danger.github.pr.title = VALID_PR_TITLE
36
+
37
+ toptalPRTitle()
38
+
39
+ expect(global.fail).toHaveBeenCalledTimes(0)
40
+ })
41
+
42
+ it('should fail PR title with missing ticket code', () => {
43
+ global.danger.github.pr.title = NO_TICKET_CODE_PR_TITLE
44
+
45
+ toptalPRTitle()
46
+
47
+ expect(global.fail).toHaveBeenCalledTimes(1)
48
+ expect(global.fail).toHaveBeenCalledWith(MISSING_TICKET_CODE_ERROR_MESSAGE)
49
+ })
50
+
51
+ it('should pass valid PR title with missing ticket code and no-jira label', () => {
52
+ global.danger.github.pr.title = NO_TICKET_CODE_PR_TITLE
53
+ global.danger.github.issue.labels = [{ name: 'no-jira' }]
54
+
55
+ toptalPRTitle()
56
+
57
+ expect(global.fail).toHaveBeenCalledTimes(0)
58
+ })
59
+
60
+ it('should fail invalid PR title', () => {
61
+ global.danger.github.pr.title = INVALID_PR_TITLE
62
+
63
+ toptalPRTitle()
64
+
65
+ expect(global.fail).toHaveBeenCalledTimes(1)
66
+ expect(global.fail).toHaveBeenCalledWith(DEFAULT_PR_TITLE_ERROR_MESSAGE)
67
+ })
68
+ })
@@ -0,0 +1,30 @@
1
+ FROM node:14
2
+
3
+ ARG NPM_TOKEN
4
+ ENV NPM_TOKEN ${NPM_TOKEN}
5
+
6
+ # Change default 'node' user id to match jenkins CI user id
7
+ # so when we will be running container from CI it would have
8
+ # all necessary rights for npm/yarn publish
9
+ RUN groupmod -g 469 node && usermod -u 469 -g 469 node
10
+
11
+ WORKDIR /app
12
+ RUN chown -R node /app
13
+
14
+ USER node
15
+
16
+ # Add github.com to known ssh hosts
17
+ RUN mkdir ~/.ssh
18
+ RUN ssh-keyscan github.com >> ~/.ssh/known_hosts
19
+
20
+ # Needs to be updated for publishing package to npm
21
+ RUN printf '//registry.npmjs.org/:_authToken=${NPM_TOKEN}\nalways-auth=true\n' > .npmrc
22
+ RUN yarn config set registry https://registry.npmjs.org
23
+
24
+ # Enables layer caching
25
+ COPY --chown=node:node package.json yarn.lock ./
26
+ RUN yarn install --frozen-lockfile --network-timeout 120000
27
+
28
+ COPY --chown=node:node . /app
29
+
30
+ RUN yarn build
@@ -0,0 +1,33 @@
1
+ # Create the image with Nginx environment.
2
+ FROM nginx:alpine
3
+
4
+ # Copy results from the dist folder to the image.
5
+ ARG DIST_FOLDER
6
+ RUN [ -z "$DIST_FOLDER" ] && echo "DIST_FOLDER is required" && exit 1 || true
7
+ COPY $DIST_FOLDER /usr/share/nginx/html
8
+
9
+ # Remove source maps from the production build
10
+ RUN find /usr/share/nginx/html -name "*.map" -type f -delete
11
+
12
+ # Copy the entrypoint.
13
+ ARG ENV_RUNTIME_ENTRYPOINT
14
+ RUN [ -z "$ENV_RUNTIME_ENTRYPOINT" ] && echo "ENV_RUNTIME_ENTRYPOINT is required" && exit 1 || true
15
+ COPY $ENV_RUNTIME_ENTRYPOINT /usr/local/bin/env-runtime.entrypoint.sh
16
+ RUN chmod +x /usr/local/bin/env-runtime.entrypoint.sh
17
+
18
+ # version is used in build process, so the value won't be available here otherwise
19
+ ARG VERSION
20
+ RUN [ -z "$VERSION" ] && echo "VERSION is required" && exit 1 || true
21
+ ENV DAVINCI_RELEASE_VERSION $VERSION
22
+
23
+ RUN echo $VERSION > /usr/share/nginx/html/REVISION.txt
24
+
25
+ # Copy configuration file for Nginx and replace the default one.
26
+ ARG NGINX_CONFIG
27
+ RUN [ -z "$NGINX_CONFIG" ] && echo "NGINX_CONFIG is required" && exit 1 || true
28
+ COPY $NGINX_CONFIG /etc/nginx/conf.d/default.conf
29
+
30
+ # Entry point to provide Run Time Environment Variables for the App.
31
+ ENTRYPOINT ["/usr/local/bin/env-runtime.entrypoint.sh"]
32
+
33
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,28 @@
1
+ ARG VERSION
2
+ ARG REPO_NAME
3
+
4
+ FROM gcr.io/toptal-hub/${REPO_NAME}:${VERSION} as builder
5
+
6
+ FROM nginx:alpine
7
+
8
+ ARG ENV_RUNTIME_ENTRYPOINT
9
+
10
+ COPY --from=builder /app/dist /usr/share/nginx/html
11
+ COPY --from=builder /app/node_modules/@toptal/davinci-ci/src/configs/docker/nginx-vhost.conf /etc/nginx/conf.d/default.conf
12
+
13
+ # Remove source maps from the production build
14
+ RUN find /usr/share/nginx/html -name "*.map" -type f -delete
15
+
16
+ # Copy the entrypoint to prepare env variables
17
+ # example davinci/packages/ci/scr/configs/docker/env-runtime.entrypoint.sh
18
+ COPY ${ENV_RUNTIME_ENTRYPOINT} /usr/local/bin/env-runtime.entrypoint.sh
19
+
20
+ # version is used in build process, so the value won't be available here otherwise
21
+ ARG VERSION
22
+ ENV DAVINCI_RELEASE_VERSION $VERSION
23
+
24
+ RUN echo $VERSION > /usr/share/nginx/html/REVISION.txt
25
+
26
+ ENTRYPOINT ["/usr/local/bin/env-runtime.entrypoint.sh"]
27
+
28
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,20 @@
1
+ # Create the image with Nginx environment.
2
+ FROM nginx:alpine
3
+
4
+ # Copy results from the dist folder to the image.
5
+ ARG DIST_FOLDER
6
+ RUN [ -z "$DIST_FOLDER" ] && echo "DIST_FOLDER is required" && exit 1 || true
7
+ COPY $DIST_FOLDER /usr/share/nginx/html/storybook
8
+
9
+ # version is used in build process, so the value won't be available here otherwise
10
+ ARG VERSION
11
+ RUN [ -z "$VERSION" ] && echo "VERSION is required" && exit 1 || true
12
+
13
+ RUN echo $VERSION > /usr/share/nginx/html/REVISION.txt
14
+
15
+ # Copy configuration file for Nginx and replace the default one.
16
+ ARG NGINX_CONFIG
17
+ RUN [ -z "$NGINX_CONFIG" ] && echo "NGINX_CONFIG is required" && exit 1 || true
18
+ COPY $NGINX_CONFIG /etc/nginx/conf.d/default.conf
19
+
20
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,47 @@
1
+ #!/bin/sh -e
2
+
3
+ # This bash script takes required Environment Variables of current process
4
+ # and put them into `index.html` file which is an entry-point of the application.
5
+ # By this way we provide run time variables to a precompiled JS code.
6
+
7
+ # This is how a place which contains `run time` variables may look in `index.html`
8
+ #
9
+ # window.TP = {
10
+ # env: '%REACT_APP_ENV_NAME%',
11
+ # graphql_url: '%REACT_APP_GRAPHQL_URI%'
12
+ # }
13
+
14
+ # keep in sync with index.html
15
+ VARS_PREFIX="DAVINCI_"
16
+ INDEX_FILE="/usr/share/nginx/html/index.html"
17
+
18
+ VARS="$(env | grep $VARS_PREFIX | awk -F = '{print $1}')"
19
+
20
+ # trim whitespaces
21
+ REQUIRED_VARS="$(echo "$VARS" | xargs -n1 | sed 's/^//g')"
22
+
23
+ # trim whitespaces and prepend $ to every var above
24
+ ENVSUBST_KNOWN_VARS="$(echo "$VARS" | xargs -n1 | sed 's/^/\$/g')"
25
+
26
+ # replace all the placeholders %VARIABLE_NAME% with the actual value of the variable
27
+ for placeholder in $REQUIRED_VARS
28
+ do
29
+ value=`printenv "$placeholder"`
30
+ # any character after 's' in sed is used as a separator
31
+ # https://stackoverflow.com/a/16790877/1611414
32
+ sed -i "s|%${placeholder}%|$value|g" $INDEX_FILE
33
+ done
34
+
35
+ MISSING_VARS="$(cat $INDEX_FILE | grep "%$VARS_PREFIX.*%" | sed 's/.*%\(.*\)%.*/\1/g')"
36
+
37
+ if [ -n "$MISSING_VARS" ]; then
38
+ for placeholder in $MISSING_VARS
39
+ do
40
+ if ! printenv "$placeholder" > /dev/null; then
41
+ echo "Variable '$placeholder' is not set. Exiting..."
42
+ exit 1
43
+ fi
44
+ done
45
+ fi
46
+
47
+ exec "$@"
@@ -0,0 +1,20 @@
1
+ server {
2
+ listen 80;
3
+ server_name localhost;
4
+ root /usr/share/nginx/html/storybook;
5
+
6
+ location / {
7
+ try_files $uri $uri/ index.html;
8
+ index index.html;
9
+ }
10
+
11
+ location ~ \.(js|png|svg|jpg|gif)$ {
12
+ try_files $uri $uri/ =404;
13
+ }
14
+
15
+ # redirect server error pages to the static page /50x.html
16
+ error_page 500 502 503 504 /50x.html;
17
+ location = /50x.html {
18
+ root /usr/share/nginx/html;
19
+ }
20
+ }
@@ -0,0 +1,18 @@
1
+ # When you are redirecting to any url, which is handled by react-router
2
+ # on nginx we need special configuration to handle those
3
+ # and don't just return 404
4
+ server {
5
+ listen 80;
6
+ server_name localhost;
7
+
8
+ index index.html;
9
+ root /usr/share/nginx/html;
10
+
11
+ location ~ \.(js|css)$ {
12
+ # allow returning 404s for assets
13
+ }
14
+
15
+ location / {
16
+ try_files $uri /index.html;
17
+ }
18
+ }
@@ -0,0 +1,142 @@
1
+ @Library('globalLibrary@master') _
2
+
3
+ image = null
4
+
5
+ repositoryName = REPOSITORY_NAME
6
+ repositorySSHUrl = "git@github.com:toptal/${repositoryName}.git"
7
+ env.REPO_NAME_FOR_COMMIT = "toptal/${repositoryName}"
8
+
9
+ pipeline {
10
+ agent { label 'slave_aws' }
11
+
12
+ options {
13
+ ansiColor('xterm')
14
+ timestamps()
15
+ timeout(time: params.TIMEOUT, unit: 'MINUTES')
16
+ buildDiscarder(logRotator(numToKeepStr: '20'))
17
+ skipDefaultCheckout()
18
+ }
19
+
20
+ parameters {
21
+ string(name: 'BRANCH', defaultValue: 'master', description: 'Branch or tag to build')
22
+ string(name: 'IMAGE_NAME', description: 'Image name')
23
+ string(name: 'VERSION', description: 'Tag for the created docker image')
24
+ string(name: 'ALIAS_VERSIONS', defaultValue: "", description: 'Comma separated list of alias tags for the created docker image. Ex: "master,latest"')
25
+ string(name: 'REPOSITORY_NAME', description: 'Repository name')
26
+ string(name: 'DAVINCI_BRANCH', defaultValue: 'master', description: 'Davinci branch to checkout')
27
+ string(name: 'TIMEOUT', defaultValue: '25', description: 'Timeout value for the job (in minutes)')
28
+ }
29
+
30
+ environment {
31
+ GCE_ACCOUNT_KEY = credentials('jenkins-storage-administrator')
32
+ NPM_TOKEN = credentials('npm-token-for-toptal-private-registry')
33
+ }
34
+
35
+ stages {
36
+
37
+ stage('Git checkouts') {
38
+ parallel {
39
+
40
+ stage('Git checkout project') {
41
+ steps {
42
+ dir(repositoryName) {
43
+ info "== Checking out ${BRANCH} =="
44
+ gitCheckout(
45
+ branches: BRANCH,
46
+ credentials: [username: 'toptal-build', description: "toptal-build-ssh-key"],
47
+ url: repositorySSHUrl,
48
+ additionalBehaviours: [
49
+ cleanBeforeCheckout: true
50
+ ])
51
+ script { env.COMMIT_FOR_ANVIL = gitCommit() }
52
+ success "== Checked out ${BRANCH} at ${gitCommit()}"
53
+ }
54
+ }
55
+ } //checkout project
56
+
57
+ stage('Git checkout davinci') {
58
+ steps {
59
+ dir('davinci') {
60
+ info "== Checking out davinci=="
61
+ gitCheckout(
62
+ branches: DAVINCI_BRANCH,
63
+ credentials: [username: 'toptal-build', description: "toptal-build-ssh-key"],
64
+ url: 'git@github.com:toptal/davinci.git',
65
+ additionalBehaviours: [
66
+ cleanBeforeCheckout: true,
67
+ ])
68
+ success "== Checked out"
69
+ }
70
+ }
71
+ } //checkout davinci
72
+
73
+ } // parallel
74
+ } //checkout
75
+
76
+ stage('Build image') {
77
+ steps {
78
+ script {
79
+ sh "gcloud auth activate-service-account --key-file=$GCE_ACCOUNT_KEY"
80
+
81
+ if (!isDockerImagePresentRemotely("gcr.io/toptal-hub/${IMAGE_NAME}", VERSION)) {
82
+ image = docker.build(
83
+ "toptal-hub/${IMAGE_NAME}:${VERSION}",
84
+ """-f ./davinci/packages/ci/src/configs/docker/Dockerfile \
85
+ --build-arg NPM_TOKEN=${NPM_TOKEN} \
86
+ ./${repositoryName}"""
87
+ )
88
+ success "== Built image for version ${VERSION} =="
89
+ } else {
90
+ success "== Found image for version ${VERSION} =="
91
+ }
92
+
93
+ if (!isDockerImagePresentRemotely("us-central1-docker.pkg.dev/toptal-hub/containers/${IMAGE_NAME}", VERSION)) {
94
+ image = docker.build(
95
+ "us-central1-docker.pkg.dev/toptal-hub/containers/${IMAGE_NAME}:${VERSION}",
96
+ """-f ./davinci/packages/ci/src/configs/docker/Dockerfile \
97
+ --build-arg NPM_TOKEN=${NPM_TOKEN} \
98
+ ./${repositoryName}"""
99
+ )
100
+ success "== Built image for version ${VERSION} =="
101
+ } else {
102
+ success "== Found image for version ${VERSION} =="
103
+ }
104
+ }
105
+ }
106
+ } //build image
107
+
108
+ stage('Push image') {
109
+ steps {
110
+ script {
111
+ if (image) {
112
+ docker.withRegistry('https://gcr.io/toptal-hub/') {
113
+ image.push(VERSION)
114
+ if(ALIAS_VERSIONS) {
115
+ ALIAS_VERSIONS.split(',').each { aliasVersion ->
116
+ image.push(aliasVersion)
117
+ }
118
+ }
119
+ }
120
+ docker.withRegistry('us-central1-docker.pkg.dev/toptal-hub/containers/') {
121
+ image.push(VERSION)
122
+ if(ALIAS_VERSIONS) {
123
+ ALIAS_VERSIONS.split(',').each { aliasVersion ->
124
+ image.push(aliasVersion)
125
+ }
126
+ }
127
+ }
128
+ success "== Pushed image with tag ${VERSION} =="
129
+ }
130
+ }
131
+ }
132
+ } //push image
133
+ }
134
+
135
+ post {
136
+ always {
137
+ script {
138
+ sendBuildData(currentBuild)
139
+ }
140
+ }
141
+ }
142
+ }
@@ -0,0 +1,119 @@
1
+ <flow-definition plugin="workflow-job@2.35">
2
+ <actions>
3
+ <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@1.3.9"/>
4
+ <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction plugin="pipeline-model-definition@1.3.9">
5
+ <jobProperties>
6
+ <string>jenkins.model.BuildDiscarderProperty</string>
7
+ </jobProperties>
8
+ <triggers/>
9
+ <parameters>
10
+ <string>BRANCH</string>
11
+ <string>IMAGE_NAME</string>
12
+ <string>VERSION</string>
13
+ <string>ALIAS_VERSIONS</string>
14
+ <string>REPOSITORY_NAME</string>
15
+ <string>DAVINCI_BRANCH</string>
16
+ <string>TIMEOUT</string>
17
+ </parameters>
18
+ <options>
19
+ <string>skipDefaultCheckout</string>
20
+ </options>
21
+ </org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction>
22
+ </actions>
23
+ <description></description>
24
+ <keepDependencies>false</keepDependencies>
25
+ <properties>
26
+ <hudson.model.ParametersDefinitionProperty>
27
+ <parameterDefinitions>
28
+ <hudson.model.StringParameterDefinition>
29
+ <name>BRANCH</name>
30
+ <description>Branch or tag to build</description>
31
+ <defaultValue>master</defaultValue>
32
+ <trim>false</trim>
33
+ </hudson.model.StringParameterDefinition>
34
+ <hudson.model.StringParameterDefinition>
35
+ <name>IMAGE_NAME</name>
36
+ <description>Image name</description>
37
+ <trim>false</trim>
38
+ </hudson.model.StringParameterDefinition>
39
+ <hudson.model.StringParameterDefinition>
40
+ <name>VERSION</name>
41
+ <description>Tag for the created docker image</description>
42
+ <trim>false</trim>
43
+ </hudson.model.StringParameterDefinition>
44
+ <hudson.model.StringParameterDefinition>
45
+ <name>ALIAS_VERSIONS</name>
46
+ <description>Comma separated list of alias tags for the created docker image. Ex: "master,latest"</description>
47
+ <defaultValue></defaultValue>
48
+ <trim>false</trim>
49
+ </hudson.model.StringParameterDefinition>
50
+ <hudson.model.StringParameterDefinition>
51
+ <name>REPOSITORY_NAME</name>
52
+ <description>Repository name</description>
53
+ <trim>false</trim>
54
+ </hudson.model.StringParameterDefinition>
55
+ <hudson.model.StringParameterDefinition>
56
+ <name>DAVINCI_BRANCH</name>
57
+ <description>Davinci branch to checkout</description>
58
+ <defaultValue>master</defaultValue>
59
+ <trim>false</trim>
60
+ </hudson.model.StringParameterDefinition>
61
+ <hudson.model.StringParameterDefinition>
62
+ <name>TIMEOUT</name>
63
+ <description>Timeout value for the job (in minutes)</description>
64
+ <defaultValue>25</defaultValue>
65
+ <trim>false</trim>
66
+ </hudson.model.StringParameterDefinition>
67
+ </parameterDefinitions>
68
+ </hudson.model.ParametersDefinitionProperty>
69
+ <jenkins.model.BuildDiscarderProperty>
70
+ <strategy class="hudson.tasks.LogRotator">
71
+ <daysToKeep>-1</daysToKeep>
72
+ <numToKeep>20</numToKeep>
73
+ <artifactDaysToKeep>-1</artifactDaysToKeep>
74
+ <artifactNumToKeep>-1</artifactNumToKeep>
75
+ </strategy>
76
+ </jenkins.model.BuildDiscarderProperty>
77
+ <hudson.plugins.jira.JiraProjectProperty plugin="jira@3.0.7"/>
78
+ <com.sonyericsson.jenkins.plugins.bfa.model.ScannerJobProperty plugin="build-failure-analyzer@1.20.0">
79
+ <doNotScan>false</doNotScan>
80
+ </com.sonyericsson.jenkins.plugins.bfa.model.ScannerJobProperty>
81
+ <com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@1.29.4">
82
+ <projectUrl>$PROJECT_URL</projectUrl>
83
+ <displayName></displayName>
84
+ </com.coravy.hudson.plugins.github.GithubProjectProperty>
85
+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@2.0.1">
86
+ <maxConcurrentPerNode>0</maxConcurrentPerNode>
87
+ <maxConcurrentTotal>0</maxConcurrentTotal>
88
+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
89
+ <throttleEnabled>false</throttleEnabled>
90
+ <throttleOption>project</throttleOption>
91
+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
92
+ <paramsToUseForLimit></paramsToUseForLimit>
93
+ <configVersion>1</configVersion>
94
+ </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
95
+ </properties>
96
+ <definition class="org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition" plugin="workflow-cps@2.74">
97
+ <scm class="hudson.plugins.git.GitSCM" plugin="git@3.10.1">
98
+ <configVersion>2</configVersion>
99
+ <userRemoteConfigs>
100
+ <hudson.plugins.git.UserRemoteConfig>
101
+ <url>git@github.com:toptal/davinci.git</url>
102
+ <credentialsId>$CREDENTIALS_ID</credentialsId>
103
+ </hudson.plugins.git.UserRemoteConfig>
104
+ </userRemoteConfigs>
105
+ <branches>
106
+ <hudson.plugins.git.BranchSpec>
107
+ <name>master</name>
108
+ </hudson.plugins.git.BranchSpec>
109
+ </branches>
110
+ <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
111
+ <submoduleCfg class="list"/>
112
+ <extensions/>
113
+ </scm>
114
+ <scriptPath>packages/ci/src/configs/jobs/build-image/Jenkinsfile</scriptPath>
115
+ <lightweight>true</lightweight>
116
+ </definition>
117
+ <triggers/>
118
+ <disabled>false</disabled>
119
+ </flow-definition>