all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe9f:5d24
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: b731a0ed-5ab2-4f1c-a562-498424b5ca00
        host_id: 82101243836454d7401d5893feae9e2c5df7cc291646d8a99b33b53b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe9f:5d24
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.41
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.157
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe9f:5d24
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#42>'
      - '<Job openstack-project-manager-mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/openstack-project-manager/.zuul.yaml@main#2>'
      - '<Job openstack-project-manager-mypy explicit: None implied: None source:
        osism/openstack-project-manager/.zuul.yaml@main#14>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: ba7f40d7167e40699fc70edfa4298bfb
      build_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.0\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.0?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        patchset: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      buildset: dce32859742e476d9050e796efe2854c
      buildset_refs:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.0\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.0?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        patchset: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      change: '276'
      change_message: "Update dependency click to v8.4.0\n\nThis PR contains the following
        updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
        | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
        [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
        | `==8.3.2` \u2192 `==8.4.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.0?slim=true)
        | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.0?slim=true)
        |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
        [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
        :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
        is now a generic abstract base class,\n    parameterized by its converted
        value type.\n  - :meth:`~ParamType.convert` return types are narrowed on all\n
        \   concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
        etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
        subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
        and the number-range base are now\n    generic with abstract methods.\n- Refactor
        `convert_type` to extract type inference into a private\n  `_guess_type` helper,
        and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
        typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
        base class, making explicit\n    that it cannot be instantiated directly.\n
        \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
        `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
        \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
        as `Context | None`, matching the runtime behavior.\n- Split string values
        from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple` type,
        matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n- Auto-detect
        `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not `str`, `int`,
        `float`, or `bool`), so programmer-provided\n  Python objects like classes
        and enum members are passed through unchanged\n  instead of being stringified.
        Previously `type=click.UNPROCESSED` had\n  to be set explicitly. :issue:`2012`
        :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
        to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
        to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
        \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality on
        non-Windows platforms. Prompt text is now\n  passed directly to readline instead
        of being printed separately, allowing\n  proper backspace, line editing, and
        line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use :func:`os.startfile`
        on Windows to open URLs in :func:`open_url`,\n  replacing the `start` built-in
        which cannot be invoked without\n  `shell=True`. :issue:`3164` :pr:`3186`\n-
        Fix Fish shell completion errors when option help text contains newlines.\n
        \ :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception with suggestions
        for misspelled\n  commands. :issue:`3107` :pr:`3228`\n- Use :class:`ValueError`
        message when conversion in :class:`FuncParamType` would\n  fail. :issue:`3105`
        :pr:`3211`\n- Add `click.get_pager_file` for file-like access to an output\n
        \ pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper` and\n
        \ :func:`~click.formatting.wrap_text` now measure line width in visible\n
        \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
        emitting only a blank line when\n  called without `args`. The usage prefix
        and program name are now\n  written even when no arguments follow, and the
        trailing separator\n  space is stripped so the line ends at the program name.\n
        \ :issue:`3360` :pr:`3434`\n- Show custom error messages from types when :func:`prompt`
        with\n  `hide_input=True` fails validation, instead of always showing a\n
        \ generic message. Built-in type messages mask the input value.\n  :issue:`2809`
        :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner` with two modes:
        `sys`\n  (default) and `fd`. `fd` redirects file descriptors `1` and `2`\n
        \ via :func:`os.dup2` so output that bypasses `sys.stdout` (stale stream\n
        \ references, C extensions, subprocesses, `faulthandler`) is captured\n  with
        proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n  :issue:`2497`
        :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the `8.3.3` change that
        exposed the original file descriptor\n  via `fileno()` on the redirected `CliRunner`
        streams in the default\n  capture mode. `os.dup2(w, sys.stdout.fileno())`
        calls inside a CLI no\n  longer mutate the host runner's stdout, which broke
        Pytest's `fd`-level\n  capture teardown. C-level consumers that need a real
        `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n- Mark additional
        built-in strings with `gettext()` to extend translation\n  coverage. :pr:`2902`\n-
        Fix feature switch groups (several `flag_value` options sharing one\n  parameter
        name) silently dropping an explicit `default` when a sibling\n  option without
        an explicit default was declared first. Arbitration is now\n  source-aware:
        a more explicit :class:`ParameterSource` always wins, and\n  within `ParameterSource.DEFAULT`,
        an option that received an explicit\n  `default=` keyword wins over a sibling
        whose default was auto-derived.\n  The 8.3.x first-wins fallback for remaining
        ties was reverted to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n-
        Fix missing space between option help text and the `(DEPRECATED)`\n  label,
        and localize the option label so it matches the command label.\n  The label
        and the `DeprecationWarning` reason suffix are now produced\n  by shared helpers.
        :pr:`3423`\n- Document short option stacking (`-abc` is parsed as `-a -b -c`)
        and\n  clarify that multi-character short option names are not supported.\n
        \ :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
        Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
        Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
        At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
        defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
        manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
        conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
        Close this PR and you won't be reminded about this update again.\n\n---\n\n
        - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
        box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
        View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
      change_url: https://github.com/osism/openstack-project-manager/pull/276
      child_jobs: []
      commit_id: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
      event_id: b2143e30-51a9-11f1-84e3-c4628d5040fe
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/ba7f40d7167e40699fc70edfa4298bfb/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/ba7f40d7167e40699fc70edfa4298bfb/work/logs
        result_data_file: /var/lib/zuul/builds/ba7f40d7167e40699fc70edfa4298bfb/work/results.json
        src_root: /var/lib/zuul/builds/ba7f40d7167e40699fc70edfa4298bfb/work/src
        work_root: /var/lib/zuul/builds/ba7f40d7167e40699fc70edfa4298bfb/work
      include_vars: []
      items:
      - branch: main
        change: '276'
        change_message: "Update dependency click to v8.4.0\n\nThis PR contains the
          following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/)
          | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n|
          [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/page/changes/))
          | `==8.3.2` \u2192 `==8.4.0` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/click/8.4.0?slim=true)
          | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/click/8.3.2/8.4.0?slim=true)
          |\n\n---\n\n### Release Notes\n\n<details>\n<summary>pallets/click (click)</summary>\n\n###
          [`v8.4.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-840)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.3...8.4.0)\n\nUnreleased\n\n-
          :class:`ParamType` typing improvements. :pr:`3371`\n\n  - :class:`ParamType`
          is now a generic abstract base class,\n    parameterized by its converted
          value type.\n  - :meth:`~ParamType.convert` return types are narrowed on
          all\n    concrete types (`str` for :class:`STRING`, `int` for\n    :class:`INT`,
          etc.).\n  - :meth:`~ParamType.to_info_dict` returns specific\n    :class:`~typing.TypedDict`
          subclasses instead of\n    `dict[str, Any]`.\n  - :class:`CompositeParamType`
          and the number-range base are now\n    generic with abstract methods.\n-
          Refactor `convert_type` to extract type inference into a private\n  `_guess_type`
          helper, and add :func:`typing.overload` signatures.\n  :pr:`3372`\n- :class:`Parameter`
          typing improvements. :pr:`2805`\n\n  - :class:`Parameter` is now an abstract
          base class, making explicit\n    that it cannot be instantiated directly.\n
          \ - :attr:`Parameter.name` is now `str` instead of `str | None`.\n    When
          `expose_value=False`, the name is set to `\"\"` instead\n    of `None`.\n
          \ - The `ctx` parameter of :meth:`Parameter.get_error_hint` is now\n    typed
          as `Context | None`, matching the runtime behavior.\n- Split string values
          from `default_map` for parameters with `nargs > 1`\n  or :class:`Tuple`
          type, matching environment variable behavior.\n  :issue:`2745` :pr:`3364`\n-
          Auto-detect `type=UNPROCESSED` for `flag_value` of non-basic types\n  (not
          `str`, `int`, `float`, or `bool`), so programmer-provided\n  Python objects
          like classes and enum members are passed through unchanged\n  instead of
          being stringified. Previously `type=click.UNPROCESSED` had\n  to be set
          explicitly. :issue:`2012` :pr:`3363`\n- The error hint now uses :meth:`Command.get_help_option_names`
          to pick\n  non-shadowed help option names, so `Try '... -h'` no longer points
          to a\n  subcommand option that shadows `-h`. All surviving names are shown\n
          \ (`-h/--help`). :issue:`2790` :pr:`3208`\n- Fix readline functionality
          on non-Windows platforms. Prompt text is now\n  passed directly to readline
          instead of being printed separately, allowing\n  proper backspace, line
          editing, and line wrapping behavior. :issue:`2968`\n  :pr:`2969`\n- Use
          :func:`os.startfile` on Windows to open URLs in :func:`open_url`,\n  replacing
          the `start` built-in which cannot be invoked without\n  `shell=True`. :issue:`3164`
          :pr:`3186`\n- Fix Fish shell completion errors when option help text contains
          newlines.\n  :issue:`3043` :pr:`3126`\n- Add :class:`NoSuchCommand` exception
          with suggestions for misspelled\n  commands. :issue:`3107` :pr:`3228`\n-
          Use :class:`ValueError` message when conversion in :class:`FuncParamType`
          would\n  fail. :issue:`3105` :pr:`3211`\n- Add `click.get_pager_file` for
          file-like access to an output\n  pager. :pr:`1572` :pr:`3405`\n- :class:`~click.formatting.TextWrapper`
          and\n  :func:`~click.formatting.wrap_text` now measure line width in visible\n
          \ characters, ignoring ANSI escape sequences. :pr:`3420`\n- Fix :meth:`HelpFormatter.write_usage`
          emitting only a blank line when\n  called without `args`. The usage prefix
          and program name are now\n  written even when no arguments follow, and the
          trailing separator\n  space is stripped so the line ends at the program
          name.\n  :issue:`3360` :pr:`3434`\n- Show custom error messages from types
          when :func:`prompt` with\n  `hide_input=True` fails validation, instead
          of always showing a\n  generic message. Built-in type messages mask the
          input value.\n  :issue:`2809` :pr:`3256`\n- Add `capture` parameter to :class:`CliRunner`
          with two modes: `sys`\n  (default) and `fd`. `fd` redirects file descriptors
          `1` and `2`\n  via :func:`os.dup2` so output that bypasses `sys.stdout`
          (stale stream\n  references, C extensions, subprocesses, `faulthandler`)
          is captured\n  with proper isolation. :issue:`854` :issue:`2412` :issue:`2468`\n
          \ :issue:`2497` :issue:`2761` :issue:`2827` :issue:`2865`\n- Revert the
          `8.3.3` change that exposed the original file descriptor\n  via `fileno()`
          on the redirected `CliRunner` streams in the default\n  capture mode. `os.dup2(w,
          sys.stdout.fileno())` calls inside a CLI no\n  longer mutate the host runner's
          stdout, which broke Pytest's `fd`-level\n  capture teardown. C-level consumers
          that need a real `fd` should use\n  `capture=\"fd\"`. :issue:`3384` :pr:`3391`\n-
          Mark additional built-in strings with `gettext()` to extend translation\n
          \ coverage. :pr:`2902`\n- Fix feature switch groups (several `flag_value`
          options sharing one\n  parameter name) silently dropping an explicit `default`
          when a sibling\n  option without an explicit default was declared first.
          Arbitration is now\n  source-aware: a more explicit :class:`ParameterSource`
          always wins, and\n  within `ParameterSource.DEFAULT`, an option that received
          an explicit\n  `default=` keyword wins over a sibling whose default was
          auto-derived.\n  The 8.3.x first-wins fallback for remaining ties was reverted
          to the\n  pre-8.3.x last-wins fallback. :issue:`3403` :pr:`3404`\n- Fix
          missing space between option help text and the `(DEPRECATED)`\n  label,
          and localize the option label so it matches the command label.\n  The label
          and the `DeprecationWarning` reason suffix are now produced\n  by shared
          helpers. :pr:`3423`\n- Document short option stacking (`-abc` is parsed
          as `-a -b -c`) and\n  clarify that multi-character short option names are
          not supported.\n  :issue:`2779` :pr:`3431`\n\n### [`v8.3.3`](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n[Compare
          Source](https://redirect.github.com/pallets/click/compare/8.3.2...8.3.3)\n\n</details>\n\n---\n\n###
          Configuration\n\n\U0001F4C5 **Schedule**: (UTC)\n\n- Branch creation\n  -
          At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule
          defined)\n\n\U0001F6A6 **Automerge**: Disabled by config. Please merge this
          manually once you are satisfied.\n\n\u267B **Rebasing**: Whenever PR becomes
          conflicted, or you tick the rebase/retry checkbox.\n\n\U0001F515 **Ignore**:
          Close this PR and you won't be reminded about this update again.\n\n---\n\n
          - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this
          box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).
          View the [repository job log](https://developer.mend.io/github/osism/openstack-project-manager).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMzkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjE3OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZSJdfQ==-->\n"
        change_url: https://github.com/osism/openstack-project-manager/pull/276
        commit_id: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        patchset: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          name: osism/openstack-project-manager
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
        topic: null
      job: openstack-project-manager-mypy
      jobtags: []
      max_attempts: 3
      message: VXBkYXRlIGRlcGVuZGVuY3kgY2xpY2sgdG8gdjguNC4wCgpUaGlzIFBSIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdXBkYXRlczoKCnwgUGFja2FnZSB8IENoYW5nZSB8IFtBZ2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwgW0NvbmZpZGVuY2VdKGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vbWVyZ2UtY29uZmlkZW5jZS8pIHwKfC0tLXwtLS18LS0tfC0tLXwKfCBbY2xpY2tdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrKSAoW2NoYW5nZWxvZ10oaHR0cHM6Ly9jbGljay5wYWxsZXRzcHJvamVjdHMuY29tL3BhZ2UvY2hhbmdlcy8pKSB8IGA9PTguMy4yYCDihpIgYD09OC40LjBgIHwgIVthZ2VdKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vYXBpL21jL2JhZGdlcy9hZ2UvcHlwaS9jbGljay84LjQuMD9zbGltPXRydWUpIHwgIVtjb25maWRlbmNlXShodHRwczovL2RldmVsb3Blci5tZW5kLmlvL2FwaS9tYy9iYWRnZXMvY29uZmlkZW5jZS9weXBpL2NsaWNrLzguMy4yLzguNC4wP3NsaW09dHJ1ZSkgfAoKLS0tCgojIyMgUmVsZWFzZSBOb3RlcwoKPGRldGFpbHM+CjxzdW1tYXJ5PnBhbGxldHMvY2xpY2sgKGNsaWNrKTwvc3VtbWFyeT4KCiMjIyBbYHY4LjQuMGBdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2Jsb2IvSEVBRC9DSEFOR0VTLnJzdCNWZXJzaW9uLTg0MCkKCltDb21wYXJlIFNvdXJjZV0oaHR0cHM6Ly9yZWRpcmVjdC5naXRodWIuY29tL3BhbGxldHMvY2xpY2svY29tcGFyZS84LjMuMy4uLjguNC4wKQoKVW5yZWxlYXNlZAoKLSA6Y2xhc3M6YFBhcmFtVHlwZWAgdHlwaW5nIGltcHJvdmVtZW50cy4gOnByOmAzMzcxYAoKICAtIDpjbGFzczpgUGFyYW1UeXBlYCBpcyBub3cgYSBnZW5lcmljIGFic3RyYWN0IGJhc2UgY2xhc3MsCiAgICBwYXJhbWV0ZXJpemVkIGJ5IGl0cyBjb252ZXJ0ZWQgdmFsdWUgdHlwZS4KICAtIDptZXRoOmB+UGFyYW1UeXBlLmNvbnZlcnRgIHJldHVybiB0eXBlcyBhcmUgbmFycm93ZWQgb24gYWxsCiAgICBjb25jcmV0ZSB0eXBlcyAoYHN0cmAgZm9yIDpjbGFzczpgU1RSSU5HYCwgYGludGAgZm9yCiAgICA6Y2xhc3M6YElOVGAsIGV0Yy4pLgogIC0gOm1ldGg6YH5QYXJhbVR5cGUudG9faW5mb19kaWN0YCByZXR1cm5zIHNwZWNpZmljCiAgICA6Y2xhc3M6YH50eXBpbmcuVHlwZWREaWN0YCBzdWJjbGFzc2VzIGluc3RlYWQgb2YKICAgIGBkaWN0W3N0ciwgQW55XWAuCiAgLSA6Y2xhc3M6YENvbXBvc2l0ZVBhcmFtVHlwZWAgYW5kIHRoZSBudW1iZXItcmFuZ2UgYmFzZSBhcmUgbm93CiAgICBnZW5lcmljIHdpdGggYWJzdHJhY3QgbWV0aG9kcy4KLSBSZWZhY3RvciBgY29udmVydF90eXBlYCB0byBleHRyYWN0IHR5cGUgaW5mZXJlbmNlIGludG8gYSBwcml2YXRlCiAgYF9ndWVzc190eXBlYCBoZWxwZXIsIGFuZCBhZGQgOmZ1bmM6YHR5cGluZy5vdmVybG9hZGAgc2lnbmF0dXJlcy4KICA6cHI6YDMzNzJgCi0gOmNsYXNzOmBQYXJhbWV0ZXJgIHR5cGluZyBpbXByb3ZlbWVudHMuIDpwcjpgMjgwNWAKCiAgLSA6Y2xhc3M6YFBhcmFtZXRlcmAgaXMgbm93IGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIG1ha2luZyBleHBsaWNpdAogICAgdGhhdCBpdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGRpcmVjdGx5LgogIC0gOmF0dHI6YFBhcmFtZXRlci5uYW1lYCBpcyBub3cgYHN0cmAgaW5zdGVhZCBvZiBgc3RyIHwgTm9uZWAuCiAgICBXaGVuIGBleHBvc2VfdmFsdWU9RmFsc2VgLCB0aGUgbmFtZSBpcyBzZXQgdG8gYCIiYCBpbnN0ZWFkCiAgICBvZiBgTm9uZWAuCiAgLSBUaGUgYGN0eGAgcGFyYW1ldGVyIG9mIDptZXRoOmBQYXJhbWV0ZXIuZ2V0X2Vycm9yX2hpbnRgIGlzIG5vdwogICAgdHlwZWQgYXMgYENvbnRleHQgfCBOb25lYCwgbWF0Y2hpbmcgdGhlIHJ1bnRpbWUgYmVoYXZpb3IuCi0gU3BsaXQgc3RyaW5nIHZhbHVlcyBmcm9tIGBkZWZhdWx0X21hcGAgZm9yIHBhcmFtZXRlcnMgd2l0aCBgbmFyZ3MgPiAxYAogIG9yIDpjbGFzczpgVHVwbGVgIHR5cGUsIG1hdGNoaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIGJlaGF2aW9yLgogIDppc3N1ZTpgMjc0NWAgOnByOmAzMzY0YAotIEF1dG8tZGV0ZWN0IGB0eXBlPVVOUFJPQ0VTU0VEYCBmb3IgYGZsYWdfdmFsdWVgIG9mIG5vbi1iYXNpYyB0eXBlcwogIChub3QgYHN0cmAsIGBpbnRgLCBgZmxvYXRgLCBvciBgYm9vbGApLCBzbyBwcm9ncmFtbWVyLXByb3ZpZGVkCiAgUHl0aG9uIG9iamVjdHMgbGlrZSBjbGFzc2VzIGFuZCBlbnVtIG1lbWJlcnMgYXJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZAogIGluc3RlYWQgb2YgYmVpbmcgc3RyaW5naWZpZWQuIFByZXZpb3VzbHkgYHR5cGU9Y2xpY2suVU5QUk9DRVNTRURgIGhhZAogIHRvIGJlIHNldCBleHBsaWNpdGx5LiA6aXNzdWU6YDIwMTJgIDpwcjpgMzM2M2AKLSBUaGUgZXJyb3IgaGludCBub3cgdXNlcyA6bWV0aDpgQ29tbWFuZC5nZXRfaGVscF9vcHRpb25fbmFtZXNgIHRvIHBpY2sKICBub24tc2hhZG93ZWQgaGVscCBvcHRpb24gbmFtZXMsIHNvIGBUcnkgJy4uLiAtaCdgIG5vIGxvbmdlciBwb2ludHMgdG8gYQogIHN1YmNvbW1hbmQgb3B0aW9uIHRoYXQgc2hhZG93cyBgLWhgLiBBbGwgc3Vydml2aW5nIG5hbWVzIGFyZSBzaG93bgogIChgLWgvLS1oZWxwYCkuIDppc3N1ZTpgMjc5MGAgOnByOmAzMjA4YAotIEZpeCByZWFkbGluZSBmdW5jdGlvbmFsaXR5IG9uIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcy4gUHJvbXB0IHRleHQgaXMgbm93CiAgcGFzc2VkIGRpcmVjdGx5IHRvIHJlYWRsaW5lIGluc3RlYWQgb2YgYmVpbmcgcHJpbnRlZCBzZXBhcmF0ZWx5LCBhbGxvd2luZwogIHByb3BlciBiYWNrc3BhY2UsIGxpbmUgZWRpdGluZywgYW5kIGxpbmUgd3JhcHBpbmcgYmVoYXZpb3IuIDppc3N1ZTpgMjk2OGAKICA6cHI6YDI5NjlgCi0gVXNlIDpmdW5jOmBvcy5zdGFydGZpbGVgIG9uIFdpbmRvd3MgdG8gb3BlbiBVUkxzIGluIDpmdW5jOmBvcGVuX3VybGAsCiAgcmVwbGFjaW5nIHRoZSBgc3RhcnRgIGJ1aWx0LWluIHdoaWNoIGNhbm5vdCBiZSBpbnZva2VkIHdpdGhvdXQKICBgc2hlbGw9VHJ1ZWAuIDppc3N1ZTpgMzE2NGAgOnByOmAzMTg2YAotIEZpeCBGaXNoIHNoZWxsIGNvbXBsZXRpb24gZXJyb3JzIHdoZW4gb3B0aW9uIGhlbHAgdGV4dCBjb250YWlucyBuZXdsaW5lcy4KICA6aXNzdWU6YDMwNDNgIDpwcjpgMzEyNmAKLSBBZGQgOmNsYXNzOmBOb1N1Y2hDb21tYW5kYCBleGNlcHRpb24gd2l0aCBzdWdnZXN0aW9ucyBmb3IgbWlzc3BlbGxlZAogIGNvbW1hbmRzLiA6aXNzdWU6YDMxMDdgIDpwcjpgMzIyOGAKLSBVc2UgOmNsYXNzOmBWYWx1ZUVycm9yYCBtZXNzYWdlIHdoZW4gY29udmVyc2lvbiBpbiA6Y2xhc3M6YEZ1bmNQYXJhbVR5cGVgIHdvdWxkCiAgZmFpbC4gOmlzc3VlOmAzMTA1YCA6cHI6YDMyMTFgCi0gQWRkIGBjbGljay5nZXRfcGFnZXJfZmlsZWAgZm9yIGZpbGUtbGlrZSBhY2Nlc3MgdG8gYW4gb3V0cHV0CiAgcGFnZXIuIDpwcjpgMTU3MmAgOnByOmAzNDA1YAotIDpjbGFzczpgfmNsaWNrLmZvcm1hdHRpbmcuVGV4dFdyYXBwZXJgIGFuZAogIDpmdW5jOmB+Y2xpY2suZm9ybWF0dGluZy53cmFwX3RleHRgIG5vdyBtZWFzdXJlIGxpbmUgd2lkdGggaW4gdmlzaWJsZQogIGNoYXJhY3RlcnMsIGlnbm9yaW5nIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gOnByOmAzNDIwYAotIEZpeCA6bWV0aDpgSGVscEZvcm1hdHRlci53cml0ZV91c2FnZWAgZW1pdHRpbmcgb25seSBhIGJsYW5rIGxpbmUgd2hlbgogIGNhbGxlZCB3aXRob3V0IGBhcmdzYC4gVGhlIHVzYWdlIHByZWZpeCBhbmQgcHJvZ3JhbSBuYW1lIGFyZSBub3cKICB3cml0dGVuIGV2ZW4gd2hlbiBubyBhcmd1bWVudHMgZm9sbG93LCBhbmQgdGhlIHRyYWlsaW5nIHNlcGFyYXRvcgogIHNwYWNlIGlzIHN0cmlwcGVkIHNvIHRoZSBsaW5lIGVuZHMgYXQgdGhlIHByb2dyYW0gbmFtZS4KICA6aXNzdWU6YDMzNjBgIDpwcjpgMzQzNGAKLSBTaG93IGN1c3RvbSBlcnJvciBtZXNzYWdlcyBmcm9tIHR5cGVzIHdoZW4gOmZ1bmM6YHByb21wdGAgd2l0aAogIGBoaWRlX2lucHV0PVRydWVgIGZhaWxzIHZhbGlkYXRpb24sIGluc3RlYWQgb2YgYWx3YXlzIHNob3dpbmcgYQogIGdlbmVyaWMgbWVzc2FnZS4gQnVpbHQtaW4gdHlwZSBtZXNzYWdlcyBtYXNrIHRoZSBpbnB1dCB2YWx1ZS4KICA6aXNzdWU6YDI4MDlgIDpwcjpgMzI1NmAKLSBBZGQgYGNhcHR1cmVgIHBhcmFtZXRlciB0byA6Y2xhc3M6YENsaVJ1bm5lcmAgd2l0aCB0d28gbW9kZXM6IGBzeXNgCiAgKGRlZmF1bHQpIGFuZCBgZmRgLiBgZmRgIHJlZGlyZWN0cyBmaWxlIGRlc2NyaXB0b3JzIGAxYCBhbmQgYDJgCiAgdmlhIDpmdW5jOmBvcy5kdXAyYCBzbyBvdXRwdXQgdGhhdCBieXBhc3NlcyBgc3lzLnN0ZG91dGAgKHN0YWxlIHN0cmVhbQogIHJlZmVyZW5jZXMsIEMgZXh0ZW5zaW9ucywgc3VicHJvY2Vzc2VzLCBgZmF1bHRoYW5kbGVyYCkgaXMgY2FwdHVyZWQKICB3aXRoIHByb3BlciBpc29sYXRpb24uIDppc3N1ZTpgODU0YCA6aXNzdWU6YDI0MTJgIDppc3N1ZTpgMjQ2OGAKICA6aXNzdWU6YDI0OTdgIDppc3N1ZTpgMjc2MWAgOmlzc3VlOmAyODI3YCA6aXNzdWU6YDI4NjVgCi0gUmV2ZXJ0IHRoZSBgOC4zLjNgIGNoYW5nZSB0aGF0IGV4cG9zZWQgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvcgogIHZpYSBgZmlsZW5vKClgIG9uIHRoZSByZWRpcmVjdGVkIGBDbGlSdW5uZXJgIHN0cmVhbXMgaW4gdGhlIGRlZmF1bHQKICBjYXB0dXJlIG1vZGUuIGBvcy5kdXAyKHcsIHN5cy5zdGRvdXQuZmlsZW5vKCkpYCBjYWxscyBpbnNpZGUgYSBDTEkgbm8KICBsb25nZXIgbXV0YXRlIHRoZSBob3N0IHJ1bm5lcidzIHN0ZG91dCwgd2hpY2ggYnJva2UgUHl0ZXN0J3MgYGZkYC1sZXZlbAogIGNhcHR1cmUgdGVhcmRvd24uIEMtbGV2ZWwgY29uc3VtZXJzIHRoYXQgbmVlZCBhIHJlYWwgYGZkYCBzaG91bGQgdXNlCiAgYGNhcHR1cmU9ImZkImAuIDppc3N1ZTpgMzM4NGAgOnByOmAzMzkxYAotIE1hcmsgYWRkaXRpb25hbCBidWlsdC1pbiBzdHJpbmdzIHdpdGggYGdldHRleHQoKWAgdG8gZXh0ZW5kIHRyYW5zbGF0aW9uCiAgY292ZXJhZ2UuIDpwcjpgMjkwMmAKLSBGaXggZmVhdHVyZSBzd2l0Y2ggZ3JvdXBzIChzZXZlcmFsIGBmbGFnX3ZhbHVlYCBvcHRpb25zIHNoYXJpbmcgb25lCiAgcGFyYW1ldGVyIG5hbWUpIHNpbGVudGx5IGRyb3BwaW5nIGFuIGV4cGxpY2l0IGBkZWZhdWx0YCB3aGVuIGEgc2libGluZwogIG9wdGlvbiB3aXRob3V0IGFuIGV4cGxpY2l0IGRlZmF1bHQgd2FzIGRlY2xhcmVkIGZpcnN0LiBBcmJpdHJhdGlvbiBpcyBub3cKICBzb3VyY2UtYXdhcmU6IGEgbW9yZSBleHBsaWNpdCA6Y2xhc3M6YFBhcmFtZXRlclNvdXJjZWAgYWx3YXlzIHdpbnMsIGFuZAogIHdpdGhpbiBgUGFyYW1ldGVyU291cmNlLkRFRkFVTFRgLCBhbiBvcHRpb24gdGhhdCByZWNlaXZlZCBhbiBleHBsaWNpdAogIGBkZWZhdWx0PWAga2V5d29yZCB3aW5zIG92ZXIgYSBzaWJsaW5nIHdob3NlIGRlZmF1bHQgd2FzIGF1dG8tZGVyaXZlZC4KICBUaGUgOC4zLnggZmlyc3Qtd2lucyBmYWxsYmFjayBmb3IgcmVtYWluaW5nIHRpZXMgd2FzIHJldmVydGVkIHRvIHRoZQogIHByZS04LjMueCBsYXN0LXdpbnMgZmFsbGJhY2suIDppc3N1ZTpgMzQwM2AgOnByOmAzNDA0YAotIEZpeCBtaXNzaW5nIHNwYWNlIGJldHdlZW4gb3B0aW9uIGhlbHAgdGV4dCBhbmQgdGhlIGAoREVQUkVDQVRFRClgCiAgbGFiZWwsIGFuZCBsb2NhbGl6ZSB0aGUgb3B0aW9uIGxhYmVsIHNvIGl0IG1hdGNoZXMgdGhlIGNvbW1hbmQgbGFiZWwuCiAgVGhlIGxhYmVsIGFuZCB0aGUgYERlcHJlY2F0aW9uV2FybmluZ2AgcmVhc29uIHN1ZmZpeCBhcmUgbm93IHByb2R1Y2VkCiAgYnkgc2hhcmVkIGhlbHBlcnMuIDpwcjpgMzQyM2AKLSBEb2N1bWVudCBzaG9ydCBvcHRpb24gc3RhY2tpbmcgKGAtYWJjYCBpcyBwYXJzZWQgYXMgYC1hIC1iIC1jYCkgYW5kCiAgY2xhcmlmeSB0aGF0IG11bHRpLWNoYXJhY3RlciBzaG9ydCBvcHRpb24gbmFtZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgOmlzc3VlOmAyNzc5YCA6cHI6YDM0MzFgCgojIyMgW2B2OC4zLjNgXShodHRwczovL3JlZGlyZWN0LmdpdGh1Yi5jb20vcGFsbGV0cy9jbGljay9jb21wYXJlLzguMy4yLi4uOC4zLjMpCgpbQ29tcGFyZSBTb3VyY2VdKGh0dHBzOi8vcmVkaXJlY3QuZ2l0aHViLmNvbS9wYWxsZXRzL2NsaWNrL2NvbXBhcmUvOC4zLjIuLi44LjMuMykKCjwvZGV0YWlscz4KCi0tLQoKIyMjIENvbmZpZ3VyYXRpb24KCvCfk4UgKipTY2hlZHVsZSoqOiAoVVRDKQoKLSBCcmFuY2ggY3JlYXRpb24KICAtIEF0IGFueSB0aW1lIChubyBzY2hlZHVsZSBkZWZpbmVkKQotIEF1dG9tZXJnZQogIC0gQXQgYW55IHRpbWUgKG5vIHNjaGVkdWxlIGRlZmluZWQpCgrwn5qmICoqQXV0b21lcmdlKio6IERpc2FibGVkIGJ5IGNvbmZpZy4gUGxlYXNlIG1lcmdlIHRoaXMgbWFudWFsbHkgb25jZSB5b3UgYXJlIHNhdGlzZmllZC4KCuKZuyAqKlJlYmFzaW5nKio6IFdoZW5ldmVyIFBSIGJlY29tZXMgY29uZmxpY3RlZCwgb3IgeW91IHRpY2sgdGhlIHJlYmFzZS9yZXRyeSBjaGVja2JveC4KCvCflJUgKipJZ25vcmUqKjogQ2xvc2UgdGhpcyBQUiBhbmQgeW91IHdvbid0IGJlIHJlbWluZGVkIGFib3V0IHRoaXMgdXBkYXRlIGFnYWluLgoKLS0tCgogLSBbIF0gPCEtLSByZWJhc2UtY2hlY2sgLS0+SWYgeW91IHdhbnQgdG8gcmViYXNlL3JldHJ5IHRoaXMgUFIsIGNoZWNrIHRoaXMgYm94CgotLS0KClRoaXMgUFIgd2FzIGdlbmVyYXRlZCBieSBbTWVuZCBSZW5vdmF0ZV0oaHR0cHM6Ly9tZW5kLmlvL3Jlbm92YXRlLykuIFZpZXcgdGhlIFtyZXBvc2l0b3J5IGpvYiBsb2ddKGh0dHBzOi8vZGV2ZWxvcGVyLm1lbmQuaW8vZ2l0aHViL29zaXNtL29wZW5zdGFjay1wcm9qZWN0LW1hbmFnZXIpLgo8IS0tcmVub3ZhdGUtZGVidWc6ZXlKamNtVmhkR1ZrU1c1V1pYSWlPaUkwTXk0eE16a3VOQ0lzSW5Wd1pHRjBaV1JKYmxabGNpSTZJalF6TGpFM09TNHpJaXdpZEdGeVoyVjBRbkpoYm1Ob0lqb2liV0ZwYmlJc0lteGhZbVZzY3lJNld5SnlaVzV2ZG1GMFpTSmRmUT09LS0+Cg==
      patchset: 5874a1b04acbb2c4fc0ba9ed18b115299dee7d1d
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 58f24f5b479e15eb2d520850d27e3b1b6fc66aa6
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/openstack-project-manager:
            canonical_name: github.com/osism/openstack-project-manager
            checkout: main
            commit: b126fab7e0a90906706ded91ec47d98f902ffb5e
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 58f24f5b479e15eb2d520850d27e3b1b6fc66aa6
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        playbooks:
        - path: untrusted/project_3/github.com/osism/zuul-jobs/playbooks/mypy/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_3/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/openstack-project-manager
        name: osism/openstack-project-manager
        short_name: openstack-project-manager
        src_dir: src/github.com/osism/openstack-project-manager
      projects:
        github.com/osism/openstack-project-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/openstack-project-manager
          checkout: main
          checkout_description: zuul branch
          commit: b126fab7e0a90906706ded91ec47d98f902ffb5e
          name: osism/openstack-project-manager
          required: false
          short_name: openstack-project-manager
          src_dir: src/github.com/osism/openstack-project-manager
      ref: refs/pull/276/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
