-
Notifications
You must be signed in to change notification settings - Fork 60
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Port 5712 ocean validate integration metadata files (#283)
- Loading branch information
1 parent
802f225
commit 2cd3652
Showing
1 changed file
with
76 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
name: Validate integration files | ||
|
||
on: | ||
pull_request: | ||
paths: | ||
- 'integrations/**' | ||
|
||
jobs: | ||
validate-files: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Set up Python 3.11 | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.11' | ||
|
||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Setup | ||
run: | | ||
pip install toml-cli yq | ||
- name: Check Ocean version 🌊 | ||
run: | | ||
changed_dirs=$(git diff --name-only origin/main origin/${{ github.head_ref }} | grep 'integrations/' | cut -d'/' -f 1,2 | sort -u) | ||
package_version=$(curl -s https://pypi.org/pypi/port-ocean/json | jq -r '.info.version') | ||
for dir in $changed_dirs; do | ||
pyproject_file=$(find $dir -name 'pyproject.toml' -not -path "**/.venv/*") | ||
if [ -n "$pyproject_file" ]; then | ||
installed_version=$(toml get tool.poetry.dependencies.port_ocean.version --toml-path $pyproject_file) | ||
is_version_updated=$(python -c "from packaging import version;print(version.parse('$installed_version'.lstrip('^')) >= version.parse('$package_version'))") | ||
if [ "$is_version_updated" = "False" ]; then | ||
echo "ERROR: Ocean version in $pyproject_file is not updated to latest version -> $package_version" | ||
exit 1 | ||
else | ||
echo "Ocean version is valid in $pyproject_file" | ||
fi | ||
fi | ||
done | ||
- name: Validate integration not duplicated | ||
run: | | ||
for integration in $(find integrations -name 'spec.yaml' -not -path "**/.venv/*"); do | ||
integration_type=$(yq -r '.type' $integration) | ||
if [ $(find integrations -name 'spec.yaml' -not -path "**/.venv/*" | xargs -I {} yq -r '.type' {} | grep -c $integration_type) -gt 1 ]; then | ||
echo "ERROR: $integration_type integration type is duplicated please check your spec.yaml file" | ||
exit 1 | ||
fi | ||
done | ||
- name: Validate icons | ||
run: | | ||
S3_BUCKET="port-graphical-assets" | ||
S3_ICONS_COLOR_URL="https://$S3_BUCKET.s3.amazonaws.com?prefix=icons/blueprintsColor/" | ||
color_results=$(curl -s "$S3_ICONS_COLOR_URL" | grep -o '<Key>[^<]*</Key>' | sed 's/<Key>\([^<]*\)<\/Key>/\1/' | tr '[:upper:]' '[:lower:]') | ||
S3_ICONS_URL="https://$S3_BUCKET.s3.amazonaws.com?prefix=icons/blueprints/" | ||
colorless_results=$(curl -s "$S3_ICONS_URL" | grep -o '<Key>[^<]*</Key>' | sed 's/<Key>\([^<]*\)<\/Key>/\1/' | tr '[:upper:]' '[:lower:]') | ||
# All integration icons | ||
icons=($(find integrations -name 'spec.yaml' -not -path "**/.venv/*" | xargs -I {} yq -r '.icon' {} | tr '[:upper:]' '[:lower:]')) | ||
bp_icons=($(find integrations/** -name 'blueprints.json' -not -path "**/.venv/*" | xargs -I {} jq -r '.[] | .. | .icon?' {} | grep -v '^null$' | sort -u | tr '[:upper:]' '[:lower:]')) | ||
merged_set=($(printf "%s\n" "${icons[@]}" "${bp_icons[@]}" | sort -u)) | ||
for icon in "${merged_set[@]}"; do | ||
if [ $(echo "$color_results" | grep -c "$icon") -eq 0 ] && [ $(echo "$colorless_results" | grep -c "$icon") -eq 0 ]; then | ||
echo "ERROR: $icon icon is missing in icons pool" | ||
exit 1 | ||
fi | ||
done |