Chore: Split release pipelines (#43419)

* Split release pipelines

* Re-add pr and main pipelines
This commit is contained in:
Dimitris Sotirakis 2022-01-11 11:17:00 +02:00 committed by GitHub
parent fc037e1798
commit f60a2e8152
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 2109 additions and 1414 deletions

3344
.drone.yml

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
load(
'scripts/drone/steps/lib.star',
'disable_tests',
'download_grabpl_step',
'initialize_step',
'lint_drone_step',
@ -54,6 +55,7 @@ load(
)
load('scripts/drone/vault.star', 'from_secret', 'github_token', 'pull_secret', 'drone_token', 'prerelease_bucket')
def build_npm_packages_step(edition, ver_mode):
if edition == 'enterprise' or ver_mode != 'release':
return None
@ -121,16 +123,14 @@ def release_npm_packages_step(edition, ver_mode):
def get_steps(edition, ver_mode):
build_steps = []
package_steps = []
windows_package_steps = []
publish_steps = []
should_publish = ver_mode in ('release', 'test-release',)
should_upload = should_publish or ver_mode in ('release-branch',)
include_enterprise2 = edition == 'enterprise'
edition2 = 'enterprise2'
build_steps = [
test_steps = [
codespell_step(),
shellcheck_step(),
lint_backend_step(edition=edition),
@ -138,8 +138,9 @@ def get_steps(edition, ver_mode):
test_backend_step(edition=edition),
test_backend_integration_step(edition=edition),
test_frontend_step(),
postgres_integration_tests_step(edition=edition, ver_mode=ver_mode),
mysql_integration_tests_step(edition=edition, ver_mode=ver_mode),
]
build_steps = [
build_backend_step(edition=edition, ver_mode=ver_mode),
build_frontend_step(edition=edition, ver_mode=ver_mode),
build_plugins_step(edition=edition, sign=True),
@ -147,34 +148,46 @@ def get_steps(edition, ver_mode):
ensure_cuetsified_step(),
]
integration_test_steps = [
postgres_integration_tests_step(edition=edition, ver_mode=ver_mode),
mysql_integration_tests_step(edition=edition, ver_mode=ver_mode),
]
if include_enterprise2:
build_steps.extend([
test_steps.extend([
lint_backend_step(edition=edition2),
test_backend_step(edition=edition2),
test_backend_integration_step(edition=edition2),
])
build_steps.extend([
build_backend_step(edition=edition2, ver_mode=ver_mode, variants=['linux-x64']),
])
# Insert remaining steps
build_steps.extend([
package_step(edition=edition, ver_mode=ver_mode, include_enterprise2=include_enterprise2),
e2e_tests_server_step(edition=edition),
e2e_tests_step('dashboards-suite', edition=edition, tries=3),
e2e_tests_step('smoke-tests-suite', edition=edition, tries=3),
e2e_tests_step('panels-suite', edition=edition, tries=3),
e2e_tests_step('various-suite', edition=edition, tries=3),
e2e_tests_artifacts(edition=edition),
copy_packages_for_docker_step(),
package_docker_images_step(edition=edition, ver_mode=ver_mode, publish=should_publish),
package_docker_images_step(edition=edition, ver_mode=ver_mode, ubuntu=True, publish=should_publish),
e2e_tests_server_step(edition=edition),
])
if not disable_tests:
build_steps.extend([
e2e_tests_step('dashboards-suite', edition=edition, tries=3),
e2e_tests_step('smoke-tests-suite', edition=edition, tries=3),
e2e_tests_step('panels-suite', edition=edition, tries=3),
e2e_tests_step('various-suite', edition=edition, tries=3),
e2e_tests_artifacts(edition=edition),
])
build_storybook = build_storybook_step(edition=edition, ver_mode=ver_mode)
if build_storybook:
build_steps.append(build_storybook)
if include_enterprise2:
build_steps.extend([redis_integration_tests_step(edition=edition2, ver_mode=ver_mode), memcached_integration_tests_step(edition=edition2, ver_mode=ver_mode)])
integration_test_steps.extend([redis_integration_tests_step(edition=edition2, ver_mode=ver_mode), memcached_integration_tests_step(edition=edition2, ver_mode=ver_mode)])
if should_upload:
publish_steps.append(upload_cdn_step(edition=edition, ver_mode=ver_mode))
@ -200,45 +213,102 @@ def get_steps(edition, ver_mode):
if step:
publish_steps.append(step)
return build_steps, package_steps, windows_package_steps, publish_steps
return test_steps, build_steps, integration_test_steps, package_steps, windows_package_steps, publish_steps
def get_oss_pipelines(trigger, ver_mode):
edition = 'oss'
services = integration_test_services(edition=edition)
volumes = integration_test_services_volumes()
build_steps, package_steps, windows_package_steps, publish_steps = get_steps(edition=edition, ver_mode=ver_mode)
return [
test_steps, build_steps, integration_test_steps, package_steps, windows_package_steps, publish_steps = get_steps(edition=edition, ver_mode=ver_mode)
windows_pipeline = pipeline(
name='oss-windows-{}'.format(ver_mode), edition=edition, trigger=trigger,
steps=initialize_step(edition, platform='windows', ver_mode=ver_mode) + windows_package_steps,
platform='windows', depends_on=[
'oss-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode),
],
)
pipelines = [
pipeline(
name='oss-build-{}'.format(ver_mode), edition=edition, trigger=trigger, services=services,
name='oss-build-publish{}-{}'.format(get_e2e_suffix(), ver_mode), edition=edition, trigger=trigger, services=[],
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
build_steps + package_steps + publish_steps,
build_steps + package_steps + publish_steps,
volumes=volumes,
),
pipeline(
name='oss-windows-{}'.format(ver_mode), edition=edition, trigger=trigger,
steps=initialize_step(edition, platform='windows', ver_mode=ver_mode) + windows_package_steps,
platform='windows', depends_on=['oss-build-{}'.format(ver_mode)],
),
]
if not disable_tests:
pipelines.extend([
pipeline(
name='oss-test-{}'.format(ver_mode), edition=edition, trigger=trigger, services=[],
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
test_steps,
volumes=[],
),
pipeline(
name='oss-integration-tests-{}'.format(ver_mode), edition=edition, trigger=trigger, services=services,
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
integration_test_steps,
volumes=volumes,
)
])
deps = {
'depends_on': [
'oss-build-publish{}-{}'.format(get_e2e_suffix(), ver_mode),
'oss-test-{}'.format(ver_mode),
'oss-integration-tests-{}'.format(ver_mode)
]
}
windows_pipeline.update(deps)
pipelines.extend([windows_pipeline])
return pipelines
def get_enterprise_pipelines(trigger, ver_mode):
edition = 'enterprise'
services = integration_test_services(edition=edition)
volumes = integration_test_services_volumes()
build_steps, package_steps, windows_package_steps, publish_steps = get_steps(edition=edition, ver_mode=ver_mode)
return [
test_steps, build_steps, integration_test_steps, package_steps, windows_package_steps, publish_steps = get_steps(edition=edition, ver_mode=ver_mode)
windows_pipeline = pipeline(
name='enterprise-windows-{}'.format(ver_mode), edition=edition, trigger=trigger,
steps=initialize_step(edition, platform='windows', ver_mode=ver_mode) + windows_package_steps,
platform='windows', depends_on=[
'enterprise-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode),
],
)
pipelines = [
pipeline(
name='enterprise-build-{}'.format(ver_mode), edition=edition, trigger=trigger, services=services,
name='enterprise-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode), edition=edition, trigger=trigger, services=[],
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
build_steps + package_steps + publish_steps,
build_steps + package_steps + publish_steps,
volumes=volumes,
),
pipeline(
name='enterprise-windows-{}'.format(ver_mode), edition=edition, trigger=trigger,
steps=initialize_step(edition, platform='windows', ver_mode=ver_mode) + windows_package_steps,
platform='windows', depends_on=['enterprise-build-{}'.format(ver_mode)],
),
]
if not disable_tests:
pipelines.extend([
pipeline(
name='enterprise-test-{}'.format(ver_mode), edition=edition, trigger=trigger, services=[],
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
test_steps,
volumes=[],
),
pipeline(
name='enterprise-integration-tests-{}'.format(ver_mode), edition=edition, trigger=trigger, services=services,
steps=[download_grabpl_step()] + initialize_step(edition, platform='linux', ver_mode=ver_mode) +
integration_test_steps,
volumes=volumes,
),
])
deps = {
'depends_on': [
'enterprise-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode),
'enterprise-test-{}'.format(ver_mode),
'enterprise-integration-tests-{}'.format(ver_mode)
]
}
windows_pipeline.update(deps)
pipelines.extend([windows_pipeline])
return pipelines
def release_pipelines(ver_mode='release', trigger=None):
# 'enterprise' edition services contain both OSS and enterprise services
@ -310,3 +380,8 @@ def test_release_pipelines():
))
return pipelines
def get_e2e_suffix():
if not disable_tests:
return '-e2e'
return ''

View File

@ -11,6 +11,7 @@ windows_image = 'mcr.microsoft.com/windows:1809'
wix_image = 'grafana/ci-wix:0.1.1'
test_release_ver = 'v7.3.0-test'
disable_tests = False
def slack_step(channel, template, secret):
return {
@ -277,13 +278,7 @@ def store_storybook_step(edition, ver_mode):
return {
'name': 'store-storybook',
'image': publish_image,
'depends_on': [
'build-storybook',
'end-to-end-tests-dashboards-suite',
'end-to-end-tests-panels-suite',
'end-to-end-tests-smoke-tests-suite',
'end-to-end-tests-various-suite',
],
'depends_on': ['build-storybook',] + end_to_end_tests_deps(edition),
'environment': {
'GCP_KEY': from_secret('gcp_key'),
'PRERELEASE_BUCKET': from_secret(prerelease_bucket)
@ -624,7 +619,6 @@ def package_step(edition, ver_mode, include_enterprise2=False, variants=None, is
sfx = '-enterprise2'
deps.extend([
'build-backend' + sfx,
'test-backend' + sfx,
])
variants_str = ''
@ -916,12 +910,7 @@ def release_canary_npm_packages_step(edition):
return {
'name': 'release-canary-npm-packages',
'image': build_image,
'depends_on': [
'end-to-end-tests-dashboards-suite',
'end-to-end-tests-panels-suite',
'end-to-end-tests-smoke-tests-suite',
'end-to-end-tests-various-suite',
],
'depends_on': end_to_end_tests_deps(edition),
'environment': {
'NPM_TOKEN': from_secret('npm_token'),
},
@ -953,21 +942,12 @@ def upload_packages_step(edition, ver_mode, is_downstream=False):
cmd = './bin/grabpl upload-packages --edition {} --packages-bucket grafana-downloads'.format(edition)
deps = []
if edition in 'enterprise2':
if edition in 'enterprise2' or not end_to_end_tests_deps(edition):
deps.extend([
'package' + enterprise2_suffix(edition),
])
else:
deps.extend([
'end-to-end-tests-dashboards-suite' + enterprise2_suffix(edition),
'end-to-end-tests-panels-suite' + enterprise2_suffix(edition),
'end-to-end-tests-smoke-tests-suite' + enterprise2_suffix(edition),
'end-to-end-tests-various-suite' + enterprise2_suffix(edition),
])
if edition in ('enterprise', 'enterprise2'):
deps.append('redis-integration-tests')
deps.append('memcached-integration-tests')
deps.extend(end_to_end_tests_deps(edition))
return {
'name': 'upload-packages' + enterprise2_suffix(edition),
@ -1186,3 +1166,13 @@ def ensure_cuetsified_step():
'git stash pop',
],
}
def end_to_end_tests_deps(edition):
if disable_tests:
return []
return [
'end-to-end-tests-dashboards-suite' + enterprise2_suffix(edition),
'end-to-end-tests-panels-suite' + enterprise2_suffix(edition),
'end-to-end-tests-smoke-tests-suite' + enterprise2_suffix(edition),
'end-to-end-tests-various-suite' + enterprise2_suffix(edition),
]