summaryrefslogtreecommitdiffstats
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rwxr-xr-x.github/workflows/docutils_setup.py56
-rw-r--r--.github/workflows/tests.yml152
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 }}