Skip to content

Prevent mandatory jobs from being added to the list of rejected jobs (bugfix) #3472

Prevent mandatory jobs from being added to the list of rejected jobs (bugfix)

Prevent mandatory jobs from being added to the list of rejected jobs (bugfix) #3472

name: PR Validation
on:
pull_request:
types:
- opened
- synchronize
- edited
jobs:
validate_title:
runs-on: ubuntu-latest
steps:
- name: Checking the presence of the Traceability Marker in the PR title
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
if echo "$PR_TITLE" | grep -iqP " \((infra|bugfix|new|breaking)\)$"; then
echo "PR title contains the traceability marker"
exit 0
else
echo "Traceability marker missing"
echo "Update your title with one of the following postfix"
echo "(Infra,Bugfix,New,Breaking)"
echo
echo "e.g. $PR_TITLE (BugFix)"
exit 1
fi
sru_gate:
runs-on: ubuntu-latest
steps:
- name: Checkout Checkbox monorepo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install dependencies, Checkbox and providers
run: |
sudo apt install -y -qq python3 python3-venv jq libsystemd-dev
python3 -m venv venv
. venv/bin/activate
python3 -m pip install checkbox-ng/
python3 -m pip install checkbox-support/
python3 providers/resource/manage.py develop
python3 providers/base/manage.py develop
python3 providers/certification-client/manage.py develop
python3 providers/tpm2/manage.py develop
python3 providers/sru/manage.py develop
- name: Export main sru list
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR: ${{ github.event.pull_request.html_url }}
run: |
export DESCRIPTION=$(gh pr view $PR --json 'body' --jq '.body')
# we are on current branch/commit
. venv/bin/activate
checkbox-cli expand -f json com.canonical.certification::sru-server >> sru_server_testplan_this_branch.json
checkbox-cli expand -f json com.canonical.certification::sru >> sru_testplan_this_branch.json
git checkout origin/main
checkbox-cli expand -f json com.canonical.certification::sru-server >> sru_server_testplan_main.json
checkbox-cli expand -f json com.canonical.certification::sru >> sru_testplan_main.json
# https://stackoverflow.com/a/57795761
# compare two jsons without comparing the order arrays but just
# the content of objects
echo
echo
echo "Difference of com.canonical.certification::sru-server (diff this_branch main)"
# The following line sorts the array of jobs/templates obtained from the pre/post checkout.
# This is done because we want compare the list/content of jobs but not necessarily the order
# that for most jobs is not deterministic either way. The array keys are sorted as well
# as what counts is the content of each key (id, environ, command) and not the order
# the exporter prints them out.
# Taken partially from: https://github.com/jqlang/jq/issues/893
diff \
<(jq -S 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); (. | (post_recurse | arrays) |= sort)' "sru_server_testplan_this_branch.json") \
<(jq -S 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); (. | (post_recurse | arrays) |= sort)' "sru_server_testplan_main.json") | tee sru_server_diff.txt
if [ -s sru_server_diff.txt ]; then
# if the sru_server_diff file is not empty, there is at least one diff (patch) done to it
# require the PR description to contain the bold text highlighting it
if [[ "$DESCRIPTION" == *"## WARNING: This modifies com.canonical.certification::sru-server"* ]]; then
echo "Warning is correcty posted in the description for sru-server"
else
echo "Missing warning for sru modification in the description"
echo "Include the following in your description:"
echo " ## WARNING: This modifies com.canonical.certification::sru-server"
exit 1
fi
else
echo "No diff found"
fi
echo "Difference of com.canonical.certification::sru (diff this_branch main)"
# the following line sorts the array of jobs/templates obtained from the pre/post checkout
# this is done because we want compare the list/content of jobs but not necessarely the order
# that for most jobs is not deterministic either way. The array keys are sorted as well
# as what counts is the content of each key (id, environ, command) and not the order
# the exporter prints them out
# Taken partially from: https://github.com/jqlang/jq/issues/893
diff \
<(jq -S 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); (. | (post_recurse | arrays) |= sort)' "sru_testplan_this_branch.json") \
<(jq -S 'def post_recurse(f): def r: (f | select(. != null) | r), .; r; def post_recurse: post_recurse(.[]?); (. | (post_recurse | arrays) |= sort)' "sru_testplan_main.json") | tee sru_diff.txt
if [ -s sru_diff.txt ]; then
# if the sru_server_diff file is not empty, there is at least one diff (patch) done to it
# require the PR description to contain the bold text highlighting it
if [[ "$DESCRIPTION" == *"## WARNING: This modifies com.canonical.certification::sru"* ]]; then
echo "Warning is correcty posted in the description for sru"
else
echo "Missing warning for sru modification in the description"
echo "Include the following in your description:"
echo " ## WARNING: This modifies com.canonical.certification::sru"
exit 1
fi
else
echo "No diff found"
fi