Skip to content

Commit 3b06ff6

Browse files
authored
Merge pull request #129 from trailofbits/ww/ci-doc-builds
github/workflows: add a docs workflow
2 parents 21ab860 + c4ab139 commit 3b06ff6

40 files changed

+113
-75
lines changed

.github/workflows/docs.yml

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: docs-deploy
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
docs:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v2
13+
14+
- uses: actions/setup-python@v2
15+
16+
- name: deps
17+
run: make dev
18+
19+
- name: docs
20+
run: |
21+
make doc
22+
mv ./html/pip_audit /tmp/pip_audit
23+
24+
- name: deploy
25+
run: |
26+
# Configure git, checkout a new orphan branch for the docs.
27+
git config --global user.name 'github.actions'
28+
git config --global user.email '[email protected]'
29+
git checkout --orphan gh-pages
30+
31+
# Clear out all repo state, copy in the docs built in the previous step.
32+
git rm -rf . && git clean -fd
33+
mv /tmp/pip_audit ./docs
34+
35+
# Check in the docs, push.
36+
git add --all .
37+
git commit -m "[docs] deploy: ${GITHUB_SHA}"
38+
git push --force origin gh-pages

CONTRIBUTING.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,15 @@ pytest --cov=pip_audit test/
107107
python -m coverage report -m --fail-under 100
108108
```
109109

110-
### Documentation builds
110+
### Documentation
111111

112112
`pip-audit` uses [`pdoc3`](https://github.com/pdoc3/pdoc) to generate HTML documentation for
113113
the public Python APIs.
114114

115+
Live documentation for the `main` branch is hosted
116+
[here](https://trailofbits.github.io/pip-audit/). Only the public APIs are
117+
documented, all undocumented APIs are **intentionally private and unstable.**
118+
115119
If you're running Python 3.7 or newer, you can run the documentation build locally:
116120

117121
```bash

pip_audit/__init__.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
"""
2-
The `pip_audit` package.
3-
4-
The `pip_audit` APIs are documented in each submodule.
2+
The `pip_audit` APIs.
53
"""
64

75
from pip_audit._version import __version__ # noqa: F401

pip_audit/audit.py renamed to pip_audit/_audit.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
from dataclasses import dataclass
77
from typing import Iterator, List, Tuple
88

9-
from pip_audit.dependency_source import DependencySource
10-
from pip_audit.service import Dependency, VulnerabilityResult, VulnerabilityService
9+
from pip_audit._dependency_source import DependencySource
10+
from pip_audit._service import Dependency, VulnerabilityResult, VulnerabilityService
1111

1212
logger = logging.getLogger(__name__)
1313

pip_audit/cli.py renamed to pip_audit/_cli.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
from typing import List, Optional
1313

