Skip to content

Commit 0d4f7e3

Browse files
extract steps commenting and merging PR from chart-verifier job
1 parent 278e868 commit 0d4f7e3

File tree

4 files changed

+104
-50
lines changed

4 files changed

+104
-50
lines changed

.github/workflows/build.yml

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -190,18 +190,22 @@ jobs:
190190
runs-on: ubuntu-22.04
191191
needs: [setup, validate-submission]
192192

193-
if: ${{ always() }}
194-
195193
outputs:
196194
report_content: ${{ steps.check_report.outputs.report_content }}
197195
redhat_to_community: ${{ steps.check_report.outputs.redhat_to_community }}
198-
message_file: ${{ steps.pr_comment.outputs.message-file }}
199-
message_text_base64: ${{ steps.encode_pr_comment.outputs.message-text-base64 }}
196+
# message_file: ${{ steps.pr_comment.outputs.message-file }}
197+
# message_text_base64: ${{ steps.encode_pr_comment.outputs.message-text-base64 }}
200198
# web_catalog_only: ${{ steps.check_pr_content.outputs.web_catalog_only }}
201199
# chart_entry_name: ${{ steps.check_pr_content.outputs.chart-entry-name }}
202200
# release_tag: ${{ steps.check_pr_content.outputs.release_tag }}
203201
# ocp-version-range: ${{ steps.get-ocp-range.outputs.ocp-version-range }}
204202

203+
community_manual_review_required: ${{ steps.check_report.outputs.community_manual_review_required }}
204+
install-oc-outcome: ${{ steps.install-oc.outcome }}
205+
verifier_error_message: ${{ steps.check-verifier-result.outputs.verifier_error_message }}
206+
run-verifier-outcome: ${{ steps.run-verifier.outcome }}
207+
check_report-outcome: ${{ steps.check_report.outcome }}
208+
ocp-version-range: ${{ steps.get-ocp-range.outputs.ocp-version-range }}
205209

206210
steps:
207211
- name: Checkout
@@ -231,13 +235,12 @@ jobs:
231235
232236
- name: Download submission information
233237
uses: actions/download-artifact@v4
234-
if: ${{ ! contains(join(needs.*.result, ','), 'failure') }}
235238
with:
236239
name: submission
237240

238241
- name: Remove 'authorized-request' label from PR
239242
uses: actions/github-script@v7
240-
if: ${{ needs.setup.outputs.run_build == 'true' && contains( github.event.pull_request.labels.*.name, 'authorized-request') && ! contains(join(needs.*.result, ','), 'failure') }}
243+
if: ${{ needs.setup.outputs.run_build == 'true' && contains( github.event.pull_request.labels.*.name, 'authorized-request') }}
241244
continue-on-error: true
242245
with:
243246
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -252,15 +255,14 @@ jobs:
252255
253256
- name: install chart verifier for action
254257
uses: redhat-actions/openshift-tools-installer@v1
255-
if: ${{ ! contains(join(needs.*.result, ','), 'failure') }}
256258
with:
257259
source: github
258260
skip_cache: true
259261
chart-verifier: "${{ needs.setup.outputs.verifier-action-image }}"
260262

