Last active
June 7, 2024 02:34
-
-
Save elribonazo/3d46c81ec1fefe9b767ca4f4ffa5c981 to your computer and use it in GitHub Desktop.
This script can be used to extract the Identus versioning from https://github.com/input-output-hk/atala-releases releases and future Hyperledger repositories
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Default values | |
OWNER="" | |
REPO="" | |
VERSION="latest" | |
COMPONENT="" | |
SOURCE_DIRECTORY='Atala PRISM' | |
# Function to display usage information | |
display_usage() { | |
echo "Usage: $0 --owner <owner> --repo <repo> [--version <version>] --component <component>" | |
} | |
# Function to display command information | |
display_help() { | |
echo "This script retrieves component version information from GitHub repositories." | |
echo | |
display_usage | |
echo | |
echo "Options:" | |
echo " --owner The GitHub owner/organization name" | |
echo " --repo The GitHub repository name" | |
echo " --version (Optional) The version of the repository. Default is 'latest'" | |
echo " --component The name of the component to retrieve information for" | |
echo " --help Display this help message" | |
} | |
# Parse command-line arguments | |
if [ "$#" -eq 0 ]; then | |
display_help | |
exit 1 | |
fi | |
while [[ $# -gt 0 ]]; do | |
key="$1" | |
case $key in | |
--owner) | |
OWNER="$2" | |
shift | |
shift | |
;; | |
--repo) | |
REPO="$2" | |
shift | |
shift | |
;; | |
--version) | |
VERSION="$2" | |
shift | |
shift | |
;; | |
--component) | |
COMPONENT="$2" | |
shift | |
shift | |
;; | |
--help) | |
display_help | |
exit 0 | |
;; | |
*) | |
echo "Unknown option: $1" | |
display_usage | |
exit 1 | |
;; | |
esac | |
done | |
# Check if required arguments are provided | |
if [ -z "$OWNER" ] || [ -z "$REPO" ] || [ -z "$COMPONENT" ]; then | |
echo "Error: Required arguments missing." | |
display_usage | |
exit 1 | |
fi | |
# Function to extract table from markdown | |
extract_table_from_markdown() { | |
local markdown=$1 | |
local in_table=false | |
local components=() | |
local rowCount=0 | |
while IFS= read -r line; do | |
if [[ "$line" =~ ^\*\*Updated\ components:\*\* ]]; then | |
in_table=true | |
elif [[ "$line" =~ ^\*\*Changelog\*\* ]]; then | |
in_table=false | |
elif [ "$in_table" = true ]; then | |
rowCount=$((rowCount + 1)) | |
if [ $rowCount -gt 2 ]; then | |
if [[ "$line" =~ ^\|\ (.*)\ \|\ (.*)\ \|\ (.*)\ \|$ ]]; then | |
local component="${BASH_REMATCH[1]}" | |
local from="${BASH_REMATCH[2]}" | |
local to="${BASH_REMATCH[3]}" | |
local version | |
if [[ "$to" =~ [nN][oO]\ [cC][hH][aA][nN][gG][eE] ]]; then | |
version="$from" | |
else | |
version="$to" | |
fi | |
components+=("{\"component\": \"$(echo "$component" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\", \"version\": \"$(echo "$version" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\"},") | |
fi | |
fi | |
fi | |
done <<< "$markdown" | |
printf '%s\n' "${components[@]}" | |
} | |
# Remove the existing directory | |
rm -rf "$REPO" | |
# Clone the repository without output | |
git clone "https://github.com/$OWNER/$REPO.git" >/dev/null 2>&1 || { echo "Failed to clone repository"; exit 1; } | |
# Search for directories in the cloned repository | |
VERSIONS=$(find "$REPO/$SOURCE_DIRECTORY" -mindepth 1 -exec bash -c 'echo "${1##*/}" | sed "s/\.md$//" ' _ {} \;) | |
# Filter versions to ignore those lower than 2.10 | |
FILTERED_VERSIONS="" | |
LATEST_VERSION="" | |
for version in $VERSIONS; do | |
major=$(echo "$version" | cut -d'.' -f1) | |
minor=$(echo "$version" | cut -d'.' -f2) | |
if [ "$major" -gt 2 ] || ([ "$major" -eq 2 ] && [ "$minor" -ge 10 ]); then | |
FILTERED_VERSIONS+=" $version" | |
if [[ "$version" > "$LATEST_VERSION" ]]; then | |
LATEST_VERSION="$version" | |
fi | |
fi | |
done | |
# If version is "latest", set it to the highest version | |
if [ "$VERSION" == "latest" ]; then | |
VERSION="$LATEST_VERSION" | |
fi | |
# Iterate over filtered versions | |
for version in $FILTERED_VERSIONS; do | |
if [ "$version" == "$VERSION" ]; then | |
RELEASE_TEXT=$(find "$REPO/$SOURCE_DIRECTORY/$version.md" -type f -name "*.md" -exec cat {} +) | |
components=$(extract_table_from_markdown "$RELEASE_TEXT") | |
# If a specific component is specified, filter the output | |
if [ -n "$COMPONENT" ]; then | |
while IFS= read -r component; do | |
if [[ $(echo "$component" | tr '[:upper:]' '[:lower:]') == *$(echo "$COMPONENT" | tr '[:upper:]' '[:lower:]')* ]]; then | |
version=$(echo "$component" | sed 's/.*"version": "\(.*\)".*/\1/') | |
printf '%s\n' "$version" | |
break | |
fi | |
done <<< "$components" | |
else | |
printf '%s\n' "${components%,}" | |
fi | |
fi | |
done | |
rm -rf "$REPO" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm preparing this script to facilitate integrating Identus cloud agent, mediator, and SDK's.
This script can be used by local deployments in order to automate deployment of specific compatible versions.
The script will extract the release versions using the Release markdown file.
Examples of usage:
Give me the latest prism release swift sdk package
Give me the specific Identus release swift sdk package
What mediator should I use in 2.10
What cloud agent should I use for 2.10