
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
isee
Advanced tools
Python continuous integration (CI) support tools.
To install: pip install isee
The goal of CI is to automate code formatting, validation, deployment and publishing of packages.
A CI pipeline is triggered when new code is pushed to a remote repository. Every CI pipeline does at least:
You can see your CI pipeline's result and logs:
Versioning is semi-automatically resolved: if you want the major or minor part to be bumped, you only have to add [bump major] or [bump minor] to your commit message on master (versioning is not applied to other branches).
Example, the current version number is 1.0.5. If you commit with the following message:
Added some new stuff.
the new version number will be 1.0.6. But if you commit with the following message:
Added some great new stuff! [bump minor]
the new version number will be 1.1.0. Finally, if you commit with the following message:
Added some extraordinary new stuff!!! [bump major]
the new version number will be 2.0.0.
You can prevent the CI pipeline from being triggered by adding [skip ci] to your commit message. Example:
Updated the README file. [skip ci]
Be careful! If you skip the CI process, any new code will not be validated and no new version will be deployed/published. So, think twice before using it.
CI pipelines for GitHub public repositories are run on GitHub-hosted runners. See the GitHub documentation for more details
This "How to" section applies to python package projects only. If you want to setup CI to an application project or another programing language, you will have to modify the CI pipeline definition according to your needs.
github/workflow/ directory (create the directory if it doesn't exist) into your local repository.
Note that wads does it for you by running the following command from the project's root directory (documentation here): populate . --root-url=GITHUB_ROOT_URL
Note that you can specify the root directory (in case you're not in the root directory), root url (in case the directory is not already associated to a git repo), and have many other parametrization choices.
Fear not: populate will not create or modify the ci.yml file (or any other file) if there is one already.
ci.yml file, replace #PROJECT_NAME# with the project name (must be the exact same name as the main module of the project, not needed if you ran the populate tool because it did it for you) and modify the pipeline workflow to suit the project's needs. Documentation here.PYPI_USERNAME and PYPI_PASSWORD with your PYPI credentials to the remote repository. Documentation here./docs folder. Documentation here.Continuous Integration workflow. Documentation here.
Consider using wads to automatically validate your code locally, commit and push by running the following command (documentation here):pack check-in 'Your commit message.'
You can run your GitHub Actions CI workflow locally before pushing, using act. This helps catch issues early and saves CI minutes.
# Check if dependencies are installed
python -m isee.local_cli --check-deps
# Run your entire CI workflow locally
python -m isee.local_cli
# Run a specific job (e.g., validation)
python -m isee.local_cli -j validation
# Dry run to see what would execute
python -m isee.local_cli --dry-run
Install act and ensure Docker is running:
macOS:
brew install act
Linux:
curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
# Run with specific Python version
python -m isee.local_cli -j validation -m python-version:3.10
# Use custom workflow file
python -m isee.local_cli -w .github/workflows/test.yml
# Quiet mode (less output)
python -m isee.local_cli -q
For detailed documentation, see LOCAL_CLI_USAGE.md.
It has been reported that users get this error:
/home/runner/work/_temp/1a136567-cb0c-4c9f-a44f-4cbe6633d4eb.sh: line 2: --non-interactive: command not found
Error: Process completed with exit code 127.
when publishing. The package publishes fine, but this error causes the CI "publish" part to show up as red, which is annoying.
Solution: This will happen when any of the variables (most of the time, the PYPI_PASSWORD contain newlines in it, which breaks the twine upload ... command into several pieces.
This can happen, for example, when copy/pasting from doing a echo $PYPI_TOKEN | pbcopy since the echo adds a newline.
Try copying the pypi token again and ensure there's no newline in it.
At the point of writing this, some jobs don't fail when there are (non-essential) errors.
One hidden problem that you might get in when "Tag Repository With New Version Number" does a Run isee tag-repo $VERSION. You'll get:
remote: Permission to thorwhalen/sung.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/thorwhalen/sung/': The requested URL returned error: 403
Error executing git command: Command 'git --git-dir="/home/runner/work/sung/sung/.git" --work-tree="/home/runner/work/sung/sung" push origin 0.0.16' returned non-zero exit status 128.
Standard output:
Exit code: 128
Top cause and solution:
GITHUB_TOKEN has the necessary permissions (i.e. read and write) to push to the repository.
You can configure this in the repository settings under Actions -> General -> Workflow permissions (https://github.com/{username_or_org}/{repo}/settings/actions).Other possible problesm:
https://github.com/{username_or_org}/{repo}/settings/secrets/actions.(Note: Normally this shouldn't happen anymore, since I included a
"version alignment" logic in get_new_version, which is used in the bump-version-number action via gen_semver. Still, I'll keep this around for historical reasons.)
Sometimes the twine PYPI publishing may fail with such a message:
WARNING Skipping PKGNAME-0.1.4-py3-none-any.whl because it appears to already exist
WARNING Skipping PKGNAME-0.1.4.tar.gz because it appears to already exist
This often means that your git tags are misaligned with the pyproject.toml
(or in older versions, setup.cfg) version.
You can see your git tags here: https://github.com/ORG/REPO/tags.
To repair, do this:
setup.cfg and see what version is there, called it SETUP_VERSIONsetup.cfg so it shows NEW_VERSIONgit tag NEW_VERSIONgit push origin NEW_VERSIONSometimes I need to update the setup version again, and push again.
FAQs
Python continuous integration (CI) support tools.
We found that isee demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.