CI scripts, again #617
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This workflow will install Python dependencies, run tests and lint with a variety of Python versions | |
| # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions | |
| # | |
| # This version is customized to install with pdm, use the local flake8rc, and test with unpythonic.setup.fixtures. | |
| name: Python package | |
| on: | |
| push: | |
| branches: [ master ] | |
| pull_request: | |
| branches: [ master ] | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", pypy-3.8, pypy-3.9, pypy-3.10] | |
| steps: | |
| - uses: actions/checkout@v2 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v2 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install tools in CI venv | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install flake8 | |
| pip install pdm | |
| - name: Lint with flake8 | |
| run: | | |
| # stop the build if there are Python syntax errors or undefined names | |
| flake8 . --config=flake8rc --count --select=E9,F63,F7,F82 --show-source --statistics | |
| # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide | |
| flake8 . --config=flake8rc --count --exit-zero --max-complexity=100 --max-line-length=127 --statistics | |
| - name: Determine Python version string for PDM | |
| run: | | |
| TARGET_PYTHON_VERSION_FOR_PDM=$( python -c 'import sys; v = sys.argv[1]; print(v if "-" not in v else v.replace("-", "@"))' ${{ matrix.python-version }} ) | |
| # We need this hack at all because CI expects e.g. "pypy-3.10", whereas PDM expects "[email protected]". | |
| # Now that we have the result, send it to an environment variable so that the next step can use it. | |
| # https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable | |
| echo "TARGET_PYTHON_VERSION=$TARGET_PYTHON_VERSION_FOR_PDM" >> "$GITHUB_ENV" | |
| - name: Create in-project virtualenv and install dependencies | |
| run: | | |
| pdm python install "$TARGET_PYTHON_VERSION_FOR_PDM" | |
| # "When you run pdm install the first time on a new PDM-managed project, whose Python interpreter is not decided yet, | |
| # PDM will create a virtualenv in <project_root>/.venv, and install dependencies into it." | |
| # https://pdm-project.org/en/latest/usage/venv/ | |
| pdm install | |
| - name: Test with unpythonic.test.fixtures | |
| run: | | |
| pdm use --venv in-project | |
| source .venv/bin/activate | |
| python runtests.py |