Developer Guide

This developer guide includes more complex interactions like contributing registry entries and building containers. If you haven’t read the installation guide you should do that first. If you want to see a more general user guide with examples for using the SDK and writing clients, see our user guide .

Running Tests

You’ll want to create an environment to install to, and then install:

$ make install

We recommend a local registry without auth for tests.

$ docker run -it --rm -p 5000:5000 ghcr.io/oras-project/registry:latest

Zot is a good solution too:

docker run -d -p 5000:5000 --name oras-quickstart ghcr.io/project-zot/zot-linux-amd64:latest

For quick auth, you can use the included Developer container and do:

make install
make test

And then when you run make test , the tests will run. This ultimately runs the file scripts/test.sh . If you want to test interactively, add an IPython import statement somewhere in the tests:

# pip install IPython
import IPython
IPython.embed()

And then change the last line of the file to be:

- pytest oras/
+ pytest -xs oras/

And then you should be able to interactively run (and debug) the same tests that run in GitHub actions.

Code Linting

We use pre-commit to handle code linting and formatting, including:

  • black

  • isort

  • flake8

  • mypy

Our setup also handles line endings and ensuring that you don’t add large files! Using the tools is easy. After installing oras-py to a local environment, you can use pre-commit as follows:

$ pip install -r .github/dev-requirements.txt

Then to do a manual run:

$ pre-commit run --all-files
check for added large files..............................................Passed
check for case conflicts.................................................Passed
check docstring is first.................................................Passed
fix end of files.........................................................Passed
trim trailing whitespace.................................................Passed
mixed line ending........................................................Passed
black....................................................................Passed
isort....................................................................Passed
flake8...................................................................Passed

And to install as a hook (recommended so you never commit with linting flaws!)

$ pre-commit install

The above are provided as courtesy commands via:

$ make develop
$ make lint

Documentation

The documentation is provided in the docs folder of the repository, and generally most content that you might want to add is under getting_started . For ease of contribution, files that are likely to be updated by contributors (e.g., mostly everything but the module generated files) are written in markdown. If you need to use toctree you should not use extra newlines or spaces (see index.md files for exampls). Markdown is the chosen language for the oras community, and this is why we chose to use it over restructured syntax - it makes it easier to contribute documentation.

Install Dependencies and Build

The documentation is built using sphinx, and generally you can install dependencies:

# In main oras-py folder (oras-py is needed to build docs)
$ pip install -e .

# Now docs dependencies
cd docs
pip install -r requrements.txt

# Build the docs into _build/html
make html

Preview Documentation

After make html you can enter into _build/html and start a local web server to preview:

$ python -m http.server 9999

And open your browser to localhost:9999

Docstrings

To render our Python API into the docs, we keep an updated restructured syntax in the docs/source folder that you can update on demand as follows:

$ ./apidoc.sh

This should only be required if you change any docstrings or add/remove functions from oras-py source code.