diff options
Diffstat (limited to '.github')
-rwxr-xr-x | .github/workflows/docutils_setup.py | 56 | ||||
-rw-r--r-- | .github/workflows/tests.yml | 152 |
2 files changed, 208 insertions, 0 deletions
diff --git a/.github/workflows/docutils_setup.py b/.github/workflows/docutils_setup.py new file mode 100755 index 0000000..9d74522 --- /dev/null +++ b/.github/workflows/docutils_setup.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +"""Script to convert package setup to myst-docutils.""" +import sys + +import tomlkit + + +def modify_toml(content: str) -> str: + """Modify `pyproject.toml`.""" + doc = tomlkit.parse(content) + + # change name of package + doc["project"]["name"] = "myst-docutils" + + # move dependency on docutils and sphinx to extra + dependencies = [] + sphinx_extra = [] + for dep in doc["project"]["dependencies"]: + if dep.startswith("docutils") or dep.startswith("sphinx"): + sphinx_extra.append(dep) + else: + dependencies.append(dep) + doc["project"]["dependencies"] = dependencies + doc["project"]["optional-dependencies"]["sphinx"] = sphinx_extra + + return tomlkit.dumps(doc) + + +def modify_readme(content: str) -> str: + """Modify README.md.""" + content = content.replace("myst-parser", "myst-docutils") + content = content.replace( + "# MyST-Parser", + "# MyST-Parser\n\nNote: myst-docutils is identical to myst-parser, " + "but without installation requirements on sphinx", + ) + content = content.replace("myst-docutils.readthedocs", "myst-parser.readthedocs") + content = content.replace( + "readthedocs.org/projects/myst-docutils", "readthedocs.org/projects/myst-parser" + ) + return content + + +if __name__ == "__main__": + project_path = sys.argv[1] + readme_path = sys.argv[2] + with open(project_path) as f: + content = f.read() + content = modify_toml(content) + with open(project_path, "w") as f: + f.write(content) + with open(readme_path) as f: + content = f.read() + content = modify_readme(content) + with open(readme_path, "w") as f: + f.write(content) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..c05356e --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,152 @@ +name: continuous-integration + +on: + push: + branches: [master] + tags: + - "v[0-9]+.[0-9]+.[0-9]+*" + pull_request: + +jobs: + pre-commit: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v1 + with: + python-version: "3.8" + - uses: pre-commit/action@v2.0.0 + + tests: + + strategy: + fail-fast: false + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10"] + sphinx: [">=5,<6"] + os: [ubuntu-latest] + include: + - os: ubuntu-latest + python-version: "3.8" + sphinx: ">=4,<5" + - os: windows-latest + python-version: "3.8" + sphinx: ">=4,<5" + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e .[linkify,testing] + pip install --upgrade-strategy "only-if-needed" "sphinx${{ matrix.sphinx }}" + - name: Run pytest + run: | + pytest --cov=myst_parser --cov-report=xml --cov-report=term-missing + coverage xml + - name: Upload to Codecov + if: github.repository == 'executablebooks/MyST-Parser' && matrix.python-version == 3.8 + uses: codecov/codecov-action@v1 + with: + name: myst-parser-pytests + flags: pytests + file: ./coverage.xml + fail_ci_if_error: true + + check-myst-docutils: + + name: Check myst-docutils install + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + docutils-version: ["0.17", "0.18", "0.19"] + + steps: + - name: Checkout source + uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v1 + with: + python-version: "3.8" + - name: Install setup + run: | + python -m pip install --upgrade pip + pip install tomlkit + - name: Modify setup + run: python .github/workflows/docutils_setup.py pyproject.toml README.md + - name: Install dependencies + run: | + pip install . + pip install pytest~=6.2 pytest-param-files~=0.3.3 pygments docutils==${{ matrix.docutils-version }} + - name: ensure sphinx is not installed + run: | + python -c "\ + try: + import sphinx + except ImportError: + pass + else: + raise AssertionError()" + - name: Run pytest for docutils-only tests + run: pytest tests/test_docutils.py tests/test_renderers/test_fixtures_docutils.py tests/test_renderers/test_include_directive.py + - name: Run docutils CLI + run: echo "test" | myst-docutils-html + + publish: + + name: Publish myst-parser to PyPi + needs: [pre-commit, tests, check-myst-docutils] + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v1 + with: + python-version: "3.8" + - name: install flit + run: | + pip install flit~=3.4 + - name: Build and publish + run: | + flit publish + env: + FLIT_USERNAME: __token__ + FLIT_PASSWORD: ${{ secrets.PYPI_KEY }} + + publish-docutils: + + name: Publish myst-docutils to PyPi + needs: [publish] + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v1 + with: + python-version: "3.8" + - name: install flit and tomlkit + run: | + pip install flit~=3.4 tomlkit + - name: Modify setup + run: python .github/workflows/docutils_setup.py pyproject.toml README.md + - name: Build and publish + run: | + flit publish + env: + FLIT_USERNAME: __token__ + FLIT_PASSWORD: ${{ secrets.PYPI_KEY_DOCUTILS }} |