From ccea9eb58fce7e218665838c3b63aa0b227faf17 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 4 Jul 2023 22:52:30 +0100 Subject: [PATCH 01/28] fix: indent within `main.yml` --- roles/github/tasks/main.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/roles/github/tasks/main.yml b/roles/github/tasks/main.yml index 4ba3329..19e7160 100644 --- a/roles/github/tasks/main.yml +++ b/roles/github/tasks/main.yml @@ -1,20 +1,20 @@ --- - - name: Ensure output directory exists - ansible.builtin.file: - dest: "{{ output_directory }}" - state: directory - mode: "0700" +- name: Ensure output directory exists + ansible.builtin.file: + dest: "{{ output_directory }}" + state: directory + mode: "0700" - - name: Ensure workflow file exists - ansible.builtin.template: - src: "workflow.yml.j2" - dest: "{{ output_directory }}/{{ workflow.file_name }}" - block_start_string: "<%" - block_end_string: "%>" - variable_start_string: "%%" - variable_end_string: "%%" - mode: "0644" - loop: "{{ workflows }}" - loop_control: - loop_var: workflow - label: "{{ workflow.file_name }}" +- name: Ensure workflow file exists + ansible.builtin.template: + src: "workflow.yml.j2" + dest: "{{ output_directory }}/{{ workflow.file_name }}" + block_start_string: "<%" + block_end_string: "%>" + variable_start_string: "%%" + variable_end_string: "%%" + mode: "0644" + loop: "{{ workflows }}" + loop_control: + loop_var: workflow + label: "{{ workflow.file_name }}" From c87a54d15228ef9d6a93491f182e715e199dcc48 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:36:08 +0100 Subject: [PATCH 02/28] fix: workflow singular -> plural --- roles/github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/github/README.md b/roles/github/README.md index 4206f03..81f3c22 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -1,4 +1,4 @@ -Kayobe Automation Workflow (GitHub) +Kayobe Automation Workflows (GitHub) ========= This Ansible role is capable of generating GitHub workflow files for performing CI/CD related activities with OpenStack via Kayobe. From 5539203438c25a72262349217cb7808df541f001 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:37:11 +0100 Subject: [PATCH 03/28] fix: reword description of workflow --- roles/github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/github/README.md b/roles/github/README.md index 81f3c22..2609d9f 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -16,7 +16,7 @@ See the table below for a full list of all the currently supported kayobe automa | **run-overcloud-container-image-pull** | Pull container images from a container registry. | | **run-overcloud-database-backup** | Perform a backup of the database used by the overcloud. | | **run-overcloud-host-configure** | Perform an overcloud host configure. | -| **run-overcloud-host-package-update** | Update system packages on the overcloud hosts. | +| **run-overcloud-host-package-update** | Perform an overcloud host package update. | | **run-overcloud-inventory-discover** | Get an inventory of nodes. | | **run-overcloud-provision** | Provision overcloud nodes. | | **run-overcloud-service-deploy** | Deploy overcloud services. | From b8318195d47585bc272cd88e728cb56a5670c120 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:38:25 +0100 Subject: [PATCH 04/28] feat: remove `run-overcloud-service-reconfigure` The `run-overcloud-service-reconfigure` workflow is identicial to `run-overcloud-service-deploy` workflow and should be removed to avoid redundancy. --- roles/github/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/roles/github/README.md b/roles/github/README.md index 2609d9f..ebdd133 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -20,7 +20,6 @@ See the table below for a full list of all the currently supported kayobe automa | **run-overcloud-inventory-discover** | Get an inventory of nodes. | | **run-overcloud-provision** | Provision overcloud nodes. | | **run-overcloud-service-deploy** | Deploy overcloud services. | -| **run-overcloud-service-reconfigure** | Reconfigure services across the overcloud. | | **run-overcloud-service-upgrade** | Perform an upgrade of overcloud services. | | **run-seed-host-configure** | Configure the seed host. | | **run-seed-host-package-update** | Update the system packages of the seed host. | From 0095d57cac35a70600f08df607cd9b4264c9a9a6 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:44:30 +0100 Subject: [PATCH 05/28] fix: `runner_name` -> `runs_on` --- roles/github/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/github/README.md b/roles/github/README.md index ebdd133..1075316 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -36,7 +36,7 @@ The following variables can be used to make small adjustments to the composition `output_directory`: control the location where the workflows shall be written to. -`runner_name`: name of the GitHub runner used by the workflows see [runs-on](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). +`runs_on`: control which runner can accept this workflow. See GitHub for more information on [runs-on](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). `image_url`: full URL of the kayobe container image complete with registry and tag. From 0c8bb82813921ac6d0e1240b2f8f1513d0153d3b Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:45:53 +0100 Subject: [PATCH 06/28] feat: add `github` role prefix to variables --- roles/github/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index 1075316..c6b9e70 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -34,19 +34,19 @@ Role Variables The following variables can be used to make small adjustments to the composition of the workflows. -`output_directory`: control the location where the workflows shall be written to. +`github_output_directory`: control the location where the workflows shall be written to. -`runs_on`: control which runner can accept this workflow. See GitHub for more information on [runs-on](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). +`github_runs_on`: control which runner can accept this workflow. See GitHub for more information on [runs-on](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). -`image_url`: full URL of the kayobe container image complete with registry and tag. +`github_image_url`: full URL of the kayobe container image complete with registry and tag. -`registry_password`: password used to authenticate with the docker registry. +`github_registry_password`: password used to authenticate with the docker registry. -`kayobe_arguments`: a dictionary of arguments that can be used to override the default arguments found within `vars/main.yml`. For example if you wanted to change the value of `KAYOBE_ENVIRONMENT` from its default of `production` you can simply add `KAYOBE_ENVIRONMENT` to this dictionary and it will take precedence over the defaults. +`github_kayobe_arguments`: a dictionary of arguments that can be used to override the default arguments found within `vars/main.yml`. For example if you wanted to change the value of `KAYOBE_ENVIRONMENT` from its default of `production` you can simply add `KAYOBE_ENVIRONMENT` to this dictionary and it will take precedence over the defaults. If you wish to make more impactful changes such as which workflows are built and what they contain then see the list of dictionaries called `workflows` in `defaults/main.yml` -`workflows:` is a list of dictionaries that contains each of the workflows described above. A given list element is made up of the following: +`github_workflows:` is a list of dictionaries that contains each of the workflows described above. A given list element is made up of the following: - `name`: the name which the workflow shall refer to itself as within GitHub workflows user interface. From 32845060191d2c710f3220893d08408836706326 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:46:36 +0100 Subject: [PATCH 07/28] feat: add configurable docker registry username --- roles/github/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/github/README.md b/roles/github/README.md index c6b9e70..8739ac6 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -40,6 +40,8 @@ The following variables can be used to make small adjustments to the composition `github_image_url`: full URL of the kayobe container image complete with registry and tag. +`github_registry_username`: username used to authenticate with the docker registry. + `github_registry_password`: password used to authenticate with the docker registry. `github_kayobe_arguments`: a dictionary of arguments that can be used to override the default arguments found within `vars/main.yml`. For example if you wanted to change the value of `KAYOBE_ENVIRONMENT` from its default of `production` you can simply add `KAYOBE_ENVIRONMENT` to this dictionary and it will take precedence over the defaults. From 87bf6114ffe2cfeba792f3413183161c1abc82c1 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:51:13 +0100 Subject: [PATCH 08/28] fix: add missing description to `use_bespoke` --- roles/github/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/roles/github/README.md b/roles/github/README.md index 8739ac6..7181a63 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -58,10 +58,12 @@ If you wish to make more impactful changes such as which workflows are built and - `arguments`: list of arguments keys used by the automation task the contents will be acquired from `kayobe_arguments` or the defaults. +- `use_bespoke`: Some workflows benefit from a dedicated workflow template as they drift away from the main template. Set to `true` if the workflow requires a *bespoke* template and ensure a template `workflow_name.yml.j2` is present. + The following will override `workflows` to ensure only `Run overcloud database backup` is generated. ```yaml -workflows: +github_workflows: - name: Run overcloud database backup file_name: run-overcloud-database-backup.yml trigger: From 5fb3c4be8fc60677fa512d1c04796e4d2cac9656 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:52:27 +0100 Subject: [PATCH 09/28] fix: role was not being called correctly --- roles/github/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index 7181a63..171f8f6 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -84,10 +84,10 @@ Example Playbook The following example playbook will generate a series of `reference` workflows which can be found under `.github/workflows` ```yaml -- name: Write Kayobe Automation Workflows +- name: Write Kayobe Automation Workflows for GitHub hosts: localhost - collections: - - stackhpc.kayobe_automation_workflows + roles: + - stackhpc.kayobe_automation_workflows.github ``` Hooks [Experimental] From 41420c3771bc93afcebfaf4258344ed8b715f086 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:54:13 +0100 Subject: [PATCH 10/28] feat: remove section on `hooks` --- roles/github/README.md | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index 171f8f6..d66d4f3 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -90,34 +90,6 @@ The following example playbook will generate a series of `reference` workflows w - stackhpc.kayobe_automation_workflows.github ``` -Hooks [Experimental] --------------------- - -> :warning: This feature is marked as `experimental` at the moment as it is not clear how to configure `ansible.builtin.template` to look at the `${{ playbook_dir }}/templates/hooks/`. - -Workflows can be expanded with the use of `hooks` which are templates that if provided can be inserted into the appropriate location enabling the introduction of additional steps within the workflow job. -This could include the use of HashiCorp Vault or installing and configuring a network proxy. - - - -```yaml - -- name: Import secrets via Hashicorp Vault - id: secrets - uses: hashicorp/vault-action@v2.5.0 - with: - url: https://vault.stackhpc.com:8200 - method: approle - roleId: ${{ secrets.ROLE_ID }} - secretId: ${{ secrets.SECRET_ID }} - tlsSkipVerify: true - secrets: | - stackhpc/data/github kayobe_vault_password_${{ needs.env.outputs.environment }} | KAYOBE_VAULT_PASSWORD ; - stackhpc/data/github kayobe_automation_ssh_private_key_${{ needs.env.outputs.environment }} | KAYOBE_AUTOMATION_SSH_PRIVATE_KEY ; - - -``` - License ------- From 1b96acb06d6128325f394df8f769f873cabbccd3 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 01:56:23 +0100 Subject: [PATCH 11/28] fix: alter file and folder mode --- roles/github/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/github/tasks/main.yml b/roles/github/tasks/main.yml index 19e7160..3534ac0 100644 --- a/roles/github/tasks/main.yml +++ b/roles/github/tasks/main.yml @@ -3,7 +3,7 @@ ansible.builtin.file: dest: "{{ output_directory }}" state: directory - mode: "0700" + mode: "755" - name: Ensure workflow file exists ansible.builtin.template: From 8f1a92161bc4cafedccdb39405ccbdcfdb30f6ae Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 5 Jul 2023 02:33:16 +0100 Subject: [PATCH 12/28] feat: use role prefix within templates --- roles/github/defaults/main.yml | 60 +++++++++---------- roles/github/tasks/main.yml | 6 +- .../build-kayobe-docker-image.yml.j2 | 2 +- roles/github/templates/generic.yml.j2 | 6 +- roles/github/templates/run-config-diff.yml.j2 | 2 +- roles/github/templates/run-tempest.yml.j2 | 2 +- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index fd0e7fe..1aff95a 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -1,15 +1,15 @@ --- -output_directory: .github/workflows +github_output_directory: .github/workflows -runner_name: self-hosted +github_runs_on: self-hosted -image_url: ghcr.io/${{ github.repository }}:latest +github_image_url: ghcr.io/${{ github.repository }}:latest -registry_password: ${{ secrets.GITHUB_TOKEN }} +github_registry_password: ${{ secrets.GITHUB_TOKEN }} -kayobe_arguments: [] +github_kayobe_arguments: {} -kayobe_inputs: &kayobe_inputs +github_kayobe_inputs: &github_kayobe_inputs kayobeLimit: description: | The ansible limit to use when running kayobe playbooks. @@ -17,7 +17,7 @@ kayobe_inputs: &kayobe_inputs description: | The ansible tags to use when running kayobe playbooks. -kolla_inputs: &kolla_inputs +github_kolla_inputs: &github_kolla_inputs kollaLimit: description: | The ansible limit to use for kolla-ansible playbooks. @@ -25,10 +25,10 @@ kolla_inputs: &kolla_inputs description: | The ansible tags to use when running kolla-ansible playbooks. -combined_inputs: &combined_inputs - <<: [ *kayobe_inputs, *kolla_inputs ] +github_combined_inputs: &github_combined_inputs + <<: [*github_kayobe_inputs, *github_kolla_inputs] -workflows: +github_workflows: - name: Build kayobe image file_name: build-kayobe-docker-image.yml use_bespoke: true @@ -40,7 +40,7 @@ workflows: - name: Run infra VM host configure file_name: run-infra-vm-host-configure.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -49,7 +49,7 @@ workflows: - name: Run infra VM host package update file_name: run-infra-vm-host-package-update.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -58,7 +58,7 @@ workflows: - name: Run infra VM provision file_name: run-infra-vm-provision.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -67,7 +67,7 @@ workflows: - name: Run infra VM service deploy file_name: run-infra-vm-service-deploy.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -76,7 +76,7 @@ workflows: - name: Run network connectivity check file_name: run-network-connectivity-check.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -85,7 +85,7 @@ workflows: - name: Run overcloud container image pull file_name: run-overcloud-container-image-pull.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -96,7 +96,7 @@ workflows: - name: Run overcloud database backup file_name: run-overcloud-database-backup.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -107,7 +107,7 @@ workflows: - name: Run overcloud host configure file_name: run-overcloud-host-configure.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -118,7 +118,7 @@ workflows: - name: Run overcloud host package update file_name: run-overcloud-host-package-update.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -127,7 +127,7 @@ workflows: - name: Run overcloud inventory discover file_name: run-overcloud-inventory-discover.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -143,7 +143,7 @@ workflows: - name: Run overcloud provision file_name: run-overcloud-provision.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -152,7 +152,7 @@ workflows: - name: Run overcloud service deploy file_name: run-overcloud-service-deploy.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -170,7 +170,7 @@ workflows: - name: Run overcloud service reconfigure file_name: run-overcloud-service-reconfigure.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -188,7 +188,7 @@ workflows: - name: Run overcloud service upgrade file_name: run-overcloud-service-upgrade.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -206,7 +206,7 @@ workflows: - name: Run seed host configure file_name: run-seed-host-configure.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -217,7 +217,7 @@ workflows: - name: Run seed host package update file_name: run-seed-host-package-update.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -226,7 +226,7 @@ workflows: - name: Run seed hypervisor host configure file_name: run-seed-hypervisor-host-configure.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -235,7 +235,7 @@ workflows: - name: Run seed hypervisor host package update file_name: run-seed-hypervisor-host-package-update.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT @@ -244,7 +244,7 @@ workflows: - name: Run seed service deploy file_name: run-seed-service-deploy.yml trigger: - workflow_dispatch: *combined_inputs + workflow_dispatch: *github_combined_inputs arguments: - KOLLA_TAGS - KOLLA_LIMIT @@ -262,7 +262,7 @@ workflows: - name: Run seed VM provision file_name: run-seed-vm-provision.yml trigger: - workflow_dispatch: *kayobe_inputs + workflow_dispatch: *github_kayobe_inputs arguments: - KAYOBE_TAGS - KAYOBE_LIMIT diff --git a/roles/github/tasks/main.yml b/roles/github/tasks/main.yml index 3534ac0..407d063 100644 --- a/roles/github/tasks/main.yml +++ b/roles/github/tasks/main.yml @@ -1,20 +1,20 @@ --- - name: Ensure output directory exists ansible.builtin.file: - dest: "{{ output_directory }}" + dest: "{{ github_output_directory }}" state: directory mode: "755" - name: Ensure workflow file exists ansible.builtin.template: src: "workflow.yml.j2" - dest: "{{ output_directory }}/{{ workflow.file_name }}" + dest: "{{ github_output_directory }}/{{ workflow.file_name }}" block_start_string: "<%" block_end_string: "%>" variable_start_string: "%%" variable_end_string: "%%" mode: "0644" - loop: "{{ workflows }}" + loop: "{{ github_workflows }}" loop_control: loop_var: workflow label: "{{ workflow.file_name }}" diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index 2358163..56de478 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -13,7 +13,7 @@ env: jobs: build: - runs-on: %% runner_name %% + runs-on: %% github_runs_on %% container: docker:git permissions: contents: read diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 898017a..6d3b320 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -2,15 +2,15 @@ jobs: %% workflow.file_name[4:-4] %%: - runs-on: %% runner_name %% + runs-on: %% github_runs_on %% permissions: contents: read packages: read container: - image: %% image_url %% + image: %% github_image_url %% credentials: username: ${{ github.actor }} - password: %% registry_password %% + password: %% github_registry_password %% steps: <%- filter indent(width=6,first=False) +%> <%- include "hooks/pre-checkout.yml.j2" ignore missing +%> diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index 36d1b7e..da15a36 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -9,7 +9,7 @@ on: jobs: config-diff: - runs-on: %% runner_name %% + runs-on: %% github_runs_on %% permissions: contents: read packages: read diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 83d356e..97a1edc 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -22,7 +22,7 @@ on: jobs: tempest: - runs-on: self-hosted + runs-on: %% github_runs_on %% permissions: contents: read packages: read From 2133f9f69508d2cbaa7765f635fb5f2f481afc54 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Mon, 10 Jul 2023 13:31:29 +0100 Subject: [PATCH 13/28] feat: support custom docker registry --- roles/github/defaults/main.yml | 6 ++++- .../build-kayobe-docker-image.yml.j2 | 6 ++--- roles/github/templates/generic.yml.j2 | 4 ++-- roles/github/templates/run-config-diff.yml.j2 | 6 ++--- roles/github/templates/run-tempest.yml.j2 | 24 +++++++++---------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index 1aff95a..ed50836 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -3,10 +3,14 @@ github_output_directory: .github/workflows github_runs_on: self-hosted -github_image_url: ghcr.io/${{ github.repository }}:latest +github_registry_url: ghcr.io + +github_registry_username: ${{ github.actor }} github_registry_password: ${{ secrets.GITHUB_TOKEN }} +github_image_name: ${{ github.repository }}:latest + github_kayobe_arguments: {} github_kayobe_inputs: &github_kayobe_inputs diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index 56de478..d9c9eb7 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -27,9 +27,9 @@ jobs: - name: Log in to the Container registry uses: docker/login-action@v2 with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + registry: %% github_registry_url %% + username: %% github_registry_username %% + password: %% github_registry_password %% - name: Extract metadata (tags, labels) for Docker id: meta diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 6d3b320..4bfbce4 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -7,9 +7,9 @@ jobs: contents: read packages: read container: - image: %% github_image_url %% + image: %% github_registry_url %%/%% github_image_name %% credentials: - username: ${{ github.actor }} + username: %% github_registry_username %% password: %% github_registry_password %% steps: <%- filter indent(width=6,first=False) +%> diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index da15a36..c221f8d 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -14,10 +14,10 @@ jobs: contents: read packages: read container: - image: ghcr.io/${{ github.repository }}:latest + image: %% github_registry_url %%/%% github_image_name %% credentials: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + username: %% github_registry_username %% + password: %% github_registry_password %% steps: - name: Checkout kayobe config uses: actions/checkout@v3 diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 97a1edc..8f7d6c6 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -27,10 +27,10 @@ jobs: contents: read packages: read container: - image: ghcr.io/${{ github.repository }}:latest + image: %% github_registry_url %%/%% github_image_name %% credentials: - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + username: %% github_registry_username %% + password: %% github_registry_password %% steps: - name: Checkout kayobe config @@ -61,15 +61,15 @@ jobs: run: | /src/.automation/pipeline/tempest.sh env: - KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' - KAYOBE_VAULT_PASSWORD: '%% kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' - KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' - KAYOBE_AUTOMATION_TEMPEST_LOADLIST: '%% kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST | default(_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST) %%' - TEMPEST_PATTERN: '%% kayobe_arguments.TEMPEST_PATTERN | default(_kayobe_arguments.TEMPEST_PATTERN) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY: '%% kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME: '%% kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD: '%% kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD) %%' - HOME: '%% kayobe_arguments.HOME | default(_kayobe_arguments.HOME) %%' + KAYOBE_ENVIRONMENT: '%% github_kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' + KAYOBE_VAULT_PASSWORD: '%% github_kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' + KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' + KAYOBE_AUTOMATION_TEMPEST_LOADLIST: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST | default(_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST) %%' + TEMPEST_PATTERN: '%% github_kayobe_arguments.TEMPEST_PATTERN | default(_kayobe_arguments.TEMPEST_PATTERN) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD) %%' + HOME: '%% github_kayobe_arguments.HOME | default(_kayobe_arguments.HOME) %%' - name: Print stdout run: | From 1fae76c0f3036158f17848762226b89b8436790f Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 11 Jul 2023 15:28:37 +0100 Subject: [PATCH 14/28] fix: _kayobe_arguments -> default_kayobe_arugments --- roles/github/templates/generic.yml.j2 | 4 +-- roles/github/templates/run-config-diff.yml.j2 | 8 +++--- roles/github/templates/run-tempest.yml.j2 | 26 +++++++++---------- roles/github/vars/main.yml | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 4bfbce4..88a1bb7 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -33,9 +33,9 @@ jobs: /src/.automation/pipeline/%% workflow.file_name[4:-4] %%.sh <%- if workflow.arguments is defined +%> env: - KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' + KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(default_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' <%- for argument in workflow.arguments +%> - %% argument %%: '%% kayobe_arguments[argument] | default(_kayobe_arguments[argument]) %%' + %% argument %%: '%% kayobe_arguments[argument] | default(default_kayobe_arguments[argument]) %%' <%- endfor +%> <%- endif +%> <%- filter indent(width=6,first=False) +%> diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index c221f8d..1a9140b 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -35,10 +35,10 @@ jobs: run: | sudo -E -u stack bash -c '/src/.automation/pipeline/config-diff.sh ${{ github.event.pull_request.base.sha }}' env: - KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' - KAYOBE_VAULT_PASSWORD: '%% kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' - KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' - HOME: '%% kayobe_arguments.HOME | default(_kayobe_arguments.HOME) %%' + KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(default_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' + KAYOBE_VAULT_PASSWORD: '%% kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(default_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' + KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(default_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' + HOME: '%% kayobe_arguments.HOME | default(default_kayobe_arguments.HOME) %%' - name: Show summary of changes run: | diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 8f7d6c6..b0ca6dd 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -46,10 +46,10 @@ jobs: source /src/.automation/functions && kayobe_install env: - KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' - KAYOBE_VAULT_PASSWORD: '%% kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' - KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' - HOME: '%% kayobe_arguments.HOME | default(_kayobe_arguments.HOME) %%' + KAYOBE_ENVIRONMENT: '%% kayobe_arguments.KAYOBE_ENVIRONMENT | default(default_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' + KAYOBE_VAULT_PASSWORD: '%% kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(default_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' + KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(default_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' + HOME: '%% kayobe_arguments.HOME | default(default_kayobe_arguments.HOME) %%' USER: stack - name: Symlink kolla into /src/etc @@ -61,15 +61,15 @@ jobs: run: | /src/.automation/pipeline/tempest.sh env: - KAYOBE_ENVIRONMENT: '%% github_kayobe_arguments.KAYOBE_ENVIRONMENT | default(_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' - KAYOBE_VAULT_PASSWORD: '%% github_kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' - KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' - KAYOBE_AUTOMATION_TEMPEST_LOADLIST: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST | default(_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST) %%' - TEMPEST_PATTERN: '%% github_kayobe_arguments.TEMPEST_PATTERN | default(_kayobe_arguments.TEMPEST_PATTERN) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME) %%' - KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD | default(_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD) %%' - HOME: '%% github_kayobe_arguments.HOME | default(_kayobe_arguments.HOME) %%' + KAYOBE_ENVIRONMENT: '%% github_kayobe_arguments.KAYOBE_ENVIRONMENT | default(default_kayobe_arguments.KAYOBE_ENVIRONMENT) %%' + KAYOBE_VAULT_PASSWORD: '%% github_kayobe_arguments.KAYOBE_VAULT_PASSWORD | default(default_kayobe_arguments.KAYOBE_VAULT_PASSWORD) %%' + KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY | default(default_kayobe_arguments.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY) %%' + KAYOBE_AUTOMATION_TEMPEST_LOADLIST: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST | default(default_kayobe_arguments.KAYOBE_AUTOMATION_TEMPEST_LOADLIST) %%' + TEMPEST_PATTERN: '%% github_kayobe_arguments.TEMPEST_PATTERN | default(default_kayobe_arguments.TEMPEST_PATTERN) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY | default(default_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME | default(default_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_USERNAME) %%' + KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD: '%% github_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD | default(default_kayobe_arguments.KAYOBE_AUTOMATION_RALLY_DOCKER_REGISTRY_PASSWORD) %%' + HOME: '%% github_kayobe_arguments.HOME | default(default_kayobe_arguments.HOME) %%' - name: Print stdout run: | diff --git a/roles/github/vars/main.yml b/roles/github/vars/main.yml index 12e7258..cade44b 100644 --- a/roles/github/vars/main.yml +++ b/roles/github/vars/main.yml @@ -1,5 +1,5 @@ --- -_kayobe_arguments: +default_kayobe_arguments: KAYOBE_ENVIRONMENT: production KAYOBE_VAULT_PASSWORD: "${{ secrets.KAYOBE_VAULT_PASSWORD }}" KAYOBE_AUTOMATION_SSH_PRIVATE_KEY: "${{ secrets.KAYOBE_AUTOMATION_SSH_PRIVATE_KEY }}" From 44ad26cbeeb3c14a821b67f3a3304e0042a0b6cc Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 11 Jul 2023 16:28:22 +0100 Subject: [PATCH 15/28] feat: remove magic string splicing --- roles/github/templates/build-kayobe-docker-image.yml.j2 | 2 +- roles/github/templates/generic.yml.j2 | 2 +- roles/github/templates/run-config-diff.yml.j2 | 2 +- roles/github/templates/run-tempest.yml.j2 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index d9c9eb7..4ac7a8e 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -12,7 +12,7 @@ env: KAYOBE_USER_GID: 1000 jobs: - build: + %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} runs-on: %% github_runs_on %% container: docker:git permissions: diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 88a1bb7..96f6a5d 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -1,7 +1,7 @@ <% include "header.yml.j2" +%> jobs: - %% workflow.file_name[4:-4] %%: + %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index 1a9140b..2fea28d 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -8,7 +8,7 @@ on: pull_request: jobs: - config-diff: + %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index b0ca6dd..0275e05 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -21,7 +21,7 @@ on: Limit tests to this regex. Takes precedence over testSuite. jobs: - tempest: + %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} runs-on: %% github_runs_on %% permissions: contents: read From 08ce4c11c547fb29997b0d52d4b56b38e978f4b7 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 11 Jul 2023 16:29:45 +0100 Subject: [PATCH 16/28] fix: remove `service-reconfigure` workflow --- roles/github/defaults/main.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index ed50836..4e47137 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -171,24 +171,6 @@ github_workflows: - KAYOBE_AUTOMATION_PR_URL - HOME - - name: Run overcloud service reconfigure - file_name: run-overcloud-service-reconfigure.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - KAYOBE_AUTOMATION_PR_TARGET_BRANCH - - KAYOBE_AUTOMATION_PR_REMOTE - - KAYOBE_AUTOMATION_PR_GITHUB_USER - - KAYOBE_AUTOMATION_PR_AUTH_TOKEN - - KAYOBE_AUTOMATION_PR_TYPE - - KAYOBE_AUTOMATION_PR_TITLE - - KAYOBE_AUTOMATION_PR_URL - - HOME - - name: Run overcloud service upgrade file_name: run-overcloud-service-upgrade.yml trigger: From 3f231b729f522f8ce08500d93f1c6e2c1bfaa026 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 12 Jul 2023 16:32:51 +0100 Subject: [PATCH 17/28] feat: build title from `file_name` --- roles/github/defaults/main.yml | 227 +----------------- .../build-kayobe-docker-image.yml.j2 | 4 +- roles/github/templates/header.yml.j2 | 2 +- roles/github/templates/run-config-diff.yml.j2 | 4 +- roles/github/templates/run-tempest.yml.j2 | 6 +- roles/github/templates/workflow.yml.j2 | 8 + 6 files changed, 19 insertions(+), 232 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index 4e47137..6b1073c 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -33,227 +33,8 @@ github_combined_inputs: &github_combined_inputs <<: [*github_kayobe_inputs, *github_kolla_inputs] github_workflows: - - name: Build kayobe image - file_name: build-kayobe-docker-image.yml - use_bespoke: true + - "{{ build_kayobe_image }}" - - name: Generate kolla config diff - file_name: run-config-diff.yml - use_bespoke: true - - - name: Run infra VM host configure - file_name: run-infra-vm-host-configure.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run infra VM host package update - file_name: run-infra-vm-host-package-update.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run infra VM provision - file_name: run-infra-vm-provision.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run infra VM service deploy - file_name: run-infra-vm-service-deploy.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run network connectivity check - file_name: run-network-connectivity-check.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud container image pull - file_name: run-overcloud-container-image-pull.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud database backup - file_name: run-overcloud-database-backup.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud host configure - file_name: run-overcloud-host-configure.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud host package update - file_name: run-overcloud-host-package-update.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud inventory discover - file_name: run-overcloud-inventory-discover.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - KAYOBE_AUTOMATION_PR_TARGET_BRANCH - - KAYOBE_AUTOMATION_PR_REMOTE - - KAYOBE_AUTOMATION_PR_GITHUB_USER - - KAYOBE_AUTOMATION_PR_AUTH_TOKEN - - KAYOBE_AUTOMATION_PR_TYPE - - KAYOBE_AUTOMATION_PR_TITLE - - KAYOBE_AUTOMATION_PR_URL - - HOME - - - name: Run overcloud provision - file_name: run-overcloud-provision.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run overcloud service deploy - file_name: run-overcloud-service-deploy.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - KAYOBE_AUTOMATION_PR_TARGET_BRANCH - - KAYOBE_AUTOMATION_PR_REMOTE - - KAYOBE_AUTOMATION_PR_GITHUB_USER - - KAYOBE_AUTOMATION_PR_AUTH_TOKEN - - KAYOBE_AUTOMATION_PR_TYPE - - KAYOBE_AUTOMATION_PR_TITLE - - KAYOBE_AUTOMATION_PR_URL - - HOME - - - name: Run overcloud service upgrade - file_name: run-overcloud-service-upgrade.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - KAYOBE_AUTOMATION_PR_TARGET_BRANCH - - KAYOBE_AUTOMATION_PR_REMOTE - - KAYOBE_AUTOMATION_PR_GITHUB_USER - - KAYOBE_AUTOMATION_PR_AUTH_TOKEN - - KAYOBE_AUTOMATION_PR_TYPE - - KAYOBE_AUTOMATION_PR_TITLE - - KAYOBE_AUTOMATION_PR_URL - - HOME - - - name: Run seed host configure - file_name: run-seed-host-configure.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run seed host package update - file_name: run-seed-host-package-update.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run seed hypervisor host configure - file_name: run-seed-hypervisor-host-configure.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run seed hypervisor host package update - file_name: run-seed-hypervisor-host-package-update.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run seed service deploy - file_name: run-seed-service-deploy.yml - trigger: - workflow_dispatch: *github_combined_inputs - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - KAYOBE_AUTOMATION_PR_TARGET_BRANCH - - KAYOBE_AUTOMATION_PR_REMOTE - - KAYOBE_AUTOMATION_PR_GITHUB_USER - - KAYOBE_AUTOMATION_PR_AUTH_TOKEN - - KAYOBE_AUTOMATION_PR_TYPE - - KAYOBE_AUTOMATION_PR_TITLE - - KAYOBE_AUTOMATION_PR_URL - - HOME - - - name: Run seed VM provision - file_name: run-seed-vm-provision.yml - trigger: - workflow_dispatch: *github_kayobe_inputs - arguments: - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME - - - name: Run tempest - file_name: run-tempest.yml - use_bespoke: true +build_kayobe_image: + file_name: build-kayobe-docker-image.yml + use_bespoke: true diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index 4ac7a8e..18652bf 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -1,4 +1,4 @@ -name: %% workflow.name %% +name: %% format_file_name(workflow.file_name, is_title=true) %% on: push: @@ -12,7 +12,7 @@ env: KAYOBE_USER_GID: 1000 jobs: - %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} + %% format_file_name(workflow.file_name) %%: runs-on: %% github_runs_on %% container: docker:git permissions: diff --git a/roles/github/templates/header.yml.j2 b/roles/github/templates/header.yml.j2 index 84df8a1..8e81f84 100644 --- a/roles/github/templates/header.yml.j2 +++ b/roles/github/templates/header.yml.j2 @@ -1,4 +1,4 @@ -name: %% workflow.name %% +name: %% format_file_name(workflow.file_name, is_title=true) %% on: <%- if workflow.trigger is defined +%> diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index 2fea28d..15af0b2 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -1,4 +1,4 @@ -name: Generate kolla config diff +name: %% format_file_name(workflow.file_name, is_title=true) %% concurrency: group: kolla-diff-${{ github.head_ref }} @@ -8,7 +8,7 @@ on: pull_request: jobs: - %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} + %% format_file_name(workflow.file_name) %% runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 0275e05..74ec486 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -1,6 +1,4 @@ -# This workflow will run tempest against an openstack environment. - -name: Run tempest +name: %% format_file_name(workflow.file_name, is_title=true) %% on: workflow_dispatch: @@ -21,7 +19,7 @@ on: Limit tests to this regex. Takes precedence over testSuite. jobs: - %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} + name: %% format_file_name(workflow.file_name) %% runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/workflow.yml.j2 b/roles/github/templates/workflow.yml.j2 index 9453207..ababc54 100644 --- a/roles/github/templates/workflow.yml.j2 +++ b/roles/github/templates/workflow.yml.j2 @@ -1,3 +1,11 @@ +<%- macro format_file_name(file_name, is_title=False) -%> + <%- set formatted_name = file_name | splitext | first -%> + <%- if is_title -%> + <%- set formatted_name = formatted_name | replace('-', ' ') | title -%> + <%- endif -%> + %%- formatted_name -%% +<%- endmacro -%> + <% if workflow.use_bespoke is defined and workflow.use_bespoke is true %> <%- extends workflow.file_name + ".j2" | string +%> <% else %> From a3ec035a7c4cd846b09e8f82b0fdb111bd929423 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Wed, 12 Jul 2023 17:28:40 +0100 Subject: [PATCH 18/28] feat: support modifying individual workflows --- roles/github/defaults/main.yml | 242 ++++++++++++++++++ roles/github/templates/generic.yml.j2 | 2 +- roles/github/templates/run-config-diff.yml.j2 | 2 +- roles/github/templates/run-tempest.yml.j2 | 2 +- roles/github/templates/workflow.yml.j2 | 2 +- 5 files changed, 246 insertions(+), 4 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index 6b1073c..bbac217 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -34,7 +34,249 @@ github_combined_inputs: &github_combined_inputs github_workflows: - "{{ build_kayobe_image }}" + - "{{ run_kolla_config_diff }}" + - "{{ run_infra_vm_host_configure }}" + - "{{ run_infra_vm_host_package_update }}" + - "{{ run_infra_vm_provision }}" + - "{{ run_infra_vm_service_deploy }}" + - "{{ run_network_connectivity_check }}" + - "{{ run_overcloud_container_image_pull }}" + - "{{ run_overcloud_database_backup }}" + - "{{ run_overcloud_host_configure }}" + - "{{ run_overcloud_host_package_update }}" + - "{{ run_overcloud_inventory_discover }}" + - "{{ run_overcloud_provision }}" + - "{{ run_overcloud_service_deploy }}" + - "{{ run_overcloud_service_upgrade }}" + - "{{ run_seed_host_configure }}" + - "{{ run_seed_host_package_update }}" + - "{{ run_seed_hypervisor_host_configure }}" + - "{{ run_seed_hypervisor_host_package_update }}" + - "{{ run_seed_service_deploy }}" + - "{{ run_seed_vm_provision }}" + - "{{ run_tempest }}" build_kayobe_image: file_name: build-kayobe-docker-image.yml use_bespoke: true + +run_kolla_config_diff: + file_name: run-config-diff.yml + use_bespoke: true + +run_infra_vm_host_configure: + file_name: run-infra-vm-host-configure.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_infra_vm_host_package_update: + file_name: run-infra-vm-host-package-update.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_infra_vm_provision: + file_name: run-infra-vm-provision.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_infra_vm_service_deploy: + file_name: run-infra-vm-service-deploy.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_network_connectivity_check: + file_name: run-network-connectivity-check.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_container_image_pull: + file_name: run-overcloud-container-image-pull.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_database_backup: + file_name: run-overcloud-database-backup.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_host_configure: + file_name: run-overcloud-host-configure.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_host_package_update: + file_name: run-overcloud-host-package-update.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_inventory_discover: + file_name: run-overcloud-inventory-discover.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - KAYOBE_AUTOMATION_PR_TARGET_BRANCH + - KAYOBE_AUTOMATION_PR_REMOTE + - KAYOBE_AUTOMATION_PR_GITHUB_USER + - KAYOBE_AUTOMATION_PR_AUTH_TOKEN + - KAYOBE_AUTOMATION_PR_TYPE + - KAYOBE_AUTOMATION_PR_TITLE + - KAYOBE_AUTOMATION_PR_URL + - HOME + +run_overcloud_provision: + file_name: run-overcloud-provision.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_overcloud_service_deploy: + file_name: run-overcloud-service-deploy.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - KAYOBE_AUTOMATION_PR_TARGET_BRANCH + - KAYOBE_AUTOMATION_PR_REMOTE + - KAYOBE_AUTOMATION_PR_GITHUB_USER + - KAYOBE_AUTOMATION_PR_AUTH_TOKEN + - KAYOBE_AUTOMATION_PR_TYPE + - KAYOBE_AUTOMATION_PR_TITLE + - KAYOBE_AUTOMATION_PR_URL + - HOME + +run_overcloud_service_upgrade: + file_name: run-overcloud-service-upgrade.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - KAYOBE_AUTOMATION_PR_TARGET_BRANCH + - KAYOBE_AUTOMATION_PR_REMOTE + - KAYOBE_AUTOMATION_PR_GITHUB_USER + - KAYOBE_AUTOMATION_PR_AUTH_TOKEN + - KAYOBE_AUTOMATION_PR_TYPE + - KAYOBE_AUTOMATION_PR_TITLE + - KAYOBE_AUTOMATION_PR_URL + - HOME + +run_seed_host_configure: + file_name: run-seed-host-configure.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_seed_host_package_update: + file_name: run-seed-host-package-update.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_seed_hypervisor_host_configure: + file_name: run-seed-hypervisor-host-configure.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_seed_hypervisor_host_package_update: + file_name: run-seed-hypervisor-host-package-update.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_seed_service_deploy: + file_name: run-seed-service-deploy.yml + trigger: + workflow_dispatch: *github_combined_inputs + arguments: + - KOLLA_TAGS + - KOLLA_LIMIT + - KAYOBE_TAGS + - KAYOBE_LIMIT + - KAYOBE_AUTOMATION_PR_TARGET_BRANCH + - KAYOBE_AUTOMATION_PR_REMOTE + - KAYOBE_AUTOMATION_PR_GITHUB_USER + - KAYOBE_AUTOMATION_PR_AUTH_TOKEN + - KAYOBE_AUTOMATION_PR_TYPE + - KAYOBE_AUTOMATION_PR_TITLE + - KAYOBE_AUTOMATION_PR_URL + - HOME + +run_seed_vm_provision: + file_name: run-seed-vm-provision.yml + trigger: + workflow_dispatch: *github_kayobe_inputs + arguments: + - KAYOBE_TAGS + - KAYOBE_LIMIT + - HOME + +run_tempest: + file_name: run-tempest.yml + use_bespoke: true diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 96f6a5d..0c4b800 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -1,7 +1,7 @@ <% include "header.yml.j2" +%> jobs: - %% workflow.file_name | splitext | first %%: {# Use the filename without extension as job name +#} + %% format_file_name(workflow.file_name) %%: runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index 15af0b2..8317155 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -8,7 +8,7 @@ on: pull_request: jobs: - %% format_file_name(workflow.file_name) %% + %% format_file_name(workflow.file_name) %%: runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 74ec486..fa9316e 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -19,7 +19,7 @@ on: Limit tests to this regex. Takes precedence over testSuite. jobs: - name: %% format_file_name(workflow.file_name) %% + %% format_file_name(workflow.file_name) %%: runs-on: %% github_runs_on %% permissions: contents: read diff --git a/roles/github/templates/workflow.yml.j2 b/roles/github/templates/workflow.yml.j2 index ababc54..b511c7d 100644 --- a/roles/github/templates/workflow.yml.j2 +++ b/roles/github/templates/workflow.yml.j2 @@ -1,7 +1,7 @@ <%- macro format_file_name(file_name, is_title=False) -%> <%- set formatted_name = file_name | splitext | first -%> <%- if is_title -%> - <%- set formatted_name = formatted_name | replace('-', ' ') | title -%> + <%- set formatted_name = formatted_name | replace('-', ' ') | title | regex_replace('Vm','VM') -%> <%- endif -%> %%- formatted_name -%% <%- endmacro -%> From 14da403e675171f167700c86beb7b042e9f22fd3 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Thu, 13 Jul 2023 13:57:17 +0100 Subject: [PATCH 19/28] feat: template hooks replace with variable hooks Due to limitations of `ansible.builtin.template` module template hooks wouldn't work in the desired manner. Therefore, template hooks have been removed and variable hooks have been added instead. --- roles/github/defaults/main.yml | 6 +++++ .../build-kayobe-docker-image.yml.j2 | 9 ++++++++ roles/github/templates/generic.yml.j2 | 22 +++++++++---------- .../hooks/post-automation-task.yml.j2 | 0 .../templates/hooks/post-checkout.yml.j2 | 0 .../hooks/pre-automation-task.yml.j2 | 0 .../templates/hooks/pre-checkout.yml.j2 | 0 roles/github/templates/run-config-diff.yml.j2 | 9 ++++++++ roles/github/templates/run-tempest.yml.j2 | 10 ++++++++- 9 files changed, 43 insertions(+), 13 deletions(-) delete mode 100644 roles/github/templates/hooks/post-automation-task.yml.j2 delete mode 100644 roles/github/templates/hooks/post-checkout.yml.j2 delete mode 100644 roles/github/templates/hooks/pre-automation-task.yml.j2 delete mode 100644 roles/github/templates/hooks/pre-checkout.yml.j2 diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index bbac217..04fb4b6 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -13,6 +13,12 @@ github_image_name: ${{ github.repository }}:latest github_kayobe_arguments: {} +github_checkout_hook: "" + +github_kayobe_hook: "" + +github_final_hook: "" + github_kayobe_inputs: &github_kayobe_inputs kayobeLimit: description: | diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index 18652bf..5d472e7 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -19,6 +19,9 @@ jobs: contents: read packages: write steps: +<% if github_checkout_hook | length >= 1 %> + %% github_checkout_hook | indent(width=6, first=false) %% +<% endif %> - name: Checkout kayobe config uses: actions/checkout@v3 with: @@ -45,6 +48,9 @@ jobs: driver-opts: | image=moby/buildkit:master +<% if github_kayobe_hook | length >= 1 %> + %% github_kayobe_hook | indent(width=6, first=false) %% +<% endif %> - name: Build and push Docker image uses: docker/build-push-action@v4 with: @@ -57,3 +63,6 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} +<% if github_final_hook | length >= 1 +%> + %% github_final_hook | indent(width=6, first=false) -%% +<% endif %> \ No newline at end of file diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 0c4b800..79fc828 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -12,22 +12,20 @@ jobs: username: %% github_registry_username %% password: %% github_registry_password %% steps: -<%- filter indent(width=6,first=False) +%> -<%- include "hooks/pre-checkout.yml.j2" ignore missing +%> -<% endfilter %> +<% if github_checkout_hook | length >= 1 %> + %% github_checkout_hook | indent(width=6, first=false) %% +<% endif %> - name: Checkout kayobe config uses: actions/checkout@v3 with: submodules: true -<%- filter indent(width=6,first=False) +%> -<% include "hooks/pre-checkout.yml.j2" ignore missing +%> -<% endfilter %> + +<% if github_kayobe_hook | length >= 1 %> + %% github_kayobe_hook | indent(width=6, first=false) %% +<% endif %> - name: Symlink source checkout to expected location run: sudo ln -s $PWD /src -<%- filter indent(width=6,first=False) +%> -<% include "hooks/pre-automation-task.yml.j2" ignore missing +%> -<% endfilter %> - name: %% workflow.file_name[:-4] | replace('-', ' ') | capitalize %% run: | /src/.automation/pipeline/%% workflow.file_name[4:-4] %%.sh @@ -38,6 +36,6 @@ jobs: %% argument %%: '%% kayobe_arguments[argument] | default(default_kayobe_arguments[argument]) %%' <%- endfor +%> <%- endif +%> -<%- filter indent(width=6,first=False) +%> -<% include "hooks/post-automation-task.yml.j2" ignore missing %> -<% endfilter -%> +<% if github_final_hook | length >= 1 +%> + %% github_final_hook | indent(width=6, first=false) -%% +<% endif %> \ No newline at end of file diff --git a/roles/github/templates/hooks/post-automation-task.yml.j2 b/roles/github/templates/hooks/post-automation-task.yml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/roles/github/templates/hooks/post-checkout.yml.j2 b/roles/github/templates/hooks/post-checkout.yml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/roles/github/templates/hooks/pre-automation-task.yml.j2 b/roles/github/templates/hooks/pre-automation-task.yml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/roles/github/templates/hooks/pre-checkout.yml.j2 b/roles/github/templates/hooks/pre-checkout.yml.j2 deleted file mode 100644 index e69de29..0000000 diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index 8317155..ee84a1d 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -19,6 +19,9 @@ jobs: username: %% github_registry_username %% password: %% github_registry_password %% steps: +<% if github_checkout_hook | length >= 1 %> + %% github_checkout_hook | indent(width=6, first=false) %% +<% endif %> - name: Checkout kayobe config uses: actions/checkout@v3 with: @@ -26,6 +29,9 @@ jobs: fetch-depth: 0 ref: ${{ github.ref }} +<% if github_kayobe_hook | length >= 1 %> + %% github_kayobe_hook | indent(width=6, first=false) %% +<% endif %> - name: Copy checkout to expected location run: | sudo cp -rf $GITHUB_WORKSPACE/ /src @@ -47,3 +53,6 @@ jobs: - name: Print diff run: | cat /tmp/kayobe-config-diff +<% if github_final_hook | length >= 1 +%> + %% github_final_hook | indent(width=6, first=false) -%% +<% endif %> \ No newline at end of file diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index fa9316e..80cbe49 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -29,8 +29,10 @@ jobs: credentials: username: %% github_registry_username %% password: %% github_registry_password %% - steps: +<% if github_checkout_hook | length >= 1 %> + %% github_checkout_hook | indent(width=6, first=false) %% +<% endif %> - name: Checkout kayobe config uses: actions/checkout@v3 with: @@ -39,6 +41,9 @@ jobs: - name: Symlink source checkout to expected location run: sudo ln -s $PWD /src +<% if github_kayobe_hook | length >= 1 %> + %% github_kayobe_hook | indent(width=6, first=false) %% +<% endif %> - name: Run kayobe control host bootstrap run: | source /src/.automation/functions && @@ -84,3 +89,6 @@ jobs: - name: Fail if any tests did not pass run: | test $(wc -l < /stack/tempest-artifacts/failed-tests) -lt 1 +<% if github_final_hook | length >= 1 +%> + %% github_final_hook | indent(width=6, first=false) -%% +<% endif %> \ No newline at end of file From 395ab9d21c196717a6a53bb235e3dddb5d6572c1 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Thu, 13 Jul 2023 14:24:32 +0100 Subject: [PATCH 20/28] feat: update `README` --- roles/github/README.md | 49 +++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index d66d4f3..30cf579 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -46,6 +46,8 @@ The following variables can be used to make small adjustments to the composition `github_kayobe_arguments`: a dictionary of arguments that can be used to override the default arguments found within `vars/main.yml`. For example if you wanted to change the value of `KAYOBE_ENVIRONMENT` from its default of `production` you can simply add `KAYOBE_ENVIRONMENT` to this dictionary and it will take precedence over the defaults. +`github_*_hook:` see section [Template Hooks](#template-hooks) for information about this variables + If you wish to make more impactful changes such as which workflows are built and what they contain then see the list of dictionaries called `workflows` in `defaults/main.yml` `github_workflows:` is a list of dictionaries that contains each of the workflows described above. A given list element is made up of the following: @@ -60,22 +62,43 @@ If you wish to make more impactful changes such as which workflows are built and - `use_bespoke`: Some workflows benefit from a dedicated workflow template as they drift away from the main template. Set to `true` if the workflow requires a *bespoke* template and ensure a template `workflow_name.yml.j2` is present. -The following will override `workflows` to ensure only `Run overcloud database backup` is generated. +The following will override `workflows` to ensure only `Build Kayobe Image` and `Run Kolla Config Diff` is generated. ```yaml github_workflows: - - name: Run overcloud database backup - file_name: run-overcloud-database-backup.yml - trigger: - workflow_dispatch: *combined_inputs - schedule: - cron: "30 0 * * *" - arguments: - - KOLLA_TAGS - - KOLLA_LIMIT - - KAYOBE_TAGS - - KAYOBE_LIMIT - - HOME + - "{{ build_kayobe_image }}" + - "{{ run_kolla_config_diff }}" +``` + +Template Hooks +-------------- + +Workflows can be expanded with the use of hooks which are variables that if provided can be inserted into the appropriate location enabling the introduction of additional steps within the workflow job. This could include the use of HashiCorp Vault or installing and configuring a network proxy. + +There are currently three hooks available + +- `github_checkout_hook`: a hook that occurs before the repository is cloned by the `checkout` action. + +- `github_kayobe_hook`: a hook that occurs after the the repository has been cloned and before the kayobe automation task has started. + +- `github_final_hook`: a hook that occurs after the kayobe automation task has finished. + +A hook must be defined within the variables file for the playbook should be a scalar block string. + +```yaml +github_checkout_hook: | + - name: Import secrets via Hashicorp Vault + id: secrets + uses: hashicorp/vault-action@v2.5.0 + with: + url: https://vault.stackhpc.com:8200 + method: approle + roleId: ${{ secrets.ROLE_ID }} + secretId: ${{ secrets.SECRET_ID }} + tlsSkipVerify: true + secrets: | + stackhpc/data/github kayobe_vault_password_${{ needs.env.outputs.environment }} | KAYOBE_VAULT_PASSWORD ; + stackhpc/data/github kayobe_automation_ssh_private_key_${{ needs.env.outputs.environment }} | KAYOBE_AUTOMATION_SSH_PRIVATE_KEY ; ``` Example Playbook From 75cf80cd3359163e1d573f7d163804948113e58c Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Thu, 13 Jul 2023 14:49:31 +0100 Subject: [PATCH 21/28] feat: use macro for subtitle --- roles/github/templates/generic.yml.j2 | 2 +- roles/github/templates/workflow.yml.j2 | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 79fc828..516e21a 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -26,7 +26,7 @@ jobs: - name: Symlink source checkout to expected location run: sudo ln -s $PWD /src - - name: %% workflow.file_name[:-4] | replace('-', ' ') | capitalize %% + - name: %% format_file_name(workflow.file_name, is_subtitle=true) %% run: | /src/.automation/pipeline/%% workflow.file_name[4:-4] %%.sh <%- if workflow.arguments is defined +%> diff --git a/roles/github/templates/workflow.yml.j2 b/roles/github/templates/workflow.yml.j2 index b511c7d..efb6202 100644 --- a/roles/github/templates/workflow.yml.j2 +++ b/roles/github/templates/workflow.yml.j2 @@ -1,8 +1,11 @@ -<%- macro format_file_name(file_name, is_title=False) -%> +<%- macro format_file_name(file_name, is_title=false, is_subtitle=false) -%> <%- set formatted_name = file_name | splitext | first -%> <%- if is_title -%> <%- set formatted_name = formatted_name | replace('-', ' ') | title | regex_replace('Vm','VM') -%> <%- endif -%> + <%- if is_subtitle -%> + <%- set formatted_name = formatted_name | replace('-', ' ') | capitalize | regex_replace('vm','VM') -%> + <%- endif -%> %%- formatted_name -%% <%- endmacro -%> From 9a70fe7dcdfebf662304e5bbfcdbf604ef09609a Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Thu, 13 Jul 2023 19:52:54 +0100 Subject: [PATCH 22/28] fix: add EOF newline to templates --- roles/github/templates/build-kayobe-docker-image.yml.j2 | 2 +- roles/github/templates/generic.yml.j2 | 2 +- roles/github/templates/run-config-diff.yml.j2 | 2 +- roles/github/templates/run-tempest.yml.j2 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/github/templates/build-kayobe-docker-image.yml.j2 b/roles/github/templates/build-kayobe-docker-image.yml.j2 index 5d472e7..058b025 100644 --- a/roles/github/templates/build-kayobe-docker-image.yml.j2 +++ b/roles/github/templates/build-kayobe-docker-image.yml.j2 @@ -65,4 +65,4 @@ jobs: labels: ${{ steps.meta.outputs.labels }} <% if github_final_hook | length >= 1 +%> %% github_final_hook | indent(width=6, first=false) -%% -<% endif %> \ No newline at end of file +<% endif %> diff --git a/roles/github/templates/generic.yml.j2 b/roles/github/templates/generic.yml.j2 index 516e21a..7b9d627 100644 --- a/roles/github/templates/generic.yml.j2 +++ b/roles/github/templates/generic.yml.j2 @@ -38,4 +38,4 @@ jobs: <%- endif +%> <% if github_final_hook | length >= 1 +%> %% github_final_hook | indent(width=6, first=false) -%% -<% endif %> \ No newline at end of file +<% endif %> diff --git a/roles/github/templates/run-config-diff.yml.j2 b/roles/github/templates/run-config-diff.yml.j2 index ee84a1d..e8a2d7c 100644 --- a/roles/github/templates/run-config-diff.yml.j2 +++ b/roles/github/templates/run-config-diff.yml.j2 @@ -55,4 +55,4 @@ jobs: cat /tmp/kayobe-config-diff <% if github_final_hook | length >= 1 +%> %% github_final_hook | indent(width=6, first=false) -%% -<% endif %> \ No newline at end of file +<% endif %> diff --git a/roles/github/templates/run-tempest.yml.j2 b/roles/github/templates/run-tempest.yml.j2 index 80cbe49..f5404ef 100644 --- a/roles/github/templates/run-tempest.yml.j2 +++ b/roles/github/templates/run-tempest.yml.j2 @@ -91,4 +91,4 @@ jobs: test $(wc -l < /stack/tempest-artifacts/failed-tests) -lt 1 <% if github_final_hook | length >= 1 +%> %% github_final_hook | indent(width=6, first=false) -%% -<% endif %> \ No newline at end of file +<% endif %> From 501637c798392afeea16e683a2c75b530da2ca54 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Mon, 31 Jul 2023 16:06:52 +0100 Subject: [PATCH 23/28] feat: apply suggestions from code review Co-authored-by: Mark Goddard --- roles/github/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index 30cf579..227c4b9 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -62,7 +62,7 @@ If you wish to make more impactful changes such as which workflows are built and - `use_bespoke`: Some workflows benefit from a dedicated workflow template as they drift away from the main template. Set to `true` if the workflow requires a *bespoke* template and ensure a template `workflow_name.yml.j2` is present. -The following will override `workflows` to ensure only `Build Kayobe Image` and `Run Kolla Config Diff` is generated. +The following will override `github_workflows` to ensure only `Build Kayobe Image` and `Run Kolla Config Diff` is generated. ```yaml github_workflows: @@ -83,7 +83,7 @@ There are currently three hooks available - `github_final_hook`: a hook that occurs after the kayobe automation task has finished. -A hook must be defined within the variables file for the playbook should be a scalar block string. +A hook must be defined as a variable and should be a scalar block string. ```yaml github_checkout_hook: | From 796bf0708df9725143ba6a7f546d89daa50c7283 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Mon, 31 Jul 2023 16:11:06 +0100 Subject: [PATCH 24/28] feat: remove python poetry --- poetry.lock | 885 ------------------------------------------------- pyproject.toml | 19 -- 2 files changed, 904 deletions(-) delete mode 100644 poetry.lock delete mode 100644 pyproject.toml diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 536153f..0000000 --- a/poetry.lock +++ /dev/null @@ -1,885 +0,0 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. - -[[package]] -name = "ansible" -version = "7.5.0" -description = "Radically simple IT automation" -category = "main" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ansible-7.5.0-py3-none-any.whl", hash = "sha256:a2deadeb8a199abfbd7c1960bc126697be517ac4310b2f59eb2190706e6a2637"}, - {file = "ansible-7.5.0.tar.gz", hash = "sha256:4f08ca25bb29005c1afc4125e837882ad7a2c67ff0cc9d1a361b89ad09cf8c44"}, -] - -[package.dependencies] -ansible-core = ">=2.14.5,<2.15.0" - -[[package]] -name = "ansible-core" -version = "2.14.5" -description = "Radically simple IT automation" -category = "main" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ansible-core-2.14.5.tar.gz", hash = "sha256:8c4eed76ce458b4a37334a0802df29488ecf9f8af38c3111069c96b17b205530"}, - {file = "ansible_core-2.14.5-py3-none-any.whl", hash = "sha256:bc1755f43bdddac574607e959010f98256ff87068ca7e23be5a9d335f6ebf01e"}, -] - -[package.dependencies] -cryptography = "*" -jinja2 = ">=3.0.0" -packaging = "*" -PyYAML = ">=5.1" -resolvelib = ">=0.5.3,<0.9.0" - -[[package]] -name = "ansible-lint" -version = "6.15.0" -description = "Checks playbooks for practices and behavior that could potentially be improved" -category = "dev" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ansible-lint-6.15.0.tar.gz", hash = "sha256:4ce790cf0006760ba01d8b946d80303702fc7454bd19c6b3079dd98d40517e6f"}, - {file = "ansible_lint-6.15.0-py3-none-any.whl", hash = "sha256:e5a3b7bd1ebe3cc1c574d1bd3de756bdf157110559024c50d34b5479d47290ba"}, -] - -[package.dependencies] -ansible-core = ">=2.12.0" -black = ">=22.8.0" -filelock = ">=3.3.0" -jsonschema = ">=4.10.0" -packaging = ">=21.3" -pyyaml = ">=5.4.1" -rich = ">=12.0.0" -"ruamel.yaml" = ">=0.17.21,<0.18" -subprocess-tee = ">=0.4.1" -wcmatch = ">=8.1.2" -yamllint = ">=1.30.0" - -[package.extras] -docs = ["mkdocs-ansible[lock] (>=0.1.4)", "pipdeptree (>=2.4.0)"] -lock = ["ansible-core (==2.14.4)", "attrs (==23.1.0)", "black (==23.3.0)", "bracex (==2.3.post1)", "cffi (==1.15.1)", "click (==8.1.3)", "cryptography (==40.0.2)", "filelock (==3.11.0)", "jinja2 (==3.1.2)", "jsonschema (==4.17.3)", "markdown-it-py (==2.2.0)", "markupsafe (==2.1.2)", "mdurl (==0.1.2)", "mypy-extensions (==1.0.0)", "packaging (==23.1)", "pathspec (==0.11.1)", "platformdirs (==3.2.0)", "pycparser (==2.21)", "pygments (==2.15.0)", "pyrsistent (==0.19.3)", "pyyaml (==6.0)", "resolvelib (==0.8.1)", "rich (==13.3.4)", "ruamel-yaml (==0.17.21)", "setuptools (==67.6.1)", "subprocess-tee (==0.4.1)", "tomli (==2.0.1)", "typing-extensions (==4.5.0)", "wcmatch (==8.4.1)", "yamllint (==1.30.0)"] -test = ["black", "coverage-enable-subprocess", "coverage[toml] (>=6.4.4)", "jmespath", "mypy", "netaddr", "psutil", "pylint", "pytest (>=7.2.2)", "pytest-mock", "pytest-plus (>=0.2)", "pytest-xdist (>=2.1.0)", "spdx-tools (>=0.7.1)", "types-jsonschema", "types-pyyaml"] - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bracex" -version = "2.3.post1" -description = "Bash style brace expander." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bracex-2.3.post1-py3-none-any.whl", hash = "sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73"}, - {file = "bracex-2.3.post1.tar.gz", hash = "sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693"}, -] - -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[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" -files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] - -[[package]] -name = "click" -version = "8.1.3" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] - -[[package]] -name = "cryptography" -version = "40.0.2" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"}, - {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"}, - {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"}, - {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"}, - {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"}, - {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"}, - {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"}, - {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"}, - {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"}, - {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"}, -] - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "check-manifest", "mypy", "ruff"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] -tox = ["tox"] - -[[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -category = "dev" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] - -[[package]] -name = "filelock" -version = "3.12.0" -description = "A platform independent file lock." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "filelock-3.12.0-py3-none-any.whl", hash = "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9"}, - {file = "filelock-3.12.0.tar.gz", hash = "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718"}, -] - -[package.extras] -docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - -[[package]] -name = "identify" -version = "2.5.24" -description = "File identification library for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, - {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jsonschema" -version = "4.17.3" -description = "An implementation of JSON Schema validation for Python" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] - -[package.dependencies] -attrs = ">=17.4.0" -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "markdown-it-py" -version = "2.2.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.2" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -description = "Node.js virtual environment builder" -category = "dev" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[package.dependencies] -setuptools = "*" - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pathspec" -version = "0.11.1" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, -] - -[[package]] -name = "platformdirs" -version = "3.5.1" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, - {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, -] - -[package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] - -[[package]] -name = "pre-commit" -version = "3.3.1" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pre_commit-3.3.1-py2.py3-none-any.whl", hash = "sha256:218e9e3f7f7f3271ebc355a15598a4d3893ad9fc7b57fe446db75644543323b9"}, - {file = "pre_commit-3.3.1.tar.gz", hash = "sha256:733f78c9a056cdd169baa6cd4272d51ecfda95346ef8a89bf93712706021b907"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pygments" -version = "2.15.1" -description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, -] - -[package.extras] -plugins = ["importlib-metadata"] - -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] - -[[package]] -name = "resolvelib" -version = "0.8.1" -description = "Resolve abstract dependencies into concrete ones" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "resolvelib-0.8.1-py2.py3-none-any.whl", hash = "sha256:d9b7907f055c3b3a2cfc56c914ffd940122915826ff5fb5b1de0c99778f4de98"}, - {file = "resolvelib-0.8.1.tar.gz", hash = "sha256:c6ea56732e9fb6fca1b2acc2ccc68a0b6b8c566d8f3e78e0443310ede61dbd37"}, -] - -[package.extras] -examples = ["html5lib", "packaging", "pygraphviz", "requests"] -lint = ["black", "flake8", "isort", "mypy", "types-requests"] -release = ["build", "towncrier", "twine"] -test = ["commentjson", "packaging", "pytest"] - -[[package]] -name = "rich" -version = "13.3.5" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.3.5-py3-none-any.whl", hash = "sha256:69cdf53799e63f38b95b9bf9c875f8c90e78dd62b2f00c13a911c7a3b9fa4704"}, - {file = "rich-13.3.5.tar.gz", hash = "sha256:2d11b9b8dd03868f09b4fffadc84a6a8cda574e40dc90821bd845720ebb8e89c"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0,<3.0.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "ruamel-yaml" -version = "0.17.26" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "dev" -optional = false -python-versions = ">=3" -files = [ - {file = "ruamel.yaml-0.17.26-py3-none-any.whl", hash = "sha256:25d0ee82a0a9a6f44683dcf8c282340def4074a4562f3a24f55695bb254c1693"}, - {file = "ruamel.yaml-0.17.26.tar.gz", hash = "sha256:baa2d0a5aad2034826c439ce61c142c07082b76f4791d54145e131206e998059"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "dev" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] - -[[package]] -name = "setuptools" -version = "67.7.2" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "setuptools-67.7.2-py3-none-any.whl", hash = "sha256:23aaf86b85ca52ceb801d32703f12d77517b2556af839621c641fca11287952b"}, - {file = "setuptools-67.7.2.tar.gz", hash = "sha256:f104fa03692a2602fa0fec6c6a9e63b6c8a968de13e17c026957dd1f53d80990"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "subprocess-tee" -version = "0.4.1" -description = "subprocess-tee" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "subprocess-tee-0.4.1.tar.gz", hash = "sha256:b3c124993f8b88d1eb1c2fde0bc2069787eac720ba88771cba17e8c93324825d"}, - {file = "subprocess_tee-0.4.1-py3-none-any.whl", hash = "sha256:eca56973a1c1237093c2055b2731bcaab784683b83f22c76f26e4c5763402e28"}, -] - -[package.extras] -test = ["enrich (>=1.2.6)", "molecule (>=3.4.0)", "pytest (>=6.2.5)", "pytest-cov (>=2.12.1)", "pytest-plus (>=0.2)", "pytest-xdist (>=2.3.0)"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, -] - -[[package]] -name = "virtualenv" -version = "20.23.0" -description = "Virtual Python Environment builder" -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, - {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, -] - -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.11,<4" -platformdirs = ">=3.2,<4" - -[package.extras] -docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] - -[[package]] -name = "wcmatch" -version = "8.4.1" -description = "Wildcard/glob file name matcher." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "wcmatch-8.4.1-py3-none-any.whl", hash = "sha256:3476cd107aba7b25ba1d59406938a47dc7eec6cfd0ad09ff77193f21a964dee7"}, - {file = "wcmatch-8.4.1.tar.gz", hash = "sha256:b1f042a899ea4c458b7321da1b5e3331e3e0ec781583434de1301946ceadb943"}, -] - -[package.dependencies] -bracex = ">=2.1.1" - -[[package]] -name = "yamllint" -version = "1.31.0" -description = "A linter for YAML files." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yamllint-1.31.0-py3-none-any.whl", hash = "sha256:15f4bdb645e6a4a0a22fe5415bc38b4a934c51419b30104896d2f3f95e329185"}, - {file = "yamllint-1.31.0.tar.gz", hash = "sha256:2d83f1d12f733e162a87e06b176149d7bb9c5bae4a9e5fce1c771d7f703f7a65"}, -] - -[package.dependencies] -pathspec = ">=0.5.3" -pyyaml = "*" - -[package.extras] -dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "6d0d0b032782e0d9029dfc706e030c79f231bdb86d8cf3a0f74c166efb2d1c6a" diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 6c89def..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,19 +0,0 @@ -[tool.poetry] -name = "kayobe-automation-workflows" -version = "0.1.0" -description = "Ansible collection for templating the creation of kayobe workflows." -authors = ["Jack Hodgkiss "] -license = "Apache License 2.0" -readme = "README.md" - -[tool.poetry.dependencies] -python = "^3.9" -ansible = "^7.0" - -[tool.poetry.group.dev.dependencies] -ansible-lint = { version = "6.15.*", markers = "platform_system != 'Windows'" } -pre-commit = "^3.2.0" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" From fbd08c137ea585b8d53d15ba4e2b130bed380039 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Mon, 31 Jul 2023 16:14:08 +0100 Subject: [PATCH 25/28] fix: add `github_` prefix to variables --- roles/github/defaults/main.yml | 90 +++++++++++++++++----------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/roles/github/defaults/main.yml b/roles/github/defaults/main.yml index 04fb4b6..a68cb6e 100644 --- a/roles/github/defaults/main.yml +++ b/roles/github/defaults/main.yml @@ -39,38 +39,38 @@ github_combined_inputs: &github_combined_inputs <<: [*github_kayobe_inputs, *github_kolla_inputs] github_workflows: - - "{{ build_kayobe_image }}" - - "{{ run_kolla_config_diff }}" - - "{{ run_infra_vm_host_configure }}" - - "{{ run_infra_vm_host_package_update }}" - - "{{ run_infra_vm_provision }}" - - "{{ run_infra_vm_service_deploy }}" - - "{{ run_network_connectivity_check }}" - - "{{ run_overcloud_container_image_pull }}" - - "{{ run_overcloud_database_backup }}" - - "{{ run_overcloud_host_configure }}" - - "{{ run_overcloud_host_package_update }}" - - "{{ run_overcloud_inventory_discover }}" - - "{{ run_overcloud_provision }}" - - "{{ run_overcloud_service_deploy }}" - - "{{ run_overcloud_service_upgrade }}" - - "{{ run_seed_host_configure }}" - - "{{ run_seed_host_package_update }}" - - "{{ run_seed_hypervisor_host_configure }}" - - "{{ run_seed_hypervisor_host_package_update }}" - - "{{ run_seed_service_deploy }}" - - "{{ run_seed_vm_provision }}" - - "{{ run_tempest }}" - -build_kayobe_image: + - "{{ github_build_kayobe_image }}" + - "{{ github_run_kolla_config_diff }}" + - "{{ github_run_infra_vm_host_configure }}" + - "{{ github_run_infra_vm_host_package_update }}" + - "{{ github_run_infra_vm_provision }}" + - "{{ github_run_infra_vm_service_deploy }}" + - "{{ github_run_network_connectivity_check }}" + - "{{ github_run_overcloud_container_image_pull }}" + - "{{ github_run_overcloud_database_backup }}" + - "{{ github_run_overcloud_host_configure }}" + - "{{ github_run_overcloud_host_package_update }}" + - "{{ github_run_overcloud_inventory_discover }}" + - "{{ github_run_overcloud_provision }}" + - "{{ github_run_overcloud_service_deploy }}" + - "{{ github_run_overcloud_service_upgrade }}" + - "{{ github_run_seed_host_configure }}" + - "{{ github_run_seed_host_package_update }}" + - "{{ github_run_seed_hypervisor_host_configure }}" + - "{{ github_run_seed_hypervisor_host_package_update }}" + - "{{ github_run_seed_service_deploy }}" + - "{{ github_run_seed_vm_provision }}" + - "{{ github_run_tempest }}" + +github_build_kayobe_image: file_name: build-kayobe-docker-image.yml use_bespoke: true -run_kolla_config_diff: +github_run_kolla_config_diff: file_name: run-config-diff.yml use_bespoke: true -run_infra_vm_host_configure: +github_run_infra_vm_host_configure: file_name: run-infra-vm-host-configure.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -79,7 +79,7 @@ run_infra_vm_host_configure: - KAYOBE_LIMIT - HOME -run_infra_vm_host_package_update: +github_run_infra_vm_host_package_update: file_name: run-infra-vm-host-package-update.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -88,7 +88,7 @@ run_infra_vm_host_package_update: - KAYOBE_LIMIT - HOME -run_infra_vm_provision: +github_run_infra_vm_provision: file_name: run-infra-vm-provision.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -97,7 +97,7 @@ run_infra_vm_provision: - KAYOBE_LIMIT - HOME -run_infra_vm_service_deploy: +github_run_infra_vm_service_deploy: file_name: run-infra-vm-service-deploy.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -106,7 +106,7 @@ run_infra_vm_service_deploy: - KAYOBE_LIMIT - HOME -run_network_connectivity_check: +github_run_network_connectivity_check: file_name: run-network-connectivity-check.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -115,7 +115,7 @@ run_network_connectivity_check: - KAYOBE_LIMIT - HOME -run_overcloud_container_image_pull: +github_run_overcloud_container_image_pull: file_name: run-overcloud-container-image-pull.yml trigger: workflow_dispatch: *github_combined_inputs @@ -126,7 +126,7 @@ run_overcloud_container_image_pull: - KAYOBE_LIMIT - HOME -run_overcloud_database_backup: +github_run_overcloud_database_backup: file_name: run-overcloud-database-backup.yml trigger: workflow_dispatch: *github_combined_inputs @@ -137,7 +137,7 @@ run_overcloud_database_backup: - KAYOBE_LIMIT - HOME -run_overcloud_host_configure: +github_run_overcloud_host_configure: file_name: run-overcloud-host-configure.yml trigger: workflow_dispatch: *github_combined_inputs @@ -148,7 +148,7 @@ run_overcloud_host_configure: - KAYOBE_LIMIT - HOME -run_overcloud_host_package_update: +github_run_overcloud_host_package_update: file_name: run-overcloud-host-package-update.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -157,7 +157,7 @@ run_overcloud_host_package_update: - KAYOBE_LIMIT - HOME -run_overcloud_inventory_discover: +github_run_overcloud_inventory_discover: file_name: run-overcloud-inventory-discover.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -173,7 +173,7 @@ run_overcloud_inventory_discover: - KAYOBE_AUTOMATION_PR_URL - HOME -run_overcloud_provision: +github_run_overcloud_provision: file_name: run-overcloud-provision.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -182,7 +182,7 @@ run_overcloud_provision: - KAYOBE_LIMIT - HOME -run_overcloud_service_deploy: +github_run_overcloud_service_deploy: file_name: run-overcloud-service-deploy.yml trigger: workflow_dispatch: *github_combined_inputs @@ -200,7 +200,7 @@ run_overcloud_service_deploy: - KAYOBE_AUTOMATION_PR_URL - HOME -run_overcloud_service_upgrade: +github_run_overcloud_service_upgrade: file_name: run-overcloud-service-upgrade.yml trigger: workflow_dispatch: *github_combined_inputs @@ -218,7 +218,7 @@ run_overcloud_service_upgrade: - KAYOBE_AUTOMATION_PR_URL - HOME -run_seed_host_configure: +github_run_seed_host_configure: file_name: run-seed-host-configure.yml trigger: workflow_dispatch: *github_combined_inputs @@ -229,7 +229,7 @@ run_seed_host_configure: - KAYOBE_LIMIT - HOME -run_seed_host_package_update: +github_run_seed_host_package_update: file_name: run-seed-host-package-update.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -238,7 +238,7 @@ run_seed_host_package_update: - KAYOBE_LIMIT - HOME -run_seed_hypervisor_host_configure: +github_run_seed_hypervisor_host_configure: file_name: run-seed-hypervisor-host-configure.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -247,7 +247,7 @@ run_seed_hypervisor_host_configure: - KAYOBE_LIMIT - HOME -run_seed_hypervisor_host_package_update: +github_run_seed_hypervisor_host_package_update: file_name: run-seed-hypervisor-host-package-update.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -256,7 +256,7 @@ run_seed_hypervisor_host_package_update: - KAYOBE_LIMIT - HOME -run_seed_service_deploy: +github_run_seed_service_deploy: file_name: run-seed-service-deploy.yml trigger: workflow_dispatch: *github_combined_inputs @@ -274,7 +274,7 @@ run_seed_service_deploy: - KAYOBE_AUTOMATION_PR_URL - HOME -run_seed_vm_provision: +github_run_seed_vm_provision: file_name: run-seed-vm-provision.yml trigger: workflow_dispatch: *github_kayobe_inputs @@ -283,6 +283,6 @@ run_seed_vm_provision: - KAYOBE_LIMIT - HOME -run_tempest: +github_run_tempest: file_name: run-tempest.yml use_bespoke: true From a933528403caf4ccd356c18af01b94d53159d239 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 1 Aug 2023 12:16:45 +0100 Subject: [PATCH 26/28] feat: simplify conditional for `use_bespoke` --- roles/github/templates/workflow.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/github/templates/workflow.yml.j2 b/roles/github/templates/workflow.yml.j2 index efb6202..a6b6b26 100644 --- a/roles/github/templates/workflow.yml.j2 +++ b/roles/github/templates/workflow.yml.j2 @@ -9,7 +9,7 @@ %%- formatted_name -%% <%- endmacro -%> -<% if workflow.use_bespoke is defined and workflow.use_bespoke is true %> +<% if workflow.use_bespoke is true %> <%- extends workflow.file_name + ".j2" | string +%> <% else %> <%- extends "generic.yml.j2" +%> From 42005f489e48a45107acf5ed19f578258a3aabfb Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 1 Aug 2023 12:32:12 +0100 Subject: [PATCH 27/28] feat: add support for user provided templates --- roles/github/README.md | 14 +++++++++++++- roles/github/tasks/main.yml | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/roles/github/README.md b/roles/github/README.md index 227c4b9..988ee89 100644 --- a/roles/github/README.md +++ b/roles/github/README.md @@ -60,7 +60,9 @@ If you wish to make more impactful changes such as which workflows are built and - `arguments`: list of arguments keys used by the automation task the contents will be acquired from `kayobe_arguments` or the defaults. -- `use_bespoke`: Some workflows benefit from a dedicated workflow template as they drift away from the main template. Set to `true` if the workflow requires a *bespoke* template and ensure a template `workflow_name.yml.j2` is present. +- `path_override`: Some workflows benefit from a dedicated workflow template as the `generic.yml.j2` cannot meet the requirements of all workflows. Therefore it might be beneficial to create specific templates within the `{{ playbook_dir }}/templates/` directory and set this variable to that specific path. + +- `use_bespoke`: As mentioned in `path_override` some workflows require a more specific template to meet their needs. Setting this to true would create a workflow from a bespoke template if one exists within the roles `templates` directory. Note this is intended for **internal use only**. The following will override `github_workflows` to ensure only `Build Kayobe Image` and `Run Kolla Config Diff` is generated. @@ -70,6 +72,16 @@ github_workflows: - "{{ run_kolla_config_diff }}" ``` +In the following example `github_build_kayobe_image` has been changed to use a user provided template stored within their `{{ playbook_dir }}/templates` + +```yaml +github_build_kayobe_image: + file_name: build-kayobe-docker-image.yml + path_override: "{{ playbook_dir }}/templates/build-kayobe-docker-image.yml.j2" +``` + + + Template Hooks -------------- diff --git a/roles/github/tasks/main.yml b/roles/github/tasks/main.yml index 407d063..d8afefc 100644 --- a/roles/github/tasks/main.yml +++ b/roles/github/tasks/main.yml @@ -7,7 +7,7 @@ - name: Ensure workflow file exists ansible.builtin.template: - src: "workflow.yml.j2" + src: "{{ workflow.path_override | default('workflow.yml.j2') }}" dest: "{{ github_output_directory }}/{{ workflow.file_name }}" block_start_string: "<%" block_end_string: "%>" From 067d39bcbbb4f88e68db7d6cfdc21f4bbaad5dd9 Mon Sep 17 00:00:00 2001 From: Jack Hodgkiss Date: Tue, 1 Aug 2023 15:46:25 +0100 Subject: [PATCH 28/28] feat: bump version and update URL --- galaxy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galaxy.yml b/galaxy.yml index 8df8a0d..c52760c 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -8,7 +8,7 @@ namespace: stackhpc name: kayobe_automation_workflows # The version of the collection. Must be compatible with semantic versioning -version: 0.1.0 +version: 1.0.0 # The path to the Markdown (.md) readme file. This path is relative to the root of the collection readme: README.md @@ -47,7 +47,7 @@ tags: dependencies: {} # The URL of the originating SCM repository -repository: https://github.com/jackhodgkiss/kayobe-automation-workflows +repository: https://github.com/stackhpc/ansible-collection-kayobe-workflows # The URL to any online docs # documentation: http://docs.example.com