Add Cloud Native Catalog Items #16
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
name: Add Cloud Native Catalog Items | |
on: | |
schedule: | |
- cron: "0 0 * * *" | |
workflow_dispatch: | |
repository_dispatch: | |
types: [add_catalog] | |
jobs: | |
UpdateCloudNativeCatalog: | |
runs-on: ubuntu-22.04 | |
outputs: | |
contentID: ${{ steps.update_catalog_patterns.outputs.contentID }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GH_ACCESS_TOKEN }} | |
- name: Set env | |
run : | | |
echo "MESHERY_CLOUD_BASE_URL=https://meshery.layer5.io" >> $GITHUB_ENV | |
echo "MESHERY_CATALOG_FILES_DIR=catalog" >> $GITHUB_ENV | |
- name: Cleanup | |
run: | | |
find $MESHERY_CATALOG_FILES_DIR ! -name 'index.html' ! -name 'artifacthub-repo.yml' -maxdepth 1 -type f -delete | |
cd ./collections/_catalog | |
for dir in */; do find $dir -maxdepth 1 -type f -delete; done | |
cd ../../ | |
- id: update_catalog_patterns | |
name: Update Catalog Patterns | |
shell: bash | |
if: ${{ success() }} | |
run: | | |
catalogPatterns=$(curl -sS "$MESHERY_CLOUD_BASE_URL/api/catalog/content/pattern" 2>./err.txt) | |
if [[ "$(<err.txt)" != "" ]]; then | |
>&2 echo "Error connecting to Meshery Cloud" | |
>&2 echo "$(<err.txt)" | |
fi | |
echo "$catalogPatterns" | jq -r '.patterns' > temp.json | |
patternCount=$(echo "$catalogPatterns" | jq '.total_count') | |
echo "Found $patternCount catalog patterns" | |
for (( idx=0; idx<$patternCount; idx++ )) | |
do | |
designId=$(jq -r .[$idx].id temp.json) | |
patternInfo="$(jq -r .[$idx].catalog_data.pattern_info temp.json)" | |
patternCaveats="$(jq -r .[$idx].catalog_data.pattern_caveats temp.json)" | |
patternType="$(jq -r .[$idx].catalog_data.type temp.json)" | |
patternName="$(jq -r .[$idx].name temp.json)" | |
patternFile="$(jq -r .[$idx].pattern_file temp.json)" | |
patternImageURL="$(jq -r .[$idx].catalog_data.imageURL temp.json)" | |
if [[ "$patternImageURL" == "null" || "$patternImageURL" == "" ]]; then | |
# set default snapshot url | |
patternImageURL="https://raw.githubusercontent.com/layer5labs/meshery-extensions-packages/master/action-assets/design-assets/$designId-light.png,https://raw.githubusercontent.com/layer5labs/meshery-extensions-packages/master/action-assets/design-assets/$designId-dark.png" | |
else | |
url_type=$(jq -r ".[$idx].catalog_data.imageURL | type" temp.json) | |
if [[ $url_type == "array" ]]; then | |
patternImageURL="$(jq -r ".[$idx].catalog_data.imageURL | join(\",\")" temp.json)" | |
fi | |
fi | |
echo "$patternImageURL" | |
echo "version: 1.0.0" | |
compatibility="" | |
echo "contentID=$designId" >> $GITHUB_OUTPUT | |
# sets default | |
if [[ $patternType == "null" ]]; then | |
patternType="Deployment" | |
fi | |
# updates patternType by converting upper to lower case and switching spaces with hyphen | |
updatedPatternType=$(echo $patternType | tr '[:upper:]' '[:lower:]' | tr ' ' '-') | |
# check if directory doesn't exists; then create it | |
if [ ! -d "./collections/_catalog/"$updatedPatternType"" ]; then | |
echo "$updatedPatternType doesn't exist." | |
echo "Creating directory... $updatedPatternType" | |
mkdir "./collections/_catalog/"$updatedPatternType"" | |
fi | |
if [[ $patternInfo == "null" ]]; then | |
patternInfo="\"\"" | |
fi | |
if [[ $patternCaveats == "null" ]]; then | |
patternCaveats="\"\"" | |
fi | |
compatLength=$(jq -r ".[$idx].catalog_data.compatibility | length" temp.json) | |
for (( compatIdx=0; compatIdx<$compatLength; compatIdx++ )) | |
do | |
compatibility+=" | |
" | |
compatibility+=" - $(jq -r ".[$idx].catalog_data.compatibility[$compatIdx]" temp.json)" | |
done | |
echo "$patternFile" > $MESHERY_CATALOG_FILES_DIR/$designId.yaml | |
services=$(yq '.services' $MESHERY_CATALOG_FILES_DIR/$designId.yaml 2>/dev/null) | |
if [[ $services == "null" || $services == "" ]]; then | |
patternImageURL="/assets/images/logos/service-mesh-pattern.svg" | |
fi | |
userId=$(jq -r .[$idx].user_id temp.json) | |
userInfo=$(curl -sS "$MESHERY_CLOUD_BASE_URL/api/identity/users/profile/$userId" 2>./err1.txt) | |
if [[ "$(<err1.txt)" != "" ]]; then | |
>&2 echo "Error fetching User details" | |
>&2 echo "$(<err1.txt)" | |
fi | |
echo "$userInfo" > info.json | |
userFullName="$(jq -r .first_name info.json) $(jq -r .last_name info.json)" | |
userAvatarURL="$(jq -r .avatar_url info.json)" | |
echo "--- | |
layout: item | |
name: $patternName | |
userId: $userId | |
userName: $userFullName | |
userAvatarURL: $userAvatarURL | |
type: $patternType | |
compatibility: $compatibility | |
patternId: $designId | |
image: $patternImageURL | |
patternInfo: | | |
$patternInfo | |
patternCaveats: | | |
$patternCaveats | |
URL: 'https://raw.githubusercontent.com/meshery/meshery.io/master/$MESHERY_CATALOG_FILES_DIR/$designId.yaml' | |
downloadLink: $designId.yaml | |
---" > ./collections/_catalog/"$(echo $patternType | tr '[:upper:]' '[:lower:]')"/$designId.md | |
curl -L \ | |
-X POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer ${{ secrets.GH_ACCESS_TOKEN }}" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
"https://api.github.com/repos/meshery/meshery.io/actions/workflows/meshmap.yml/dispatches" \ | |
-d '{"ref":"master","inputs":{"contentID":"'$designId'","assetLocation":"'$patternImageURL'"}}' | |
done | |
rm temp.json | |
rm err.txt | |
rm info.json | |
rm err1.txt | |
- name: Update Catalog Filters | |
if: ${{ success() }} | |
run: | | |
catalogFilters=$(curl -sS "$MESHERY_CLOUD_BASE_URL/api/catalog/content/filter" 2>./err.txt) | |
if [[ "$(<err.txt)" != "" ]]; then | |
>&2 echo "Error connecting to Meshery Cloud" | |
>&2 echo "$(<err.txt)" | |
fi | |
echo "$catalogFilters" | jq -r '.filters' > temp.json | |
filterCount=$(echo "$catalogFilters" | jq '.total_count') | |
echo "Found $filterCount catalog filters" | |
echo "Found $filterCount catalog filters" | |
for (( idx=0; idx<$filterCount; idx++ )) | |
do | |
filterId=$(jq -r .[$idx].id temp.json) | |
filterInfo="$(jq -r .[$idx].catalog_data.filter_info temp.json)" | |
filterCaveats="$(jq -r .[$idx].catalog_data.filter_caveats temp.json)" | |
filterType="$(jq -r .[$idx].catalog_data.type temp.json)" | |
filterName="$(jq -r .[$idx].name temp.json)" | |
filterImageURL="$(jq -r .[$idx].catalog_data.imageURL temp.json)" | |
compatibility="" | |
echo "contentID=$designId" >> $GITHUB_OUTPUT | |
# check if directory doesn't exists; then create it | |
if [ ! -d "./collections/_catalog/"$(echo $filterType | tr '[:upper:]' '[:lower:]')"" ]; then | |
echo "$(echo $filterType | tr '[:upper:]' '[:lower:]') doesn't exist." | |
echo "Creating directory...$(echo $filterType | tr '[:upper:]' '[:lower:]')" | |
mkdir "./collections/_catalog/"$(echo $filterType | tr '[:upper:]' '[:lower:]')"" | |
fi | |
if [[ $filterInfo == "null" ]]; then | |
filterInfo="\"\"" | |
fi | |
if [[ $filterCaveats == "null" ]]; then | |
filterCaveats="\"\"" | |
fi | |
if [[ $filterType == "null" ]]; then | |
patternType="wasm filter" | |
fi | |
compatLength=$(jq -r ".[$idx].catalog_data.compatibility | length" temp.json) | |
for (( compatIdx=0; compatIdx<$compatLength; compatIdx++ )) | |
do | |
compatibility+=" | |
" | |
compatibility+=" - $(jq -r ".[$idx].catalog_data.compatibility[$compatIdx]" temp.json)" | |
done | |
filterFile="$(jq -r .[$idx].filter_file temp.json)" | |
echo "$filterFile" > $MESHERY_CATALOG_FILES_DIR/$filterId.yaml | |
userId=$(jq -r .[$idx].user_id temp.json) | |
userInfo=$(curl -sS "$MESHERY_CLOUD_BASE_URL/api/identity/users/profile/$userId" 2>./err1.txt) | |
if [[ "$(<err1.txt)" != "" ]]; then | |
>&2 echo "Error fetching User details" | |
>&2 echo "$(<err1.txt)" | |
fi | |
echo "$userInfo" > info.json | |
userFullName="$(jq -r .first_name info.json) $(jq -r .last_name info.json)" | |
userAvatarURL="$(jq -r .avatar_url info.json)" | |
echo "--- | |
layout: item | |
name: $filterName | |
userId: $userId | |
userName: $userFullName | |
userAvatarURL: $userAvatarURL | |
type: $filterType | |
compatibility: $compatibility | |
patternId: $filterId | |
image: /assets/images/webassembly_logo.svg | |
filterInfo: | | |
$filterInfo | |
filterCaveats: | | |
$filterCaveats | |
URL: 'https://raw.githubusercontent.com/meshery/meshery.io/master/$MESHERY_CATALOG_FILES_DIR/$filterId.yaml' | |
downloadLink: $filterId.yaml | |
---" > ./collections/_catalog/"$(echo $filterType | tr '[:upper:]' '[:lower:]')"/$filterId.md | |
done | |
rm temp.json | |
rm err.txt | |
- name: Commit | |
uses: stefanzweifel/git-auto-commit-action@v4 | |
with: | |
file_pattern: catalog/* collections/_catalog/* | |
commit_user_name: l5io | |
commit_user_email: [email protected] | |
commit_author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> | |
commit_options: '--signoff' | |
commit_message: '[Catalog] Update Catalog items' |