From 0617022e52a0f89d07cebbb16a5c1504fe5d160d Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 14:25:28 +0300 Subject: [PATCH 01/29] add Dockerfile --- Makefile | 15 +++++++++++++++ docker/Dockerfile | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Makefile create mode 100644 docker/Dockerfile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9dce8f9 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +docker-login: + docker login -u $(DOCKER_LOGIN) -p $(DOCKER_TOKEN) + +docker-build: + docker build -t statusmoney/release-tool:latest -f docker/Dockerfile . + +docker-push: + docker push statusmoney/release-tool:latest + +docker-shell: + # to run bash shell inside docker container + docker run -it --rm \ + --volume $(shell pwd):/app \ + --entrypoint bash \ + statusmoney/release-tool diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..62af917 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,37 @@ +# +# This Dockerfile is for Travis builds, so: +# 1. it requires release/deploy tools. +# 2. it doesn't bake in project dependencies at the build stage +# +FROM brunneis/python:3.7.7-ubuntu-18.04 + +ENV PYTHONUNBUFFERED 1 + +RUN apt-get update && apt-get install -y \ + # required to manage release branches + git \ + # clean + && rm -rf /var/lib/apt/lists/* + +# Install installation tools +RUN pip3 install --upgrade pip \ + && pip3 install poetry==1.1.10 \ + && poetry config virtualenvs.create false + +# Install release_tool dependencies +COPY poetry.lock /poetry.lock +COPY pyproject.toml /pyproject.toml +RUN poetry install + +# Install deployment dependencies +# would be great to drop them +RUN pip3 install awscli click==7.0 + +# place of release-tool +COPY . /release_tool/ +ENV PYTHONPATH="/release_tool:${PYTHONPATH}" + +# place of application that release-tool will be applied to +WORKDIR /app + +ENTRYPOINT ["python", "-m", "release", "--noinput"] From 0edcefffa9c04703c5ac70b7105760797f92d890 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 16:33:17 +0300 Subject: [PATCH 02/29] Add GitHubActions docker build --- .github/dependabot.yml | 7 ++++++ .github/workflows/docker-image.yml | 40 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..2c7d170 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..e492070 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,40 @@ +name: Docker Image CI + +on: + push: + branches: + - 'master' + pull_request: + branches: + - 'master' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - + name: Checkout + uses: actions/checkout@v2 + + - + name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_LOGIN }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Build and push + uses: docker/build-push-action@v3 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ${{ secrets.DOCKER_HUB_LOGIN }}/release-tool:latest + # GitHubActions cache + cache-from: type=gha + cache-to: type=gha,mode=max From e3052b0141bfa0402463adc3533cf3784060d00c Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 16:43:36 +0300 Subject: [PATCH 03/29] parametrize image name --- .github/workflows/docker-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index e492070..8117c3e 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -34,7 +34,7 @@ jobs: context: . file: ./docker/Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LOGIN }}/release-tool:latest + tags: ${{ secrets.DOCKER_HUB_LOGIN }}/${ secrets.DOCKER_IMAGE_NAME }:latest # GitHubActions cache cache-from: type=gha cache-to: type=gha,mode=max From 9471d1e3f53068eb5bde1c38372f67489b4caaaa Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 16:45:41 +0300 Subject: [PATCH 04/29] parametrize image name (2) --- .github/workflows/docker-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 8117c3e..e67aafe 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -34,7 +34,7 @@ jobs: context: . file: ./docker/Dockerfile push: true - tags: ${{ secrets.DOCKER_HUB_LOGIN }}/${ secrets.DOCKER_IMAGE_NAME }:latest + tags: ${{ secrets.DOCKER_HUB_LOGIN }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest # GitHubActions cache cache-from: type=gha cache-to: type=gha,mode=max From c48c5aad47ff3da5d280bd9efbe1a6af8243ebde Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 17:03:22 +0300 Subject: [PATCH 05/29] Make it better --- .github/workflows/docker-image.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index e67aafe..5b903b5 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -4,31 +4,30 @@ on: push: branches: - 'master' + # run it during any pull request pull_request: - branches: - - 'master' jobs: - build: + build-and-push-docker-image: + name: Build Docker image and push to DockerHub runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_LOGIN }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - - - name: Set up Docker Buildx + - + name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v2 - - - name: Build and push + - + name: Build image and push to Docker Hub uses: docker/build-push-action@v3 with: context: . @@ -38,3 +37,6 @@ jobs: # GitHubActions cache cache-from: type=gha cache-to: type=gha,mode=max + - + name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} From a59531b0cac893c6ad7ace01170cb3ba635d5c71 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sat, 21 May 2022 17:04:21 +0300 Subject: [PATCH 06/29] Don't push docker image in PR builds --- .github/workflows/docker-image.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 5b903b5..2cd9ea8 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -32,8 +32,10 @@ jobs: with: context: . file: ./docker/Dockerfile - push: true tags: ${{ secrets.DOCKER_HUB_LOGIN }}/${{ secrets.DOCKER_IMAGE_NAME }}:latest + # build on feature branches, push only on main branch + push: ${{ github.ref == 'refs/heads/master' }} + # GitHubActions cache cache-from: type=gha cache-to: type=gha,mode=max From ffa473e104fae5f03f8a75b9f71e1796f8063b8c Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sun, 22 May 2022 19:30:50 +0300 Subject: [PATCH 07/29] fix Dockerfile --- docker/Dockerfile | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 62af917..ef4b7a1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -10,6 +10,8 @@ ENV PYTHONUNBUFFERED 1 RUN apt-get update && apt-get install -y \ # required to manage release branches git \ + # to get/set version in json files + jq \ # clean && rm -rf /var/lib/apt/lists/* @@ -23,10 +25,6 @@ COPY poetry.lock /poetry.lock COPY pyproject.toml /pyproject.toml RUN poetry install -# Install deployment dependencies -# would be great to drop them -RUN pip3 install awscli click==7.0 - # place of release-tool COPY . /release_tool/ ENV PYTHONPATH="/release_tool:${PYTHONPATH}" @@ -34,4 +32,4 @@ ENV PYTHONPATH="/release_tool:${PYTHONPATH}" # place of application that release-tool will be applied to WORKDIR /app -ENTRYPOINT ["python", "-m", "release", "--noinput"] +ENTRYPOINT ["python", "-m", "release"] From b9cfb51bfab2d8157715de3582451925b9ae697b Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sun, 22 May 2022 19:31:20 +0300 Subject: [PATCH 08/29] New script and configs --- examples/release | 168 ++++++++++++++++++ examples/release_tool.ci.yml | 26 +++ .../release_tool.yml | 13 +- 3 files changed, 199 insertions(+), 8 deletions(-) create mode 100644 examples/release create mode 100644 examples/release_tool.ci.yml rename config-stub.full.yml => examples/release_tool.yml (77%) diff --git a/examples/release b/examples/release new file mode 100644 index 0000000..b16f0ec --- /dev/null +++ b/examples/release @@ -0,0 +1,168 @@ +#!/usr/bin/env bash + +# +# Handy script for release-tool with shortcuts +# https://github.com/TangleInc/release-tool +# + +set -o errexit +set -o pipefail +set -o nounset +#set -o xtrace + + +# provide relative path to release-tool config file +RELEASE_TOOL_CONFIG="release_tool.yml" +RELEASE_TOOL_CI_CONFIG="release_tool.ci.yml" + + +# auto detect if it's a Frontend or Backend repo +FILE="package.json" +if test -f "${FILE}"; then + get_version=get_frontend_version + set_version=set_frontend_version +else + get_version=get_backend_version + set_version=set_backend_version +fi + + +function run_release_tool_natively() { + # Old/native way to use release-tool, + # better use `run_release_tool_in_docker`. + + # These lines for pyenv and can be different + # for your virtual env manager + PYENV_PATH=${HOME}/.pyenv/bin + + # run in subshell, to not override parent shell PATH, + # or environment variables, can be useful for frontends + # who don't need initialized `pyenv` + ( + export PATH=${PYENV_PATH}:${PATH} + eval "$(pyenv init --path)" + eval "$(pyenv virtualenv-init -)" + + python \ + -m submodules.release_tool.release \ + --config=${RELEASE_TOOL_CONFIG} \ + "$@" + ) +} + + +function run_release_tool_in_docker() { + # preferable usage of release-tool + docker run --rm \ + --volume $(pwd):/app \ + statusmoney/release-tool \ + --config=${RELEASE_TOOL_CONFIG} \ + "$@" +} + + +function run_release_tool_for_travis() { + # Set this env parameters in TravisCI: + # * RELEASE_TOOL_GITHUB_TOKEN + # * RELEASE_TOOL_JIRA_TOKEN + + docker run --rm \ + --volume $(pwd):/app \ + --env RELEASE_TOOL_GITHUB_TOKEN \ + --env RELEASE_TOOL_JIRA_TOKEN \ + statusmoney/release-tool \ + --config=${RELEASE_TOOL_TRAVIS_CONFIG} \ + --noinput \ + "$@" +} + + +function get_backend_version() { + cat pyproject.toml | grep -e '^version = "' | sed -E 's/.*"(.+)".*\s*/\1/' +} + + +function set_backend_version() { + version=$1 + version_line="version = \"${version}\"" + + sed -i '' -E "s/^version = \"(.+)\".*\s*/${version_line}/" pyproject.toml +} + + +function get_frontend_version() { + cat package.json | jq -r '.version' +} + + +function _set_frontend_version() { + version=$1 + filename=$2 + + cat ${filename} \ + | jq -r ".version = \"${version}\"" \ + > "tmp.${filename}" \ + && mv "tmp.${filename}" ${filename} +} + +function set_frontend_version() { + version=$1 + _set_frontend_version ${version} package.json + _set_frontend_version ${version} package-lock.json +} + +# Parse CLI params +# --------------------------------------------------------- + +case "${1:-}" in + +# Specialized commands: + +"get-backend-version") + # example: ./release get-backend-version + get_backend_version + ;; +"set-backend-version") + # example: ./release set-backend-version 1.0.0 + set_backend_version $2 + ;; + +"get-frontend-version") + # example: ./release get-frontend-version + get_frontend_version + ;; +"set-frontend-version") + # example: ./release set-frontend-version 1.0.0 + set_frontend_version $2 + ;; + +"run-in-docker") + # example: ./release run-in-docker make-links + run_release_tool_in_docker "${@:2}" + ;; +"run-native") + # example: ./release run-native make-links + run_release_tool_natively "${@:2}" + ;; + +"travis") + # example: ./release travis make-links + run_release_tool_for_travis "${@:2}" + ;; + + +# Commonly used commands: + +"get-version") + # example: ./release get-version + ${get_version} + ;; +"set-version") + # example: ./release set-version 1.0.0 + ${set_version} $2 + ;; +*) + # example: ./release make-links + run_release_tool_in_docker "${@:1}" + ;; +esac diff --git a/examples/release_tool.ci.yml b/examples/release_tool.ci.yml new file mode 100644 index 0000000..4ccf117 --- /dev/null +++ b/examples/release_tool.ci.yml @@ -0,0 +1,26 @@ +# Config file for release-tool +# https://github.com/TangleInc/release-tool + +github: + task-re: SM-\d+ + token: `RELEASE_TOOL_GITHUB_TOKEN` set in CI (.travis.yml) + +jira: + connection: + server: https://tangle.atlassian.net + # StatusMoney_TravisBot + user: statustravisbuildbot@statusmoney.com + token: `RELEASE_TOOL_JIRA_TOKEN` set in CI (.travis.yml) + release-task: + project: SM + type: Release + + # choose your component: + component: Frontend + component: Native + component: BSF + component: BSM + +hooks: + get-version: ./release get-version + set-version: ./release set-version {version} diff --git a/config-stub.full.yml b/examples/release_tool.yml similarity index 77% rename from config-stub.full.yml rename to examples/release_tool.yml index fb64bd0..f2d6219 100644 --- a/config-stub.full.yml +++ b/examples/release_tool.yml @@ -1,3 +1,6 @@ +# Config file for release-tool +# https://github.com/TangleInc/release-tool + github: task-re: SM-\d+ @@ -46,14 +49,8 @@ jira: - "Story" hooks: - # Step 4. Choose you hooks - # for backend: - get-version: python submodules/shared/src/deploy/scripts/release_utils.py get-version - set-version: python submodules/shared/src/deploy/scripts/release_utils.py set-version {version} - - # for frontend: - get-version: npm run --silent print-version - set-version: yarn version --no-git-tag-version --new-version {version} && npm i + get-version: ./release get-version + set-version: ./release set-version {version} # can be omitted if default params are not changed From 9e6d01db67fc53e334bb895bd20c7d67810ccbd3 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Sun, 22 May 2022 19:31:35 +0300 Subject: [PATCH 09/29] Update documentation --- README.alternative.md | 111 +++++++++++++++++++++++++++++ README.md | 158 +++++++++--------------------------------- 2 files changed, 142 insertions(+), 127 deletions(-) create mode 100644 README.alternative.md diff --git a/README.alternative.md b/README.alternative.md new file mode 100644 index 0000000..d79b41c --- /dev/null +++ b/README.alternative.md @@ -0,0 +1,111 @@ +# Alternative installation - as a submodule or full installation + + +> ⚠️ **Not recommended, unless you want to contribute. Use Recommended way to use releaso-tool is [README.md](README.md).** + + +Table of Contents +================= + +* [Alternative installation \- as a submodule or full installation](#alternative-installation---as-a-submodule-or-full-installation) + * [1\. Prerequisites:](#1-prerequisites) + * [1\.1\. Install poetry](#11-install-poetry) + * [1\.2\. Install virtual env manager](#12-install-virtual-env-manager) + * [2\. Initial integration of release\-tool](#2-initial-integration-of-release-tool) + * [3\. Configuration: for each local repository that already has release\-tool integrated as a submodule](#3-configuration-for-each-local-repository-that-already-has-release-tool-integrated-as-a-submodule) + * [3\.1\. Create virtual env](#31-create-virtual-env) + * [3\.2\. Tell git to download submodule](#32-tell-git-to-download-submodule) + * [3\.3\. Install dependencies](#33-install-dependencies) + * [3\.4\. Configure](#34-configure) + +Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc.go) + +```bash +gh-md-toc README.alternative.md +``` + + +### 1. Prerequisites: + +> ⚠️ **Done once per each computer** + +#### 1.1. Install poetry + +Install [poetry](https://github.com/sdispater/poetry) inside your virtualenv (prone to errors) or in a global python (preferable for python developers) + +```shell +pip install poetry==1.0.10 +``` + +#### 1.2. Install virtual env manager + +Install virtual env manager that you are comfortable with (like [pyenv](https://github.com/pyenv/pyenv)). + +Example: + +```shell +brew install pyenv +brew install pyenv-virtualenv + +# this version is officially supports MacBook on M1 chipset +pyenv install 3.8.10 +``` + + +### 2. Initial integration of release-tool + +> ⚠️ **Done only once per repository, scripts and configs are committed to repo** + +To start using release-tool in your project, add it as a git submodule. + +```shell +# add release tool as a submodule +git submodule add git@github.com:TangleInc/release-tool.git submodules/release_tool + +git add submodules/release_tool +git commit -m "Integrate release_tool" +git push +``` + +### 3. Configuration: for each local repository that already has release-tool integrated as a submodule + +> ⚠️ **Done once per each local repository** + +#### 3.1. Create virtual env + +```shell +cd {{project folder}} + +# choose appropriate ENV_NAME, e.g. socialfeed +pyenv virtualenv 3.8.10 {{ENV_NAME}} +pyenv local {{ENV_NAME}} +``` + +add `.python-version` to `.gitignore` + +#### 3.2. Tell git to download submodule + +```shell +git submodule update --init +``` + +#### 3.3. Install dependencies + +```shell +# activate virtual env created in previous step +cd submodules/release_tool +poetry install + +# return to project folder +cd - +``` + +#### 3.4. Configure + +Configuration is the same as (See [README.md](README.md#2.2-Configuration)). + +After configuration, you will be able to use release-tool as follows: + +```bash +./release native [command] +``` diff --git a/README.md b/README.md index 5eee73b..364563e 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,19 @@ # Release Tool Table of Contents +================= * [Release Tool](#release-tool) - * [1\. Usage](#1-usage) - * [1\.1\. Start release](#11-start-release) - * [1\.2\. Start hotfix](#12-start-hotfix) - * [1\.3\. Finish release](#13-finish-release) - * [1\.4\. Manual](#14-manual) - * [2\. Init](#2-init) - * [2\.1\. Prerequisites:](#21-prerequisites) - * [2\.1\.1\. Install poetry](#211-install-poetry) - * [2\.1\.2\. Install virtual env manager](#212-install-virtual-env-manager) - * [2\.2\. Configuration: for each local repository](#22-configuration-for-each-local-repository) - * [2\.2\.1\. Create virtual env](#221-create-virtual-env) - * [2\.2\.2\. Tell git to download submodule](#222-tell-git-to-download-submodule) - * [2\.2\.3\. Install dependencies](#223-install-dependencies) - * [2\.2\.4\. Create configuration file \./release\_tool\.yml](#224-create-configuration-file-release_toolyml) - * [2\.2\.5\. Create handy command \./release](#225-create-handy-command-release) - * [2\.3\. (Optional) How to integrate to new repository](#23-optional-how-to-integrate-to-new-repository) + * [1\. Usage](#1-usage) + * [1\.1\. Start release](#11-start-release) + * [1\.2\. Start hotfix](#12-start-hotfix) + * [1\.3\. Finish release](#13-finish-release) + * [1\.4\. Manual](#14-manual) + * [2\. Init](#2-init) + * [2\.1 Installation (as a docker container)](#21-installation-as-a-docker-container) + * [2\.2 Configuration](#22-configuration) + * [2\.2\.1 Secrets: GitHub token](#221-secrets-github-token) + * [2\.2\.1 Secrets: Jira token](#221-secrets-jira-token) Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc.go) @@ -96,131 +91,40 @@ gh-md-toc README.md ## 2. Init -### 2.1. Prerequisites: +### 2.1 Installation (as a docker container) -> ⚠️ **Done once per each local machine** +> ⚠️ **Done once per each computer** -#### 2.1.1. Install poetry +1. Install docker +2. login to TangleInc docker account: -Install [poetry](https://github.com/sdispater/poetry) inside your virtualenv (prone to errors) or in a global python (preferable for python developers) - -```shell -pip install poetry==1.0.10 -``` - -#### 2.1.2. Install virtual env manager - -Install virtual env manager that you are comfortable with (like [pyenv](https://github.com/pyenv/pyenv)). - -Example: - -```shell -brew install pyenv -brew install pyenv-virtualenv - -# this version is officially supports MacBook on M1 chipset -pyenv install 3.8.10 -``` - -Configuration choices: -1. For permanent access to virtual environment put these lines to your shell config (e.g. `.bash_profile`) and then reload your shell -```shell -export PATH=${HOME}/.pyenv/bin -eval "$(pyenv init --path)" -eval "$(pyenv virtualenv-init -)" -``` - -2. For one time run: simply save these lines or create alias. Then, each time you want to use release_tool you will need to execute them before running release_tool commands. - -3. While creating [handy command \./release](#225-create-handy-command-release) you can also configure shell environment - -After you created `./release` file, edit it to make it like that: - -```shell -# these lines for pyenv and can be different for your virtual env manager -export PATH=${HOME}/.pyenv/bin -eval "$(pyenv init --path)" -eval "$(pyenv virtualenv-init -)" - -python -m submodules.release_tool.release $* +```bash +docker login -u statusmoney -p ``` - -### 2.2. Configuration: for each local repository - -> ⚠️ **Done once per each local repository** - -#### 2.2.1. Create virtual env - -```shell -cd {{project folder}} - -# choose appropriate ENV_NAME, e.g. socialfeed -pyenv virtualenv 3.8.10 {{ENV_NAME}} -pyenv local {{ENV_NAME}} +3. Download the latest image: + +```bash +docker pull statusmoney/release-tool:latest ``` -add `.python-version` to `.gitignore` - -#### 2.2.2. Tell git to download submodule +### 2.2 Configuration -```shell -git submodule update --init -``` +> ⚠️ **Done once per each repo** -#### 2.2.3. Install dependencies +Copy the latest script and config files from ure: add to your project root (See [examples](examples)). -```shell -# activate virtual env created in previous step -cd submodules/release_tool -poetry install - -# return to project folder -cd - -``` +* `release` - handy shortcuts - make executable and add to git +* `release_tool.yml` - config file for local machine - **add to .gitignore** +* `release_tool.ci.yml` - config file for CI - verify parameters (such as `component`) and add to git -#### 2.2.4. Create configuration file `./release_tool.yml` +Next, in order to set up integration with GitHub and Jira, secret tokens should be added to `release.yml` (as-is) and to `travis.yml` (encrypted with `travis encrypt `). -You need to create a config and provide your auth and other info there in order to login to Github and Jira. +### 2.2.1 Secrets: GitHub token To get Github token `Settings` -> `Developer settings` -> `Personal access tokens` -> `Generate new token` select option repo: `Full control of private repositories` -To get Jira token use [this doc](https://confluence.atlassian.com/cloud/api-tokens-938839638.html) - -```shell -# create a personal config, release_tool.yml is a name used by default, so it's strongly suggested -cp submodules/release_tool/config-stub.full.yml release_tool.yml -# add "release_tool.yml" to .gitignore -``` - -#### 2.2.5. Create handy command `./release` - -To avoid typing long commands such as: -```shell -python -m submodules.release_tool.release -h -``` - -Make alias to use it like this `./release [command]` -```shell -echo 'python -m submodules.release_tool.release $*' > release -chmod +x release -# you can either commit "release" or add it to .gitignore -``` - -### 2.3. (Optional) How to integrate to new repository - -> ⚠️ **Done only once per repository** +### 2.2.1 Secrets: Jira token -To start using release_tool in your project add it as a git submodule. - -```shell -# add release tool as a submodule -git submodule add git@github.com:TangleInc/release-tool.git submodules/release_tool - -git add submodules/release_tool -git commit -m "Integrate release_tool" -git push -``` - -Then configure your local installation of release_tool check this guide [2\.2\. Configuration: for each local repository](#22-configuration-for-each-local-repository) +To get Jira token use [this doc](https://confluence.atlassian.com/cloud/api-tokens-938839638.html) From d682cbb300618c338b318f8901499ff039b392a5 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Mon, 23 May 2022 01:01:35 +0300 Subject: [PATCH 10/29] Docker: use official python:3.10.4-slim --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index ef4b7a1..614f9f9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,7 +3,7 @@ # 1. it requires release/deploy tools. # 2. it doesn't bake in project dependencies at the build stage # -FROM brunneis/python:3.7.7-ubuntu-18.04 +FROM python:3.10.4-slim ENV PYTHONUNBUFFERED 1 From 5295e32502e13ee2e4af2ed29bf3302281e56020 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Mon, 23 May 2022 01:02:05 +0300 Subject: [PATCH 11/29] fix ./release script params --- examples/release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/release b/examples/release index b16f0ec..8f1116f 100644 --- a/examples/release +++ b/examples/release @@ -53,7 +53,7 @@ function run_release_tool_natively() { function run_release_tool_in_docker() { # preferable usage of release-tool - docker run --rm \ + docker run -it --rm \ --volume $(pwd):/app \ statusmoney/release-tool \ --config=${RELEASE_TOOL_CONFIG} \ From 75927f78483feabe5590413ffebc2815744e7554 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Mon, 23 May 2022 01:03:55 +0300 Subject: [PATCH 12/29] fix ci params --- examples/release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/release b/examples/release index 8f1116f..715417d 100644 --- a/examples/release +++ b/examples/release @@ -71,7 +71,7 @@ function run_release_tool_for_travis() { --env RELEASE_TOOL_GITHUB_TOKEN \ --env RELEASE_TOOL_JIRA_TOKEN \ statusmoney/release-tool \ - --config=${RELEASE_TOOL_TRAVIS_CONFIG} \ + --config=${RELEASE_TOOL_CI_CONFIG} \ --noinput \ "$@" } From b652d6e7c9ee754186f079c35d2169cc82706d47 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Mon, 23 May 2022 01:37:54 +0300 Subject: [PATCH 13/29] update pre-commit hooks --- .pre-commit-config.yaml | 34 ++- poetry.lock | 625 +++++++++++++++++++++++++++++++--------- pyproject.toml | 3 +- 3 files changed, 517 insertions(+), 145 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3bc778c..558e537 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,21 +1,25 @@ repos: -- repo: https://github.com/ambv/black - rev: stable + - repo: https://github.com/ambv/black + rev: 22.3.0 hooks: - - id: black - language_version: python3.7 + - id: black -- repo: https://github.com/timothycrosley/isort - rev: master + - repo: https://github.com/pycqa/isort + rev: 5.10.1 hooks: - - id: isort - name: isort - entry: isort - language: system - types: [python] + - id: isort + args: [ "--profile", "black" ] -- repo: https://gitlab.com/pycqa/flake8 - rev: 3.7.7 + - repo: https://gitlab.com/pycqa/flake8 + rev: 4.0.1 hooks: - - id: flake8 - language_version: python3.7 + - id: flake8 + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.2.0 + hooks: + - id: check-yaml + - id: debug-statements + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-added-large-files diff --git a/poetry.lock b/poetry.lock index f6afc8d..d9cf1b5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,309 +1,676 @@ [[package]] -category = "main" -description = "Python package for providing Mozilla's CA Bundle." name = "certifi" +version = "2022.5.18.1" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false -python-versions = "*" -version = "2020.6.20" +python-versions = ">=3.6" [[package]] +name = "cffi" +version = "1.15.0" +description = "Foreign Function Interface for Python calling C code." category = "main" -description = "Universal encoding detector for Python 2 and 3" -name = "chardet" optional = false python-versions = "*" -version = "3.0.4" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" [[package]] +name = "charset-normalizer" +version = "2.0.12" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" -description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "cryptography" +version = "37.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools_rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] + +[[package]] name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.6.0" [[package]] -category = "main" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." name = "deprecated" +version = "1.2.13" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.2.10" [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["tox", "bumpversion (<1)", "sphinx (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] +dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] [[package]] -category = "main" -description = "Internationalized Domain Names in Applications (IDNA)" -name = "idna" +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.10" +python-versions = "*" + +[[package]] +name = "filelock" +version = "3.7.0" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] [[package]] +name = "identify" +version = "2.5.1" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" category = "main" -description = "Python library for interacting with JIRA via REST APIs." +optional = false +python-versions = ">=3.5" + +[[package]] name = "jira" +version = "2.0.0" +description = "Python library for interacting with JIRA via REST APIs." +category = "main" optional = false python-versions = "*" -version = "2.0.0" [package.dependencies] defusedxml = "*" +oauthlib = {version = ">=1.0.0", extras = ["signedtoken"]} pbr = ">=3.0.0" requests = ">=2.10.0" requests-oauthlib = ">=0.6.1" requests-toolbelt = "*" -setuptools = ">=20.10.1" six = ">=1.10.0" -[package.dependencies.oauthlib] -extras = ["signedtoken"] -version = ">=1.0.0" - [package.extras] async = ["requests-futures (>=0.9.7)"] cli = ["ipython (>=4.0.0,<6.0.0)", "ipython (>=4.0.0)"] opt = ["filemagic (>=1.6)", "pyjwt", "requests-jwt", "requests-kerberos"] [[package]] -category = "main" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + +[[package]] name = "oauthlib" +version = "3.2.0" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "3.1.0" +python-versions = ">=3.6" + +[package.dependencies] +cryptography = {version = ">=3.0.0", optional = true, markers = "extra == \"signedtoken\""} +pyjwt = {version = ">=2.0.0,<3", optional = true, markers = "extra == \"signedtoken\""} [package.extras] -rsa = ["cryptography"] -signals = ["blinker"] -signedtoken = ["cryptography", "pyjwt (>=1.0.0)"] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] -category = "main" -description = "Python Build Reasonableness" name = "pbr" +version = "5.9.0" +description = "Python Build Reasonableness" +category = "main" optional = false python-versions = ">=2.6" -version = "5.5.0" [[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + +[[package]] +name = "pre-commit" +version = "2.19.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" category = "main" -description = "Use the full Github API v3" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] name = "pygithub" +version = "1.55" +description = "Use the full Github API v3" +category = "main" optional = false -python-versions = ">=3.5" -version = "1.53" +python-versions = ">=3.6" [package.dependencies] deprecated = "*" -pyjwt = "*" +pyjwt = ">=2.0" +pynacl = ">=1.4.0" requests = ">=2.14.0" [package.extras] integrations = ["cryptography"] [[package]] -category = "main" -description = "JSON Web Token implementation in Python" name = "pyjwt" +version = "2.4.0" +description = "JSON Web Token implementation in Python" +category = "main" optional = false -python-versions = "*" -version = "1.7.1" +python-versions = ">=3.6" [package.extras] -crypto = ["cryptography (>=1.4)"] -flake8 = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>=4.0.1,<5.0.0)", "pytest-cov (>=2.6.0,<3.0.0)", "pytest-runner (>=4.2,<5.0.0)"] +crypto = ["cryptography (>=3.3.1)"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" category = "main" -description = "YAML parser and emitter for Python" -name = "pyyaml" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "5.3.1" +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] +name = "pyyaml" +version = "5.4.1" +description = "YAML parser and emitter for Python" category = "main" -description = "Python HTTP for Humans." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[[package]] name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.24.0" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.dependencies] certifi = ">=2017.4.17" -chardet = ">=3.0.2,<4" -idna = ">=2.5,<3" -urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" [package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] [[package]] -category = "main" -description = "OAuthlib authentication support for Requests." name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.3.0" [package.dependencies] oauthlib = ">=3.0.0" requests = ">=2.0.0" [package.extras] -rsa = ["oauthlib (>=3.0.0)"] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] -category = "main" -description = "A utility belt for advanced users of python-requests" name = "requests-toolbelt" +version = "0.9.1" +description = "A utility belt for advanced users of python-requests" +category = "main" optional = false python-versions = "*" -version = "0.9.1" [package.dependencies] requests = ">=2.0.1,<3.0.0" [[package]] -category = "main" -description = "Python helper for Semantic Versioning (http://semver.org/)" name = "semver" +version = "2.13.0" +description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.10.2" [[package]] -category = "main" -description = "Python 2 and 3 compatibility utilities" name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.15.0" [[package]] -category = "main" -description = "ANSII Color formatting for output in terminal." name = "termcolor" +version = "1.1.0" +description = "ANSII Color formatting for output in terminal." +category = "main" optional = false python-versions = "*" -version = "1.1.0" [[package]] -category = "main" -description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] name = "urllib3" +version = "1.26.9" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "1.25.10" [package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.14.1" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] [[package]] -category = "main" -description = "Module for decorators, wrappers and monkey patching." name = "wrapt" +version = "1.14.1" +description = "Module for decorators, wrappers and monkey patching." +category = "main" optional = false -python-versions = "*" -version = "1.12.1" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [metadata] -content-hash = "90a6a9caa2641195e605c40a088630e57445e26e96d9615f53266fb7ce2e0ef2" -lock-version = "1.0" -python-versions = "^3.7" +lock-version = "1.1" +python-versions = "^3.10.4" +content-hash = "4fd1b43145496d577e5b1fbd0a6be389c6159810236b364f2ecb3937113c0e5e" [metadata.files] certifi = [ - {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, - {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, + {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, + {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, +] +cffi = [ + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, +] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] -chardet = [ - {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, - {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +cryptography = [ + {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181"}, + {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336"}, + {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004"}, + {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe"}, + {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804"}, + {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c"}, + {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178"}, + {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a"}, + {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15"}, + {file = "cryptography-37.0.2-cp36-abi3-win32.whl", hash = "sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0"}, + {file = "cryptography-37.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d"}, + {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9"}, + {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1"}, + {file = "cryptography-37.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023"}, + {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06"}, + {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717"}, + {file = "cryptography-37.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f"}, + {file = "cryptography-37.0.2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982"}, + {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4"}, + {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de"}, + {file = "cryptography-37.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452"}, + {file = "cryptography-37.0.2.tar.gz", hash = "sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e"}, ] defusedxml = [ - {file = "defusedxml-0.6.0-py2.py3-none-any.whl", hash = "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93"}, - {file = "defusedxml-0.6.0.tar.gz", hash = "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5"}, + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] deprecated = [ - {file = "Deprecated-1.2.10-py2.py3-none-any.whl", hash = "sha256:a766c1dccb30c5f6eb2b203f87edd1d8588847709c78589e1521d769addc8218"}, - {file = "Deprecated-1.2.10.tar.gz", hash = "sha256:525ba66fb5f90b07169fdd48b6373c18f1ee12728ca277ca44567a367d9d7f74"}, + {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, + {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, +] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] +filelock = [ + {file = "filelock-3.7.0-py3-none-any.whl", hash = "sha256:c7b5fdb219b398a5b28c8e4c1893ef5f98ece6a38c6ab2c22e26ec161556fed6"}, + {file = "filelock-3.7.0.tar.gz", hash = "sha256:b795f1b42a61bbf8ec7113c341dad679d772567b936fbd1bf43c9a238e673e20"}, +] +identify = [ + {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, + {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, ] idna = [ - {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, - {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] jira = [ {file = "jira-2.0.0-py2.py3-none-any.whl", hash = "sha256:9adeead4d5f5a6aff74c630787f8bd2d4b0e154f3a3036641298064e91b2d25d"}, {file = "jira-2.0.0.tar.gz", hash = "sha256:e2a94adff98e45b29ded030adc76103eab34fa7d4d57303f211f572bedba0e93"}, ] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] oauthlib = [ - {file = "oauthlib-3.1.0-py2.py3-none-any.whl", hash = "sha256:df884cd6cbe20e32633f1db1072e9356f53638e4361bef4e8b03c9127c9328ea"}, - {file = "oauthlib-3.1.0.tar.gz", hash = "sha256:bee41cc35fcca6e988463cacc3bcb8a96224f470ca547e697b604cc697b2f889"}, + {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"}, + {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"}, ] pbr = [ - {file = "pbr-5.5.0-py2.py3-none-any.whl", hash = "sha256:5adc0f9fc64319d8df5ca1e4e06eea674c26b80e6f00c530b18ce6a6592ead15"}, - {file = "pbr-5.5.0.tar.gz", hash = "sha256:14bfd98f51c78a3dd22a1ef45cf194ad79eee4a19e8e1a0d5c7f8e81ffe182ea"}, + {file = "pbr-5.9.0-py2.py3-none-any.whl", hash = "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a"}, + {file = "pbr-5.9.0.tar.gz", hash = "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +pre-commit = [ + {file = "pre_commit-2.19.0-py2.py3-none-any.whl", hash = "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10"}, + {file = "pre_commit-2.19.0.tar.gz", hash = "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] pygithub = [ - {file = "PyGithub-1.53-py3-none-any.whl", hash = "sha256:8ad656bf79958e775ec59f7f5a3dbcbadac12147ae3dc42708b951064096af15"}, - {file = "PyGithub-1.53.tar.gz", hash = "sha256:776befaddab9d8fddd525d52a6ca1ac228cf62b5b1e271836d766f4925e1452e"}, + {file = "PyGithub-1.55-py3-none-any.whl", hash = "sha256:2caf0054ea079b71e539741ae56c5a95e073b81fa472ce222e81667381b9601b"}, + {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, ] pyjwt = [ - {file = "PyJWT-1.7.1-py2.py3-none-any.whl", hash = "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e"}, - {file = "PyJWT-1.7.1.tar.gz", hash = "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"}, + {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, + {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, +] +pynacl = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] pyyaml = [ - {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, - {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, - {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, - {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, - {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, + {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, + {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, + {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, + {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, + {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, + {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, + {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, + {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, + {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, + {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, + {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, + {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, + {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, + {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, + {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, + {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, + {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] requests = [ - {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"}, - {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"}, + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] requests-oauthlib = [ - {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"}, - {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"}, - {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"}, + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, ] requests-toolbelt = [ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] semver = [ - {file = "semver-2.10.2-py2.py3-none-any.whl", hash = "sha256:21e80ca738975ed513cba859db0a0d2faca2380aef1962f48272ebf9a8a44bd4"}, - {file = "semver-2.10.2.tar.gz", hash = "sha256:c0a4a9d1e45557297a722ee9bac3de2ec2ea79016b6ffcaca609b0bc62cf4276"}, + {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, + {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, ] six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] termcolor = [ {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, ] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] urllib3 = [ - {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"}, - {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"}, + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, +] +virtualenv = [ + {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, + {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, ] wrapt = [ - {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] diff --git a/pyproject.toml b/pyproject.toml index ae086fe..37f30a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "A tool that automate managing releases, integrates with Jira and authors = ["Valentin Kuznetsov "] [tool.poetry.dependencies] -python = "^3.7" +python = "^3.10.4" PyGithub = "^1.43" jira = "^2.0" PyYAML = "^5.1" @@ -13,6 +13,7 @@ semver = "^2.8" termcolor = "^1.1.0" [tool.poetry.dev-dependencies] +pre-commit = "^2.19.0" [build-system] requires = ["poetry>=1.0.10"] From 2aacf29b0855618a97e05a2e5dc4f1ddde1d6302 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Mon, 23 May 2022 01:39:13 +0300 Subject: [PATCH 14/29] lock poetry --- poetry.lock | 438 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 438 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index d9cf1b5..04c0f3a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,33 @@ +[[package]] +name = "cachecontrol" +version = "0.12.11" +description = "httplib2 caching for requests" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} +msgpack = ">=0.5.2" +requests = "*" + +[package.extras] +filecache = ["lockfile (>=0.9)"] +redis = ["redis (>=2.10.5)"] + +[[package]] +name = "cachy" +version = "0.3.0" +description = "Cachy provides a simple yet effective caching library." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +redis = ["redis (>=3.3.6,<4.0.0)"] +memcached = ["python-memcached (>=1.59,<2.0)"] +msgpack = ["msgpack-python (>=0.5,<0.6)"] + [[package]] name = "certifi" version = "2022.5.18.1" @@ -36,6 +66,38 @@ python-versions = ">=3.5.0" [package.extras] unicode_backport = ["unicodedata2"] +[[package]] +name = "cleo" +version = "0.8.1" +description = "Cleo allows you to create beautiful and testable command-line interfaces." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +clikit = ">=0.6.0,<0.7.0" + +[[package]] +name = "clikit" +version = "0.6.2" +description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +pastel = ">=0.2.0,<0.3.0" +pylev = ">=1.3,<2.0" + +[[package]] +name = "crashtest" +version = "0.3.1" +description = "Manage Python errors with ease" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + [[package]] name = "cryptography" version = "37.0.2" @@ -97,6 +159,24 @@ python-versions = ">=3.7" docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +six = ">=1.9" +webencodings = "*" + +[package.extras] +all = ["genshi", "chardet (>=2.2)", "lxml"] +chardet = ["chardet (>=2.2)"] +genshi = ["genshi"] +lxml = ["lxml"] + [[package]] name = "identify" version = "2.5.1" @@ -116,6 +196,34 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "importlib-metadata" +version = "4.11.4" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "jeepney" +version = "0.8.0" +description = "Low-level, pure Python DBus protocol wrapper." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pytest", "pytest-trio", "pytest-asyncio (>=0.17)", "testpath", "trio", "async-timeout"] +trio = ["trio", "async-generator"] + [[package]] name = "jira" version = "2.0.0" @@ -138,6 +246,40 @@ async = ["requests-futures (>=0.9.7)"] cli = ["ipython (>=4.0.0,<6.0.0)", "ipython (>=4.0.0)"] opt = ["filemagic (>=1.6)", "pyjwt", "requests-jwt", "requests-kerberos"] +[[package]] +name = "keyring" +version = "23.5.0" +description = "Store and access your passwords safely." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +importlib-metadata = ">=3.6" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[[package]] +name = "lockfile" +version = "0.12.2" +description = "Platform-independent file locking module" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "msgpack" +version = "1.0.3" +description = "MessagePack (de)serializer." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "nodeenv" version = "1.6.0" @@ -163,6 +305,25 @@ rsa = ["cryptography (>=3.0.0)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] +[[package]] +name = "packaging" +version = "20.9" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pyparsing = ">=2.0.2" + +[[package]] +name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "pbr" version = "5.9.0" @@ -171,6 +332,28 @@ category = "main" optional = false python-versions = ">=2.6" +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pkginfo" +version = "1.8.2" +description = "Query metadatdata from sdists / bdists / installed packages." +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +testing = ["coverage", "nose"] + [[package]] name = "platformdirs" version = "2.5.2" @@ -183,6 +366,40 @@ python-versions = ">=3.7" docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +[[package]] +name = "poetry" +version = "1.1.13" +description = "Python dependency management and packaging made easy." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +cachecontrol = {version = ">=0.12.9,<0.13.0", extras = ["filecache"], markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +cachy = ">=0.3.0,<0.4.0" +cleo = ">=0.8.1,<0.9.0" +clikit = ">=0.6.2,<0.7.0" +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +html5lib = ">=1.0,<2.0" +keyring = {version = ">=21.2.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +packaging = ">=20.4,<21.0" +pexpect = ">=4.7.0,<5.0.0" +pkginfo = ">=1.4,<2.0" +poetry-core = ">=1.0.7,<1.1.0" +requests = ">=2.18,<3.0" +requests-toolbelt = ">=0.9.1,<0.10.0" +shellingham = ">=1.1,<2.0" +tomlkit = ">=0.7.0,<1.0.0" +virtualenv = ">=20.0.26,<21.0.0" + +[[package]] +name = "poetry-core" +version = "1.0.8" +description = "Poetry PEP 517 Build Backend" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "pre-commit" version = "2.19.0" @@ -199,6 +416,14 @@ pyyaml = ">=5.1" toml = "*" virtualenv = ">=20.0.8" +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "pycparser" version = "2.21" @@ -238,6 +463,14 @@ dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] +[[package]] +name = "pylev" +version = "1.4.0" +description = "A pure Python Levenshtein implementation that's not freaking GPL'd." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "pynacl" version = "1.5.0" @@ -253,6 +486,25 @@ cffi = ">=1.4.1" docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.0" +description = "" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "pyyaml" version = "5.4.1" @@ -305,6 +557,18 @@ python-versions = "*" [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "secretstorage" +version = "3.3.2" +description = "Python bindings to FreeDesktop.org Secret Service API" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + [[package]] name = "semver" version = "2.13.0" @@ -313,6 +577,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "shellingham" +version = "1.4.0" +description = "Tool to Detect Surrounding Shell" +category = "dev" +optional = false +python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" + [[package]] name = "six" version = "1.16.0" @@ -337,6 +609,14 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "tomlkit" +version = "0.10.2" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + [[package]] name = "urllib3" version = "1.26.9" @@ -368,6 +648,14 @@ six = ">=1.9.0,<2" docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "wrapt" version = "1.14.1" @@ -376,12 +664,32 @@ category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +[[package]] +name = "zipp" +version = "3.8.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + [metadata] lock-version = "1.1" python-versions = "^3.10.4" -content-hash = "4fd1b43145496d577e5b1fbd0a6be389c6159810236b364f2ecb3937113c0e5e" +content-hash = "a3656e70041552495d6e26c0b3e799255621c3e53bf516507b52446cdd9ec8a8" [metadata.files] +cachecontrol = [ + {file = "CacheControl-0.12.11-py2.py3-none-any.whl", hash = "sha256:2c75d6a8938cb1933c75c50184549ad42728a27e9f6b92fd677c3151aa72555b"}, + {file = "CacheControl-0.12.11.tar.gz", hash = "sha256:a5b9fcc986b184db101aa280b42ecdcdfc524892596f606858e0b7a8b4d9e144"}, +] +cachy = [ + {file = "cachy-0.3.0-py2.py3-none-any.whl", hash = "sha256:338ca09c8860e76b275aff52374330efedc4d5a5e45dc1c5b539c1ead0786fe7"}, + {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, +] certifi = [ {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, @@ -446,6 +754,18 @@ charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] +cleo = [ + {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, + {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, +] +clikit = [ + {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, + {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, +] +crashtest = [ + {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, + {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, +] cryptography = [ {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181"}, {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336"}, @@ -486,6 +806,10 @@ filelock = [ {file = "filelock-3.7.0-py3-none-any.whl", hash = "sha256:c7b5fdb219b398a5b28c8e4c1893ef5f98ece6a38c6ab2c22e26ec161556fed6"}, {file = "filelock-3.7.0.tar.gz", hash = "sha256:b795f1b42a61bbf8ec7113c341dad679d772567b936fbd1bf43c9a238e673e20"}, ] +html5lib = [ + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, +] identify = [ {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, @@ -494,10 +818,62 @@ idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] +importlib-metadata = [ + {file = "importlib_metadata-4.11.4-py3-none-any.whl", hash = "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"}, + {file = "importlib_metadata-4.11.4.tar.gz", hash = "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700"}, +] +jeepney = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] jira = [ {file = "jira-2.0.0-py2.py3-none-any.whl", hash = "sha256:9adeead4d5f5a6aff74c630787f8bd2d4b0e154f3a3036641298064e91b2d25d"}, {file = "jira-2.0.0.tar.gz", hash = "sha256:e2a94adff98e45b29ded030adc76103eab34fa7d4d57303f211f572bedba0e93"}, ] +keyring = [ + {file = "keyring-23.5.0-py3-none-any.whl", hash = "sha256:b0d28928ac3ec8e42ef4cc227822647a19f1d544f21f96457965dc01cf555261"}, + {file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"}, +] +lockfile = [ + {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, + {file = "lockfile-0.12.2.tar.gz", hash = "sha256:6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"}, +] +msgpack = [ + {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079"}, + {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3"}, + {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73"}, + {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147"}, + {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39"}, + {file = "msgpack-1.0.3-cp310-cp310-win32.whl", hash = "sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85"}, + {file = "msgpack-1.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7"}, + {file = "msgpack-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d"}, + {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b"}, + {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec"}, + {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770"}, + {file = "msgpack-1.0.3-cp36-cp36m-win32.whl", hash = "sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9"}, + {file = "msgpack-1.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a"}, + {file = "msgpack-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a"}, + {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc"}, + {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a"}, + {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920"}, + {file = "msgpack-1.0.3-cp37-cp37m-win32.whl", hash = "sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50"}, + {file = "msgpack-1.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba"}, + {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea"}, + {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a"}, + {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef"}, + {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611"}, + {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1"}, + {file = "msgpack-1.0.3-cp38-cp38-win32.whl", hash = "sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4"}, + {file = "msgpack-1.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a"}, + {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3"}, + {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52"}, + {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2"}, + {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996"}, + {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2"}, + {file = "msgpack-1.0.3-cp39-cp39-win32.whl", hash = "sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88"}, + {file = "msgpack-1.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d"}, + {file = "msgpack-1.0.3.tar.gz", hash = "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e"}, +] nodeenv = [ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, @@ -506,18 +882,46 @@ oauthlib = [ {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"}, {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"}, ] +packaging = [ + {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, + {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, +] +pastel = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] pbr = [ {file = "pbr-5.9.0-py2.py3-none-any.whl", hash = "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a"}, {file = "pbr-5.9.0.tar.gz", hash = "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308"}, ] +pexpect = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] +pkginfo = [ + {file = "pkginfo-1.8.2-py2.py3-none-any.whl", hash = "sha256:c24c487c6a7f72c66e816ab1796b96ac6c3d14d49338293d2141664330b55ffc"}, + {file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"}, +] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] +poetry = [ + {file = "poetry-1.1.13-py2.py3-none-any.whl", hash = "sha256:52deb0792a2e801967ba9c4cdb39b56fe68b0b5cd3f195b004bef603db9d51a7"}, + {file = "poetry-1.1.13.tar.gz", hash = "sha256:b905ed610085f568aa61574e0e09260c02bff9eae12ff672af39e9f399357ac4"}, +] +poetry-core = [ + {file = "poetry-core-1.0.8.tar.gz", hash = "sha256:951fc7c1f8d710a94cb49019ee3742125039fc659675912ea614ac2aa405b118"}, + {file = "poetry_core-1.0.8-py2.py3-none-any.whl", hash = "sha256:54b0fab6f7b313886e547a52f8bf52b8cf43e65b2633c65117f8755289061924"}, +] pre-commit = [ {file = "pre_commit-2.19.0-py2.py3-none-any.whl", hash = "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10"}, {file = "pre_commit-2.19.0.tar.gz", hash = "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615"}, ] +ptyprocess = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -530,6 +934,10 @@ pyjwt = [ {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, ] +pylev = [ + {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, + {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, +] pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, @@ -542,6 +950,14 @@ pynacl = [ {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, ] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pywin32-ctypes = [ + {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, + {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +] pyyaml = [ {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, @@ -585,10 +1001,18 @@ requests-toolbelt = [ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] +secretstorage = [ + {file = "SecretStorage-3.3.2-py3-none-any.whl", hash = "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319"}, + {file = "SecretStorage-3.3.2.tar.gz", hash = "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f"}, +] semver = [ {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, ] +shellingham = [ + {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, + {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -600,6 +1024,10 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +tomlkit = [ + {file = "tomlkit-0.10.2-py3-none-any.whl", hash = "sha256:905cf92c2111ef80d355708f47ac24ad1b6fc2adc5107455940088c9bbecaedb"}, + {file = "tomlkit-0.10.2.tar.gz", hash = "sha256:30d54c0b914e595f3d10a87888599eab5321a2a69abc773bbefff51599b72db6"}, +] urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, @@ -608,6 +1036,10 @@ virtualenv = [ {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, ] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, @@ -674,3 +1106,7 @@ wrapt = [ {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] +zipp = [ + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, +] diff --git a/pyproject.toml b/pyproject.toml index 37f30a2..92eda89 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ termcolor = "^1.1.0" [tool.poetry.dev-dependencies] pre-commit = "^2.19.0" +poetry = "^1.1.13" [build-system] requires = ["poetry>=1.0.10"] From 909ce4e53a4f78d28b05d2503a9a17b885c04b3b Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 17:05:23 +0300 Subject: [PATCH 15/29] Simplify make targets --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 9dce8f9..aa354e7 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ -docker-login: +login: docker login -u $(DOCKER_LOGIN) -p $(DOCKER_TOKEN) -docker-build: +build: docker build -t statusmoney/release-tool:latest -f docker/Dockerfile . -docker-push: +push: docker push statusmoney/release-tool:latest -docker-shell: +shell: # to run bash shell inside docker container docker run -it --rm \ --volume $(shell pwd):/app \ From 562a9b2930f26ff9d69502e53d94e335d1a9be5e Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 18:19:02 +0300 Subject: [PATCH 16/29] Add shell command to release tools --- Makefile | 7 ++----- docker/Dockerfile | 3 +++ examples/release | 13 +++++++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index aa354e7..39ed868 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,5 @@ push: docker push statusmoney/release-tool:latest shell: - # to run bash shell inside docker container - docker run -it --rm \ - --volume $(shell pwd):/app \ - --entrypoint bash \ - statusmoney/release-tool + # to run bash shell inside release-tool docker container + bash examples/release shell diff --git a/docker/Dockerfile b/docker/Dockerfile index 614f9f9..06794fc 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,6 +15,9 @@ RUN apt-get update && apt-get install -y \ # clean && rm -rf /var/lib/apt/lists/* +# Prepare global gitignore +RUN git config --global core.excludesFile /root/.gitignore_global + # Install installation tools RUN pip3 install --upgrade pip \ && pip3 install poetry==1.1.10 \ diff --git a/examples/release b/examples/release index 715417d..ea427a9 100644 --- a/examples/release +++ b/examples/release @@ -51,6 +51,15 @@ function run_release_tool_natively() { } +function run_docker_shell() { + # to run bash shell inside release-tool docker container + docker run -it --rm \ + --volume $(pwd):/app \ + --entrypoint bash \ + statusmoney/release-tool +} + + function run_release_tool_in_docker() { # preferable usage of release-tool docker run -it --rm \ @@ -153,6 +162,10 @@ case "${1:-}" in # Commonly used commands: +"shell") + # example: ./release shell + run_docker_shell + ;; "get-version") # example: ./release get-version ${get_version} From 7d5167b276c773b4c4dd792735c3be94b0d9df79 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 18:19:38 +0300 Subject: [PATCH 17/29] Add .gitignore_global inside container --- examples/release | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/release b/examples/release index ea427a9..c7e81e7 100644 --- a/examples/release +++ b/examples/release @@ -55,6 +55,7 @@ function run_docker_shell() { # to run bash shell inside release-tool docker container docker run -it --rm \ --volume $(pwd):/app \ + --volume ~/.gitignore_global:/root/.gitignore_global \ --entrypoint bash \ statusmoney/release-tool } @@ -64,6 +65,7 @@ function run_release_tool_in_docker() { # preferable usage of release-tool docker run -it --rm \ --volume $(pwd):/app \ + --volume ~/.gitignore_global:/root/.gitignore_global \ statusmoney/release-tool \ --config=${RELEASE_TOOL_CONFIG} \ "$@" From 8993701e3b9e4db681a32e45e2d3d4286396e86f Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 18:20:00 +0300 Subject: [PATCH 18/29] Add .ssh inside container --- examples/release | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/release b/examples/release index c7e81e7..c62eea7 100644 --- a/examples/release +++ b/examples/release @@ -56,6 +56,7 @@ function run_docker_shell() { docker run -it --rm \ --volume $(pwd):/app \ --volume ~/.gitignore_global:/root/.gitignore_global \ + --volume ~/.ssh:/root/.ssh \ --entrypoint bash \ statusmoney/release-tool } @@ -66,6 +67,7 @@ function run_release_tool_in_docker() { docker run -it --rm \ --volume $(pwd):/app \ --volume ~/.gitignore_global:/root/.gitignore_global \ + --volume ~/.ssh:/root/.ssh \ statusmoney/release-tool \ --config=${RELEASE_TOOL_CONFIG} \ "$@" From 10a8cc0d7bd243d6ec393e6d36b3dbd3f8a06360 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 18:20:28 +0300 Subject: [PATCH 19/29] Fix set-version --- examples/release | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/examples/release b/examples/release index c62eea7..857c310 100644 --- a/examples/release +++ b/examples/release @@ -98,8 +98,12 @@ function get_backend_version() { function set_backend_version() { version=$1 version_line="version = \"${version}\"" + filename="pyproject.toml" - sed -i '' -E "s/^version = \"(.+)\".*\s*/${version_line}/" pyproject.toml + sed -E \ + "s/^version = \"(.+)\".*\s*/${version_line}/" \ + "${filename}" > "${filename}.tmp" + mv "${filename}.tmp" "${filename}" } @@ -114,8 +118,8 @@ function _set_frontend_version() { cat ${filename} \ | jq -r ".version = \"${version}\"" \ - > "tmp.${filename}" \ - && mv "tmp.${filename}" ${filename} + > "${filename}.tmp" \ + && mv "${filename}.tmp" ${filename} } function set_frontend_version() { From 646f52f702828bf69a1a6b39cb4da89b7d55972f Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Tue, 31 May 2022 18:21:40 +0300 Subject: [PATCH 20/29] Fix git commin --- release/plugins/git.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/release/plugins/git.py b/release/plugins/git.py index 9ad7e62..77598f9 100644 --- a/release/plugins/git.py +++ b/release/plugins/git.py @@ -21,7 +21,9 @@ class GitFuncs: submodule_update = partial(BashFunc, "git submodule update") cherry_pick = partial(BashFunc, "git cherry-pick {sha}") - commit = partial(BashFunc, 'git commit --allow-empty -am "Release {version}"') + commit = partial( + BashFunc, 'git commit --allow-empty --no-verify -am "Release {version}"' + ) push = partial(BashFunc, "git push -q -u origin {branch}") checkout = partial(BashFunc, "git checkout -q {branch}") hard_reset = partial(BashFunc, "git reset -q --hard {branch}") @@ -29,7 +31,8 @@ class GitFuncs: create_tag = partial(BashFunc, "git tag {version}") push_tag = partial(BashFunc, "git push -q origin {version}") merge = partial( - BashFunc, 'git merge -q --commit --no-ff {branch} -m "Merge, {branch}"' + BashFunc, + 'git merge -q --commit --no-ff --no-verify {branch} -m "Merge, {branch}"', ) From f6da23e094eb78c284662a3dfdeb2a5edb00c433 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 13:45:32 +0300 Subject: [PATCH 21/29] SM-3835 release-tool unify docker arguments --- examples/release | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/release b/examples/release index 857c310..3b653da 100644 --- a/examples/release +++ b/examples/release @@ -27,6 +27,14 @@ else fi +DOCKER_PARAMS=( + --volume $(pwd):/app + --volume ~/.gitignore_global:/root/.gitignore_global + --volume ~/.ssh:/root/.ssh + statusmoney/release-tool +) + + function run_release_tool_natively() { # Old/native way to use release-tool, # better use `run_release_tool_in_docker`. @@ -52,23 +60,16 @@ function run_release_tool_natively() { function run_docker_shell() { - # to run bash shell inside release-tool docker container docker run -it --rm \ - --volume $(pwd):/app \ - --volume ~/.gitignore_global:/root/.gitignore_global \ - --volume ~/.ssh:/root/.ssh \ --entrypoint bash \ - statusmoney/release-tool + ${DOCKER_PARAMS[@]} } function run_release_tool_in_docker() { # preferable usage of release-tool docker run -it --rm \ - --volume $(pwd):/app \ - --volume ~/.gitignore_global:/root/.gitignore_global \ - --volume ~/.ssh:/root/.ssh \ - statusmoney/release-tool \ + ${DOCKER_PARAMS[@]} \ --config=${RELEASE_TOOL_CONFIG} \ "$@" } @@ -80,10 +81,9 @@ function run_release_tool_for_travis() { # * RELEASE_TOOL_JIRA_TOKEN docker run --rm \ - --volume $(pwd):/app \ --env RELEASE_TOOL_GITHUB_TOKEN \ --env RELEASE_TOOL_JIRA_TOKEN \ - statusmoney/release-tool \ + ${DOCKER_PARAMS[@]} \ --config=${RELEASE_TOOL_CI_CONFIG} \ --noinput \ "$@" From 85eb63fb5c2a287293f9083187997eed6f493764 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 13:45:56 +0300 Subject: [PATCH 22/29] Global git config --- docker/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 06794fc..13785ba 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,8 +15,9 @@ RUN apt-get update && apt-get install -y \ # clean && rm -rf /var/lib/apt/lists/* -# Prepare global gitignore -RUN git config --global core.excludesFile /root/.gitignore_global +# Global git config +RUN git config --global core.excludesFile /root/.gitignore_global \ + && git config --global --add safe.directory /app # Install installation tools RUN pip3 install --upgrade pip \ From 399e7acd07df8effb0c0f428c3292862b145f4d3 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 13:49:21 +0300 Subject: [PATCH 23/29] Allow to skip git fetch --- examples/release | 1 + release/plugins/conf.py | 9 +++++++++ release/plugins/git.py | 24 +++++++++++++++++------- release/plugins/github.py | 4 +++- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/examples/release b/examples/release index 3b653da..35eb398 100644 --- a/examples/release +++ b/examples/release @@ -85,6 +85,7 @@ function run_release_tool_for_travis() { --env RELEASE_TOOL_JIRA_TOKEN \ ${DOCKER_PARAMS[@]} \ --config=${RELEASE_TOOL_CI_CONFIG} \ + --skip-git-fetch \ --noinput \ "$@" } diff --git a/release/plugins/conf.py b/release/plugins/conf.py index aa70914..9fe64de 100644 --- a/release/plugins/conf.py +++ b/release/plugins/conf.py @@ -123,11 +123,14 @@ class GitSettings(ParameterMixin): class Settings: version: VersionInfo + skip_git_fetch = False + def __init__(self, config, args=None): if args: self._commands = set(args.commands) self.prs = args.pr self.no_input = args.noinput + self.skip_git_fetch = args.skip_git_fetch assert ( self.require_creation_of_hotfix_branch or not self.prs ), "'--pr' should be specified only for hotfix" @@ -288,6 +291,12 @@ def _parse_args(): default=[], help="Github pull request for hotfix release", ) + parser.add_argument( + "--skip-git-fetch", + name="skip_git_fetch", + action="store_true", + help="Skip fetching new changes from remote", + ) return parser.parse_args() diff --git a/release/plugins/git.py b/release/plugins/git.py index 77598f9..aa03245 100644 --- a/release/plugins/git.py +++ b/release/plugins/git.py @@ -39,6 +39,7 @@ class GitFuncs: class GitFlows: def __init__(self, settings: Settings): self.version = settings.version + self.skip_git_fetch = settings.skip_git_fetch self.release_branch = settings.git.release_name.format(version=self.version) def _create_tag(self) -> Iterable[BashFunc]: @@ -61,7 +62,7 @@ def make_release_branch(self, release_set: Callable[..., BashFunc]): execute_commands( "Make release branch", - GitFuncs.fetch(), + *self._get_git_fetch_commands(), GitFuncs.create_release_branch( source="develop", branch=self.release_branch ), @@ -73,12 +74,18 @@ def make_release_branch(self, release_set: Callable[..., BashFunc]): print("Created release branch") + def _get_git_fetch_commands(self): + if self.skip_git_fetch: + return () + else: + return (GitFuncs.fetch(),) + def make_hotfix_branch( self, list_of_commit_sha, release_set: Callable[..., BashFunc] ): execute_commands( "Make hotfix branch", - GitFuncs.fetch(), + *self._get_git_fetch_commands(), GitFuncs.create_release_branch(source="master", branch=self.release_branch), *[ GitFuncs.cherry_pick(sha=commit_sha) @@ -91,19 +98,22 @@ def make_hotfix_branch( ) def merge_release_to_master(self): - execute_commands("Create tag", GitFuncs.fetch(), *self._create_tag()) + execute_commands( + "Create tag", + *self._get_git_fetch_commands(), + *self._create_tag(), + ) execute_commands( "Merge release to master", *self._merge(source=self.release_branch, target="master"), GitFuncs.delete_remote_branch(branch=self.release_branch), ) - @classmethod - def merge_master_to_develop(cls): + def merge_master_to_develop(self): execute_commands( "Merge master to develop", - GitFuncs.fetch(), - *cls._merge(source="master", target="develop"), + *self._get_git_fetch_commands(), + *self._merge(source="master", target="develop"), ) diff --git a/release/plugins/github.py b/release/plugins/github.py index c6c53bf..beeba86 100644 --- a/release/plugins/github.py +++ b/release/plugins/github.py @@ -24,6 +24,7 @@ def __init__(self, settings: Settings): self._release_branch_name = settings.release_branch_name self._task_re = re.compile(settings.github.task_re, flags=re.U | re.I) self.repository = self._get_repository() + self.skip_git_fetch = settings.skip_git_fetch def _get_repository(self): github_repo_match = REPO_RE.search( @@ -37,7 +38,8 @@ def get_pr_task(self, pr): return self._task_re.findall(pull.title) def get_commit_message_in_release(self): - git.GitFuncs.fetch()() + if not self.skip_git_fetch: + git.GitFuncs.fetch()() return subprocess.check_output( "git log origin/{}..origin/{} --pretty=%B".format( self._master_branch_name, self._release_branch_name From 5b8e23eec47ef607d39ad78580921bf82984fcdb Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 14:16:02 +0300 Subject: [PATCH 24/29] rename trvis -> ci --- examples/release | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/release b/examples/release index 35eb398..347939f 100644 --- a/examples/release +++ b/examples/release @@ -75,8 +75,8 @@ function run_release_tool_in_docker() { } -function run_release_tool_for_travis() { - # Set this env parameters in TravisCI: +function run_release_tool_for_ci() { + # Set this env parameters in CI: # * RELEASE_TOOL_GITHUB_TOKEN # * RELEASE_TOOL_JIRA_TOKEN @@ -163,9 +163,9 @@ case "${1:-}" in run_release_tool_natively "${@:2}" ;; -"travis") - # example: ./release travis make-links - run_release_tool_for_travis "${@:2}" +"ci") + # example: ./release ci make-links + run_release_tool_for_ci "${@:2}" ;; From 64d213975f168c5480a28ff99be8d68e118506a7 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 15:35:37 +0300 Subject: [PATCH 25/29] Fix --skip-git-fetch arg --- release/plugins/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/release/plugins/conf.py b/release/plugins/conf.py index 9fe64de..5ce18ee 100644 --- a/release/plugins/conf.py +++ b/release/plugins/conf.py @@ -293,7 +293,6 @@ def _parse_args(): ) parser.add_argument( "--skip-git-fetch", - name="skip_git_fetch", action="store_true", help="Skip fetching new changes from remote", ) From 22fc5af768fa30a4ac0cdb52ed904d3c2e4fcc7a Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 15:35:49 +0300 Subject: [PATCH 26/29] SM-3835 release-tool add logging --- examples/release | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/examples/release b/examples/release index 347939f..92089cd 100644 --- a/examples/release +++ b/examples/release @@ -138,34 +138,48 @@ case "${1:-}" in "get-backend-version") # example: ./release get-backend-version - get_backend_version + cmd="get_backend_version" + # echo "Running: ${cmd}" - get-version output should be clean + ${cmd} ;; "set-backend-version") # example: ./release set-backend-version 1.0.0 - set_backend_version $2 + cmd="set_backend_version $2" + echo "Running: ${cmd}" + ${cmd} ;; "get-frontend-version") # example: ./release get-frontend-version - get_frontend_version + cmd="get_frontend_version" + # echo "Running: ${cmd}" - get-version output should be clean + ${cmd} ;; "set-frontend-version") # example: ./release set-frontend-version 1.0.0 - set_frontend_version $2 + cmd="set_frontend_version $2" + echo "Running: ${cmd}" + ${cmd} ;; "run-in-docker") # example: ./release run-in-docker make-links - run_release_tool_in_docker "${@:2}" + cmd="run_release_tool_in_docker ${@:2}" + echo "Running: ${cmd}" + ${cmd} ;; "run-native") # example: ./release run-native make-links - run_release_tool_natively "${@:2}" + cmd="run_release_tool_natively ${@:2}" + echo "Running: ${cmd}" + ${cmd} ;; "ci") # example: ./release ci make-links - run_release_tool_for_ci "${@:2}" + cmd="run_release_tool_for_ci ${@:2}" + echo "Running: ${cmd}" + ${cmd} ;; @@ -173,18 +187,26 @@ case "${1:-}" in "shell") # example: ./release shell - run_docker_shell + cmd="run_docker_shell" + echo "Running: ${cmd}" + ${cmd} ;; "get-version") # example: ./release get-version - ${get_version} + cmd="${get_version}" + # echo "Running: ${cmd}" - get-version output should be clean + ${cmd} ;; "set-version") # example: ./release set-version 1.0.0 - ${set_version} $2 + cmd="${set_version} $2" + echo "Running: ${cmd}" + ${cmd} ;; *) # example: ./release make-links - run_release_tool_in_docker "${@:1}" + cmd="run_release_tool_in_docker ${@:1}" + echo "Running: ${cmd}" + ${cmd} ;; esac From d7be854d65de9b72a8869c9d7b3fbfa1d4a10178 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 15:56:15 +0300 Subject: [PATCH 27/29] Disable some pep formatting rules --- setup.cfg | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 setup.cfg diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..6ee0e92 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,7 @@ +[flake8] +# https://github.com/python/black/issues/315 +ignore = E203, W503 +max-line-length = 120 + +[pycodestyle] +max-line-length = 120 From 62a9e1a05cf5423bf798e68425cdf216a5aa1231 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 15:56:20 +0300 Subject: [PATCH 28/29] Fix check Github repo --- release/plugins/github.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/release/plugins/github.py b/release/plugins/github.py index beeba86..5dc236f 100644 --- a/release/plugins/github.py +++ b/release/plugins/github.py @@ -9,7 +9,7 @@ PR_RE = re.compile(r"#(\d+)", flags=re.U | re.I) -REPO_RE = re.compile(r"[/:]([-\w_]+/[-\w_]+)\.git") +REPO_RE = re.compile(r"[/:]([-\w_]+/[-\w_]+)(\.git)?") class GetTaskResponse(NamedTuple): @@ -27,9 +27,8 @@ def __init__(self, settings: Settings): self.skip_git_fetch = settings.skip_git_fetch def _get_repository(self): - github_repo_match = REPO_RE.search( - subprocess.check_output("git remote -v", shell=True).decode("utf-8") - ) + output = subprocess.check_output("git remote -v", shell=True).decode("utf-8") + github_repo_match = REPO_RE.search(output) assert github_repo_match return self._api.get_repo(github_repo_match.group(1)) From 113cfd038f411a2262314f35793685b5f6c97436 Mon Sep 17 00:00:00 2001 From: Valentin Kuznetsov Date: Thu, 2 Jun 2022 17:17:53 +0300 Subject: [PATCH 29/29] Add example github action --- ...nk-tasks-to-jira-release.github-action.yml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/link-tasks-to-jira-release.github-action.yml diff --git a/examples/link-tasks-to-jira-release.github-action.yml b/examples/link-tasks-to-jira-release.github-action.yml new file mode 100644 index 0000000..38115f4 --- /dev/null +++ b/examples/link-tasks-to-jira-release.github-action.yml @@ -0,0 +1,36 @@ +name: Link tasks to JIRA release + +on: + push: + branches: + - 'release-*' + pull_request: + branches: + - 'release-*' + +jobs: + link-tasks-to-jira-release: + name: Link tasks to JIRA release + runs-on: ubuntu-latest + + steps: + - + name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - + name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_LOGIN }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + - + name: Download image + run: docker pull statusmoney/release-tool + - + name: Make links + run: ./release ci make-links + env: + RELEASE_TOOL_JIRA_TOKEN: ${{ secrets.RELEASE_TOOL_JIRA_TOKEN }} + RELEASE_TOOL_GITHUB_TOKEN: ${{ secrets.RELEASE_TOOL_GITHUB_TOKEN }}