diff --git a/.github/workflows/go.yaml b/.github/workflows/go.yaml new file mode 100644 index 0000000..38d21f7 --- /dev/null +++ b/.github/workflows/go.yaml @@ -0,0 +1,41 @@ +name: go + +on: + pull_request: + branches: [ '*' ] + paths: + - 'api/**' + - 'cmd/**' + - 'hack/templates/**' + - 'hack/*.go' + - 'internal/**' + - 'go.mod' + - 'go.sum' + push: + branches: + - "main" + +jobs: + golangci-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: ./go.mod + cache: false + - uses: golangci/golangci-lint-action@v6 + with: + version: latest + skip-cache: true + + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version-file: ./go.mod + cache: false + - run: | + make test diff --git a/.github/workflows/linters-tests.yaml b/.github/workflows/linters.yaml similarity index 55% rename from .github/workflows/linters-tests.yaml rename to .github/workflows/linters.yaml index 90d297f..4bb0452 100644 --- a/.github/workflows/linters-tests.yaml +++ b/.github/workflows/linters.yaml @@ -1,4 +1,4 @@ -name: linters-tests +name: linters on: pull_request: @@ -19,19 +19,6 @@ jobs: configFile: .commitlintrc.mjs token: ${{ secrets.GITHUB_TOKEN }} - golangci-lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version-file: ./go.mod - cache: false - - uses: golangci/golangci-lint-action@v6 - with: - version: latest - skip-cache: true - shell-linters: runs-on: ubuntu-latest steps: @@ -46,14 +33,3 @@ jobs: with: dockerfile: Dockerfile recursive: true - - tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version-file: ./go.mod - cache: false - - run: | - make test diff --git a/.github/workflows/python.yaml b/.github/workflows/python.yaml new file mode 100644 index 0000000..689da9c --- /dev/null +++ b/.github/workflows/python.yaml @@ -0,0 +1,34 @@ +name: python + +on: + pull_request: + branches: [ '*' ] + paths: + - 'hack/**' + - 'docs/**' + - 'poetry.lock' + - 'pyproject.toml' + push: + branches: + - "main" + +jobs: + linters: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: fregante/setup-git-user@v2 + - uses: actions/setup-python@v5 + with: + python-version: '3.x' + check-latest: true + - run: | + pip install poetry + - run: | + poetry install + - run: | + poetry run black --check . + poetry run isort --check . + poetry run mypy . diff --git a/hack/report.py b/hack/report.py index f3627d9..6d8148a 100644 --- a/hack/report.py +++ b/hack/report.py @@ -1,17 +1,18 @@ -import sys import argparse -import xml.dom.minidom as minidom +import sys import traceback +import xml.dom.minidom as minidom FAILED = ":x: Failed" PASSED = ":white_check_mark: Passed" + class Table: def __init__(self, headers: list[str]) -> None: self.headers = headers self.separator = ["---"] * len(headers) self.cols = len(headers) - self.rows = [] + self.rows: list[list[str]] = [] def add(self, row: list[str]) -> None: assert self.cols == len(row) @@ -19,10 +20,12 @@ def add(self, row: list[str]) -> None: class Report: - def __init__(self, - time: str, timestamp: str, - table: Table, - ) -> None: + def __init__( + self, + time: str, + timestamp: str, + table: Table, + ) -> None: self.time = time self.timestamp = timestamp self.table = table @@ -32,32 +35,37 @@ def __init__(self, def print(self) -> None: print(f'## E2E report {":white_check_mark:" if self.ok else ":x:"}') - print(f'Started at `{self.timestamp}` took `{self.time}`') - print('') - print(f'![](https://img.shields.io/badge/tests-{self.passes}_passed%2C_{self.failures}_failed-{"green" if self.ok else "red"})') - print('') - print('|'.join(self.table.headers)) - print('|'.join(self.table.separator)) - for row in sorted(self.table.rows, key=lambda x: x[self.table.cols-1], reverse=True): - print('|'.join(row)) + print(f"Started at `{self.timestamp}` took `{self.time}`") + print("") + print( + f'![](https://img.shields.io/badge/tests-{self.passes}_passed%2C_{self.failures}_failed-{"green" if self.ok else "red"})' + ) + print("") + print("|".join(self.table.headers)) + print("|".join(self.table.separator)) + for row in sorted( + self.table.rows, key=lambda x: x[self.table.cols - 1], reverse=True + ): + print("|".join(row)) + def generate_markdown(report: str) -> None: dom = minidom.parse(report) table = Table(["Test Suite", "Test Case", "Time (s)", "Status"]) - testsuiteList = dom.getElementsByTagName('testsuite') + testsuiteList = dom.getElementsByTagName("testsuite") for testsuite in testsuiteList: testsuite_name = testsuite.getAttribute("name") - testcases = testsuite.getElementsByTagName('testcase') + testcases = testsuite.getElementsByTagName("testcase") for testcase in testcases: testcase_name = testcase.getAttribute("name") time = testcase.getAttribute("time") status = FAILED if testcase.getElementsByTagName("failure") else PASSED - table.add(row=[testsuite_name, testcase_name, f'`{time}`', status]) + table.add(row=[testsuite_name, testcase_name, f"`{time}`", status]) - testsuites = dom.getElementsByTagName('testsuites') + testsuites = dom.getElementsByTagName("testsuites") Report( time=testsuites[0].getAttribute("time"), @@ -89,8 +97,8 @@ def run(args=sys.argv): try: generate_markdown(args.file) except Exception as exc: - print('## Report generation failed :skull:') - print('') - print('```log') - print(f'{traceback.print_exception(exc)}') - print('```') + print("## Report generation failed :skull:") + print("") + print("```log") + print(f"{traceback.print_exception(exc)}") + print("```")