1
+ def WORKFLOW_RUN_ID = "0"
2
+ def SHORT_SHA = ""
3
+ def REF_LOADTEST_BRANCH = ""
4
+ def WORKFLOW_RUN_URL = ""
5
+
6
+ pipeline("E2E workflows") {
7
+ agent {
8
+ label "local"
9
+ }
10
+ environment {
11
+ GITHUB_TOKEN = credentials('990f5312-cd08-48ec-baf8-3b27ff551204')
12
+ }
13
+ stages {
14
+ stage('Clone repository') {
15
+ steps {
16
+ checkout scm
17
+ }
18
+ }
19
+ stage('Input parameters') {
20
+ steps {
21
+ script {
22
+ SHORT_SHA = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
23
+ echo "Short sha: ${SHORT_SHA}"
24
+ sh "bash .github/workflow_inputs.sh ${SHORT_SHA}"
25
+ REF_LOADTEST_BRANCH = sh(script: "cat inputs.json | jq -r '.ref'", returnStdout: true).trim()
26
+ echo "Ref loadtest branch: ${REF_LOADTEST_BRANCH}"
27
+ }
28
+ }
29
+ }
30
+ stage('Post webhook') {
31
+ steps {
32
+ script {
33
+ def dispatch_response = sh(script: """curl -L -X POST -H "Accept: application/vnd.github+json" \
34
+ -H "Authorization: Bearer ${GITHUB_TOKEN}" \
35
+ -H "X-GitHub-Api-Version: 2022-11-28" \
36
+ -d @inputs.json \
37
+ https://api.github.com/repos/logicalclocks/loadtest/actions/workflows/e2e_small.yaml/dispatches""",
38
+ returnStdout: true
39
+ ).trim()
40
+ echo "Dispatch response: ${dispatch_response}"
41
+ sh "rm inputs.json"
42
+ }
43
+ }
44
+ }
45
+ stage ('Find workflow run id') {
46
+ steps {
47
+ script {
48
+ sleep 5
49
+ TIME_AFTER_WORKFLOW_DISPATCH = sh(script: "date -u +%Y-%m-%dT%H:%M:%SZ", returnStdout: true).trim()
50
+ WORKFLOW_RUN_ID = sh(script: """curl -L -X GET -G -H "Accept: application/vnd.github+json" \
51
+ -H "Authorization: Bearer ${GITHUB_TOKEN}" \
52
+ -H "X-GitHub-Api-Version: 2022-11-28" \
53
+ -d "event=workflow_dispatch" -d "actor=HopsworksJenkins" -d "branch=${REF_LOADTEST_BRANCH}" \
54
+ https://api.github.com/repos/logicalclocks/loadtest/actions/runs | jq -r '.workflow_runs[0].id'""", returnStdout: true).trim()
55
+ echo "Workflow run id: ${WORKFLOW_RUN_ID}"
56
+ }
57
+ }
58
+ }
59
+ stage('Wait for github action workflow to complete') {
60
+ steps {
61
+ script {
62
+ def status = "in_progress"
63
+ while (status == "in_progress" || status == "queued") {
64
+ sleep 60
65
+ status = sh(script: """curl -L -X GET -H "Accept: application/vnd.github+json" \
66
+ -H "Authorization: Bearer ${GITHUB_TOKEN}" \
67
+ -H "X-GitHub-Api-Version: 2022-11-28" \
68
+ https://api.github.com/repos/logicalclocks/loadtest/actions/runs/${WORKFLOW_RUN_ID} | jq -r '.status' """, returnStdout: true).trim()
69
+ echo "Status: ${status}"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ stage('Download artifacts') {
75
+ steps {
76
+ script {
77
+ def REPORT_URL = sh(
78
+ script: """curl -L -H "Accept: application/vnd.github+json" \
79
+ -H "Authorization: Bearer ${GITHUB_TOKEN}" \
80
+ -H "X-GitHub-Api-Version: 2022-11-28" \
81
+ https://api.github.com/repos/logicalclocks/loadtest/actions/runs/${WORKFLOW_RUN_ID}/artifacts \
82
+ | jq -r '.artifacts[] | select(.name == "results_${WORKFLOW_RUN_ID}.xml") | .archive_download_url' """,
83
+ returnStdout: true
84
+ ).trim()
85
+ echo "Report url: ${REPORT_URL}"
86
+ sh(
87
+ script: """curl -L -H \"Accept: application/vnd.github+json\" \
88
+ -H \"Authorization: Bearer ${GITHUB_TOKEN}\" \
89
+ -H \"X-GitHub-Api-Version: 2022-11-28\" \
90
+ -o results.zip "${REPORT_URL}" """
91
+ )
92
+ sh """if [ -f results.xml ]; then rm results.xml; fi && unzip results.zip && rm results.zip"""
93
+ }
94
+ }
95
+ }
96
+ }
97
+ post {
98
+ always {
99
+ junit 'results.xml'
100
+ }
101
+ }
102
+ }
0 commit comments