Skip to main content

NWON Deployment

This package provides some basic functionality that we are using for our deployment scripts and CIs.

Package is meant for internal use at NWON as breaking changes may occur on version changes. This may change at some point but not for now 😇.

What we offer

This package can help you:

  • execute shell commands
  • handle dependant environments in a docker compose based deployment
  • docker commands
  • different deployment strategy for updating a service
  • setting files handling

Command execution

We offer functions for easily execute a shell command either locally or on a docker container that is attached to one of your defined services.

Running docker commands

We offer a bunch of function that makes it easy to interact with you docker stack through docker compose or docker commands.

There are also some functions that basically wrap functionalities from the official docker package and ads our logging and some typing.

On top you get functions that wait for a specific health or container status.

Environment handling

We assume that you have a folder which has folders with the names of all of your deployment environments. In the settings you can also define a function which defines a parent environment. For example it makes some sense to have a staging environment that is basically a copy of the production environments.

Here we offer some very simple helper to get the folder for the current environment and base environment.

Zero downtime deployment

We offer a bunch of functions updating a running docker stack either by simply starting or restarting or by performing a more sophisticated zero downtime update. You can also define post start executions for each defined service. For example migrating the database after updating an api service.

Setting file handling

Every environment needs settings. We handle those in toml files living on the environment directories. There is one base file that and should be checked into version control and potentially a local override file that should not be checked in.

We handle the creation of those override files and also the loading of the settings and validating them against the provided schema.

For facilitating working with the toml files we offer functions that will create json schema files for both of these setting files in the base of you deployment scripts folder. Another function will then add the schema comment to the toml files. And 💣 boom you have autocomplete in your setting files when your editor can handle schemas for toml files.

How to use

The package is configured via a setting object. You should set this settings in your deployment scripts before using any of the tools this package provides.

Typically this happens in the top level __init__.py file.

from nwon_deployment.settings import set_deployment_package_settings
from nwon_deployment.typings.deployment_settings import (
    DeploymentSettings,
    DeploymentSettingsApplicationSettings,
    DeploymentSettingsDocker,
    DeploymentSettingsGitlab,
    DeploymentSettingsPaths,
)

settings = DeploymentSettings(
    deployment_environment=deployment_environment,
    deployment_base_environment=deployment_base_environment,
    gitlab=DeploymentSettingsGitlab(
        gitlab_registry_url="https://registry.gitlab.com/test",
        use_gitlab_container_registry=False,
    ),
    docker=DeploymentSettingsDocker(
        stack_name="test",
        container_name=container_name,
        user_for_container={
            DockerService.Api: "test",
        },
        default_command_for_container={DockerService.Api: "zsh"},
        env_variable_map=env_variables_map_callable,
        compose_files=docker_compose_files,
    ),
    application_settings=DeploymentSettingsApplicationSettings(
        settings=Settings,
        lines_to_prepend_to_settings_override=["Some","thing"],
        lines_to_prepend_to_settings=["Some","other","thing"],
    ),
    paths=DeploymentSettingsPaths(
        deployment_scripts_base="/Some/path",
        deployment_environment="/Some/other/path",
    ),
)

set_deployment_package_settings(settings)

Working on the package

We recommend developing using poetry.

This are the steps to setup the project with a local virtual environment:

  1. Tell poetry to create dependencies in a .venv folder withing the project: poetry config virtualenvs.in-project true
  2. Create a virtual environment using the local python version: poetry env use $(cat .python-version)
  3. Install dependencies: poetry install

Prepare Package

Publishing the package it is not as straight forward as just calling poetry build 😥.

We need to:

  1. Clean dist folder
  2. Bump up the version of the package
  3. Build the package

Luckily we provide a script for doing all of this python scripts/prepare.py patch. Alternatively you can run the script in a poetry context poetry run prepare patch. The argument at the end defines whether you want a patch, minor or major version bump.

The final zipped data ends up in the dist folder.

Publish Package

Before publishing the package we need to:

  1. Add test PyPi repository: poetry config repositories.testpypi https://test.pypi.org/legacy/
  2. Publish the package to the test repository: poetry publish -r testpypi
  3. Test package: pip install --index-url https://test.pypi.org/simple/ nwon_baseline

If everything works fine publish the package via poetry publish.

Release files for nwon_deployment 0.1.24

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nwon_deployment 0.1.24
File Size Uploaded
nwon_deployment-0.1.24.tar.gz 867.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nwon_deployment 0.1.24
File Interpreter ABI Platform
nwon_deployment-0.1.24-py3-none-any.whl Python 3 none any Details

Total release size: 2.3 MB

Release files / nwon_deployment-0.1.24.tar.gz

Download URL nwon_deployment-0.1.24.tar.gz
Size 867.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0d55d8de1727f9f456e1ca0a6b01d538f7cd068785f2b0e44d3591770cbc959d
BLAKE2b-256 checksum
How to use checksums
e0b85f74c84f5c1db7bd4190b7c4be2b4fdb82a4735ed5b3fd2cfa2e95ce3a14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.11.6 Linux/6.2.0-37-generic

Release files / nwon_deployment-0.1.24-py3-none-any.whl

Download URL nwon_deployment-0.1.24-py3-none-any.whl
Size 1.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
49a5bf73133a30a171524d438e6284133e833daabca0fd67fdd143894a0d3769
BLAKE2b-256 checksum
How to use checksums
49f3137835ba267d438735f440da63b46bf9b713d8151255de97ae5f249a170e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.11.6 Linux/6.2.0-37-generic

Release history Release notifications | RSS feed

This release

0.1.24 This release

2 release files

0.1.23

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page