1
1
import os
2
- import urllib3
3
- from urllib3 .util .retry import Retry
4
- from urllib3 .exceptions import HTTPError
2
+ import sys
5
3
6
4
import yaml
7
5
8
6
YAML_HEADER = '# yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json\n '
9
7
10
- def fetch_version_qualifier_url_with_retries (branch , max_retries = 3 , backoff_factor = 2 ):
11
- """
12
- Return the version qualifier from a centralized URL based on branch. For any failure or response apart from 200,
13
- assume no qualifier (return empty string).
14
- """
15
- url = f"https://storage.googleapis.com/dra-qualifier/{ branch } "
16
-
17
- http = urllib3 .PoolManager ()
18
-
19
- # Configure retries: Exponential backoff with 3 retries
20
- retries = Retry (
21
- total = max_retries ,
22
- backoff_factor = backoff_factor , # Wait time increases exponentially (2, 4, 8s)
23
- status_forcelist = [500 , 502 , 503 , 504 ], # Retry only on server errors
24
- raise_on_status = False # Do not raise exception on failed status codes
25
- )
26
-
27
- try :
28
- response = http .request ("GET" , url , retries = retries , timeout = 5 )
29
- if response .status == 200 :
30
- return response .data .decode ("utf-8" ).strip ()
31
- except HTTPError as e :
32
- pass
33
-
34
- return ""
35
-
36
8
def to_bk_key_friendly_string (key ):
37
9
"""
38
10
Convert and return key to an acceptable format for Buildkite's key: field
@@ -43,7 +15,7 @@ def to_bk_key_friendly_string(key):
43
15
44
16
return key .translate (mapping_table )
45
17
46
- def package_x86_step (branch , workflow_type , version_qualifier ):
18
+ def package_x86_step (branch , workflow_type ):
47
19
step = f'''
48
20
- label: ":package: Build packages / { branch } -{ workflow_type .upper ()} DRA artifacts"
49
21
key: "logstash_build_packages_dra"
@@ -55,15 +27,14 @@ def package_x86_step(branch, workflow_type, version_qualifier):
55
27
diskSizeGb: 200
56
28
command: |
57
29
export WORKFLOW_TYPE="{ workflow_type } "
58
- export VERSION_QUALIFIER="{ version_qualifier } "
59
30
export PATH="/opt/buildkite-agent/.rbenv/bin:/opt/buildkite-agent/.pyenv/bin:$PATH"
60
31
eval "$(rbenv init -)"
61
32
.buildkite/scripts/dra/build_packages.sh
62
33
'''
63
34
64
35
return step
65
36
66
- def package_x86_docker_step (branch , workflow_type , version_qualifier ):
37
+ def package_x86_docker_step (branch , workflow_type ):
67
38
step = f'''
68
39
- label: ":package: Build x86_64 Docker / { branch } -{ workflow_type .upper ()} DRA artifacts"
69
40
key: "logstash_build_x86_64_docker_dra"
@@ -75,7 +46,6 @@ def package_x86_docker_step(branch, workflow_type, version_qualifier):
75
46
diskSizeGb: 200
76
47
command: |
77
48
export WORKFLOW_TYPE="{ workflow_type } "
78
- export VERSION_QUALIFIER="{ version_qualifier } "
79
49
export PATH="/opt/buildkite-agent/.rbenv/bin:/opt/buildkite-agent/.pyenv/bin:$PATH"
80
50
export ARCH="x86_64"
81
51
eval "$(rbenv init -)"
@@ -84,7 +54,7 @@ def package_x86_docker_step(branch, workflow_type, version_qualifier):
84
54
85
55
return step
86
56
87
- def package_aarch64_docker_step (branch , workflow_type , version_qualifier ):
57
+ def package_aarch64_docker_step (branch , workflow_type ):
88
58
step = f'''
89
59
- label: ":package: Build aarch64 Docker / { branch } -{ workflow_type .upper ()} DRA artifacts"
90
60
key: "logstash_build_aarch64_docker_dra"
@@ -95,7 +65,6 @@ def package_aarch64_docker_step(branch, workflow_type, version_qualifier):
95
65
diskSizeGb: 200
96
66
command: |
97
67
export WORKFLOW_TYPE="{ workflow_type } "
98
- export VERSION_QUALIFIER="{ version_qualifier } "
99
68
export PATH="/opt/buildkite-agent/.rbenv/bin:/opt/buildkite-agent/.pyenv/bin:$PATH"
100
69
export ARCH="aarch64"
101
70
eval "$(rbenv init -)"
@@ -104,7 +73,7 @@ def package_aarch64_docker_step(branch, workflow_type, version_qualifier):
104
73
105
74
return step
106
75
107
- def publish_dra_step (branch , workflow_type , depends_on , version_qualifier ):
76
+ def publish_dra_step (branch , workflow_type , depends_on ):
108
77
step = f'''
109
78
- label: ":elastic-stack: Publish / { branch } -{ workflow_type .upper ()} DRA artifacts"
110
79
key: "logstash_publish_dra"
@@ -123,59 +92,50 @@ def publish_dra_step(branch, workflow_type, depends_on, version_qualifier):
123
92
sudo chown -R :1000 build
124
93
echo "+++ Running DRA publish step"
125
94
export WORKFLOW_TYPE="{ workflow_type } "
126
- export VERSION_QUALIFIER="{ version_qualifier } "
127
95
.buildkite/scripts/dra/publish.sh
128
96
'''
129
97
130
98
return step
131
99
132
- def build_steps_to_yaml (branch , workflow_type , version_qualifier ):
100
+ def build_steps_to_yaml (branch , workflow_type ):
133
101
steps = []
134
- steps .extend (yaml .safe_load (package_x86_step (branch , workflow_type , version_qualifier )))
135
- steps .extend (yaml .safe_load (package_x86_docker_step (branch , workflow_type , version_qualifier )))
136
- steps .extend (yaml .safe_load (package_aarch64_docker_step (branch , workflow_type , version_qualifier )))
102
+ steps .extend (yaml .safe_load (package_x86_step (branch , workflow_type )))
103
+ steps .extend (yaml .safe_load (package_x86_docker_step (branch , workflow_type )))
104
+ steps .extend (yaml .safe_load (package_aarch64_docker_step (branch , workflow_type )))
137
105
138
106
return steps
139
107
140
108
if __name__ == "__main__" :
141
- # DRA_BRANCH can be used for manually testing packaging with PRs
142
- # e.g. define `DRA_BRANCH="main"` under Options/Environment Variables in the Buildkite UI after clicking new Build
143
- branch = os .environ .get ("DRA_BRANCH" , os .environ ["BUILDKITE_BRANCH" ])
144
-
145
109
try :
146
110
workflow_type = os .environ ["WORKFLOW_TYPE" ]
111
+ version_qualifier = os .environ .get ("VERSION_QUALIFIER" , "" )
147
112
except ImportError :
148
113
print (f"Missing env variable WORKFLOW_TYPE. Use export WORKFLOW_TYPE=<staging|snapshot>\n .Exiting." )
149
114
exit (1 )
150
115
151
- # allow manually set version qualifier via BK env vars (should be rarely used, only for testing)
152
- version_qualifier = os .environ .get ("VERSION_QUALIFIER" , "" )
116
+ branch = os .environ ["BUILDKITE_BRANCH" ]
153
117
154
118
structure = {"steps" : []}
155
119
156
120
if workflow_type .upper () == "SNAPSHOT" and len (version_qualifier )> 0 :
157
- # externally set VERSION_QUALIFIER is NOT allowed with SNAPSHOT DRA. Skip.
158
121
structure ["steps" ].append ({
159
122
"label" : f"no-op pipeline because prerelease builds (VERSION_QUALIFIER is set to [{ version_qualifier } ]) don't support the [{ workflow_type } ] workflow" ,
160
123
"command" : ":" ,
161
124
"skip" : "VERSION_QUALIFIER (prerelease builds) not supported with SNAPSHOT DRA" ,
162
125
})
163
126
else :
164
- if workflow_type .upper () == "STAGING" and len (version_qualifier )== 0 :
165
- version_qualifier = fetch_version_qualifier_url_with_retries (branch )
166
-
167
127
# Group defining parallel steps that build and save artifacts
168
128
group_key = to_bk_key_friendly_string (f"logstash_dra_{ workflow_type } " )
169
129
170
130
structure ["steps" ].append ({
171
131
"group" : f":Build Artifacts - { workflow_type .upper ()} " ,
172
132
"key" : group_key ,
173
- "steps" : build_steps_to_yaml (branch , workflow_type , version_qualifier ),
133
+ "steps" : build_steps_to_yaml (branch , workflow_type ),
174
134
})
175
135
176
136
# Final step: pull artifacts built above and publish them via the release-manager
177
137
structure ["steps" ].extend (
178
- yaml .safe_load (publish_dra_step (branch , workflow_type , depends_on = group_key , version_qualifier = version_qualifier )),
138
+ yaml .safe_load (publish_dra_step (branch , workflow_type , depends_on = group_key )),
179
139
)
180
140
181
141
print (YAML_HEADER + yaml .dump (structure , Dumper = yaml .Dumper , sort_keys = False ))
0 commit comments