name: CI concurrency: group: >- ${{ github.workflow }}- ${{ github.ref_type }}- ${{ github.event.pull_request.number || github.sha }} cancel-in-progress: true on: workflow_dispatch: inputs: git-ref: description: Git Ref (Optional) required: false push: paths-ignore: - ".editorconfig" - ".gitattributes" - ".gitignore" - ".gitmodules" - "*.ini" - "*.md" - "**/*.txt" - "examples/**" - "news/**" - "peeps/**" branches: - main pull_request: paths-ignore: - ".editorconfig" - ".gitattributes" - ".gitignore" - ".gitmodules" - "*.ini" - "*.md" - "**/*.txt" - "examples/**" - "news/**" - "peeps/**" permissions: contents: read # to fetch code (actions/checkout) jobs: lint: name: Check code linting runs-on: ubuntu-latest env: PIPENV_DEFAULT_PYTHON_VERSION: ${{ matrix.python-version }} PYTHONWARNINGS: ignore:DEPRECATION PYTHONIOENCODING: "utf-8" GIT_ASK_YESNO: "false" steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: 3.x - run: | python -m pip install pre-commit pre-commit run --all-files --verbose --show-diff-on-failure vendor: name: Vendoring needs: lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: 3.x - run: | python -m pip install --upgrade wheel invoke parver beautifulsoup4 towncrier requests parse hatch-fancy-pypi-readme semver python -m invoke vendoring.update tests: name: ${{matrix.os}} / ${{ matrix.python-version }} needs: lint runs-on: ${{ matrix.os }}-latest strategy: fail-fast: false matrix: python-version: [3.8, 3.9, "3.10", 3.11, 3.12] os: [MacOS, Ubuntu, Windows] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Get python path id: python-path run: | echo "path=$(python -c 'import sys; print(sys.executable)')" >> $GITHUB_OUTPUT - name: Install latest pip, setuptools, wheel run: | python -m pip install --upgrade pip setuptools wheel - name: Install dependencies env: PIPENV_DEFAULT_PYTHON_VERSION: ${{ matrix.python-version }} PYTHONWARNINGS: ignore:DEPRECATION PYTHONIOENCODING: "utf-8" GIT_ASK_YESNO: "false" run: | git submodule sync git submodule update --init --recursive python -m pip install -e . --upgrade pipenv install --deploy --dev --python=${{ steps.python-path.outputs.path }} - name: Run pypiserver Windows run: | cmd /c start pipenv run pypi-server run -v --host=0.0.0.0 --port=8080 --hash-algo=sha256 --disable-fallback ./tests/pypi/ ./tests/fixtures if: ${{matrix.os == 'Windows' }} - name: Run pypiserver Mac run: | pipenv run pypi-server run -v --host=0.0.0.0 --port=8080 --hash-algo=sha256 --disable-fallback ./tests/pypi/ ./tests/fixtures & if: ${{matrix.os == 'MacOS' }} - name: Run pypiserver Ubuntu run: | pipenv run pypi-server run -v --host=0.0.0.0 --port=8080 --hash-algo=sha256 --disable-fallback ./tests/pypi/ ./tests/fixtures & if: ${{matrix.os == 'Ubuntu' }} - name: Run tests env: PIPENV_DEFAULT_PYTHON_VERSION: ${{ matrix.python-version }} PYTHONWARNINGS: ignore:DEPRECATION PIPENV_NOSPIN: "1" CI: "1" GIT_ASK_YESNO: "false" PYPI_VENDOR_DIR: "./tests/pypi/" PYTHONIOENCODING: "utf-8" GIT_SSH_COMMAND: ssh -o StrictHostKeyChecking=accept-new -o CheckHostIP=no run: | pipenv run pytest -ra -n auto -v --fulltrace tests build: name: Build Package needs: lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: 3.x - run: pip install -U build twine - run: | python -m build twine check dist/*