Skip to content

Commit

Permalink
linter matrix (#682)
Browse files Browse the repository at this point in the history
# Description

What - Lint takes a lot of time
Why - Linting all integrations every time
How - Running only the changed scopes lint with matrix

## Type of change

- [X] Non-breaking change (fix of existing functionality that will not
change current behavior)


<img width="641" alt="image"
src="https://github.com/port-labs/ocean/assets/63305203/79714f76-057c-41e1-a0b3-271a5969033a">
  • Loading branch information
yairsimantov20 authored Jun 3, 2024
1 parent 434a65b commit 9cbf86d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 23 deletions.
45 changes: 41 additions & 4 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,56 @@ on:
workflow_dispatch:

jobs:
detect-changes:
name: Detect changes
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout Repo
uses: actions/checkout@v4

- name: Get list of changed files
id: changed-files
uses: tj-actions/[email protected]
- name: Set matrix
id: set-matrix
run: |
folders_to_ignore="integrations/*/LICENSE.md|integrations/*/README.md|integrations/*/CONTRIBUTING.md|integrations/*/CHANGELOG.md"
changed_folders=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep '^integrations/' | grep -v '^($folders_to_ignore)' | cut -d'/' -f2 | sort | uniq)
if [ -z "$changed_folders" ]; then
changed_folders=""
fi
folders_to_ignore="integrations/|scripts/|assets/|docs/|LICENSE.md|README.md|CONTRIBUTING.md|CHANGELOG.md"
other_changes=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | grep -v '^($folders_to_ignore)' | wc -l)
if [ "$other_changes" -ne 0 ]; then
# Add the root directory to the matrix if there are changes outside the integrations folder
changed_folders=$(echo -e "$changed_folders\n.")
fi
matrix=$(echo "$changed_folders" | jq -R -s -c 'split("\n") | map(select(length > 0))')
echo "matrix=$matrix" >> $GITHUB_OUTPUT
lint:
name: Lint
name: ${{ matrix.folder == '.' && '🌊 Ocean Core' || format('🚢 {0}', matrix.folder) }}
needs: detect-changes
runs-on: ubuntu-latest
strategy:
matrix:
folder: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Checkout Repo
uses: actions/checkout@v4
- name: Install Dependencies
- name: Install dependencies
working-directory: ${{ matrix.folder != '.' && format('integrations/{0}', matrix.folder) || '.' }}
run: |
make install/all
make install
- name: Lint
working-directory: ${{ matrix.folder != '.' && format('integrations/{0}', matrix.folder) || '.' }}
run: |
make lint/all
make lint
20 changes: 1 addition & 19 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ define deactivate_virtualenv
fi
endef

.SILENT: install install/all lint lint/integrations lint/all build run new test clean
.SILENT: install install/all lint build run new test clean


# Install dependencies
Expand Down Expand Up @@ -69,24 +69,6 @@ lint:
$(ACTIVATE) && \
$(call run_checks,.)

lint/integrations:
$(ACTIVATE) && \
exit_code=0; \
for dir in $(wildcard $(CURDIR)/integrations/*); do \
count=$$(find $$dir -type f -name '*.py' -not -path "*/venv/*" | wc -l); \
if [ $$count -ne 0 ]; then \
echo "Linting $$dir"; \
cd $$dir; \
$(MAKE) lint || exit_code=$$?; \
cd ../..; \
fi; \
done; \
if [ $$exit_code -ne 0 ]; then \
exit 1; \
fi

lint/all: lint lint/integrations

# Development commands
build:
$(ACTIVATE) && poetry build
Expand Down

0 comments on commit 9cbf86d

Please sign in to comment.