Skip to main content

Pypeline step for semantic release.

Project description

Pypeline steps for semantic release

CI Status pypeline Poetry ruff pre-commit

PyPI Version Supported Python versions License

So you are using Pypeline and you want to automate your python package release process, then you might want to consider the following steps:

  1. CheckCIContext Step:

    • Checks if the current CI context (e.g. Jenkins, Github, etc.) and updates the information in the execution environment to be used by the other steps.
  2. CreateReleaseCommit Step:

    • Automates versioning and creates a new release commit and tag based on your commit messages.
    • It is a wrapper for the python-semantic-release tool to be used as Pypeline step.
  3. PublishPackage Step:

    • Uses poetry to publish your package to PyPI or another repository.
    • Configures credentials dynamically from environment variables.

How to use it

You need to add this module as a dependency in your pyproject.toml and then use the steps in your pypeline.yaml configuration.

inputs:
  prerelease_token:
    type: string
    description:
      "The prerelease token can be used when multiple users want to create release candidates.
      One can define an own unique token to avoid conflicts: rcN.dev, where N is a digit. For example: rc1.dev"
    required: false
    default: "rc"
  do_prerelease:
    type: boolean
    description: "If set to true, will create a prerelease. This is required to avoid creating prereleases automatically when pushing a branch."
    required: false
    default: false

pipeline:
  - step: CreateVEnv
    module: pypeline.steps.create_venv

  - step: CheckCIContext
    module: pypeline-semantic-release.steps

  - step: CreateReleaseCommit
    module: pypeline-semantic-release.steps

  - step: PublishPackage
    module: pypeline-semantic-release.steps
    config:
      pypi_repository_name: my-repo
      pypi_user_env: PYPI_USER
      pypi_password_env: PYPI_PASSWD

Create releases

The CreateReleaseCommit step will create a release commit based on the semantic-release configuration options in the pyproject.toml file.

[tool.semantic_release.branches.main]
match = "main"
prerelease = false

[tool.semantic_release.branches.feature]
match = "(?!main$)"
prerelease = true

When is a release created?

  • When a commit is pushed to the main branch, the step will create a release commit and tag if semantic-release detects a new version shall be created.
  • No release is created from a pull request
  • No release candidate is created automatically when pushing a branch. This is to avoid creating release candidates when a branch is pushed. See below how to create prereleases.

Create prereleases

Prereleases are only created when the do_prerelease input is set to true. One needs to provide the do_prerelease input when running the pypeline.

[!NOTE] To create a prerelease, one needs to push branch and manually trigger a build with the do_prerelease input set to true.

Depending on the CI system, one needs to define input parameters for the users to select when manually triggering the pipeline.

Github Actions

For Github Actions one can define the inputs in the workflow file:

name: CI

on:
  push:
    branches: [develop]
  pull_request:
    branches: [develop]

  workflow_dispatch:
    inputs:
      do_prerelease:
        type: boolean
        description: "If set to true, will create a prerelease.
          This is required to avoid creating prereleases automatically when pushing a branch."
        required: false
        default: false

      prerelease_token:
        description:
          "The prerelease token can be used when multiple users want to create release candidates.
          One can define an own unique token to avoid conflicts: rcN.dev, where N is a digit. For example: rc1.dev"
        required: false
        default: "rc"

[!NOTE] The way inputs are defined in Github Actions is similar to how they are defined in Pypeline.

Jenkins

For Jenkins, one can define the inputs in the pipeline script:

properties([
    parameters ([
    booleanParam(
            name: 'do_prerelease',
            defaultValue: false,
            description: '''If set to true, will create a prerelease.
                This is required to avoid creating prereleases automatically when pushing a branch.''',
        ),
    string(
            name: 'prerelease_token',
            defaultValue: '',
            description: '''The prerelease token can be used when multiple users
                want to create release candidates. One can define an own unique token
                to avoid conflicts: rcN.dev, where N is a digit. For example: rc1.dev'''
        ),
    ])
])

Contributing ✨

The project uses Poetry for dependencies management and packaging. Run the bootstrap.ps1 script to install Python and create the virtual environment.

.\bootstrap.ps1

This will also generate a poetry.lock file, you should track this file in version control.

To execute the test suite, call pytest inside Poetry's virtual environment via poetry run:

.venv/Scripts/poetry run pytest

Check out the Poetry documentation for more information on the available commands.

For those using VS Code there are tasks defined for the most common commands:

  • bootstrap
  • run tests
  • run all checks configured for pre-commit

See the .vscode/tasks.json for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypeline_semantic_release-0.4.1.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypeline_semantic_release-0.4.1-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file pypeline_semantic_release-0.4.1.tar.gz.

File metadata

File hashes

Hashes for pypeline_semantic_release-0.4.1.tar.gz
Algorithm Hash digest
SHA256 2c08df2eccb0d2674d9f7cc2a87f3ea59bef7c5f22f9374e7fe0e46187e44867
MD5 89d520a0d1c529ed792b322dd879e21e
BLAKE2b-256 aeb1917ebdd9c408471bb80b07d2d7fc27a91fabf5dd87928e42a35422f16452

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypeline_semantic_release-0.4.1.tar.gz:

Publisher: ci.yml on cuinixam/pypeline-semantic-release

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pypeline_semantic_release-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pypeline_semantic_release-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5882867697291db3c6f49b7b1090a931ed493e2ef48b3ce329bf52519154190f
MD5 6de055a17296dc0f01ad5457321c4c08
BLAKE2b-256 2370dbc724672178d6926324e7fe0f798bb707dfe8cf21c6790ee64cd5d059b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypeline_semantic_release-0.4.1-py3-none-any.whl:

Publisher: ci.yml on cuinixam/pypeline-semantic-release

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page