Skip to content

Commit

Permalink
Replace release label validation script (#235)
Browse files Browse the repository at this point in the history
* Replace release label validation script

* Enchance logging

* Enchance logging
  • Loading branch information
MarekMichali authored Dec 5, 2023
1 parent be5d6ae commit 6b50da7
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 2 deletions.
14 changes: 12 additions & 2 deletions .github/workflows/create-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,20 @@ jobs:
- name: Check for existing artifacts from previous release runs
run: "./scripts/check_artifacts_existence.sh ${{ inputs.name }}"

- name: Validate Labels
- name: Setup python
uses: actions/setup-python@v4
with:
python-version: '3.9'
cache: 'pip'

- name: Install requirements
run: pip install -r scripts/python/requirements.txt

- name: Validate labels
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./scripts/label_validator.sh "RELEASE"
REPOSITORY: ${{ env.KYMA_ENVIRONMENT_BROKER_REPO }}
run: python3 scripts/python/release_label_validator.py

bump-sec-scanners-config:
name: Bump sec-scanners-config
Expand Down
52 changes: 52 additions & 0 deletions scripts/python/release_label_validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import requests
import os
import yaml
import sys

with open('.github/release.yml', 'r') as file:
try:
release_yaml = yaml.safe_load(file)
label_pool = []
for category in release_yaml['changelog']['categories']:
label_pool.extend(category['labels'])
except yaml.YAMLError as exc:
print(exc)

print(f"One of these labels is required on PR: {label_pool}")
token = os.getenv('GITHUB_TOKEN')
repo = os.getenv('REPOSITORY')

response = requests.get(f'https://api.github.com/repos/{repo}/releases/latest', headers={'Authorization': f'token {token}'})
response.raise_for_status()
latest_release = response.json()
latest_release_date = latest_release['created_at']

response = requests.get(f'https://api.github.com/repos/{repo}/pulls?state=closed&sort=updated&direction=desc', headers={'Authorization': f'token {token}'})
response.raise_for_status()
all_closed_prs = response.json()

prs_since_last_release = [
pr for pr in all_closed_prs
if pr['merged_at'] is not None and pr['merged_at'] > latest_release_date
]

valid_prs = []
invalid_prs = []
for pr in prs_since_last_release:
labels = [label['name'] for label in pr['labels']]
common_labels = set(labels).intersection(label_pool)
if len(common_labels) != 1:
invalid_prs.append(pr['html_url'])
else:
valid_prs.append(pr['html_url'])

print("\nThese PRs have exactly one required label:")
print('\n'.join([f"PR: {pr}" for pr in valid_prs]))


if invalid_prs:
print("\nThese PRs don't have exactly one required label:")
print('\n'.join([f"PR: {pr}" for pr in invalid_prs]))
sys.exit(1)

print("\nAll PRs have exactly one required label")
2 changes: 2 additions & 0 deletions scripts/python/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pyyaml
requests

0 comments on commit 6b50da7

Please sign in to comment.