From d124ab2bb19cc2a6db90b061bdfc910468234324 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Jun 2024 09:47:47 +0200 Subject: [PATCH 1/2] add script to check whether JSON data for available software has been updated (ignoring timestamp) --- .../workflows/update_available_software.yml | 20 ++++++----- .../available_software/available_software.py | 1 + .../available_software/check_json_updates.py | 34 +++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) create mode 100755 scripts/available_software/check_json_updates.py diff --git a/.github/workflows/update_available_software.yml b/.github/workflows/update_available_software.yml index 3a656e5a7f..e51466511a 100644 --- a/.github/workflows/update_available_software.yml +++ b/.github/workflows/update_available_software.yml @@ -21,25 +21,29 @@ jobs: - name: update overview of available software id: update_available_software run: | - cd scripts/available_software - # install required Python packages in virtual environment python -m venv venv . venv/bin/activate pip install -r requirements.txt - python available_software.py + # copy current JSON data, so we can compare after updating it + cp docs/available_software/data/json_data.json docs/available_software/data/json_data.json.orig + cp docs/available_software/data/json_data_detail.json docs/available_software/data/json_data_detail.json.orig + + python scripts/available_software/available_software.py git status # determine whether pull request should be opened: # if JSON files in docs/available_software/data have been updated, then a PR should be opened - json_data_changed=$((git diff --exit-code ../../docs/available_software/data > /dev/null && echo 'no') || echo 'yes') - if [[ ${json_data_changed} == "yes" ]]; then - echo "JSON files in docs/available_software/data have been changed, PR should be opened" - else + json_data_changed=$(python scripts/available_software/check_json_updates.py docs/available_software/data/json_data.json.orig docs/available_software/data/json_data.json) + json_data_detail_changed=$(python scripts/available_software/check_json_updates.py docs/available_software/data/json_data_detail.json.orig docs/available_software/data/json_data_detail.json) + if [[ ${json_data_changed} == "no changes" ]] && [[ ${json_data_detail_changed} == "no changes" ]]; then echo "JSON files in docs/available_software/data have not been changed, no need to open PR" + echo "json_data_changed=no" >> $GITHUB_OUTPUT + else + echo "JSON files in docs/available_software/data have been changed, PR should be opened" + echo "json_data_changed=yes" >> $GITHUB_OUTPUT fi - echo "json_data_changed=${json_data_changed}" >> $GITHUB_OUTPUT - name: create pull request uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5 diff --git a/scripts/available_software/available_software.py b/scripts/available_software/available_software.py index 007f411d11..602145da85 100644 --- a/scripts/available_software/available_software.py +++ b/scripts/available_software/available_software.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python # # Copyright 2023-2023 Ghent University # diff --git a/scripts/available_software/check_json_updates.py b/scripts/available_software/check_json_updates.py new file mode 100755 index 0000000000..16cc1058e6 --- /dev/null +++ b/scripts/available_software/check_json_updates.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# +# Copyright 2023-2023 Ghent University +# +# SPDX license identifier: GPL-3.0-or-later +# +""" +Python script to check for differences between provided JSON files +that contain data on available software. + +@author: Kenneth Hoste (Ghent University) +""" +import json +import sys + +if len(sys.argv) != 3: + sys.stderr.write(f"Usage: {sys.argv[0]} \n") + sys.exit(1) + +json1_path = sys.argv[1] +json2_path = sys.argv[2] + +with open(json1_path) as json1: + json1_data = json.load(json1) +with open(json2_path) as json2: + json2_data = json.load(json2) + +json1_data_filtered = {k: v for (k, v) in json1_data.items() if k != 'time_generated'} +json2_data_filtered = {k: v for (k, v) in json2_data.items() if k != 'time_generated'} + +if json1_data_filtered == json2_data_filtered: + print("no changes") +else: + print("differences found") From abe1c23bbcd5aeb2a8e54fdd44861e1aeac202b1 Mon Sep 17 00:00:00 2001 From: Kenneth Hoste Date: Thu, 6 Jun 2024 09:53:58 +0200 Subject: [PATCH 2/2] remove original JSON files after checking for updates --- .github/workflows/update_available_software.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/update_available_software.yml b/.github/workflows/update_available_software.yml index e51466511a..496bdd6d47 100644 --- a/.github/workflows/update_available_software.yml +++ b/.github/workflows/update_available_software.yml @@ -45,6 +45,9 @@ jobs: echo "json_data_changed=yes" >> $GITHUB_OUTPUT fi + # remove original JSON files, or they'll end up in the PR being opened + rm -f docs/available_software/data/json_data.json.orig docs/available_software/data/json_data_detail.json.orig + - name: create pull request uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5 if: steps.update_available_software.outputs.json_data_changed == 'yes'