1414
from pip_audit import __version__
15-
from pip_audit.audit import AuditOptions, Auditor
16-
from pip_audit.dependency_source import (
15+
from pip_audit._audit import AuditOptions, Auditor
16+
from pip_audit._dependency_source import (
1717
DependencySource,
1818
PipSource,
1919
RequirementSource,
2020
ResolveLibResolver,
2121
)
22-
from pip_audit.format import ColumnsFormat, CycloneDxFormat, JsonFormat, VulnerabilityFormat
23-
from pip_audit.service import OsvService, PyPIService, VulnerabilityService
24-
from pip_audit.state import AuditSpinner
25-
from pip_audit.util import assert_never
22+
from pip_audit._format import ColumnsFormat, CycloneDxFormat, JsonFormat, VulnerabilityFormat
23+
from pip_audit._service import OsvService, PyPIService, VulnerabilityService
24+
from pip_audit._state import AuditSpinner
25+
from pip_audit._util import assert_never
2626

2727
logger = logging.getLogger(__name__)
2828
logging.basicConfig(level=os.environ.get("PIP_AUDIT_LOGLEVEL", "INFO").upper())

pip_audit/dependency_source/interface.py renamed to pip_audit/_dependency_source/interface.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from packaging.requirements import Requirement
1010

11-
from pip_audit.service import Dependency
11+
from pip_audit._service import Dependency
1212

1313

1414
class DependencySource(ABC):

pip_audit/dependency_source/pip.py renamed to pip_audit/_dependency_source/pip.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import pip_api
1010
from packaging.version import Version
1111

12-
from pip_audit.dependency_source import DependencySource, DependencySourceError
13-
from pip_audit.service import Dependency
14-
from pip_audit.state import AuditState
12+
from pip_audit._dependency_source import DependencySource, DependencySourceError
13+
from pip_audit._service import Dependency
14+
from pip_audit._state import AuditState
1515

1616
logger = logging.getLogger(__name__)
1717

pip_audit/dependency_source/requirement.py renamed to pip_audit/_dependency_source/requirement.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
from pip_api import parse_requirements
1010
from pip_api.exceptions import PipError
1111

12-
from pip_audit.dependency_source import (
12+
from pip_audit._dependency_source import (
1313
DependencyResolver,
1414
DependencyResolverError,
1515
DependencySource,
1616
DependencySourceError,
1717
)
18-
from pip_audit.service import Dependency
19-
from pip_audit.state import AuditState
18+
from pip_audit._service import Dependency
19+
from pip_audit._state import AuditState
2020

2121

2222
class RequirementSource(DependencySource):

pip_audit/dependency_source/resolvelib/pypi_provider.py renamed to pip_audit/_dependency_source/resolvelib/pypi_provider.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
from packaging.version import Version
2626
from resolvelib.providers import AbstractProvider
2727

28-
from pip_audit.state import AuditState
29-
from pip_audit.virtual_env import VirtualEnv
28+
from pip_audit._state import AuditState
29+
from pip_audit._virtual_env import VirtualEnv
3030

3131
PYTHON_VERSION = Version(python_version())
3232

pip_audit/dependency_source/resolvelib/resolvelib.py renamed to pip_audit/_dependency_source/resolvelib/resolvelib.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
from requests.exceptions import HTTPError
1010
from resolvelib import BaseReporter, Resolver
1111

12-
from pip_audit.dependency_source import DependencyResolver, DependencyResolverError
13-
from pip_audit.service.interface import Dependency
14-
from pip_audit.state import AuditState
12+
from pip_audit._dependency_source import DependencyResolver, DependencyResolverError
13+
from pip_audit._service.interface import Dependency
14+
from pip_audit._state import AuditState
1515

1616
from .pypi_provider import PyPIProvider
1717

File renamed without changes.

pip_audit/format/columns.py renamed to pip_audit/_format/columns.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from packaging.version import Version
99

10-
import pip_audit.service as service
10+
import pip_audit._service as service
1111

1212
from .interface import VulnerabilityFormat
1313

pip_audit/format/cyclonedx.py renamed to pip_audit/_format/cyclonedx.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from cyclonedx.model.vulnerability import Vulnerability
1212
from cyclonedx.parser import BaseParser
1313

14-
import pip_audit.service as service
14+
import pip_audit._service as service
1515

1616
from .interface import VulnerabilityFormat
1717

pip_audit/format/interface.py renamed to pip_audit/_format/interface.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from abc import ABC
55
from typing import Dict, List
66

7-
import pip_audit.service as service
7+
import pip_audit._service as service
88

99

1010
class VulnerabilityFormat(ABC):

pip_audit/format/json.py renamed to pip_audit/_format/json.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import json
66
from typing import Any, Dict, List
77

8-
import pip_audit.service as service
8+
import pip_audit._service as service
99

1010
from .interface import VulnerabilityFormat
1111

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

pip_audit/virtual_env.py renamed to pip_audit/_virtual_env.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from packaging.version import Version
1111

12-
from .state import AuditState
12+
from ._state import AuditState
1313

1414

1515
class VirtualEnv(venv.EnvBuilder):

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ line-length = 100
99

1010
[tool.coverage.run]
1111
# don't attempt code coverage for the CLI entrypoints
12-
omit = ["pip_audit/cli.py"]
12+
omit = ["pip_audit/_cli.py"]
1313

1414
[tool.interrogate]
1515
# don't enforce documentation coverage for packaging, testing, the virtual
1616
# environment, or the CLI (which is documented separately).
17-
exclude = ["setup.py", "env", "test", "pip_audit/cli.py", "pip_audit/_version.py"]
17+
exclude = ["setup.py", "env", "test", "pip_audit/_cli.py", "pip_audit/_version.py"]
1818
ignore-semiprivate = true
1919
fail-under = 100

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
packages=find_packages(),
2323
entry_points={
2424
"console_scripts": [
25-
"pip-audit = pip_audit.cli:audit",
25+
"pip-audit = pip_audit._cli:audit",
2626
]
2727
},
2828
platforms="any",

test/conftest.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import pytest
22
from packaging.version import Version
33

4-
from pip_audit.dependency_source.interface import DependencySource
5-
from pip_audit.service.interface import Dependency, VulnerabilityResult, VulnerabilityService
4+
from pip_audit._dependency_source.interface import DependencySource
5+
from pip_audit._service.interface import Dependency, VulnerabilityResult, VulnerabilityService
66

77

88
@pytest.fixture(autouse=True)

test/dependency_source/test_interface.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pip_audit.service.interface import Dependency
1+
from pip_audit._service.interface import Dependency
22

33

44
def test_dependency_source(dep_source):

test/dependency_source/test_pip.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from packaging.version import Version
55

66
import pip_audit
7-
from pip_audit.dependency_source import pip
8-
from pip_audit.service.interface import Dependency
7+
from pip_audit._dependency_source import pip
8+
from pip_audit._service.interface import Dependency
99

1010

1111
def test_pip_source():

test/dependency_source/test_requirement.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
from packaging.version import Version
77
from pip_api import _parse_requirements
88

9-
from pip_audit.dependency_source import (
9+
from pip_audit._dependency_source import (
1010
DependencyResolver,
1111
DependencyResolverError,
1212
DependencySourceError,
1313
ResolveLibResolver,
1414
requirement,
1515
)
16-
from pip_audit.service import Dependency
16+
from pip_audit._service import Dependency
1717

1818

1919
def test_requirement_source(monkeypatch):

test/dependency_source/test_resolvelib.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
from requests.exceptions import HTTPError
99
from resolvelib.resolvers import InconsistentCandidate, ResolutionImpossible
1010

11-
from pip_audit.dependency_source import resolvelib
12-
from pip_audit.dependency_source.resolvelib import pypi_provider
13-
from pip_audit.service.interface import Dependency
11+
from pip_audit._dependency_source import resolvelib
12+
from pip_audit._dependency_source.resolvelib import pypi_provider
13+
from pip_audit._service.interface import Dependency
1414

1515

1616
def get_package_mock(data):

test/format/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import pytest
44
from packaging.version import Version
55

6-
import pip_audit.service as service
6+
import pip_audit._service as service
77

88
_TEST_VULN_DATA: Dict[service.Dependency, List[service.VulnerabilityResult]] = {
99
service.Dependency(name="foo", version="1.0"): [

test/format/test_columns.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import pip_audit.format as format
1+
import pip_audit._format as format
22

33

44
def test_columns(vuln_data):

test/format/test_cyclonedx.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import xml.etree.ElementTree as ET
33

4-
from pip_audit.format import CycloneDxFormat
4+
from pip_audit._format import CycloneDxFormat
55

66

77
def test_cyclonedx_inner_json(vuln_data):

test/format/test_json.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22

3-
import pip_audit.format as format
3+
import pip_audit._format as format
44

55

66
def test_json(vuln_data):

test/service/conftest.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import tempfile
2+
3+
import pytest
4+
5+
6+
@pytest.fixture(scope="session")
7+
def cache_dir():
8+
cache = tempfile.TemporaryDirectory()
9+
yield cache.name
10+
cache.cleanup()

test/service/test_osv.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from packaging.version import Version
66
from requests.exceptions import HTTPError
77

8-
import pip_audit.service as service
8+
import pip_audit._service as service
99

1010

1111
class OsvServiceTest(unittest.TestCase):
@@ -74,7 +74,7 @@ def raise_for_status(self):
7474

7575
return MockResponse()
7676

77-
@mock.patch("pip_audit.service.osv.requests.post", side_effect=get_error_response)
77+
@mock.patch("pip_audit._service.osv.requests.post", side_effect=get_error_response)
7878
def test_osv_error_response(self, mock_post):
7979
osv = service.OsvService()
8080
dep = service.Dependency("jinja2", Version("2.4.1"))

0 commit comments

Comments
 (0)