Skip to main content

Release tool to have canary in resin.io

Project description

resin-release-tool

This tool is to set releases to release groups and canaries in balenaCloud

Installation

pip install resin-release-tool

Build / Run locally

You need poetry to build the project https://python-poetry.org/

poetry install
poetry build
poetry run resin-release-tool
etc..

Example usage

One canary group

Mark relevant devices with device tags with name "release_group" and value "canary" on balenaCloud.

To deploy a canary commit to them, run:

resin-release-tool --app $APP_ID release -c $CANARY_COMMIT -g canary

To deploy said commit to rest of devices, run:

resin-release-tool --app $APP_ID release -c $NEW_RELEASE_COMMIT -a
resin-release-tool --app $APP_ID unpin canary

(Note: Running the unpin command is not necessary if canary is already on NEW_RELEASE_COMMIT, however, without it, it won't track the latest app-wide release.)

Staggered release with multiple groups

Mark relevant devices with device tags with name "release_group" and value "release_group_1/2/3" on balenaCloud.

To deploy a commit to all devices in a staggered way:

(Add appropriate wait or checks between commands as appropriate for your usecase.)

resin-release-tool --app $APP_ID release -c $NEW_RELEASE_COMMIT -g release_group_1
resin-release-tool --app $APP_ID release -c $NEW_RELEASE_COMMIT -g release_group_2
resin-release-tool --app $APP_ID release -c $NEW_RELEASE_COMMIT -g release_group_3

resin-release-tool --app $APP_ID release -c $NEW_RELEASE_COMMIT -a
resin-release-tool --app $APP_ID unpin release_group_1 release_group_2 release_group_3

Usage

Usage: resin-release-tool [OPTIONS] COMMAND [ARGS]...

  You can set app and token as environment variables, using RESIN_APP and
  RESIN_TOKEN

Options:
  --token TOKEN  balenaCloud auth token  [required]
  --app APP_ID   balenaCloud app ID  [required]
  --help         Show this message and exit.

Commands:
  disable_rolling      Disables rolling releases in the application
  enable_rolling       Enables rolling releases in the application
  info                 Information of the application
  release              Sets release commits for a given release or app
  releases             Show successful releases of the application
  show_devices_status  Show the status of the devices in the app
  show_group_versions  Show the release versions of the devices in release groups
  unpin                Unpins the version of one or more releases

Development

  • The config file used by the balena_sdk is located at $HOME/.balena/balena.cfg

To format the code run:

black <path to files >

Tests can be run with

poetry run pytests

To debug/run commands in pycharm configure resin_release_tool/cli.py as the script path and the command you want to run as parameter (credentials can be added as envs)

Publishing a new version

Pre-release steps

  • upddate the changelog and run
    make release <version>  # e.g. v0.3.1
    
    to update the version in pyproject.toml

Release step

  • After merging these changes, tag the commit on master using git tag <version>. This must match the new version in the pyprojct.toml
  • push the new tag to Github git push origin <version> this should trigger the publish-to-pypi workflow

New versions are uploaded to https://pypi.org/project/resin-release-tool/

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

resin_release_tool-0.3.2.tar.gz (7.2 kB view hashes)

Uploaded Source

Built Distribution

resin_release_tool-0.3.2-py3-none-any.whl (8.3 kB view hashes)

Uploaded Python 3

Supported by

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