summaryrefslogtreecommitdiff
path: root/workflow_sources/test
diff options
context:
space:
mode:
authordcorbacho <dparracorbacho@piotal.io>2020-11-18 14:27:41 +0000
committerdcorbacho <dparracorbacho@piotal.io>2020-11-18 14:27:41 +0000
commitf23a51261d9502ec39df0f8db47ba6b22aa7659f (patch)
tree53dcdf46e7dc2c14e81ee960bce8793879b488d3 /workflow_sources/test
parentafa2c2bf6c7e0e9b63f4fb53dc931c70388e1c82 (diff)
parent9f6d64ec4a4b1eeac24d7846c5c64fd96798d892 (diff)
downloadrabbitmq-server-git-stream-timestamp-offset.tar.gz
Merge remote-tracking branch 'origin/master' into stream-timestamp-offsetstream-timestamp-offset
Diffstat (limited to 'workflow_sources/test')
-rw-r--r--workflow_sources/test/ct.lib.yml133
-rw-r--r--workflow_sources/test/dep.star22
-rw-r--r--workflow_sources/test/finish.lib.yml83
-rw-r--r--workflow_sources/test/helpers.star17
-rw-r--r--workflow_sources/test/prepare.lib.yml146
-rw-r--r--workflow_sources/test/rabbitmq_cli.lib.yml40
-rw-r--r--workflow_sources/test/tests.lib.yml41
-rw-r--r--workflow_sources/test/util.star58
-rw-r--r--workflow_sources/test/workflow.yml16
9 files changed, 556 insertions, 0 deletions
diff --git a/workflow_sources/test/ct.lib.yml b/workflow_sources/test/ct.lib.yml
new file mode 100644
index 0000000000..5a3666776d
--- /dev/null
+++ b/workflow_sources/test/ct.lib.yml
@@ -0,0 +1,133 @@
+#@ load("@ytt:data", "data")
+#@ load("@ytt:assert", "assert")
+#@ load("util.star", "is_unique", "group_by_one", "to_build_args")
+#@ load("helpers.star", "ci_image_tag", "ci_dep_image", "skip_ci_condition")
+
+#@ def checks_job(dep):
+name: #@ dep.name + "-checks"
+needs: [prepare]
+runs-on: ubuntu-18.04
+if: #@ skip_ci_condition()
+outputs:
+ step_start: ${{ steps.buildevents.outputs.step_start }}
+#@yaml/text-templated-strings
+steps:
+ - name: RECORD STEP START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - name: CHECKOUT REPOSITORY
+ uses: actions/checkout@v2
+ - name: VALIDATE KNOWN CT SUITES
+ env:
+ project: #@ dep.name
+ #@ suite_names = [suite.name for suite in dep.suites]
+ #@ None if is_unique(suite_names) else assert.fail('{} suite names are not unique'.format(dep.name))
+ run: |
+ ci/scripts/validate-workflow.sh (@= " ".join(suite_names) @)
+ - name: RUN CHECKS
+ uses: docker/build-push-action@v1
+ with:
+ username: _json_key
+ password: ${{ secrets.GCR_JSON_KEY }}
+ registry: eu.gcr.io
+ repository: cf-rabbitmq-core/ci-(@= dep.name @)
+ dockerfile: ci/dockerfiles/ci-dep
+ #@ build_args = {}
+ #@ build_args["IMAGE_TAG"] = ci_image_tag()
+ #@ build_args["BUILDEVENT_APIKEY"] = '${{ secrets.HONEYCOMB_API_KEY }}'
+ #@ build_args["project"] = dep.name
+ build_args: #@ to_build_args(build_args)
+ tags: (@= ci_image_tag() @)
+#@ end
+
+#@ def ct_suites_job(dep, group):
+name: #@ dep.name + "-ct-" + group["name"]
+needs:
+ - prepare
+ - #@ dep.name + "-checks"
+runs-on: ubuntu-18.04
+if: #@ skip_ci_condition()
+#@yaml/text-templated-strings
+steps:
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: PULL IMAGE
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= ci_dep_image(dep.name) @)
+ #@ for suite in group["suites"]:
+ - name: #@ "RUN ct-" + suite
+ run: |
+ mkdir ct-(@= suite @)-logs && chmod 777 ct-(@= suite @)-logs
+ docker run \
+ --env project=(@= dep.name @) \
+ --env CT_SUITE=(@= suite @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --volume ${PWD}/ct-(@= suite @)-logs:/workspace/ct-logs \
+ (@= ci_dep_image(dep.name) @) \
+ /workspace/rabbitmq/ci/scripts/ct-suite.sh
+ - name: ON FAILURE UPLOAD TESTS LOGS ARTIFACT
+ #! https://github.com/marketplace/actions/upload-artifact
+ uses: actions/upload-artifact@v2-preview
+ #! For whatever reason, "if: steps.(@= suite @).outcome == 'failure'" never executes,
+ #! so just run always
+ if: always()
+ with:
+ name: (@= dep.name @)-ct-(@= suite @)-logs
+ path: "ct-(@= suite @)-logs/*-ct-logs-*.tar.xz"
+ #@ if data.values.erlang_version == data.values.erlang_versions[0]:
+ #@ for version in data.values.secondary_umbrella_gitrefs:
+ #@ logs_dir = 'ct-{}-logs-{}'.format(suite, version)
+ - name: #@ "RUN ct-{} [mixed {}]".format(suite, version)
+ run: |
+ mkdir (@= logs_dir @) && chmod 777 (@= logs_dir @)
+ docker run \
+ --env project=(@= dep.name @) \
+ --env CT_SUITE=(@= suite @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env SECONDARY_UMBRELLA_VERSION=(@= version @) \
+ --volume ${PWD}/(@= logs_dir @):/workspace/ct-logs \
+ (@= ci_dep_image(dep.name) @) \
+ /workspace/rabbitmq/ci/scripts/ct-suite.sh
+ - name: #@ 'ON FAILURE UPLOAD TESTS LOGS ARTIFACT [mixed {}]'.format(version)
+ #! https://github.com/marketplace/actions/upload-artifact
+ uses: actions/upload-artifact@v2-preview
+ #! For whatever reason, "if: steps.(@= suite @).outcome == 'failure'" never executes,
+ #! so just run always
+ if: always()
+ with:
+ name: (@= dep.name @)-ct-(@= suite @)-logs-mixed-(@= version @)
+ path: "(@= logs_dir @)/*-ct-logs-*.tar.xz"
+ #@ end
+ #@ end
+ #@ end
+#@ end
+
+#@ def collect_job(dep):
+name: #@ dep.name
+needs: #@ [dep.name + "-checks"] + [dep.name + "-ct-" + group["name"] for group in group_by_one(dep.suites)]
+runs-on: ubuntu-18.04
+if: #@ skip_ci_condition()
+#@yaml/text-templated-strings
+steps:
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: RECORD STEP FINISH
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= ci_dep_image(dep.name) @)
+ docker run \
+ --env project=(@= dep.name @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ needs.(@= dep.name @)-checks.outputs.step_start }} \
+ (@= ci_dep_image(dep.name) @) \
+ /workspace/rabbitmq/ci/scripts/collect.sh
+#@ end \ No newline at end of file
diff --git a/workflow_sources/test/dep.star b/workflow_sources/test/dep.star
new file mode 100644
index 0000000000..d56e2fe2f6
--- /dev/null
+++ b/workflow_sources/test/dep.star
@@ -0,0 +1,22 @@
+load("util.star", "group_by_one")
+load("rabbitmq_cli.lib.yml", "rabbitmq_cli_job")
+load("ct.lib.yml", "checks_job", "ct_suites_job", "collect_job")
+load("tests.lib.yml", "tests_job")
+
+def dep_jobs(dep):
+ jobs = {}
+ if not getattr(dep, "skip_tests", False):
+ if dep.name == "rabbitmq_cli":
+ jobs[dep.name] = rabbitmq_cli_job(dep)
+ elif getattr(dep, "test_suites_in_parallel", False):
+ jobs[dep.name + "-checks"] = checks_job(dep)
+ for group in group_by_one(dep.suites):
+ jobs[dep.name + "-ct-" + group["name"]] = ct_suites_job(dep, group)
+ end
+ jobs[dep.name] = collect_job(dep)
+ else:
+ jobs[dep.name] = tests_job(dep)
+ end
+ end
+ return jobs
+end
diff --git a/workflow_sources/test/finish.lib.yml b/workflow_sources/test/finish.lib.yml
new file mode 100644
index 0000000000..3d249a7f12
--- /dev/null
+++ b/workflow_sources/test/finish.lib.yml
@@ -0,0 +1,83 @@
+#@ load("@ytt:data", "data")
+#@ load("helpers.star", "ci_image", "skip_ci_condition")
+
+#@ def gcs_path():
+#@ c = ['monorepo_github_actions_conclusions']
+#@ c.append('${{ github.sha }}')
+#@ c.append('${{ github.workflow }}')
+#@ return '/'.join(c)
+#@ end
+
+#@ def finish_jobs(prepare_jobs_names):
+package-generic-unix:
+ name: package-generic-unix
+ needs: [prepare]
+ runs-on: ubuntu-18.04
+ if: #@ skip_ci_condition()
+ #@yaml/text-templated-strings
+ steps:
+ - name: RECORD STEP START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: PACKAGE GENERIC UNIX
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= ci_image() @)
+ mkdir PACKAGES && chmod 777 PACKAGES
+ docker run \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ --volume ${PWD}/PACKAGES:/workspace/rabbitmq/PACKAGES \
+ (@= ci_image() @) \
+ ci/scripts/package_generic_unix.sh
+ - name: UPLOAD GENERIC UNIX PACKAGE ARTIFACT
+ #! https://github.com/marketplace/actions/upload-artifact
+ uses: actions/upload-artifact@v2-preview
+ with:
+ name: rabbitmq-server-generic-unix.tar.xz
+ path: "PACKAGES/rabbitmq-server-generic-unix-*.tar.xz"
+ - name: RECORD STEP FINISH
+ if: always()
+ run: |
+ docker run \
+ --env project=packaging \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ (@= ci_image() @) \
+ ci/scripts/collect.sh
+finish:
+ name: finish
+ needs: #@ prepare_jobs_names + [dep.name for dep in data.values.deps if not getattr(dep, "skip_tests", False)] + ['package-generic-unix']
+ runs-on: ubuntu-18.04
+ if: #@ skip_ci_condition()
+ #@yaml/text-templated-strings
+ steps:
+ - uses: technote-space/workflow-conclusion-action@v1
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: RECORD BUILD FINISH
+ run: |
+ echo -n "${{ env.WORKFLOW_CONCLUSION }}" > conclusion
+
+ gsutil cp conclusion \
+ 'gs://(@= gcs_path() @)'
+
+ gcloud auth configure-docker
+ docker pull (@= ci_image() @)
+ docker run \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env BUILD_START=${{ needs.prepare.outputs.build_start }} \
+ --env BUILD_RESULT=${{ env.WORKFLOW_CONCLUSION }} \
+ (@= ci_image() @) \
+ ci/scripts/finish.sh
+#@ end \ No newline at end of file
diff --git a/workflow_sources/test/helpers.star b/workflow_sources/test/helpers.star
new file mode 100644
index 0000000000..4db571163b
--- /dev/null
+++ b/workflow_sources/test/helpers.star
@@ -0,0 +1,17 @@
+load("@ytt:data", "data")
+
+def ci_image_tag():
+ return "erlang-" + data.values.erlang_version + "-rabbitmq-${{ github.sha }}"
+end
+
+def ci_image():
+ return "eu.gcr.io/cf-rabbitmq-core/ci:" + ci_image_tag()
+end
+
+def ci_dep_image(dep_name):
+ return "eu.gcr.io/cf-rabbitmq-core/ci-" + dep_name + ":" + ci_image_tag()
+end
+
+def skip_ci_condition():
+ return "!contains(github.event.head_commit.message, '[ci skip]')"
+end
diff --git a/workflow_sources/test/prepare.lib.yml b/workflow_sources/test/prepare.lib.yml
new file mode 100644
index 0000000000..da074a0ec6
--- /dev/null
+++ b/workflow_sources/test/prepare.lib.yml
@@ -0,0 +1,146 @@
+#@ load("@ytt:data", "data")
+#@ load("util.star", "to_build_args")
+#@ load("helpers.star", "ci_image", "ci_image_tag", "skip_ci_condition")
+
+#@ def prepare_jobs():
+prepare:
+ name: prepare
+ runs-on: ubuntu-18.04
+ if: #@ skip_ci_condition()
+ outputs:
+ build_start: ${{ steps.buildevents.outputs.build_start }}
+ branch_or_tag_name: ${{ steps.buildevents.outputs.branch_or_tag_name }}
+ #@yaml/text-templated-strings
+ steps:
+ - name: RECORD BUILD START
+ id: buildevents
+ run: |
+ echo "::set-output name=build_start::$(date +%s)"
+ branch_or_tag_name=${GITHUB_REF#refs/*/}
+ echo "::set-output name=branch_or_tag_name::$branch_or_tag_name"
+ - name: CHECKOUT REPOSITORY
+ uses: actions/checkout@v2
+ - name: PREPARE BUILD IMAGE
+ uses: docker/build-push-action@v1
+ with:
+ username: _json_key
+ password: ${{ secrets.GCR_JSON_KEY }}
+ registry: eu.gcr.io
+ repository: cf-rabbitmq-core/ci
+ dockerfile: ci/dockerfiles/ci
+ #@ build_args = {}
+ #@ build_args["ERLANG_VERSION"] = data.values.erlang_version
+ #@ build_args["GITHUB_RUN_ID"] = '${{ github.run_id }}'
+ #@ build_args["BUILDEVENT_APIKEY"] = '${{ secrets.HONEYCOMB_API_KEY }}'
+ #@ build_args["GITHUB_SHA"] = '${{ github.sha }}'
+ #@ build_args["base_rmq_ref"] = data.values.base_rmq_ref
+ #@ build_args["current_rmq_ref"] = '${{ steps.buildevents.outputs.branch_or_tag_name }}'
+ #@ build_args["RABBITMQ_VERSION"] = data.values.base_rmq_ref.replace('master', '3.9.x').replace('.x', '.0')
+ build_args: #@ to_build_args(build_args)
+ tags: (@= ci_image_tag() @)
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: RECORD STEP FINISH
+ run: |
+ docker run \
+ --env project=prepare \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.build_start }} \
+ (@= ci_image() @) \
+ ci/scripts/collect.sh
+xref:
+ name: xref
+ runs-on: ubuntu-18.04
+ if: #@ skip_ci_condition()
+ #@yaml/text-templated-strings
+ steps:
+ - name: RECORD XREF START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - name: CHECKOUT REPOSITORY
+ uses: actions/checkout@v2
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: PULL IMAGE
+ #@ base_image = "eu.gcr.io/cf-rabbitmq-core/ci-base:" + data.values.erlang_version
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= base_image @)
+ #@ for dep in [d for d in data.values.deps if not getattr(d, "skip_xref", False)]:
+ - name: RUN XREF (@= dep.name @)
+ run: |
+ docker run \
+ --env project=(@= dep.name @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --volume ${PWD}:/workspace/rabbitmq \
+ --workdir /workspace/rabbitmq \
+ (@= base_image @) \
+ ci/scripts/xref.sh
+ #@ end
+ - name: RECORD STEP FINISH
+ if: always()
+ run: |
+ docker run \
+ --env project=xref \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ --volume ${PWD}/ci/scripts:/workspace/rabbitmq/ci/scripts \
+ --workdir /workspace/rabbitmq \
+ (@= base_image @) \
+ ci/scripts/collect.sh
+
+#@ if/end data.values.erlang_version == data.values.erlang_versions[-1]:
+dialyze:
+ name: dialyze
+ runs-on: ubuntu-18.04
+ if: #@ skip_ci_condition()
+ #@yaml/text-templated-strings
+ steps:
+ - name: RECORD DIALYZE START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - name: CHECKOUT REPOSITORY
+ uses: actions/checkout@v2
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: PULL IMAGE
+ #@ base_image = "eu.gcr.io/cf-rabbitmq-core/ci-base:" + data.values.erlang_version
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= base_image @)
+ #@ for dep in [d for d in data.values.deps if not getattr(d, "skip_dialyzer", False)]:
+ - name: RUN DIALYZE (@= dep.name @)
+ run: |
+ docker run \
+ --env project=(@= dep.name @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --volume ${PWD}:/workspace/rabbitmq \
+ --workdir /workspace/rabbitmq \
+ (@= base_image @) \
+ ci/scripts/dialyze.sh
+ #@ end
+ - name: RECORD STEP FINISH
+ if: always()
+ run: |
+ docker run \
+ --env project=dialyze \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ --volume ${PWD}/ci/scripts:/workspace/rabbitmq/ci/scripts \
+ --workdir /workspace/rabbitmq \
+ (@= base_image @) \
+ ci/scripts/collect.sh
+#@ end \ No newline at end of file
diff --git a/workflow_sources/test/rabbitmq_cli.lib.yml b/workflow_sources/test/rabbitmq_cli.lib.yml
new file mode 100644
index 0000000000..4281547814
--- /dev/null
+++ b/workflow_sources/test/rabbitmq_cli.lib.yml
@@ -0,0 +1,40 @@
+#@ load("@ytt:data", "data")
+#@ load("helpers.star", "ci_image", "skip_ci_condition")
+
+#@ def rabbitmq_cli_job(dep):
+name: #@ dep.name
+needs:
+ - prepare
+runs-on: ubuntu-18.04
+if: #@ skip_ci_condition()
+#@yaml/text-templated-strings
+steps:
+ - name: RECORD STEP START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: RUN TESTS
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= ci_image() @)
+ mkdir broker-logs && chmod 777 broker-logs
+ docker run \
+ --env project=(@= dep.name @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ --volume ${PWD}/broker-logs:/workspace/broker-logs \
+ (@= ci_image() @) \
+ ci/scripts/rabbitmq_cli.sh
+ - name: ON FAILURE UPLOAD TESTS LOGS ARTIFACT
+ #! https://github.com/marketplace/actions/upload-artifact
+ uses: actions/upload-artifact@v2-preview
+ if: failure()
+ with:
+ name: (@= dep.name @)-broker-logs
+ path: "broker-logs/broker-logs.tar.xz"
+#@ end \ No newline at end of file
diff --git a/workflow_sources/test/tests.lib.yml b/workflow_sources/test/tests.lib.yml
new file mode 100644
index 0000000000..f6c7c05912
--- /dev/null
+++ b/workflow_sources/test/tests.lib.yml
@@ -0,0 +1,41 @@
+#@ load("@ytt:data", "data")
+#@ load("util.star", "to_build_args")
+#@ load("helpers.star", "ci_image", "skip_ci_condition")
+
+#@ def tests_job(dep):
+name: #@ dep.name
+needs: [prepare]
+runs-on: ubuntu-18.04
+if: #@ skip_ci_condition()
+#@yaml/text-templated-strings
+steps:
+ - name: RECORD STEP START
+ id: buildevents
+ run: |
+ echo "::set-output name=step_start::$(date +%s)"
+ - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+ with:
+ service_account_key: ${{ secrets.GCR_JSON_KEY }}
+ export_default_credentials: true
+ - name: RUN TESTS
+ run: |
+ gcloud auth configure-docker
+ docker pull (@= ci_image() @)
+ mkdir ct-logs && chmod 777 ct-logs
+ docker run \
+ --env project=(@= dep.name @) \
+ --env GITHUB_RUN_ID=${{ github.run_id }} \
+ --env BUILDEVENT_APIKEY=${{ secrets.HONEYCOMB_API_KEY }} \
+ --env STEP_START=${{ steps.buildevents.outputs.step_start }} \
+ --volume ${PWD}/ct-logs:/workspace/ct-logs \
+ --oom-kill-disable \
+ (@= ci_image() @) \
+ ci/scripts/tests.sh
+ - name: ON FAILURE UPLOAD TESTS LOGS ARTIFACT
+ #! https://github.com/marketplace/actions/upload-artifact
+ uses: actions/upload-artifact@v2-preview
+ if: failure()
+ with:
+ name: (@= dep.name @)-ct-logs
+ path: "ct-logs/*-ct-logs-*.tar.xz"
+#@ end \ No newline at end of file
diff --git a/workflow_sources/test/util.star b/workflow_sources/test/util.star
new file mode 100644
index 0000000000..2c6d348564
--- /dev/null
+++ b/workflow_sources/test/util.star
@@ -0,0 +1,58 @@
+def is_unique(l):
+ return len(l) == len(set(l))
+end
+
+def merge(dicts):
+ r = {}
+ for d in dicts:
+ r.update(**d)
+ end
+ return r
+end
+
+def name(suites):
+ if len(suites) == 1:
+ return suites[0].name
+ else:
+ return suites[0].name + "-plus-" + str(len(suites) - 1) + "-more"
+ end
+end
+
+def sum(ints):
+ s = 0
+ for i in ints:
+ s += i
+ end
+ return s
+end
+
+def partition(target, groups, suites):
+ if len(suites) == 0:
+ return groups
+ end
+ group = []
+ rest = []
+ for suite in sorted(suites, key=lambda suite: suite.time):
+ if sum([suite2.time for suite2 in group]) + suite.time <= target:
+ group.append(suite)
+ else:
+ rest.append(suite)
+ end
+ end
+ return partition(target, groups + [group], rest)
+end
+
+def group_by_time(suites):
+ longest = max([suite.time for suite in suites])
+ groups = partition(longest, [], suites)
+ return [{"name": name(suites), "suites": [suite.name for suite in suites]} for suites in groups]
+end
+
+# Used when we don't actually want multiple ct-suites per job
+def group_by_one(suites):
+ return [{"name": suite.name, "suites": [suite.name]} for suite in suites]
+end
+
+def to_build_args(d):
+ return ",".join(['{0}={1}'.format(k,d[k]) for k in d.keys()])
+end
diff --git a/workflow_sources/test/workflow.yml b/workflow_sources/test/workflow.yml
new file mode 100644
index 0000000000..c3746b1944
--- /dev/null
+++ b/workflow_sources/test/workflow.yml
@@ -0,0 +1,16 @@
+#@ load("@ytt:data", "data")
+#@ load("@ytt:template", "template")
+#@ load("util.star", "merge")
+#@ load("prepare.lib.yml", "prepare_jobs")
+#@ load("dep.star", "dep_jobs")
+#@ load("finish.lib.yml", "finish_jobs")
+
+#@ prepare = prepare_jobs()
+#@ deps = [dep_jobs(dep) for dep in data.values.deps]
+#@ finish = finish_jobs([prepare[k]['name'] for k in prepare])
+
+---
+name: #@ "Test - Erlang " + data.values.erlang_version
+#! https://github.com/k14s/ytt/issues/189
+a_magic_string_that_we_will_sed_to_on: push
+jobs: #@ merge([prepare] + deps + [finish])