Repository for working on live stream analysis
Here we assume your intent is to upload the conda package to the anaconda.org/neutrons organization.
An administrator of anaconda.org/neutrons
must create an access token for your repository in the access settings.
After created, the token must be stored in a repository secret
:
- Navigate to the main page of the repository on GitHub.com.
- Click on the "Settings" tab.
- In the left sidebar, navigate to the "Security" section and select "Secrets and variables" followed by "Actions".
- Click on the "New repository secret" button.
- Enter
ANACONDA_TOKEN
for the secret name - Paste the Anaconda access token
- Click on the "Add secret" button
- Test the setup by creating a release candidate tag,
which will result in a package built and uploaded to
https://anaconda.org/neutrons/mypackagename
Follow the instructions in the Confluence page to create the access token.
The default package publishing service is anaconda. However, we also support PyPI publishing as well.
- Make sure you have the correct access to the project on PyPI.
- Make sure
git status
returns a clean state. - At the root of the repo, use
python -m build
to generate the wheel. - Check the wheel with
twine check dist/*
, everything should pass before we move to next step. - When doing manual upload test, make sure to use testpypi instead of pypi.
- Use
twine upload --repository testpypi dist/*
to upload to testpypi, you will need to specify the testpipy url in your~/.pypirc
, i.e.
[distutils]
index-servers = pypi, testpypi
[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = YOUR_TESTPYPI_TOKEN
- Test the package on testpypi with
pip install --index-url https://test.pypi.org/simple/ mypackagename
. - If everything is good, use the Github workflow,
package.yml
to trigger the publishing to PyPI.
Publishing to Anaconda is handled via workflow, package.yml
.
If your target channel is not neutrons
, make sure change it in the package_pixi.yml
file.
- By default, we recommend providing a single
environment.yml
that covers all necessary packages for development. - The runtime dependency should be in
meta.yaml
for anaconda packaging, andpyproject.toml
for PyPI publishing. - When performing editable install for your feature branch, make sure to use
pip install --no-deps -e .
to ensure thatpip
does not install additional packages frompyproject.toml
into development environment by accident.
Pixi is a tool that helps to manage the project's dependencies and environment.
Currently this template repo have both conventional conda
based environment (environment.yml
and conda.recipe/meta.yaml
) and pixi
based environment (pyproject.toml
).
-
Install
pixi
by runningcurl -fsSL https://pixi.sh/install.sh | bash
(or following the instruction on the official website) -
If planning to build the conda package locally, you need to configure the
pixi
to use thedetached-environments
asconda build
will fail if the environment is in the source tree (whichpixi
does by default). 2.1. Runpixi config set detached-environments true
2.2. Make sure to commit the config file.pixi/config.toml
to the repository (it is ignored by default). -
Run
pixi install
to install the dependencies. -
Adjust the tasks in
pyproject.toml
to match your project's needs. 3.1. Detailed instructions on adding tasks can be found in the official documentation. 3.2. You can usepixi run
to see available tasks, and usepixi run <task-name>
to run a specific task (note: if the selected task has dependencies, they will be run first).❯ pixi run Available tasks: build-conda build-docs build-pypi clean-all clean-conda clean-docs clean-pypi publish-conda publish-pypi test verify-conda
-
Remember to remove the GitHub actions that still use
conda
actions.
By default, pixi
will create a virtual environment in the .pixi
directory at the root of the repository.
However, when setting detached-environments
to true
, pixi
will create the virtual environment in the cache directory (see official documentation for more information).
If you want to keep your environment between sessions, you should add the following lines to your .bashrc
or .bash_profile
:
export PIXI_CACHE_DIR="$HOME/.pixi/cache"
On SNS Analysis systems, the pixi run build-conda
task will fail due to sqlite3
file locking issue.
This is most likely due to the user directory being a shared mount, which interfering with pixi
and conda
environment locking.