From b3a97a9720aef4a183aa971bcc26db1d0f1077b4 Mon Sep 17 00:00:00 2001 From: Bastien Gautier Date: Fri, 30 Jun 2023 07:56:12 +0000 Subject: [PATCH] Add github action Add github action Add github action Add github action Add github action Add github action Add github action Add github action Add github action Add github action Add github action --- .github/workflows/control.yaml | 220 +++++++++++++++++++++++++++++++++ .yamllint | 38 ++++++ 2 files changed, 258 insertions(+) create mode 100644 .github/workflows/control.yaml create mode 100644 .yamllint diff --git a/.github/workflows/control.yaml b/.github/workflows/control.yaml new file mode 100644 index 0000000..1dd9ffd --- /dev/null +++ b/.github/workflows/control.yaml @@ -0,0 +1,220 @@ +--- +name: Code Quality & Build + +on: # yamllint disable-line rule:truthy + workflow_dispatch: + push: + branches: + - development + - main + - master + paths: + - "src/**" + - "tests/**" + +env: + PYTHON_VERSION: "3.10" + ARTIFACT_NAME: "mypkg" + PACKAGE_NAME: "mypkg" + +jobs: + check: + name: Check Python Code + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3 + + - name: Setup Python ${{ env.PYTHON_VERSION }} Environment + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies with Pip + run: | + python${{ env.PYTHON_VERSION }} -m venv .venv + source .venv/bin/activate + .venv/bin/pip install --upgrade pip + .venv/bin/pip install -r requirements.txt + .venv/bin/pip install -r requirements-dev.txt + + - name: Initialize environment variables + run: | + CURRENT_PWD=$(pwd) + PYTHONPATH="$CURRENT_PWD/src" + echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV + WORKINGPATH="$CURRENT_PWD" + echo "WORKINGPATH=$WORKINGPATH" >> $GITHUB_ENV + + - name: Pyright + id: pyright + run: | + . $WORKINGPATH/.venv/bin/activate + pyright $PYTHONPATH -p $WORKINGPATH/tools/pyrightconfig.json + + - name: Pylint + id: pylint + if: ${{ always() }} + run: | + . $WORKINGPATH/.venv/bin/activate + pylint $PYTHONPATH/${{ env.PACKAGE_NAME }} --score=false + + - name: Flake8 + id: flake8 + if: ${{ always() }} + run: | + . $WORKINGPATH/.venv/bin/activate + flake8 $PYTHONPATH/${{ env.PACKAGE_NAME }} + + - name: Mypy + id: mypy + if: ${{ always() }} + run: | + . $WORKINGPATH/.venv/bin/activate + mypy $PYTHONPATH/${{ env.PACKAGE_NAME }} + + - name: Pylama + id: pylama + if: ${{ always() }} + run: | + . $WORKINGPATH/.venv/bin/activate + pylama $PYTHONPATH/${{ env.PACKAGE_NAME }} + + - name: Yapf + id: yapf + if: ${{ always() }} + run: | + . $WORKINGPATH/.venv/bin/activate + yapf --diff $PYTHONPATH/${{ env.PACKAGE_NAME }} --recursive + + - name: Linter Results + if: | + (success() || failure()) + && (steps.flake8.outcome == 'failure' + || steps.mypy.outcome == 'failure' + || steps.pylama.outcome == 'failure' + || steps.pylint.outcome == 'failure' + || steps.pyright.outcome == 'failure' + || steps.yapf.outcome == 'failure') + run: | + echo "Pyright: ${{ steps.pyright.outcome }}" + echo "Pylint: ${{ steps.pylint.outcome }}" + echo "Pylint: ${{ steps.pylama.outcome }}" + echo "Flake8: ${{ steps.flake8.outcome }}" + echo "Mypy: ${{ steps.mypy.outcome }}" + echo "Yapf: ${{ steps.yapf.outcome }}" + echo "On failure, please check the previous steps to identify the linter issue(s)." + exit 1 + + unit_test: + name: Unit Tests Python + runs-on: ubuntu-latest + needs: [check] + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3 + + - name: Setup Python ${{ env.PYTHON_VERSION }} Environment + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies with Pip + run: | + python${{ env.PYTHON_VERSION }} -m venv .venv + source .venv/bin/activate + .venv/bin/pip install --upgrade pip + .venv/bin/pip install -r requirements.txt + .venv/bin/pip install -r requirements-test.txt + + - name: Initialize environment variables + run: | + CURRENT_PWD=$(pwd) + PYTHONPATH="$CURRENT_PWD/src" + echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV + WORKINGPATH="$CURRENT_PWD" + echo "WORKINGPATH=$WORKINGPATH" >> $GITHUB_ENV + + - name: Pytest + id: pytest + run: | + . $WORKINGPATH/.venv/bin/activate + cd $WORKINGPATH + pytest tests -vv -s -n auto + + - name: Coverage Analysis + id: coverage + run: | + . $WORKINGPATH/.venv/bin/activate + cd $WORKINGPATH + coverage run -m pytest tests -q --disable-warnings + + - name: Coverage Report + id: coverage_report + run: | + . $WORKINGPATH/.venv/bin/activate + cd $WORKINGPATH + coverage report -m + + configuration: + name: Check User Configuration + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3 + + - name: Setup Python ${{ env.PYTHON_VERSION }} Environment + uses: actions/setup-python@v4 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Initialize environment variables + run: | + CURRENT_PWD=$(pwd) + PYTHONPATH="$CURRENT_PWD/src" + echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV + WORKINGPATH="$CURRENT_PWD" + echo "WORKINGPATH=$WORKINGPATH" >> $GITHUB_ENV + + - name: Install dependencies with Pip + run: | + pip install yamllint + + - name: "YAML Lint" + id: yaml_lint + run: | + yamllint $PYTHONPATH/${{ env.PACKAGE_NAME }} + + - name: Configuration Results + if: (success() || failure()) && (steps.yaml_lint.outcome == 'failure') + run: | + echo "YAML Lint: ${{ steps.yaml_lint.outcome }}" + echo "On failure, please check the previous steps to identify the linter issue(s)." + exit 1 + + build: + name: Build + needs: [check, configuration, unit_test] + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/master' + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3 + + - name: Initialize environment variables + run: | + CURRENT_PWD=$(pwd) + WORKINGPATH="$CURRENT_PWD" + echo "WORKINGPATH=$WORKINGPATH" >> $GITHUB_ENV + + - uses: actions/upload-artifact@v3 + with: + name: ${{ env.ARTIFACT_NAME }} + path: | + ${{ env.WORKINGPATH }} + !${{ env.WORKINGPATH }}/.devcontainer + !${{ env.WORKINGPATH }}/.git + !${{ env.WORKINGPATH }}/.github + !${{ env.WORKINGPATH }}/.vscode + !${{ env.WORKINGPATH }}/tests + !${{ env.WORKINGPATH }}/tools diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..23d72b5 --- /dev/null +++ b/.yamllint @@ -0,0 +1,38 @@ +--- +yaml-files: + - "*.yaml" + - "*.yml" + - ".yamllint" + +rules: + anchors: enable + braces: enable + brackets: enable + colons: enable + commas: enable + comments-indentation: + level: warning + document-end: disable + document-start: + level: warning + empty-lines: enable + empty-values: disable + float-values: disable + hyphens: enable + indentation: enable + key-duplicates: enable + key-ordering: disable + new-line-at-end-of-file: enable + new-lines: enable + octal-values: disable + quoted-strings: disable + trailing-spaces: enable + truthy: + level: warning + line-length: + max: 150 + allow-non-breakable-words: true + allow-non-breakable-inline-mappings: false + comments: + level: warning + min-spaces-from-content: 1