From 2cd3652a9f73b4943b4ecc38fdfe773f36ab59ed Mon Sep 17 00:00:00 2001
From: Yair Siman Tov <63305203+yairsimantov20@users.noreply.github.com>
Date: Thu, 21 Dec 2023 14:02:12 +0200
Subject: [PATCH] Port 5712 ocean validate integration metadata files (#283)
---
.../workflows/validate-integration-files.yml | 76 +++++++++++++++++++
1 file changed, 76 insertions(+)
create mode 100644 .github/workflows/validate-integration-files.yml
diff --git a/.github/workflows/validate-integration-files.yml b/.github/workflows/validate-integration-files.yml
new file mode 100644
index 0000000000..a32717f224
--- /dev/null
+++ b/.github/workflows/validate-integration-files.yml
@@ -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 '[^<]*' | sed 's/\([^<]*\)<\/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 '[^<]*' | sed 's/\([^<]*\)<\/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