Usage

A brand new project

git init my-new-repo
cd my-new-repo
git pull git@github.com:nexB/skeleton

# Create the new repo on GitHub, then update your remote
git remote set-url origin git@github.com:nexB/your-new-repo.git

From here, you can make the appropriate changes to the files for your specific project.

Update an existing project

cd my-existing-project
git remote add skeleton git@github.com:nexB/skeleton
git fetch skeleton
git merge skeleton/main --allow-unrelated-histories

This is also the workflow to use when updating the skeleton files in any given repository.

Customizing

You typically want to perform these customizations:

  • remove or update the src/README.rst and tests/README.rst files

  • set project info and dependencies in setup.cfg

  • check the configure and configure.bat defaults

Initializing a project

All projects using the skeleton will be expected to pull all of it dependencies from thirdparty.aboutcode.org/pypi or the local thirdparty directory, using requirements.txt and/or requirements-dev.txt to determine what version of a package to collect. By default, PyPI will not be used to find and collect packages from.

In the case where we are starting a new project where we do not have requirements.txt and requirements-dev.txt and whose dependencies are not yet on thirdparty.aboutcode.org/pypi, we run the following command after adding and customizing the skeleton files to your project:

./configure

This will initialize the virtual environment for the project, pull in the dependencies from PyPI and add them to the virtual environment.

Generating requirements.txt and requirements-dev.txt

After the project has been initialized, we can generate the requirements.txt and requirements-dev.txt files.

Ensure the virtual environment is enabled.

source venv/bin/activate

To generate requirements.txt:

python etc/scripts/gen_requirements.py -s venv/lib/python<version>/site-packages/

Replace <version> with the version number of the Python being used, for example: venv/lib/python3.6/site-packages/

To generate requirements-dev.txt after requirements.txt has been generated:

./configure --dev
python etc/scripts/gen_requirements_dev.py -s venv/lib/python<version>/site-packages/

Note: on Windows, the site-packages directory is located at venv\Lib\site-packages\

python .\\etc\\scripts\\gen_requirements.py -s .\\venv\\Lib\\site-packages\\
.\configure --dev
python .\\etc\\scripts\\gen_requirements_dev.py -s .\\venv\\Lib\\site-packages\\

Collecting and generating ABOUT files for dependencies

Ensure that the dependencies used by etc/scripts/fetch_thirdparty.py are installed:

pip install -r etc/scripts/requirements.txt

Once we have requirements.txt and requirements-dev.txt, we can fetch the project dependencies as wheels and generate ABOUT files for them:

python etc/scripts/fetch_thirdparty.py -r requirements.txt -r requirements-dev.txt

There may be issues with the generated ABOUT files, which will have to be corrected. You can check to see if your corrections are valid by running:

python etc/scripts/check_thirdparty.py -d thirdparty

Once the wheels are collected and the ABOUT files are generated and correct, upload them to thirdparty.aboutcode.org/pypi by placing the wheels and ABOUT files from the thirdparty directory to the pypi directory at https://github.com/nexB/thirdparty-packages

Usage after project initialization

Once the requirements.txt and requirements-dev.txt have been generated and the project dependencies and their ABOUT files have been uploaded to thirdparty.aboutcode.org/pypi, you can configure the project as needed, typically when you update dependencies or use a new checkout.

If the virtual env for the project becomes polluted, or you would like to remove it, use the --clean option:

./configure --clean

Then you can run ./configure again to set up the project virtual environment.

To set up the project for development use:

./configure --dev

To update the project dependencies (adding, removing, updating packages, etc.), update the dependencies in setup.cfg, then run:

./configure --clean # Remove existing virtual environment
source venv/bin/activate # Ensure virtual environment is activated
python etc/scripts/gen_requirements.py -s venv/lib/python<version>/site-packages/ # Regenerate requirements.txt
python etc/scripts/gen_requirements_dev.py -s venv/lib/python<version>/site-packages/ # Regenerate requirements-dev.txt
pip install -r etc/scripts/requirements.txt # Install dependencies needed by etc/scripts/bootstrap.py
python etc/scripts/fetch_thirdparty.py -r requirements.txt -r requirements-dev.txt # Collect dependency wheels and their ABOUT files

Ensure that the generated ABOUT files are valid, then take the dependency wheels and ABOUT files and upload them to thirdparty.aboutcode.org/pypi.