261263
# TODO: check what needs to stay here vs what could go to validate-submission
262264
- name: determine verify requirements
263-
if: ${{ needs.setup.outputs.run_build == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
265+
if: ${{ needs.setup.outputs.run_build == 'true' }}
264266
id: verify_requires
265267
env:
266268
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
@@ -270,30 +272,30 @@ jobs:
270272
271273
- name: Install oc
272274
id: install-oc
273-
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
275+
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' }}
274276
uses: redhat-actions/openshift-tools-installer@v1
275277
with:
276278
oc: latest
277279

278280
- name: Set cluster login params
279281
id: login-params
280-
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
282+
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' }}
281283
run: |
282284
#calculate cluster params
283285
API_SERVER=$( echo -n ${{ secrets.API_SERVER }} | base64 -d)
284286
echo "API_SERVER=${API_SERVER}" >> $GITHUB_OUTPUT
285287
286288
- uses: redhat-actions/oc-login@v1
287289
id: oc_login
288-
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
290+
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' }}
289291
with:
290292
openshift_server_url: ${{ steps.login-params.outputs.API_SERVER }}
291293
openshift_token: ${{ secrets.CLUSTER_TOKEN }}
292294
insecure_skip_tls_verify: ${{ needs.setup.outputs.insecure_skip_tls_verify }}
293295

294296
- name: create service account
295297
id: create_service_account
296-
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
298+
if: ${{ steps.verify_requires.outputs.cluster_needed == 'true' }}
297299
env:
298300
API_SERVER: ${{ steps.login-params.outputs.API_SERVER }}
299301
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
@@ -304,7 +306,7 @@ jobs:
304306
305307
- uses: redhat-actions/chart-verifier@v1
306308
id: run-verifier
307-
if: ${{ steps.verify_requires.outputs.report_needed == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
309+
if: ${{ steps.verify_requires.outputs.report_needed == 'true' }}
308310
with:
309311
chart_uri: ${{ steps.verify_requires.outputs.verify_uri }}
310312
verify_args: ${{ steps.verify_requires.outputs.verify_args }}
@@ -313,43 +315,44 @@ jobs:
313315

314316
- name: check-verifier-result
315317
id: check-verifier-result
316-
if: ${{ always() && steps.run-verifier.outcome == 'failure' && ! contains(join(needs.*.result, ','), 'failure') }}
318+
if: ${{ always() && steps.run-verifier.outcome == 'failure' }}
317319
run: |
318320
error_message="The chart verifier returned an error when trying to obtain a verification report for the chart."
319321
echo "verifier_error_message=$error_message" >> $GITHUB_OUTPUT
320322
321323
- name: Get profile version set in report provided by the user
322324
id: get-profile-version
323-
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
325+
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' }}
324326
uses: mikefarah/yq@master
325327
with:
326328
cmd: yq '.metadata.tool.profile.version' ${{ format('./pr-branch/{0}', steps.verify_requires.outputs.provided_report_relative_path) }}
327329

328330
- name: Get the range of Kubernetes versions set in the report provided by the user
329331
id: get-kube-range
330-
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
332+
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' }}
331333
continue-on-error: true
332334
uses: mikefarah/yq@master
333335
with:
334336
cmd: yq '.metadata.chart.kubeversion' ${{ format('./pr-branch/{0}', steps.verify_requires.outputs.provided_report_relative_path) }}
335337

336338
- name: Get the corresponding range of OCP versions
337339
id: get-ocp-range
338-
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
340+
if: ${{ needs.setup.outputs.run_build == 'true' && steps.verify_requires.outputs.report_provided == 'true' }}
339341
continue-on-error: true
340342
uses: ./.github/actions/get-ocp-range
341343
with:
342344
kube-version-range: ${{ steps.get-kube-range.outputs.result }}
343345

344346
- name: Only ignore errors in get-ocp-range for profile in version v1.0
345-
if: ${{ (steps.get-kube-range.outcome == 'failure' || steps.get-ocp-range.outcome == 'failure') && steps.get-profile-version.outputs.result != 'v1.0' && ! contains(join(needs.*.result, ','), 'failure') }}
347+
if: ${{ (steps.get-kube-range.outcome == 'failure' || steps.get-ocp-range.outcome == 'failure') && steps.get-profile-version.outputs.result != 'v1.0' }}
346348
run: |
347349
echo "::error file=.github/workflows/build.yaml::Failure in get-ocp-range, mandatory for profile version ${{ steps.get-profile-version.outputs.result }}"
348350
exit 1
349351
352+
# check the report that was generated when running chart-verifier / or provided by PR ??
350353
- name: Check Report
351354
id: check_report
352-
if: ${{ needs.setup.outputs.run_build == 'true' && ! contains(join(needs.*.result, ','), 'failure') }}
355+
if: ${{ needs.setup.outputs.run_build == 'true' }}
353356
env:
354357
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
355358
VENDOR_TYPE: ${{ needs.validate-submission.outputs.category }}
@@ -370,55 +373,91 @@ jobs:
370373
cd ..
371374
372375
- name: Delete Namespace
373-
if: ${{ always() && steps.oc_login.conclusion == 'success' && ! contains(join(needs.*.result, ','), 'failure') }}
376+
if: ${{ always() && steps.oc_login.conclusion == 'success' }}
374377
env:
375378
KUBECONFIG: /tmp/ci-kubeconfig
376379
run: |
377380
API_SERVER=$( echo -n ${{ secrets.API_SERVER }} | base64 -d)
378381
oc login --token=${{ secrets.CLUSTER_TOKEN }} --server=${API_SERVER} --insecure-skip-tls-verify=${{ needs.setup.outputs.insecure_skip_tls_verify }}
379382
ve1/bin/sa-for-chart-testing --delete charts-${{ github.event.number }}
380383
381-
# TODO
384+
# TODO: test remove altogether: rght now only ensure report.yaml file exists
382385
- name: Save PR artifact
383386
env:
384387
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
385388
if: ${{ always() && needs.setup.outputs.run_build == 'true' }}
386389
run: |
387390
ve1/bin/pr-artifact --directory=./pr --pr-number=${{ github.event.number }} --api-url=${{ github.event.pull_request._links.self.href }}
388391
389-
# manage-gh-pr:
390-
# name: Comment and merge PR
391-
# runs-on: ubuntu-22.04
392-
# needs: [setup, validate-submission, chart-verifier]
392+
manage-gh-pr:
393+
name: Comment and merge PR
394+
runs-on: ubuntu-22.04
395+
needs: [setup, validate-submission, chart-verifier]
396+
397+
outputs:
398+
message_file: ${{ steps.pr_comment.outputs.message-file }}
399+
message_text_base64: ${{ steps.encode_pr_comment.outputs.message-text-base64 }}
400+
401+
# Run manage-pr as long as setup was successfull, independently from potential errors in validate-submission or chart-verifier
402+
if: ${{ always() && needs.setup.result == 'success' }}
403+
404+
steps:
405+
- name: Checkout
406+
uses: actions/checkout@v4
407+
408+
- name: Checkout PR Branch
409+
if: ${{ needs.setup.outputs.run_build == 'true' }}
410+
uses: actions/checkout@v4
411+
with:
412+
ref: ${{ github.event.pull_request.head.ref }}
413+
repository: ${{ github.event.pull_request.head.repo.full_name }}
414+
path: "pr-branch"
415+
416+
- name: Set up Python 3.x Part 1
417+
uses: actions/setup-python@v5
418+
with:
419+
python-version: "3.10"
393420

394-
# # outputs:
395-
# # if: ${{ always() && contains(join(needs.*.result, ','), 'success') }}
421+
- name: Set up Python 3.x Part 2
422+
run: |
423+
# set up python
424+
python3 -m venv ve1
425+
cd scripts
426+
../ve1/bin/pip3 install -r requirements.txt
427+
../ve1/bin/pip3 install .
428+
cd ..
429+
430+
- name: Download submission information
431+
uses: actions/download-artifact@v4
432+
with:
433+
name: submission
396434

397-
# steps:
398435
- name: Prepare PR comment
399436
id: pr_comment
400-
if: ${{ always() && needs.setup.outputs.run_build == 'true' }}
437+
if: ${{ needs.setup.outputs.run_build == 'true' }}
401438
env:
402439
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
403440
PR_CONTENT_ERROR_MESSAGE: ${{ needs.validate-submission.outputs.pr-content-error-message }}
404441
OWNERS_ERROR_MESSAGE: ${{ needs.validate-submission.outputs.owners-error-message }}
405-
COMMUNITY_MANUAL_REVIEW: ${{ steps.check_report.outputs.community_manual_review_required }}
406-
OC_INSTALL_RESULT: ${{ steps.install-oc.outcome }}
407-
VERIFIER_ERROR_MESSAGE: ${{ steps.check-verifier-result.outputs.verifier_error_message }}
442+
COMMUNITY_MANUAL_REVIEW: ${{ needs.chart-verifier.outputs.community_manual_review_required }}
443+
OC_INSTALL_RESULT: ${{ needs.chart-verifier.outputs.install-oc-outcome || 'skipped' }}
444+
VERIFIER_ERROR_MESSAGE: ${{ needs.chart-verifier.outputs.verifier_error_message }}
408445
run: |
409-
ve1/bin/pr-comment ${{ needs.validate-submission.outputs.validate-submission-outcome }} ${{ steps.run-verifier.outcome }} ${{ steps.check_report.conclusion }}
446+
ve1/bin/pr-comment ${{ needs.validate-submission.outputs.validate-submission-outcome }} \
447+
${{ needs.chart-verifier.outputs.run-verifier-outcome || 'skipped' }} \
448+
${{ needs.chart-verifier.outputs.check_report-outcome || 'skipped'}}
410449
411450
# Note(komish): This step is a temporary fix for the metrics step in the next job
412451
# which expects the PR comment to exist at the specified filesystem location.
413452
- name: Encode PR Comment for Metrics
414453
id: encode_pr_comment
415-
if: ${{ always() && needs.setup.outputs.run_build == 'true' }}
454+
if: ${{ needs.setup.outputs.run_build == 'true' }}
416455
run: |
417456
commentBase64=$(base64 --wrap=0 ${{ steps.pr_comment.outputs.message-file }})
418457
echo "message-text-base64=${commentBase64}" | tee -a $GITHUB_OUTPUT
419458
420459
- name: Comment on PR
421-
if: ${{ always() && needs.setup.outputs.run_build == 'true' }}
460+
if: ${{ needs.setup.outputs.run_build == 'true' }}
422461
uses: actions/github-script@v7
423462
with:
424463
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -434,7 +473,8 @@ jobs:
434473
});
435474
436475
- name: Add 'authorized-request' label to PR
437-
if: ${{ always() && needs.validate-submission.outputs.validate-submission-outcome == 'success' && steps.run-verifier.outcome != 'failure' && needs.setup.outputs.run_build == 'true' }}
476+
if: ${{ needs.validate-submission.outputs.validate-submission-outcome == 'success' && needs.chart-verifier.outputs.run-verifier-outcome != 'failure' && needs.setup.outputs.run_build == 'true' }}
477+
# if: ${{ needs.validate-submission.outputs.validate-submission-outcome == 'success' && needs.chart-verifier.outputs.run-verifier-outcome || 'skipped' == 'success' && needs.setup.outputs.run_build == 'true' }}
438478
uses: actions/github-script@v7
439479
with:
440480
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -453,7 +493,8 @@ jobs:
453493
454494
- name: Approve PR
455495
id: approve_pr
456-
if: ${{ steps.check_report.conclusion == 'success' }}
496+
if: ${{ needs.chart-verifier.outputs.check_report-outcome == 'success' }}
497+
# if: ${{ needs.chart-verifier.outputs.check_report-outcome || 'skipped' == 'success' }}
457498
uses: hmarr/auto-approve-action@v3
458499
with:
459500
# The token we use for this changes for the Sandbox repository because the sandbox repository
@@ -463,15 +504,15 @@ jobs:
463504

464505
- name: Merge PR
465506
id: merge_pr
466-
if: ${{ steps.approve_pr.conclusion == 'success' }}
507+
if: ${{ steps.approve_pr.outcome == 'success' }}
467508
uses: pascalgn/[email protected]
468509
env:
469510
GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }}
470511
MERGE_METHOD: squash
471512
MERGE_LABELS: ""
472513

