Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Check if you haven't forgotten to bump the PyPi package version number before you merge a release pull request.
Install the pypi-version
with the following command using pip3
:
$ pip3 install pypi-version
pypi-version
checks if you haven't forgotten to bump the PyPi package version number
before you merge a release
pull request.
It would be useful if you:
If you do not know these concepts, go ahead to the references section first. After, start reading from the next section.
Python packages
have version number such as 0.1.0
or 1.3.3
. Python packages
commonly are uploaded to PyPi
.
Sometimes after adding new functionality to your package you forget to increase the version number of the package.
So when you try to upload it, you get the error message Package version number already in use
. It is okay if
you develop the package locally and alone, you just modify the version number and upload it again. But if you
develop the package using particular development flow such as Gitflow workflow
and continuous integration
services — then you should create separated pull request to bump the version, the resources and time you will spend
on it are increasing in few times. The cost of the mistake is high.
So if you integrate the pypi-version
to your continuous integration service by checking the version using simple command line tool, it will never
allow your pull request to be merged if you forget to increase the version.
There is the test repository of the Python package
that has integrated pypi-version
— test-pypi-version-travis-ci. It uses Travis CI
as continuous integration service.
It contains:
develop
and master
branches,master
branch contains file setup.py where version is 0.1.0,master
branch (release branch), package is uploaded to the PyPi with version 0.1.0,pypi-version
checking integrated.pypi-version
checks if release pull request's (from develop
to master
) changes contain an increasing the package version number
before it will be merged. In the example that is described above there is no increasing the version —
pypi-version check
is failed. If one of the declared checking in the configuration file is failed — it means pull request continuous integration checking is failed and pull request does not allowed to be merged with wrong version number.To check if you haven't forgotten to bump the PyPi package version number
before you merge a release
pull request:
$ pypi-version check
To fetch the version of the pypi-version
package:
$ pypi-version --version
pypi-version, version 0.1.0
To fetch all available package commands, use the following command:
$ pypi-version --help
Usage: pypi-version [OPTIONS] COMMAND [ARGS]...
Command line interface for PyPi version checking.
Options:
--version Show the version and exit.
--help Show this message and exit.
Commands:
check Check if you haven't forgotten to bump the PyPi package version.
pypi-version
requires a configuration file called .pypi-version.yml
to be located in the root of the project:
package
|
- ...
- source
- README.md
- setup.py
- .pypi-version.yml
...
The configuration file should contains:
PyPi package name
that is the same with the name in the setup.py
:package:
name: test-pypi-version-travis-ci
travis
.ci:
name: travis
development
and release
branch names. In the configurations which are illustrated below means
package version number
will be checked only when you do a pull request from develop
to master
.branches:
development: develop
release: master
The full example of the configuration file is:
package:
name: pypi-version
ci:
name: travis
branches:
development: develop
release: master
The example of the configuration file which install and use pypi-version
:
language: python
python:
- "3.6"
install:
- pip install pypi-version
script:
- pypi-version check
The example of the failed build (version hasn't been bumped):
The example of the configuration file which install and use pypi-version
:
version: 2
jobs:
build:
docker:
- image: circleci/python:3.6.4
steps:
- checkout
- run:
name: Install pypi-version package
command: sudo pip3 install pypi-version
- run:
name: Check if PyPi should be bumped
command: sudo -H -E pypi-version check
The example of the failed build (version hasn't been bumped):
Clone the project and install requirements:
$ git clone git@github.com:dmytrostriletskyi/pypi-version.git && cd pypi-version
$ pip3 install -r requirements.txt
$ pip3 install -r requirements-dev.txt
$ pip3 install -r requirements-tests.txt
When you will make changes, ensure your code pass the checkers and is covered by tests using pytest.
If you are new for the contribution, please read:
Python package
is redistributed and reused couple of the Python
scripts. They exist to solve the typical problems. So if
you have common problem in your project — instead of writing own code and spend a time for it, use the package that already have required functionality. The examples of Python packages
you should know are requests and Django.
Instead of a single master
branch, this workflow uses two branches to record the history of the project. The master
branch stores the official release history, and the develop
branch serves as an integration branch for features.
So when you complete the feature, you open the pull request from feature
branch to the develop
branch. When you complete the bunch of features, you open the pull request from develop
branch to master
branch which are going to merge this bunch of features that means you do new release.
According to the changes that contains new features, you should increase your version number (e.g. from 1.0.0
to 1.1.0
) in the file called setup.py
in the same pull request.
When your features with increased version number have been merged to the master
branch, you are going to upload your source code to the Python Package Index
.
Being in the root of you project,
package
|
- ...
- source
- README.md
- setup.py
...
you do the following command:
$ python3 setup.py sdist
$ twine upload dist/*
And if you haven't forgotten to bump the PyPi package version number
, the upload is successful.
Continuous integration services are useful when you want add some robotic checking for your pull request changes.
For instance, you can run checking code style with flake8 and run tests with pytest to check your changes does not break existing functionality on the few version
of Python
. The configuration file example for Travis CI
is presented below.
language: python
python:
- "3.4"
- "3.5"
- "3.6"
- "3.7-dev"
install:
- pip install -r requirements-dev.txt
- pip install -r requirements-tests.txt
script:
- cat requirements-tests.txt requirements-dev.txt | safety check --stdin
- radon cc accessify -nb --total-average
- isort -rc accessify --diff && isort -rc tests --diff
- flake8 accessify
- coverage run -m pytest -vv tests
after_success:
- coverage report -m && coverage xml
- bash <(curl -s https://codecov.io/bash)
Each pull request the checking report will be presented. By clicking on the details
you will see full report.
FAQs
Check if you haven't forgotten to bump the PyPi package version number before you merge a release pull request.
We found that pypi-version demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer 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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.