From 83557f6c192c1ee87217b0b93c5bddc8611a9e1a Mon Sep 17 00:00:00 2001 From: Tullio Sebastiani Date: Fri, 3 May 2024 10:18:16 +0200 Subject: [PATCH] added github action --- .github/workflows/test.yaml | 103 ++++++++++++++++++++++++++++++++++++ app.py | 36 ++++++++----- 2 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..2b91fe4 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,103 @@ +name: Build +on: + push: + branches: + - main + tags: + - '*' + pull_request: +permissions: + # https://github.community/t/permissions-nesecary-to-comment-on-a-pr/179047/5 + pull-requests: write + contents: write +jobs: + test: + name: Test + strategy: + matrix: + #python-version: [ '3.9', '3.10', 'pypy3.9' ] + python-version: [ '3.9' ] + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v3 + - name: Update version number + if: startsWith(github.ref, 'refs/tags/') + run: | + sed -i -e "s/0.0.0/${GITHUB_REF##*/}/" pyproject.toml + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Check isort, black, and flake8 + run: | + pip install black flake8 isort + isort --profile black . + black --line-length 79 . + flake8 . + curl -sSL https://install.python-poetry.org | python3 - + - name: Install project dependencies + run: poetry install --no-interaction + - name: Run tests with coverage + env: + TEST_PLAN_PATH: tests/functional/testdata/plan.yaml + run: | + poetry run python3 -m coverage run -a -m pytest + poetry run python3 -m coverage html + poetry run python3 -m coverage json + + - name: Publish coverage report to job summary + if: ${{ matrix.python-version == '3.9'}} + run: | + poetry run html2text --ignore-images --ignore-links -b 0 htmlcov/index.html >> $GITHUB_STEP_SUMMARY + - name: Upload json coverage + uses: actions/upload-artifact@v3 + with: + name: coverage.json + path: coverage.json + if-no-files-found: error + - name: Upload dist artifact + uses: actions/upload-artifact@v3 + with: + name: dist + path: dist + if-no-files-found: error + - name: Upload coverage HTML artifact + uses: actions/upload-artifact@v3 + with: + name: coverage + path: htmlcov + if-no-files-found: error + +# publish: +# name: Publish Library on PyPi +# runs-on: ubuntu-latest +# needs: +# - build +# if: startsWith(github.ref, 'refs/tags/') +# steps: +# - name: Check out code +# uses: actions/checkout@v3 +# - name: Download artifacts +# uses: actions/download-artifact@v3 +# with: +# name: dist +# path: dist +# - name: Install twine +# run: pip install -U twine +# - name: Publish +# env: +# TWINE_USERNAME: __token__ +# TWINE_PASSWORD: ${{secrets.PYPI_TOKEN}} +# TWINE_NON_INTERACTIVE: true +# run: twine upload dist/* +# build_krkn: +# name: Build Krkn Image +# runs-on: ubuntu-latest +# steps: +# - name: Rebuild krkn +# if: github.ref == 'refs/heads/main' && github.event_name == 'push' +# uses: redhat-chaos/actions/krkn@main +# with: +# QUAY_USER: ${{ secrets.RH_USERNAME }} +# QUAY_TOKEN: ${{ secrets.RH_PASSWORD }} \ No newline at end of file diff --git a/app.py b/app.py index 3dc6745..d66b30a 100644 --- a/app.py +++ b/app.py @@ -11,32 +11,36 @@ app = Flask(__name__) logging.error("*************************INSTANCE") -method_steps: dict[(str, str), list[dict[any]]] = dict[(str, str), list[dict[any]]]() +method_steps: dict[(str, str), list[dict[any]]] = dict[ + (str, str), list[dict[any]] +]() time_keeper = TimeKeeper() -def restart_time(): - start_time = time.time() - - stats: list[Resource] = list[Resource]() test_plan_path = os.environ.get("TEST_PLAN_PATH") stats_endpoint = ( - os.environ.get("STATS_ROUTE") if os.environ.get("STATS_ROUTE") else "/stats" + os.environ.get("STATS_ROUTE") + if os.environ.get("STATS_ROUTE") + else "/stats" ) def request_handler(params: str = None): - path = request.path if not params else request.path.replace(f"/{params}", "") + path = ( + request.path if not params else request.path.replace(f"/{params}", "") + ) steps = method_steps[(request.method, path)] for request_step in steps: if validate_step(request_step): return Response( - f"[KRKN ERROR] invalid plan step for route {path}, method {request.method}. " - f'The following parameters are missing : "{validate_step(request_step)}". Please ' - f"refer to the documentation on https://github.com/krkn-chaos/krkn-service-hijacking", + f"[KRKN ERROR] invalid plan step for " + f"route {path}, method {request.method}. " + f'The following parameters are missing : "{validate_step(request_step)}". ' + f"Please refer to the documentation on " + f"https://github.com/krkn-chaos/krkn-service-hijacking", status=500, ) @@ -64,7 +68,9 @@ def request_handler(params: str = None): request_full_path=request.full_path, ) return Response( - steps[-1]["payload"], steps[-1]["status"], mimetype=steps[-1]["mime_type"] + steps[-1]["payload"], + steps[-1]["status"], + mimetype=steps[-1]["mime_type"], ) @@ -115,9 +121,13 @@ def __add_stat_row( for step in test_plan: for i, method in enumerate(step["steps"]): - app.add_url_rule(step["resource"], view_func=request_handler, methods=[method]) app.add_url_rule( - f'{step["resource"]}/', view_func=request_handler, methods=[method] + step["resource"], view_func=request_handler, methods=[method] + ) + app.add_url_rule( + f'{step["resource"]}/', + view_func=request_handler, + methods=[method], ) method_steps[(method, step["resource"])] = step["steps"][method] stats.append(Resource(step["resource"], method))