473514
- name: Check for PR merge
474-
if: ${{ steps.merge_pr.conclusion == 'success' }}
515+
if: ${{ steps.merge_pr.outcome == 'success' }}
475516
env:
476517
BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
477518
run: |
@@ -481,7 +522,7 @@ jobs:
481522
release:
482523
name: Release Chart
483524
runs-on: ubuntu-22.04
484-
needs: [setup, validate-submission, chart-verifier]
525+
needs: [setup, validate-submission, chart-verifier, manage-gh-pr]
485526

486527
steps:
487528
- name: Checkout
@@ -535,7 +576,7 @@ jobs:
535576
REPORT_CONTENT: ${{ needs.chart-verifier.outputs.report_content }}
536577
REDHAT_TO_COMMUNITY: ${{ needs.chart-verifier.outputs.redhat_to_community }}
537578
WEB_CATALOG_ONLY: ${{ needs.validate-submission.outputs.web_catalog_only }}
538-
OCP_VERSION_RANGE: ${{ steps.get-ocp-range.outputs.ocp-version-range }}
579+
OCP_VERSION_RANGE: ${{ needs.chart-verifier.outputs.ocp-version-range }}
539580
id: prepare-chart-release
540581
run: |
541582
# export WEB_CATALOG_ONLY=`jq .is_web_catalog_only ${{ github.env.SUBMISSION_PATH }}`
@@ -628,8 +669,8 @@ jobs:
628669
- name: Retrieve PR comment for metrics
629670
if: ${{ always() && needs.setup.outputs.run_build == 'true' && github.repository != 'openshift-helm-charts/sandbox' }}
630671
run: |
631-
mkdir -p $(dirname ${{ needs.chart-verifier.outputs.message_file }})
632-
echo ${{ needs.chart-verifier.outputs.message_text_base64 }} | base64 -d | tee ${{ needs.chart-verifier.outputs.message_file }}
672+
mkdir -p $(dirname ${{ needs.manage-gh-pr.outputs.message_file }})
673+
echo ${{ needs.manage-gh-pr.outputs.message_text_base64 }} | base64 -d | tee ${{ needs.manage-gh-pr.outputs.message_file }}
633674
634675
- name: Add metrics
635676
id: add_metrics
@@ -652,7 +693,7 @@ jobs:
652693
echo "add PR run metric"
653694
ve1/bin/metrics --write-key="${WRITE_KEY}" \
654695
--metric-type="pull_request" \
655-
--message-file="${{ needs.chart-verifier.outputs.message_file }}" \
696+
--message-file="${{ needs.manage-gh-pr.outputs.message_file }}" \
656697
--pr-number="${{ github.event.number }}" \
657698
--pr-action="${{ github.event.action }}" \
658699
--repository="${GITHUB_REPOSITORY}" \

