From 10a2946f9f60e6bc73f1f86967771f67a3c9d562 Mon Sep 17 00:00:00 2001 From: Hao Liu <44379968+TheRealHaoLiu@users.noreply.github.com> Date: Thu, 8 Jan 2026 14:21:11 -0500 Subject: [PATCH] Fix requirement for python3.12 (#16215) * Fix pip version constraint for Python 3.12 compatibility Remove outdated pip<22.0 constraint that was a workaround for pip-tools#1558. This issue was fixed in pip-tools 6.5.0+ and the old constraint breaks Python 3.12 where pkgutil.ImpImporter was removed. * Update requirements.txt * Fix license file inconsistencies with requirements - Rename awx-plugins.interfaces.txt to awx-plugins-interfaces.txt to match the package name in requirements - Remove backports-tarfile.txt and importlib-resources.txt as these packages are no longer in requirements * Fix updater.sh for pip 25.3 normalized output format Changes to requirements_git.txt: - Update to PEP 440 format (name @ git+url) to match pip-compile output - Normalize package names (hyphens instead of dots/underscores) - Sort extras alphabetically with hyphens (e.g., jwt-consumer not jwt_consumer) - Add documentation explaining format requirements Changes to updater.sh: - Escape BRE regex metacharacters in sed pattern to handle brackets in extras - Change sed delimiter from ! to | to avoid conflict with comment text - Add explicit return statements to functions - Assign positional parameters to local variables - Redirect error messages to stderr - Replace backticks with $() for command substitution - Pin pip to version 25.3 requirements.txt regenerated via updater.sh * Normalize package names in requirements.in to match pip output - prometheus_client -> prometheus-client - setuptools_scm -> setuptools-scm - dispatcherd[pg_notify] -> dispatcherd[pg-notify] PEP 503 specifies that package names should use hyphens. * Fix license files to match normalized package names - Remove awx_plugins.interfaces.txt (duplicate of awx-plugins-interfaces.txt) - Rename system-certifi.txt to certifi.txt to match package name --- ...erfaces.txt => awx-plugins-interfaces.txt} | 0 licenses/awx_plugins.interfaces.txt | 202 ------------------ licenses/backports-tarfile.txt | 17 -- licenses/{system-certifi.txt => certifi.txt} | 0 licenses/importlib-resources.txt | 202 ------------------ requirements/requirements.in | 6 +- requirements/requirements.txt | 20 +- requirements/requirements_git.txt | 29 ++- requirements/updater.sh | 34 +-- 9 files changed, 57 insertions(+), 453 deletions(-) rename licenses/{awx-plugins.interfaces.txt => awx-plugins-interfaces.txt} (100%) delete mode 100644 licenses/awx_plugins.interfaces.txt delete mode 100644 licenses/backports-tarfile.txt rename licenses/{system-certifi.txt => certifi.txt} (100%) delete mode 100644 licenses/importlib-resources.txt diff --git a/licenses/awx-plugins.interfaces.txt b/licenses/awx-plugins-interfaces.txt similarity index 100% rename from licenses/awx-plugins.interfaces.txt rename to licenses/awx-plugins-interfaces.txt diff --git a/licenses/awx_plugins.interfaces.txt b/licenses/awx_plugins.interfaces.txt deleted file mode 100644 index d645695673..0000000000 --- a/licenses/awx_plugins.interfaces.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/backports-tarfile.txt b/licenses/backports-tarfile.txt deleted file mode 100644 index 1bb5a44356..0000000000 --- a/licenses/backports-tarfile.txt +++ /dev/null @@ -1,17 +0,0 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/licenses/system-certifi.txt b/licenses/certifi.txt similarity index 100% rename from licenses/system-certifi.txt rename to licenses/certifi.txt diff --git a/licenses/importlib-resources.txt b/licenses/importlib-resources.txt deleted file mode 100644 index d645695673..0000000000 --- a/licenses/importlib-resources.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/requirements/requirements.in b/requirements/requirements.in index f9405893b3..f77f46f837 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -41,7 +41,7 @@ opentelemetry-sdk~=1.37 opentelemetry-instrumentation-logging opentelemetry-exporter-otlp pexpect -prometheus_client +prometheus-client psycopg psutil pygerduty @@ -66,11 +66,11 @@ uwsgitop wheel>=0.38.1 # CVE-2022-40898 pip==25.3 # see UPGRADE BLOCKERs setuptools==80.9.0 # see UPGRADE BLOCKERs -setuptools_scm[toml] +setuptools-scm[toml] setuptools-rust>=0.11.4 # cryptography build dep pkgconfig>=1.5.1 # xmlsec build dep - needed for offline build django-flags>=5.0.13 -dispatcherd[pg_notify] # tasking system, previously part of AWX code base +dispatcherd[pg-notify] # tasking system, previously part of AWX code base protobuf>=4.25.8 # CVE-2025-4565 idna>=3.10 # CVE-2024-3651 # Temporarily added to use ansible-runner from git branch, to be removed diff --git a/requirements/requirements.txt b/requirements/requirements.txt index ee704d21f9..3775706182 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -18,7 +18,7 @@ aiosignal==1.4.0 # via aiohttp ansi2html==1.9.2 # via -r /awx_devel/requirements/requirements.in -# git+https://github.com/ansible/ansible-runner.git@devel # git requirements installed separately +# ansible-runner @ git+https://github.com/ansible/ansible-runner.git@devel # git requirements installed separately # via -r /awx_devel/requirements/requirements_git.txt asgiref==3.11.0 # via @@ -43,9 +43,9 @@ autocommand==2.2.2 # via jaraco-text automat==25.4.16 # via twisted -# awx-plugins-core @ git+https://github.com/ansible/awx-plugins.git@devel # git requirements installed separately +# awx-plugins-core[credentials-github-app] @ git+https://github.com/ansible/awx-plugins.git@devel # git requirements installed separately # via -r /awx_devel/requirements/requirements_git.txt -awx-plugins.interfaces @ git+https://github.com/ansible/awx_plugins.interfaces.git +# awx-plugins-interfaces @ git+https://github.com/ansible/awx_plugins.interfaces.git # git requirements installed separately # via # -r /awx_devel/requirements/requirements_git.txt # awx-plugins-core @@ -66,8 +66,6 @@ azure-keyvault-keys==4.11.0 # via azure-keyvault azure-keyvault-secrets==4.10.0 # via azure-keyvault -backports-tarfile==1.2.0 - # via jaraco-context boto3==1.40.46 # via -r /awx_devel/requirements/requirements.in botocore==1.40.46 @@ -79,7 +77,7 @@ brotli==1.1.0 # via aiohttp cachetools==6.2.0 # via google-auth -# git+https://github.com/ansible/system-certifi.git@devel # git requirements installed separately +# certifi @ git+https://github.com/ansible/system-certifi.git@devel # git requirements installed separately # via # -r /awx_devel/requirements/requirements_git.txt # kubernetes @@ -118,7 +116,7 @@ cython==3.1.3 # via -r /awx_devel/requirements/requirements.in daphne==4.2.1 # via -r /awx_devel/requirements/requirements.in -dispatcherd[pg_notify]==2025.12.12 +dispatcherd[pg-notify]==2025.12.12 # via -r /awx_devel/requirements/requirements.in distro==1.9.0 # via -r /awx_devel/requirements/requirements.in @@ -136,7 +134,7 @@ django==5.2.8 # django-solo # djangorestframework # drf-spectacular -# django-ansible-base @ git+https://github.com/ansible/django-ansible-base@devel # git requirements installed separately +# django-ansible-base[feature-flags,jwt-consumer,rbac,resource-registry,rest-filters] @ git+https://github.com/ansible/django-ansible-base@devel # git requirements installed separately # via -r /awx_devel/requirements/requirements_git.txt django-cors-headers==4.9.0 # via -r /awx_devel/requirements/requirements.in @@ -208,8 +206,6 @@ idna==3.10 # yarl importlib-metadata==8.7.0 # via opentelemetry-api -importlib-resources==6.5.2 - # via irc incremental==24.7.2 # via twisted inflection==0.5.1 @@ -362,7 +358,9 @@ protobuf==6.32.1 psutil==7.1.0 # via -r /awx_devel/requirements/requirements.in psycopg==3.2.10 - # via -r /awx_devel/requirements/requirements.in + # via + # -r /awx_devel/requirements/requirements.in + # dispatcherd ptyprocess==0.7.0 # via pexpect pyasn1==0.6.1 diff --git a/requirements/requirements_git.txt b/requirements/requirements_git.txt index 51a0f4f697..196760847a 100644 --- a/requirements/requirements_git.txt +++ b/requirements/requirements_git.txt @@ -1,5 +1,24 @@ -git+https://github.com/ansible/system-certifi.git@devel#egg=certifi -git+https://github.com/ansible/ansible-runner.git@devel#egg=ansible-runner -awx-plugins-core @ git+https://github.com/ansible/awx-plugins.git@devel#egg=awx-plugins-core[credentials-github-app] -django-ansible-base @ git+https://github.com/ansible/django-ansible-base@devel#egg=django-ansible-base[rest-filters,jwt_consumer,resource-registry,rbac,feature-flags] -awx_plugins.interfaces @ git+https://github.com/ansible/awx_plugins.interfaces.git +# Git-based requirements - installed separately from requirements.txt +# +# IMPORTANT: Use PEP 440 format that matches pip-compile's normalized output: +# name @ git+https://github.com/org/repo.git@branch +# +# Format rules: +# - Package name MUST match pip's normalized form (hyphens, not dots/underscores) +# - Extras go in the package name: pkg[extra1,extra2] @ git+... +# - Extras MUST be sorted alphabetically and use hyphens (not underscores) +# - Do NOT use the legacy #egg=name format +# +# Example: +# WRONG: git+https://github.com/org/repo.git@devel#egg=my-package[foo,bar] +# WRONG: my_package[bar,foo] @ git+https://github.com/org/repo.git@devel +# RIGHT: my-package[bar,foo] @ git+https://github.com/org/repo.git@devel +# +# updater.sh uses these lines to comment out matching entries in requirements.txt +# so they are not installed twice (once from git, once from PyPI). +# +certifi @ git+https://github.com/ansible/system-certifi.git@devel +ansible-runner @ git+https://github.com/ansible/ansible-runner.git@devel +awx-plugins-core[credentials-github-app] @ git+https://github.com/ansible/awx-plugins.git@devel +django-ansible-base[feature-flags,jwt-consumer,rbac,resource-registry,rest-filters] @ git+https://github.com/ansible/django-ansible-base@devel +awx-plugins-interfaces @ git+https://github.com/ansible/awx_plugins.interfaces.git diff --git a/requirements/updater.sh b/requirements/updater.sh index 8687281deb..e3398256e2 100755 --- a/requirements/updater.sh +++ b/requirements/updater.sh @@ -11,32 +11,39 @@ sanitize_git="1" _cleanup() { cd / test "${KEEP_TMP:-0}" = 1 || rm -rf "${_tmp}" + return 0 } generate_requirements() { - venv="`pwd`/venv" - echo $venv + local input_reqs="$1" + venv="$(pwd)/venv" + echo "$venv" /usr/bin/python3.12 -m venv "${venv}" # shellcheck disable=SC1090 - source ${venv}/bin/activate + source "${venv}/bin/activate" - # FIXME: https://github.com/jazzband/pip-tools/issues/1558 - ${venv}/bin/python3 -m pip install -U 'pip<22.0' pip-tools + # pip version must match the version used in AWX venv (see README.md UPGRADE BLOCKERs) + "${venv}/bin/python3" -m pip install -U 'pip==25.3' pip-tools - ${pip_compile} $1 --output-file requirements.txt + ${pip_compile} ${input_reqs} --output-file requirements.txt # consider the git requirements for purposes of resolving deps # Then comment out any git+ lines from requirements.txt if [[ "$sanitize_git" == "1" ]] ; then while IFS= read -r line; do if [[ $line != \#* ]]; then # ignore lines which are already comments + # Escape regex special characters for the search pattern + # Only escape BRE metacharacters: . * ^ $ [ \ + escaped_pattern=$(printf '%s\n' "${line%#*}" | sed 's/[[\.*^$]/\\&/g') # Add # to the start of any line matched - sed -i "s!^.*${line%#*}!# ${line%#*} # git requirements installed separately!g" requirements.txt + sed -i "s|^.*${escaped_pattern}|# ${line%#*} # git requirements installed separately|g" requirements.txt fi done < "${requirements_git}" fi; + return 0 } main() { + local command="${1:-}" base_dir=$(pwd) dest_requirements="${requirements}" input_requirements="${requirements_in} ${requirements_git}" @@ -45,7 +52,7 @@ main() { trap _cleanup INT TERM EXIT - case $1 in + case "${command}" in "run") NEEDS_HELP=0 ;; @@ -63,9 +70,9 @@ main() { NEEDS_HELP=1 ;; *) - echo "" - echo "ERROR: Parameter $1 not valid" - echo "" + echo "" >&2 + echo "ERROR: Parameter ${command} not valid" >&2 + echo "" >&2 NEEDS_HELP=1 ;; esac @@ -86,13 +93,13 @@ main() { fi if [[ ! -d /awx_devel ]] ; then - echo "This script should be run inside the awx container" + echo "This script should be run inside the awx container" >&2 exit fi if [[ ! -z "$(tail -c 1 "${requirements_git}")" ]] then - echo "No newline at end of ${requirements_git}, please add one" + echo "No newline at end of ${requirements_git}, please add one" >&2 exit fi @@ -105,6 +112,7 @@ main() { cat requirements.txt | sed "s:$base_dir:/awx_devel/requirements:" > "${dest_requirements}" _cleanup + return 0 } # set EVAL=1 in case you want to source this script