name: General Linting env: OPENBB_ENABLE_QUICK_EXIT: true OPENBB_LOG_COLLECT: false OPENBB_USE_PROMPT_TOOLKIT: false OPENBB_FILE_OVERWRITE: true PIP_DEFAULT_TIMEOUT: 100 on: pull_request: types: [opened, synchronize, edited] push: branches: - "feature/*" - "hotfix/*" - "release/*" merge_group: types: [checks_requested] # Cancel previous runs that are not yet completed. concurrency: group: ${{ github.event_name }}-${{ github.repository }}-${{ github.ref }} cancel-in-progress: true jobs: code-linting: name: General Code Linting runs-on: ubuntu-latest steps: - name: Checkout Code uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # actions/checkout v3.0.2 with: ref: ${{ github.head_ref }} fetch-depth: 20 - name: Fetch base branch run: git fetch --no-tags --depth=20 origin ${{ github.base_ref }} - name: Setup Python 3.9 uses: actions/setup-python@v4 with: python-version: "3.9" architecture: x64 - name: Get changed files in openbb_terminal and openbb_platform for PR if: github.event_name == 'pull_request' run: | # "Checking PR diff" echo "terminal_files=$(git diff --name-only origin/${{ github.base_ref }}...${{ github.head_ref }} | grep 'openbb_terminal/.*\.py$' | xargs)" >> $GITHUB_ENV echo $terminal_files echo "platform_files=$(git diff --name-only origin/${{ github.base_ref }}...${{ github.head_ref }} | grep 'openbb_platform/.*\.py$' | grep -v 'openbb_platform/openbb/package' | grep -v 'integration' | grep -v 'tests' | xargs)" >> $GITHUB_ENV echo $platform_files - uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-linting-${{ hashFiles('**/poetry.lock') }} restore-keys: ${{ runner.os }}-linting-${{ hashFiles('**/poetry.lock') }} - run: | pip install bandit black codespell==2.2.5 mypy==1.5.1 pylint==2.17.0 ruff==0.0.285 pip install types-pytz types-requests types-termcolor types-tabulate types-PyYAML types-python-dateutil types-setuptools types-six - run: bandit -x ./tests -r . || true - run: black --diff --check . - run: codespell --ignore-words=.codespell.ignore --skip="$(tr '\n' ',' < .codespell.skip | sed 's/,$//')" --quiet-level=2 - run: ruff . - run: | # Run linters for openbb_terminal if [ -n "${{ env.terminal_files }}" ]; then mypy --ignore-missing-imports ${{ env.terminal_files }} pylint terminal.py ${{ env.terminal_files }} else echo "No Python files changed in openbb_terminal" fi - run: | # Run linters for openbb_platform if [ -n "${{ env.platform_files }}" ]; then # Add mypy to this part of the linting workflow once we're ready pylint ${{ env.platform_files }} else echo "No Python files changed in openbb_platform" fi markdown-link-check: name: Markdown Linting runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 name: Check out the code - name: Lint Code Base uses: docker://avtodev/markdown-lint:v1 with: args: "./*.md ./changelogs/*.md ./openbb_terminal/**/*.md ./discordbot/**/*.md" json-yaml-validate: name: JSON Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: json-yaml-validate id: json-yaml-validate uses: GrantBirki/json-yaml-validate@v2.0.0 with: exclude_file: json_validate_exclude.txt