scripts/src/pullrequest/prepare_pr_comment.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import sys
33

4+
from submission import validate
45
from tools import gitutils
56

67

@@ -207,9 +208,18 @@ def main():
207208
pr_content_result = sys.argv[1]
208209
run_verifier_result = sys.argv[2]
209210
verify_result = sys.argv[3]
210-
issue_number = open("./pr/NR").read().strip()
211-
vendor_label = open("./pr/vendor").read().strip()
212-
chart_name = open("./pr/chart").read().strip()
211+
212+
submission_path = os.environ.get("SUBMISSION_PATH")
213+
s = validate.read_submission_from_file(articact_path=submission_path)
214+
issue_number = s.get_pr_number()
215+
vendor_label = s.chart.organization
216+
chart_name = s.chart.name
217+
218+
# s = validate.read_submission_from_file(articact_path=submission_path)
219+
220+
# issue_number = open("./pr/NR").read().strip()
221+
# vendor_label = open("./pr/vendor").read().strip()
222+
# chart_name = open("./pr/chart").read().strip()
213223

214224
community_manual_review = os.environ.get("COMMUNITY_MANUAL_REVIEW", False)
215225
oc_install_result = os.environ.get("OC_INSTALL_RESULT")

scripts/src/submission/submission.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,9 @@ def is_valid_web_catalog_only(self, repo_path=""):
538538

539539
return True, ""
540540

541+
def get_pr_number(self):
542+
return self.api_url.split("/")[-1]
543+
541544

542545
def get_file_type(file_path):
543546
"""Determine the category of a given file
@@ -578,7 +581,7 @@ def get_file_type(file_path):
578581
return "unknwown", None
579582

580583

581-
def download_index_data(repository, branch="gh-pages"):
584+
def download_index_data(repository: str, branch: str = "gh-pages") -> dict:
582585
"""Download the helm repository index"""
583586
r = requests.get(
584587
f"https://raw.githubusercontent.com/{repository}/{branch}/index.yaml"

0 commit comments

Comments
 (0)