apache / incubator-hugegraph-ai

The integration of HugeGraph with artificial intelligence
https://hugegraph.apache.org
Apache License 2.0
44 stars 21 forks source link

[Question] A question about introducing black for code format #46

Open ChenZiHong-Gavin opened 1 month ago

ChenZiHong-Gavin commented 1 month ago

Problem Type (问题类型)

configs (配置项 / 文档相关)

Before submit

Environment (环境信息)

Your Question (问题描述)

I am thinking about introducing BLACK for code check but still confused about the process.

I also noticed that there's a style script already using BLACK, refer: https://github.com/apache/incubator-hugegraph-ai/blob/main/style/code_format_and_analysis.sh

This script is used in the pylint.yml workflow, but only the pylint functionality is enabled. Should I create a new workflow for using BLACK, following the structure of pylint.yml, or should I modify pylint.yml to make it capable of performing code formatting tasks as well?

Vertex/Edge example (问题点 / 边数据举例)

No response

Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

No response

dosubot[bot] commented 1 month ago

@ChenZiHong-Gavin 你好! 我是Dosu,一个可以帮助你解决错误、回答问题并成为贡献者的机器人。我将在等待人类维护者的过程中协助你。

You should modify pylint.yml to include code formatting tasks as well. The provided script style/code_format_and_analysis.sh already supports running both BLACK and PYLINT together or separately based on the provided command-line arguments. This indicates that the workflow can be combined.

Here is an example of how you might modify pylint.yml to include BLACK:

name: "Lint and Format"

on:
  push:
    branches:
      - 'release-*'
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9", "3.10"]
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install black pylint pytest
        pip install -r ./hugegraph-llm/requirements.txt 
        pip install -r ./hugegraph-llm/llm_api/requirements.txt
        pip install -r ./hugegraph-python-client/requirements.txt
    - name: Run code format and analysis
      run: |
        chmod +x style/code_format_and_analysis.sh
        ./style/code_format_and_analysis.sh -b -p

This workflow will run both BLACK and PYLINT as specified in the style/code_format_and_analysis.sh script [1][2].

#### Details **About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

ChenZiHong-Gavin commented 1 month ago

@ChenZiHong-Gavin 你好! 我是Dosu,一个可以帮助你解决错误、回答问题并成为贡献者的机器人。我将在等待人类维护者的过程中协助你。

You should modify pylint.yml to include code formatting tasks as well. The provided script style/code_format_and_analysis.sh already supports running both BLACK and PYLINT together or separately based on the provided command-line arguments. This indicates that the workflow can be combined.

Here is an example of how you might modify pylint.yml to include BLACK:

name: "Lint and Format"

on:
  push:
    branches:
      - 'release-*'
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9", "3.10"]
    steps:
    - uses: actions/checkout@v4
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install black pylint pytest
        pip install -r ./hugegraph-llm/requirements.txt 
        pip install -r ./hugegraph-llm/llm_api/requirements.txt
        pip install -r ./hugegraph-python-client/requirements.txt
    - name: Run code format and analysis
      run: |
        chmod +x style/code_format_and_analysis.sh
        ./style/code_format_and_analysis.sh -b -p

This workflow will run both BLACK and PYLINT as specified in the style/code_format_and_analysis.sh script [1][2].

Details

About Dosu This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

it makes sense

dosubot[bot] commented 1 month ago

Great! It sounds like you're on the right track. If you need any further assistance or have more questions, feel free to ask. Happy coding!

#### Details **About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

ChenZiHong-Gavin commented 1 month ago

Also, BLACK provides GitHub Actions integration(https://black.readthedocs.io/en/stable/integrations/github_actions.html), and i believe it's better because its flexibility

imbajin commented 1 month ago

@dosu we used the action(black CI) but it was banned by Apache's action rules, can you find examples of other Apache projects(in GitHub) using black as a code CI check or how to correctly reference black?

dosubot[bot] commented 1 month ago

@ChenZiHong-Gavin, integrating BLACK into your CI workflow while adhering to Apache's action rules can be challenging. Here is an example of how BLACK is integrated within the constraints of Apache's action rules:

name: "Black Code Formatter"

on:
  push:
    branches:
      - 'release-*'
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: psf/black@3702ba224ecffbcec30af640c149f231d90aebdb
        with:
          options: "--check --diff --line-length 100"
          src: "hugegraph-llm/src hugegraph-python-client/src"

Additionally, the incubator-hugegraph-ai repository includes a script for running BLACK and PYLINT checks:

#! /bin/bash

BLACK=false
PYLINT=false
ROOT_DIR=$(pwd)
echo ${ROOT_DIR}
# Parse command line arguments
while getopts ":bp" opt; do
  case ${opt} in
    b )
      BLACK=true
      ;;
    p )
      PYLINT=true
      ;;
    \? )
      echo "Usage: cmd [-b] [-p]"
      ;;
  esac
done

# If no arguments were provided, run both BLACK and PYLINT
if [ "$BLACK" = false ] && [ "$PYLINT" = false ]; then
  BLACK=true
  PYLINT=true
fi

# Run BLACK if -b is specified
if [ "$BLACK" = true ] ; then
  echo "[black] Start to check code style and auto format"
  black --line-length=100 ${ROOT_DIR}
fi

# Run PYLINT if -p is specified
if [ "$PYLINT" = true ] ; then
  echo "[pylint] Start code analysis and check,
  we need to manually fix all the warnings mentioned below before commit! "
  export PYTHONPATH=${ROOT_DIR}/hugegraph-llm/src:${ROOT_DIR}/hugegraph-python-client/src
  pylint --rcfile=${ROOT_DIR}/style/pylint.conf ${ROOT_DIR}/hugegraph-llm
  pylint --rcfile=${ROOT_DIR}/style/pylint.conf --disable C0103 ${ROOT_DIR}/hugegraph-python-client
fi

This script allows for flexible integration of BLACK and PYLINT checks, either individually or together, based on command-line arguments [1][2].

If you need further assistance or have more questions, feel free to ask. Happy coding!

To continue talking to Dosu, mention @dosu.