diff --git a/.github/workflows/actions/prepare/action.yml b/.github/workflows/actions/prepare/action.yml index 46586e15..445a677c 100644 --- a/.github/workflows/actions/prepare/action.yml +++ b/.github/workflows/actions/prepare/action.yml @@ -1,6 +1,11 @@ name: 'Prepare environment' description: 'Prepare environment' +inputs: + python-version: + description: 'Python version to use' + required: true + runs: using: "composite" steps: @@ -10,9 +15,9 @@ runs: - uses: actions/setup-python@v5 with: - python-version-file: '.python-version' + python-version: ${{ inputs.python-version }} cache: 'poetry' - - name: Install dependencies - run: poetry install --no-interaction --no-ansi --no-root --sync + - name: Install dependencies and package + run: poetry install --no-interaction --no-ansi shell: bash diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml new file mode 100644 index 00000000..7ed253a2 --- /dev/null +++ b/.github/workflows/build-wheels.yml @@ -0,0 +1,42 @@ +name: Build Wheels + +on: + push: + tags: + - 'v*' + workflow_dispatch: + +jobs: + build_wheels: + name: Build wheels on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + python-version: ['3.10', '3.11', '3.12'] + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install cibuildwheel + run: python -m pip install cibuildwheel + + - name: Build wheels + run: python -m cibuildwheel --output-dir wheelhouse + env: + CIBW_BUILD: cp3{10,11,12}-* + CIBW_SKIP: "*-musllinux*" + # Temporarily disable tests during wheel building + # CIBW_TEST_REQUIRES: pytest + # CIBW_TEST_COMMAND: "pip install {wheel} && pytest {project}/tests" + CIBW_BUILD_VERBOSITY: 1 + + - uses: actions/upload-artifact@v4 + with: + name: wheels-${{ matrix.os }}-${{ matrix.python-version }} + path: ./wheelhouse/*.whl diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4aa00ff9..204a7314 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,11 +18,12 @@ jobs: timeout-minutes: 30 steps: - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/prepare - + with: + python-version: "3.11" - name: Check files using the ruff formatter run: poetry run ruff --fix --unsafe-fixes --preview . + shell: bash mypy: name: Static Type Checking @@ -30,11 +31,12 @@ jobs: timeout-minutes: 30 steps: - uses: actions/checkout@v4 - - uses: ./.github/workflows/actions/prepare - + with: + python-version: "3.11" - name: Mypy run: poetry run mypy . + shell: bash test: name: Run unit test on ${{ matrix.os }} with Python ${{ matrix.python-version }} @@ -42,24 +44,33 @@ jobs: strategy: fail-fast: false matrix: - os: - - [ self-hosted, small ] - - windows-latest - - macos-latest - python-version: [ "3.10", "3.11", "3.12" ] + include: + # Self-hosted runner + - os: [ self-hosted, small ] + python-version: "3.10" + - os: [ self-hosted, small ] + python-version: "3.11" + - os: [ self-hosted, small ] + python-version: "3.12" + + # Windows + - os: windows-latest + python-version: "3.10.11" + - os: windows-latest + python-version: "3.11" + - os: windows-latest + python-version: "3.12" + + # macOS (arm64) + - os: macos-14 + python-version: "3.11" + - os: macos-14 + python-version: "3.12" steps: - uses: actions/checkout@v4 - - - name: Install Poetry - run: pipx install poetry==$(head -n 1 .poetry-version) - - - uses: actions/setup-python@v5 + - uses: ./.github/workflows/actions/prepare with: python-version: ${{ matrix.python-version }} - cache: 'poetry' - - - name: Install dependencies - run: poetry install --no-interaction --no-ansi --no-root --sync - - - name: Run unittests - run: python tests/testing.py + - name: Run Tests + run: poetry run python tests/testing.py + shell: bash diff --git a/pyproject.toml b/pyproject.toml index 6e9bc467..e224c19d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -149,3 +149,10 @@ exclude = [ "tests/sql", "venv", ] + +[tool.cibuildwheel] +test-command = "pytest {project}/tests" +test-extras = ["test"] +test-skip = ["*universal2:arm64"] +# Временно пропускаем сборку для PyPy +skip = ["pp*"] diff --git a/tests/projects/go/coffee_machine/stage1/tests.py b/tests/projects/go/coffee_machine/stage1/tests.py index 1113c3d1..98a5d79b 100644 --- a/tests/projects/go/coffee_machine/stage1/tests.py +++ b/tests/projects/go/coffee_machine/stage1/tests.py @@ -3,6 +3,7 @@ from hstest.check_result import CheckResult from hstest.stage_test import StageTest from hstest.test_case import TestCase +from typing import List OUTPUT = """ Starting to make a coffee diff --git a/tests/projects/go/coffee_machine/stage1_ce/tests.py b/tests/projects/go/coffee_machine/stage1_ce/tests.py index 436a5500..37cf49e8 100644 --- a/tests/projects/go/coffee_machine/stage1_ce/tests.py +++ b/tests/projects/go/coffee_machine/stage1_ce/tests.py @@ -1,7 +1,9 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult import os +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage1_ex/tests.py b/tests/projects/go/coffee_machine/stage1_ex/tests.py index 7d81161d..a1afac92 100644 --- a/tests/projects/go/coffee_machine/stage1_ex/tests.py +++ b/tests/projects/go/coffee_machine/stage1_ex/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage1_wa/tests.py b/tests/projects/go/coffee_machine/stage1_wa/tests.py index f2585377..cc4972a9 100644 --- a/tests/projects/go/coffee_machine/stage1_wa/tests.py +++ b/tests/projects/go/coffee_machine/stage1_wa/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage2/tests.py b/tests/projects/go/coffee_machine/stage2/tests.py index e2878fd7..33564d63 100644 --- a/tests/projects/go/coffee_machine/stage2/tests.py +++ b/tests/projects/go/coffee_machine/stage2/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage3/tests.py b/tests/projects/go/coffee_machine/stage3/tests.py index 3601e4c3..9dd33dd0 100644 --- a/tests/projects/go/coffee_machine/stage3/tests.py +++ b/tests/projects/go/coffee_machine/stage3/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage4/tests.py b/tests/projects/go/coffee_machine/stage4/tests.py index 213047e6..5b901da2 100644 --- a/tests/projects/go/coffee_machine/stage4/tests.py +++ b/tests/projects/go/coffee_machine/stage4/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/go/coffee_machine/stage5/tests.py b/tests/projects/go/coffee_machine/stage5/tests.py index a36bc59a..37c309a9 100644 --- a/tests/projects/go/coffee_machine/stage5/tests.py +++ b/tests/projects/go/coffee_machine/stage5/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage1/tests.py b/tests/projects/javascript/coffee_machine/stage1/tests.py index fea90ed8..947ca431 100644 --- a/tests/projects/javascript/coffee_machine/stage1/tests.py +++ b/tests/projects/javascript/coffee_machine/stage1/tests.py @@ -1,5 +1,8 @@ +from typing import List + from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage1_ce/tests.py b/tests/projects/javascript/coffee_machine/stage1_ce/tests.py index b455f2dd..4c6381d4 100644 --- a/tests/projects/javascript/coffee_machine/stage1_ce/tests.py +++ b/tests/projects/javascript/coffee_machine/stage1_ce/tests.py @@ -1,6 +1,9 @@ +from typing import List + from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage1_ex/tests.py b/tests/projects/javascript/coffee_machine/stage1_ex/tests.py index 08c9cbe1..7e09982d 100644 --- a/tests/projects/javascript/coffee_machine/stage1_ex/tests.py +++ b/tests/projects/javascript/coffee_machine/stage1_ex/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage1_wa/tests.py b/tests/projects/javascript/coffee_machine/stage1_wa/tests.py index f2585377..cc4972a9 100644 --- a/tests/projects/javascript/coffee_machine/stage1_wa/tests.py +++ b/tests/projects/javascript/coffee_machine/stage1_wa/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage2/tests.py b/tests/projects/javascript/coffee_machine/stage2/tests.py index e2878fd7..33564d63 100644 --- a/tests/projects/javascript/coffee_machine/stage2/tests.py +++ b/tests/projects/javascript/coffee_machine/stage2/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage3/tests.py b/tests/projects/javascript/coffee_machine/stage3/tests.py index 3601e4c3..9dd33dd0 100644 --- a/tests/projects/javascript/coffee_machine/stage3/tests.py +++ b/tests/projects/javascript/coffee_machine/stage3/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage4/tests.py b/tests/projects/javascript/coffee_machine/stage4/tests.py index 213047e6..5b901da2 100644 --- a/tests/projects/javascript/coffee_machine/stage4/tests.py +++ b/tests/projects/javascript/coffee_machine/stage4/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/coffee_machine/stage5/tests.py b/tests/projects/javascript/coffee_machine/stage5/tests.py index a36bc59a..37c309a9 100644 --- a/tests/projects/javascript/coffee_machine/stage5/tests.py +++ b/tests/projects/javascript/coffee_machine/stage5/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/simple_chatty_bot/stage1/tests.py b/tests/projects/javascript/simple_chatty_bot/stage1/tests.py index da7967c9..ee283359 100644 --- a/tests/projects/javascript/simple_chatty_bot/stage1/tests.py +++ b/tests/projects/javascript/simple_chatty_bot/stage1/tests.py @@ -2,6 +2,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/simple_chatty_bot/stage2/tests.py b/tests/projects/javascript/simple_chatty_bot/stage2/tests.py index 82562c96..c39604dc 100644 --- a/tests/projects/javascript/simple_chatty_bot/stage2/tests.py +++ b/tests/projects/javascript/simple_chatty_bot/stage2/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/simple_chatty_bot/stage3/tests.py b/tests/projects/javascript/simple_chatty_bot/stage3/tests.py index ea267bb5..e47e845f 100644 --- a/tests/projects/javascript/simple_chatty_bot/stage3/tests.py +++ b/tests/projects/javascript/simple_chatty_bot/stage3/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/simple_chatty_bot/stage4/tests.py b/tests/projects/javascript/simple_chatty_bot/stage4/tests.py index 462b9a64..dd871809 100644 --- a/tests/projects/javascript/simple_chatty_bot/stage4/tests.py +++ b/tests/projects/javascript/simple_chatty_bot/stage4/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/javascript/simple_chatty_bot/stage5/tests.py b/tests/projects/javascript/simple_chatty_bot/stage5/tests.py index 092cffbd..a3c1deb4 100644 --- a/tests/projects/javascript/simple_chatty_bot/stage5/tests.py +++ b/tests/projects/javascript/simple_chatty_bot/stage5/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/python/coffee_machine/stage1/tests.py b/tests/projects/python/coffee_machine/stage1/tests.py index fea90ed8..947ca431 100644 --- a/tests/projects/python/coffee_machine/stage1/tests.py +++ b/tests/projects/python/coffee_machine/stage1/tests.py @@ -1,5 +1,8 @@ +from typing import List + from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/python/coffee_machine/stage2/tests.py b/tests/projects/python/coffee_machine/stage2/tests.py index e2878fd7..33564d63 100644 --- a/tests/projects/python/coffee_machine/stage2/tests.py +++ b/tests/projects/python/coffee_machine/stage2/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/python/coffee_machine/stage3/tests.py b/tests/projects/python/coffee_machine/stage3/tests.py index 3601e4c3..9dd33dd0 100644 --- a/tests/projects/python/coffee_machine/stage3/tests.py +++ b/tests/projects/python/coffee_machine/stage3/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/python/coffee_machine/stage4/tests.py b/tests/projects/python/coffee_machine/stage4/tests.py index 213047e6..5b901da2 100644 --- a/tests/projects/python/coffee_machine/stage4/tests.py +++ b/tests/projects/python/coffee_machine/stage4/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/python/coffee_machine/stage5/tests.py b/tests/projects/python/coffee_machine/stage5/tests.py index a36bc59a..37c309a9 100644 --- a/tests/projects/python/coffee_machine/stage5/tests.py +++ b/tests/projects/python/coffee_machine/stage5/tests.py @@ -1,5 +1,7 @@ from hstest.stage_test import * from hstest.test_case import TestCase +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/shell/coffee_machine/stage1/tests.py b/tests/projects/shell/coffee_machine/stage1/tests.py index 60bb2b04..86fb4c6c 100644 --- a/tests/projects/shell/coffee_machine/stage1/tests.py +++ b/tests/projects/shell/coffee_machine/stage1/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.common.os_utils import is_windows +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/shell/coffee_machine/stage1_ex/tests.py b/tests/projects/shell/coffee_machine/stage1_ex/tests.py index 98652a9b..34c05c0a 100644 --- a/tests/projects/shell/coffee_machine/stage1_ex/tests.py +++ b/tests/projects/shell/coffee_machine/stage1_ex/tests.py @@ -2,6 +2,8 @@ from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest from hstest.common.os_utils import is_windows +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/shell/coffee_machine/stage1_wa/tests.py b/tests/projects/shell/coffee_machine/stage1_wa/tests.py index 7184b6f3..bb7a97c3 100644 --- a/tests/projects/shell/coffee_machine/stage1_wa/tests.py +++ b/tests/projects/shell/coffee_machine/stage1_wa/tests.py @@ -2,6 +2,8 @@ from hstest.test_case import TestCase from hstest.testing.unittest.user_error_test import UserErrorTest from hstest.common.os_utils import is_windows +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback) diff --git a/tests/projects/shell/coffee_machine/stage2/tests.py b/tests/projects/shell/coffee_machine/stage2/tests.py index 06a8cbc1..911b5a69 100644 --- a/tests/projects/shell/coffee_machine/stage2/tests.py +++ b/tests/projects/shell/coffee_machine/stage2/tests.py @@ -1,6 +1,8 @@ from hstest.stage_test import * from hstest.test_case import TestCase from hstest.common.os_utils import is_windows +from hstest.check_result import CheckResult +from typing import List CheckResult.correct = lambda: CheckResult(True, '') CheckResult.wrong = lambda feedback: CheckResult(False, feedback)