Skip to content

Add Cloud Native Catalog Items #18

Add Cloud Native Catalog Items

Add Cloud Native Catalog Items #18

Workflow file for this run

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'