devopsdriver 0.1.48__tar.gz → 0.1.50__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/PKG-INFO +30 -18
  2. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/README.md +21 -11
  3. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/__init__.py +3 -2
  4. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/__init__.py +1 -1
  5. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/azureobject.py +1 -1
  6. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/builds/build.py +1 -1
  7. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/builds/client.py +2 -2
  8. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/clients.py +1 -1
  9. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/pipeline/client.py +1 -1
  10. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/pipeline/log.py +1 -1
  11. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/pipeline/pipeline.py +1 -1
  12. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/pipeline/run.py +1 -1
  13. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/timestamp.py +1 -1
  14. devopsdriver-0.1.50/devopsdriver/azdo/workitem/__init__.py +1 -0
  15. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/workitem/client.py +2 -2
  16. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/workitem/wiql.py +1 -1
  17. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/dataobject.py +1 -1
  18. devopsdriver-0.1.50/devopsdriver/github/__init__.py +0 -0
  19. devopsdriver-0.1.50/devopsdriver/github/client.py +27 -0
  20. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/manage_settings.py +10 -3
  21. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/sendmail.py +1 -1
  22. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/settings.py +72 -72
  23. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/template.py +1 -1
  24. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/PKG-INFO +30 -18
  25. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/SOURCES.txt +2 -0
  26. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/requires.txt +5 -4
  27. devopsdriver-0.1.50/pyproject.toml +65 -0
  28. devopsdriver-0.1.48/devopsdriver/azdo/workitem/__init__.py +0 -1
  29. devopsdriver-0.1.48/pyproject.toml +0 -64
  30. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/LICENSE +0 -0
  31. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/builds/__init__.py +0 -0
  32. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/azdo/pipeline/__init__.py +0 -0
  33. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver/templates/manage_settings.txt.mako +0 -0
  34. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/dependency_links.txt +0 -0
  35. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/entry_points.txt +0 -0
  36. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/devopsdriver.egg-info/top_level.txt +0 -0
  37. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/setup.cfg +0 -0
  38. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_azureobject.py +0 -0
  39. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_build.py +0 -0
  40. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_build_client.py +0 -0
  41. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_clients.py +0 -0
  42. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_pipeline.py +0 -0
  43. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_pipeline_client.py +0 -0
  44. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_pipeline_run.py +0 -0
  45. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_timestamp.py +0 -0
  46. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_workitem_client.py +0 -0
  47. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_azure_workitem_wiql.py +0 -0
  48. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_dataobject.py +0 -0
  49. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_manage_settings.py +0 -0
  50. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_sendmail.py +0 -0
  51. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_settings.py +0 -0
  52. {devopsdriver-0.1.48 → devopsdriver-0.1.50}/tests/test_template.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: devopsdriver
3
- Version: 0.1.48
3
+ Version: 0.1.50
4
4
  Summary: DevOps tools
5
5
  Author-email: Marc Page <marcallenpage@gmail.com>
6
6
  License: This is free and unencumbered software released into the public domain.
@@ -33,7 +33,7 @@ Project-URL: Documentation, https://github.com/marcpage/devops-driver
33
33
  Project-URL: Repository, https://github.com/marcpage/devops-driver.git
34
34
  Project-URL: Issues, https://github.com/marcpage/devops-driver/issues
35
35
  Project-URL: Changelog, https://github.com/marcpage/devops-driver/releases
36
- Keywords: azure,devops,jira,confluence,email,pipelines,tools
36
+ Keywords: azure,devops,jira,confluence,email,pipelines,tools,github
37
37
  Classifier: Development Status :: 1 - Planning
38
38
  Classifier: Environment :: Console
39
39
  Classifier: Intended Audience :: Developers
@@ -46,11 +46,12 @@ Classifier: Topic :: Software Development
46
46
  Requires-Python: >=3.10
47
47
  Description-Content-Type: text/markdown
48
48
  License-File: LICENSE
49
- Requires-Dist: PyYAML==6.0.2
50
- Requires-Dist: keyring==25.3.0
51
- Requires-Dist: setuptools==74.0.0
49
+ Requires-Dist: PyYAML==6.0.3
50
+ Requires-Dist: keyring==25.6.0
51
+ Requires-Dist: setuptools==80.9.0
52
52
  Requires-Dist: azure-devops==7.1.0b4
53
- Requires-Dist: Mako==1.3.5
53
+ Requires-Dist: Mako==1.3.10
54
+ Requires-Dist: PyGithub==2.5.0
54
55
  Provides-Extra: dev
55
56
  Requires-Dist: black>=24.3.0; extra == "dev"
56
57
  Requires-Dist: pylint>=3.1.0; extra == "dev"
@@ -58,9 +59,12 @@ Provides-Extra: test
58
59
  Requires-Dist: pytest>=8.1.1; extra == "test"
59
60
  Requires-Dist: coverage>=7.4.4; extra == "test"
60
61
  Provides-Extra: doc
62
+ Dynamic: license-file
63
+
64
+ # devops-driver
61
65
 
62
66
  ![status sheild](https://img.shields.io/static/v1?label=status&message=beta&color=blue&style=plastic)
63
- [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.48&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.48/)
67
+ [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.50&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.50/)
64
68
  [![GitHub](https://img.shields.io/github/license/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
65
69
  [![GitHub contributors](https://img.shields.io/github/contributors/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/graphs/contributors)
66
70
  [![PR's Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com)
@@ -71,7 +75,7 @@ Provides-Extra: doc
71
75
  [![size sheild](https://img.shields.io/github/languages/code-size/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver)
72
76
 
73
77
  [![example workflow](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml/badge.svg)](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml)
74
- [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=99%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
78
+ [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=98%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
75
79
  [![issues sheild](https://img.shields.io/github/issues-raw/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver/issues)
76
80
  [![GitHub pull requests](https://img.shields.io/github/issues-pr/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/pulls)
77
81
 
@@ -82,13 +86,11 @@ Provides-Extra: doc
82
86
  [![Azure](https://img.shields.io/static/v1?label=&message=Supports%20Microsoft%20Azure&color=blue&style=plastic&logo=microsoftazure)](https://azure.microsoft.com/)
83
87
  [![Gmail](https://img.shields.io/static/v1?label=&message=Supports%20Google%20Gmail&color=white&style=plastic&logo=gmail)](https://gmail.com/)
84
88
 
85
- OS:
89
+ OS:
86
90
  [![Windows](https://img.shields.io/static/v1?label=&message=Windows&color=blue&style=plastic&logo=windows)](https://microsoft.com/)
87
91
  [![macOS](https://img.shields.io/static/v1?label=&message=macOS&color=white&logoColor=black&style=plastic&logo=apple)](https://apple.com/)
88
92
  [![Linux](https://img.shields.io/static/v1?label=&message=Linux&color=seashell&logoColor=black&style=plastic&logo=linux)](https://linux.org/)
89
93
 
90
- # devops-driver
91
-
92
94
  Devops-driver is a collection of tools to help streamline developer's experience and gain insights into various processes.
93
95
 
94
96
  ## Tools
@@ -107,6 +109,7 @@ To allow seamless work in both pipelines as well as in the development environme
107
109
  Say you want a pipeline that looks for User Stories that are newer than 3 days and send out an email.
108
110
 
109
111
  ### \<platform dependent path\>/devopsdriver.yml
112
+
110
113
  ```yaml
111
114
  smtp:
112
115
  sender: JohnDoe@company.com
@@ -116,7 +119,7 @@ secrets:
116
119
  smtp.password: smtp/password
117
120
  ```
118
121
 
119
- This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
122
+ This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
120
123
 
121
124
  | Platform | Global Directory |
122
125
  |----------|------------------------|
@@ -127,6 +130,7 @@ This file is in a global place (location varies by OS) and stores information th
127
130
  The `secrets` are extra sensative and are stored in the OS keychain.
128
131
 
129
132
  ### Set secrets in the keychain
133
+
130
134
  ```bash
131
135
  $ python3 -m venv .venv
132
136
  $ source .venv/bin/activate
@@ -138,16 +142,21 @@ secret: azure.token key: azure/token
138
142
  smtp.password (azure/token): ****
139
143
  $ settings --secrets
140
144
  secret: azure.token key: azure/token
141
- Value set
145
+ Value set
142
146
  secret: smtp.password key: smtp/password
143
- Value set
147
+ Value set
144
148
  $
145
149
  ```
150
+
146
151
  The first call to `settings` will look for every secret and check if they are already set in the keychain.
147
152
  For any secret that has not been set in the keychain, you will be prompted to enter the password to store.
148
153
  The second call to `settings` will verify that all the values have been set in the keychain.
149
154
 
155
+ **Note**: If your `secrets`, `cli`, or `env` are in a yaml file named after your script,
156
+ you can call `settings --secrets --script my_script.py`.
157
+
150
158
  ### devopsdriver.yml
159
+
151
160
  ```yaml
152
161
  azure:
153
162
  url: https://dev.azure.com/MyCompany
@@ -173,15 +182,18 @@ The `cli` and `env` map command line switches and environment variables to those
173
182
  This allows for many options for setting values depending on your needs.
174
183
 
175
184
  ### new_stories.yml
185
+
176
186
  ```yaml
177
187
  scrum masters:
178
188
  - JohnDoe@company.com
179
189
  - JaneDoe@company.com
180
190
  ```
191
+
181
192
  This file is specific to your script and not shared.
182
193
  These are values that you want to use in your script but have them here for easy adjustment.
183
194
 
184
195
  ### new_stories.html.mako
196
+
185
197
  ```html
186
198
  <h1>Stories created in the last ${days} days</h1>
187
199
  <ul>
@@ -194,6 +206,7 @@ These are values that you want to use in your script but have them here for easy
194
206
  This file is the template for the email body.
195
207
 
196
208
  ### new_stories.py
209
+
197
210
  ```python
198
211
  from datetime import date, timedelta
199
212
 
@@ -229,9 +242,9 @@ send_email(
229
242
 
230
243
  ### The email sent
231
244
 
232
- **From**: JohnDoe@company.com
245
+ **From**: `JohnDoe@company.com`
233
246
 
234
- **To**: JohnDoe@company.com, JaneDoe@company.com
247
+ **To**: `JohnDoe@company.com`, `JaneDoe@company.com`
235
248
 
236
249
  **Subject**: Stories created in the last 3 days
237
250
 
@@ -246,4 +259,3 @@ send_email(
246
259
  - 754 frontend - store to schema
247
260
  - 755 Transfer job to production. Setup migrations to move to production
248
261
  - 756 Query subscription status from App
249
-
@@ -1,5 +1,7 @@
1
+ # devops-driver
2
+
1
3
  ![status sheild](https://img.shields.io/static/v1?label=status&message=beta&color=blue&style=plastic)
2
- [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.48&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.48/)
4
+ [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.50&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.50/)
3
5
  [![GitHub](https://img.shields.io/github/license/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
4
6
  [![GitHub contributors](https://img.shields.io/github/contributors/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/graphs/contributors)
5
7
  [![PR's Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com)
@@ -10,7 +12,7 @@
10
12
  [![size sheild](https://img.shields.io/github/languages/code-size/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver)
11
13
 
12
14
  [![example workflow](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml/badge.svg)](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml)
13
- [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=99%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
15
+ [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=98%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
14
16
  [![issues sheild](https://img.shields.io/github/issues-raw/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver/issues)
15
17
  [![GitHub pull requests](https://img.shields.io/github/issues-pr/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/pulls)
16
18
 
@@ -21,13 +23,11 @@
21
23
  [![Azure](https://img.shields.io/static/v1?label=&message=Supports%20Microsoft%20Azure&color=blue&style=plastic&logo=microsoftazure)](https://azure.microsoft.com/)
22
24
  [![Gmail](https://img.shields.io/static/v1?label=&message=Supports%20Google%20Gmail&color=white&style=plastic&logo=gmail)](https://gmail.com/)
23
25
 
24
- OS:
26
+ OS:
25
27
  [![Windows](https://img.shields.io/static/v1?label=&message=Windows&color=blue&style=plastic&logo=windows)](https://microsoft.com/)
26
28
  [![macOS](https://img.shields.io/static/v1?label=&message=macOS&color=white&logoColor=black&style=plastic&logo=apple)](https://apple.com/)
27
29
  [![Linux](https://img.shields.io/static/v1?label=&message=Linux&color=seashell&logoColor=black&style=plastic&logo=linux)](https://linux.org/)
28
30
 
29
- # devops-driver
30
-
31
31
  Devops-driver is a collection of tools to help streamline developer's experience and gain insights into various processes.
32
32
 
33
33
  ## Tools
@@ -46,6 +46,7 @@ To allow seamless work in both pipelines as well as in the development environme
46
46
  Say you want a pipeline that looks for User Stories that are newer than 3 days and send out an email.
47
47
 
48
48
  ### \<platform dependent path\>/devopsdriver.yml
49
+
49
50
  ```yaml
50
51
  smtp:
51
52
  sender: JohnDoe@company.com
@@ -55,7 +56,7 @@ secrets:
55
56
  smtp.password: smtp/password
56
57
  ```
57
58
 
58
- This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
59
+ This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
59
60
 
60
61
  | Platform | Global Directory |
61
62
  |----------|------------------------|
@@ -66,6 +67,7 @@ This file is in a global place (location varies by OS) and stores information th
66
67
  The `secrets` are extra sensative and are stored in the OS keychain.
67
68
 
68
69
  ### Set secrets in the keychain
70
+
69
71
  ```bash
70
72
  $ python3 -m venv .venv
71
73
  $ source .venv/bin/activate
@@ -77,16 +79,21 @@ secret: azure.token key: azure/token
77
79
  smtp.password (azure/token): ****
78
80
  $ settings --secrets
79
81
  secret: azure.token key: azure/token
80
- Value set
82
+ Value set
81
83
  secret: smtp.password key: smtp/password
82
- Value set
84
+ Value set
83
85
  $
84
86
  ```
87
+
85
88
  The first call to `settings` will look for every secret and check if they are already set in the keychain.
86
89
  For any secret that has not been set in the keychain, you will be prompted to enter the password to store.
87
90
  The second call to `settings` will verify that all the values have been set in the keychain.
88
91
 
92
+ **Note**: If your `secrets`, `cli`, or `env` are in a yaml file named after your script,
93
+ you can call `settings --secrets --script my_script.py`.
94
+
89
95
  ### devopsdriver.yml
96
+
90
97
  ```yaml
91
98
  azure:
92
99
  url: https://dev.azure.com/MyCompany
@@ -112,15 +119,18 @@ The `cli` and `env` map command line switches and environment variables to those
112
119
  This allows for many options for setting values depending on your needs.
113
120
 
114
121
  ### new_stories.yml
122
+
115
123
  ```yaml
116
124
  scrum masters:
117
125
  - JohnDoe@company.com
118
126
  - JaneDoe@company.com
119
127
  ```
128
+
120
129
  This file is specific to your script and not shared.
121
130
  These are values that you want to use in your script but have them here for easy adjustment.
122
131
 
123
132
  ### new_stories.html.mako
133
+
124
134
  ```html
125
135
  <h1>Stories created in the last ${days} days</h1>
126
136
  <ul>
@@ -133,6 +143,7 @@ These are values that you want to use in your script but have them here for easy
133
143
  This file is the template for the email body.
134
144
 
135
145
  ### new_stories.py
146
+
136
147
  ```python
137
148
  from datetime import date, timedelta
138
149
 
@@ -168,9 +179,9 @@ send_email(
168
179
 
169
180
  ### The email sent
170
181
 
171
- **From**: JohnDoe@company.com
182
+ **From**: `JohnDoe@company.com`
172
183
 
173
- **To**: JohnDoe@company.com, JaneDoe@company.com
184
+ **To**: `JohnDoe@company.com`, `JaneDoe@company.com`
174
185
 
175
186
  **Subject**: Stories created in the last 3 days
176
187
 
@@ -185,4 +196,3 @@ send_email(
185
196
  - 754 frontend - store to schema
186
197
  - 755 Transfer job to production. Setup migrations to move to production
187
198
  - 756 Query subscription status from App
188
-
@@ -1,11 +1,12 @@
1
- """ DevOps tools """
1
+ """DevOps tools"""
2
2
 
3
3
  from .settings import Settings
4
4
  from .sendmail import send_email
5
5
  from .template import Template
6
6
  from .azdo.clients import Azure
7
+ from .github.client import Github
7
8
 
8
9
 
9
- __version__ = "0.1.48"
10
+ __version__ = "0.1.50"
10
11
  __author__ = "Marc Page"
11
12
  __credits__ = ""
@@ -1,4 +1,4 @@
1
- """ initialize azure module """
1
+ """initialize azure module"""
2
2
 
3
3
  # re export symbols for easier use
4
4
  from .azureobject import AzureObject
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ An Azure Devops WorkItem """
4
+ """An Azure Devops WorkItem"""
5
5
 
6
6
 
7
7
  from msrest.serialization import Model
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- """ Azure Build """
3
+ """Azure Build"""
4
4
 
5
5
  from azure.devops.v7_1.build.models import Build as AzureBuild
6
6
  from azure.devops.v7_1.build import BuildClient
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Azure Build Client """
4
+ """Azure Build Client"""
5
5
 
6
6
 
7
7
  from datetime import datetime
@@ -16,7 +16,7 @@ class Client: # pylint: disable=too-few-public-methods
16
16
  def __init__(self, client: BuildClient):
17
17
  self.client = client
18
18
 
19
- def list( # pylint: disable=too-many-arguments
19
+ def list( # pylint: disable=too-many-positional-arguments,too-many-arguments
20
20
  self,
21
21
  project: str,
22
22
  pipelines: list[int] = None,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Establish a connection to Azure Devops
4
+ """Establish a connection to Azure Devops
5
5
 
6
6
  API Documented here:
7
7
  https://github.com/microsoft/azure-devops-python-api
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Pipeline client """
4
+ """Pipeline client"""
5
5
 
6
6
 
7
7
  from azure.devops.v7_1.pipelines import PipelinesClient
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Azure Pipeline Run Log """
4
+ """Azure Pipeline Run Log"""
5
5
 
6
6
 
7
7
  from azure.devops.v7_1.pipelines.models import Log as AzureLog
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Azure Pipeline """
4
+ """Azure Pipeline"""
5
5
 
6
6
 
7
7
  from azure.devops.v7_1.pipelines.models import Pipeline as AzurePipeline
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Pipeline Run """
4
+ """Pipeline Run"""
5
5
 
6
6
 
7
7
  from azure.devops.v7_1.pipelines.models import Pipeline
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Tools that help when working with Azure """
4
+ """Tools that help when working with Azure"""
5
5
 
6
6
 
7
7
  from datetime import datetime, timezone, timedelta
@@ -0,0 +1 @@
1
+ """init workitem module"""
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Azure WorkItem Client """
4
+ """Azure WorkItem Client"""
5
5
 
6
6
 
7
7
  from azure.devops.v7_1.work_item_tracking.models import Wiql as AzureWiql
@@ -43,7 +43,7 @@ class Client:
43
43
  top=top,
44
44
  )
45
45
 
46
- def get_history( # pylint: disable=too-many-arguments
46
+ def get_history( # pylint: disable=too-many-positional-arguments,too-many-arguments
47
47
  self,
48
48
  wi_id: int,
49
49
  project: str = None,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Builds a WIQL query
4
+ """Builds a WIQL query
5
5
  https://learn.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops
6
6
 
7
7
  SELECT
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
- """ Data Objects """
3
+ """Data Objects"""
4
4
 
5
5
 
6
6
  from json import dumps
File without changes
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """Manages GitHub connection"""
4
+
5
+
6
+ from github import Github as Github_connection, Auth
7
+
8
+ from devopsdriver.settings import Settings
9
+
10
+
11
+ class Github:
12
+ """Manages the GitHub connection"""
13
+
14
+ def __init__(self, settings: Settings):
15
+ self.settings: Settings = settings
16
+ self.connection: Github_connection | None = None
17
+ assert settings.get("github.token") is not None, "github.token not set"
18
+
19
+ def __enter__(self) -> Github_connection:
20
+ self.connection = Github_connection(
21
+ auth=Auth.Token(self.settings["github.token"])
22
+ )
23
+ return self.connection
24
+
25
+ def __exit__(self, exception_type, exception_value, exception_traceback):
26
+ if self.connection is not None:
27
+ self.connection.close()
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Module Doc """
4
+ """Module Doc"""
5
5
 
6
6
 
7
- from os.path import dirname, join
7
+ from os.path import dirname, join, abspath
8
8
  from sys import argv as sys_argv
9
9
  from getpass import getpass as os_getpass
10
10
 
@@ -31,7 +31,14 @@ def main() -> None:
31
31
  )
32
32
  return
33
33
 
34
- settings = Settings(__file__, dirname(dirname(__file__))).key("secrets")
34
+ position = args.index("--script") if "--script" in args else len(args)
35
+ script = __file__
36
+
37
+ if position + 1 < len(args):
38
+ args.pop(position)
39
+ script = abspath(args.pop(position))
40
+
41
+ settings = Settings(script, dirname(dirname(__file__))).key("secrets")
35
42
 
36
43
  if "--secrets" in args:
37
44
  args.remove("--secrets")
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Ability to send emails with embedded images """
4
+ """Ability to send emails with embedded images"""
5
5
 
6
6
 
7
7
  from smtplib import SMTP as OS_SMTP, SMTP_SSL as OS_SMTP_SSL
@@ -1,78 +1,78 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Settings that can be in files, environment, or on the command line
5
-
6
- Settings can be set on the command line, environment, in the code, or in files.
7
-
8
- Priority order:
9
- - in code
10
- - command line
11
- - environment
12
- - files
13
-
14
- Files can be JSON or YAML.
15
- They must have .json, .yml, or .yaml extension.
16
- Files can be named after the file passed in (__file__) or "devopsdriver".
17
- All files named after the file passed in have priority over "devopsdriver".
18
- This allows for shared settings for multiple scripts as well as specific settings.
19
- Files can be in an OS-specific preferences location, a series of specified directories,
20
- or next to the file passed in (__file__).
21
- This allows for secrets, keys, and tokens to be stored on the machine and not in the repo.
22
-
23
- Files in the OS specific directories have priority over other files and are stored in:
24
- - macOS: ~/Library/Preferences/
25
- - Windows: %APPDATA%/
26
- - Linux: ~/.devopsdriver/
27
-
28
- You can have environment variable substitutions in the values in the files.
29
- For instance, you can specify:
30
-
31
- output: ${home}/reports
32
-
33
- The `${home}` will be replaced with the value of the HOME environment variable, if it exists.
34
- If the environment variable does not exist, no change is made.
35
-
36
- Use case 1: Secrets not in repo
37
- tokens, passwords, etc can be stored in <pref>/devopsdriver.yml
38
- This will allow for all scripts to access those secrets
39
- but they are not in the repo.
40
- For pipeline runs these secrets can be passed on the command line or in the environment.
41
-
42
- Use case 2: common settings among scripts
43
- Store your common settings in devopsdriver.yml next to your script.
44
- All scripts in this directory will have access to these settings.
45
- For instance, say you want all emails sent from the same person.
46
- You could set 'email: me@domain.com' in devopsdriver.html.
47
- You could also, store report paths, emails, groups, holidays, etc.
48
- Any data all scripts may want to have access to.
49
-
50
- Use case 3: configurable settings
51
- Any settings in your script that you may want to configure.
52
- If your script is `cool_script.py` then put the settings in `cool_script.yml` next to it.
53
- This could be colors, emails, repos, queries, whatever.
54
-
55
- Use case 4: override secrets for specific script
56
- Overriding secrets stored in `<pref>/devopsdriver.yml` for specific scripts.
57
- If your script is `cool_script.py` save them to `<pref>/cool_script.yml`.
58
-
59
- *Note*: You can override a specific setting in a sub-dictionary.
60
- For instance, say `<pref>/devopsdriver.yml`:
61
-
62
- ```yaml
63
- api:
64
- user: johndoe
65
- password: Setec Astronomy
66
- ```
67
-
68
- You could override this for `cool_script.py` be adding `<pref>/cool_script.yml`:
69
-
70
- ```yaml
71
- api:
72
- user: janedoe
73
- ```
74
-
75
- johndoe and janedoe share the same password, so you just need to update the `user`
4
+ """Settings that can be in files, environment, or on the command line
5
+
6
+ Settings can be set on the command line, environment, in the code, or in files.
7
+
8
+ Priority order:
9
+ - in code
10
+ - command line
11
+ - environment
12
+ - files
13
+
14
+ Files can be JSON or YAML.
15
+ They must have .json, .yml, or .yaml extension.
16
+ Files can be named after the file passed in (__file__) or "devopsdriver".
17
+ All files named after the file passed in have priority over "devopsdriver".
18
+ This allows for shared settings for multiple scripts as well as specific settings.
19
+ Files can be in an OS-specific preferences location, a series of specified directories,
20
+ or next to the file passed in (__file__).
21
+ This allows for secrets, keys, and tokens to be stored on the machine and not in the repo.
22
+
23
+ Files in the OS specific directories have priority over other files and are stored in:
24
+ - macOS: ~/Library/Preferences/
25
+ - Windows: %APPDATA%/
26
+ - Linux: ~/.devopsdriver/
27
+
28
+ You can have environment variable substitutions in the values in the files.
29
+ For instance, you can specify:
30
+
31
+ output: ${home}/reports
32
+
33
+ The `${home}` will be replaced with the value of the HOME environment variable, if it exists.
34
+ If the environment variable does not exist, no change is made.
35
+
36
+ Use case 1: Secrets not in repo
37
+ tokens, passwords, etc can be stored in <pref>/devopsdriver.yml
38
+ This will allow for all scripts to access those secrets
39
+ but they are not in the repo.
40
+ For pipeline runs these secrets can be passed on the command line or in the environment.
41
+
42
+ Use case 2: common settings among scripts
43
+ Store your common settings in devopsdriver.yml next to your script.
44
+ All scripts in this directory will have access to these settings.
45
+ For instance, say you want all emails sent from the same person.
46
+ You could set 'email: me@domain.com' in devopsdriver.html.
47
+ You could also, store report paths, emails, groups, holidays, etc.
48
+ Any data all scripts may want to have access to.
49
+
50
+ Use case 3: configurable settings
51
+ Any settings in your script that you may want to configure.
52
+ If your script is `cool_script.py` then put the settings in `cool_script.yml` next to it.
53
+ This could be colors, emails, repos, queries, whatever.
54
+
55
+ Use case 4: override secrets for specific script
56
+ Overriding secrets stored in `<pref>/devopsdriver.yml` for specific scripts.
57
+ If your script is `cool_script.py` save them to `<pref>/cool_script.yml`.
58
+
59
+ *Note*: You can override a specific setting in a sub-dictionary.
60
+ For instance, say `<pref>/devopsdriver.yml`:
61
+
62
+ ```yaml
63
+ api:
64
+ user: johndoe
65
+ password: Setec Astronomy
66
+ ```
67
+
68
+ You could override this for `cool_script.py` be adding `<pref>/cool_script.yml`:
69
+
70
+ ```yaml
71
+ api:
72
+ user: janedoe
73
+ ```
74
+
75
+ johndoe and janedoe share the same password, so you just need to update the `user`
76
76
  """
77
77
 
78
78
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
 
3
3
 
4
- """ Module Doc """
4
+ """Module Doc"""
5
5
 
6
6
 
7
7
  from os.path import dirname, basename, splitext
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: devopsdriver
3
- Version: 0.1.48
3
+ Version: 0.1.50
4
4
  Summary: DevOps tools
5
5
  Author-email: Marc Page <marcallenpage@gmail.com>
6
6
  License: This is free and unencumbered software released into the public domain.
@@ -33,7 +33,7 @@ Project-URL: Documentation, https://github.com/marcpage/devops-driver
33
33
  Project-URL: Repository, https://github.com/marcpage/devops-driver.git
34
34
  Project-URL: Issues, https://github.com/marcpage/devops-driver/issues
35
35
  Project-URL: Changelog, https://github.com/marcpage/devops-driver/releases
36
- Keywords: azure,devops,jira,confluence,email,pipelines,tools
36
+ Keywords: azure,devops,jira,confluence,email,pipelines,tools,github
37
37
  Classifier: Development Status :: 1 - Planning
38
38
  Classifier: Environment :: Console
39
39
  Classifier: Intended Audience :: Developers
@@ -46,11 +46,12 @@ Classifier: Topic :: Software Development
46
46
  Requires-Python: >=3.10
47
47
  Description-Content-Type: text/markdown
48
48
  License-File: LICENSE
49
- Requires-Dist: PyYAML==6.0.2
50
- Requires-Dist: keyring==25.3.0
51
- Requires-Dist: setuptools==74.0.0
49
+ Requires-Dist: PyYAML==6.0.3
50
+ Requires-Dist: keyring==25.6.0
51
+ Requires-Dist: setuptools==80.9.0
52
52
  Requires-Dist: azure-devops==7.1.0b4
53
- Requires-Dist: Mako==1.3.5
53
+ Requires-Dist: Mako==1.3.10
54
+ Requires-Dist: PyGithub==2.5.0
54
55
  Provides-Extra: dev
55
56
  Requires-Dist: black>=24.3.0; extra == "dev"
56
57
  Requires-Dist: pylint>=3.1.0; extra == "dev"
@@ -58,9 +59,12 @@ Provides-Extra: test
58
59
  Requires-Dist: pytest>=8.1.1; extra == "test"
59
60
  Requires-Dist: coverage>=7.4.4; extra == "test"
60
61
  Provides-Extra: doc
62
+ Dynamic: license-file
63
+
64
+ # devops-driver
61
65
 
62
66
  ![status sheild](https://img.shields.io/static/v1?label=status&message=beta&color=blue&style=plastic)
63
- [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.48&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.48/)
67
+ [![status sheild](https://img.shields.io/static/v1?label=released&message=v0.1.50&color=active&style=plastic)](https://pypi.org/project/devopsdriver/0.1.50/)
64
68
  [![GitHub](https://img.shields.io/github/license/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver?tab=Unlicense-1-ov-file#readme)
65
69
  [![GitHub contributors](https://img.shields.io/github/contributors/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/graphs/contributors)
66
70
  [![PR's Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com)
@@ -71,7 +75,7 @@ Provides-Extra: doc
71
75
  [![size sheild](https://img.shields.io/github/languages/code-size/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver)
72
76
 
73
77
  [![example workflow](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml/badge.svg)](https://github.com/marcpage/devops-driver/actions/workflows/pr.yml)
74
- [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=99%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
78
+ [![status sheild](https://img.shields.io/static/v1?label=test+coverage&message=98%&color=active&style=plastic)](https://github.com/marcpage/devops-driver/blob/main/Makefile#L4)
75
79
  [![issues sheild](https://img.shields.io/github/issues-raw/marcpage/devops-driver?style=plastic)](https://github.com/marcpage/devops-driver/issues)
76
80
  [![GitHub pull requests](https://img.shields.io/github/issues-pr/marcpage/devops-driver?style=flat)](https://github.com/marcpage/devops-driver/pulls)
77
81
 
@@ -82,13 +86,11 @@ Provides-Extra: doc
82
86
  [![Azure](https://img.shields.io/static/v1?label=&message=Supports%20Microsoft%20Azure&color=blue&style=plastic&logo=microsoftazure)](https://azure.microsoft.com/)
83
87
  [![Gmail](https://img.shields.io/static/v1?label=&message=Supports%20Google%20Gmail&color=white&style=plastic&logo=gmail)](https://gmail.com/)
84
88
 
85
- OS:
89
+ OS:
86
90
  [![Windows](https://img.shields.io/static/v1?label=&message=Windows&color=blue&style=plastic&logo=windows)](https://microsoft.com/)
87
91
  [![macOS](https://img.shields.io/static/v1?label=&message=macOS&color=white&logoColor=black&style=plastic&logo=apple)](https://apple.com/)
88
92
  [![Linux](https://img.shields.io/static/v1?label=&message=Linux&color=seashell&logoColor=black&style=plastic&logo=linux)](https://linux.org/)
89
93
 
90
- # devops-driver
91
-
92
94
  Devops-driver is a collection of tools to help streamline developer's experience and gain insights into various processes.
93
95
 
94
96
  ## Tools
@@ -107,6 +109,7 @@ To allow seamless work in both pipelines as well as in the development environme
107
109
  Say you want a pipeline that looks for User Stories that are newer than 3 days and send out an email.
108
110
 
109
111
  ### \<platform dependent path\>/devopsdriver.yml
112
+
110
113
  ```yaml
111
114
  smtp:
112
115
  sender: JohnDoe@company.com
@@ -116,7 +119,7 @@ secrets:
116
119
  smtp.password: smtp/password
117
120
  ```
118
121
 
119
- This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
122
+ This file is in a global place (location varies by OS) and stores information that you may not want in your repository or is specific to development.
120
123
 
121
124
  | Platform | Global Directory |
122
125
  |----------|------------------------|
@@ -127,6 +130,7 @@ This file is in a global place (location varies by OS) and stores information th
127
130
  The `secrets` are extra sensative and are stored in the OS keychain.
128
131
 
129
132
  ### Set secrets in the keychain
133
+
130
134
  ```bash
131
135
  $ python3 -m venv .venv
132
136
  $ source .venv/bin/activate
@@ -138,16 +142,21 @@ secret: azure.token key: azure/token
138
142
  smtp.password (azure/token): ****
139
143
  $ settings --secrets
140
144
  secret: azure.token key: azure/token
141
- Value set
145
+ Value set
142
146
  secret: smtp.password key: smtp/password
143
- Value set
147
+ Value set
144
148
  $
145
149
  ```
150
+
146
151
  The first call to `settings` will look for every secret and check if they are already set in the keychain.
147
152
  For any secret that has not been set in the keychain, you will be prompted to enter the password to store.
148
153
  The second call to `settings` will verify that all the values have been set in the keychain.
149
154
 
155
+ **Note**: If your `secrets`, `cli`, or `env` are in a yaml file named after your script,
156
+ you can call `settings --secrets --script my_script.py`.
157
+
150
158
  ### devopsdriver.yml
159
+
151
160
  ```yaml
152
161
  azure:
153
162
  url: https://dev.azure.com/MyCompany
@@ -173,15 +182,18 @@ The `cli` and `env` map command line switches and environment variables to those
173
182
  This allows for many options for setting values depending on your needs.
174
183
 
175
184
  ### new_stories.yml
185
+
176
186
  ```yaml
177
187
  scrum masters:
178
188
  - JohnDoe@company.com
179
189
  - JaneDoe@company.com
180
190
  ```
191
+
181
192
  This file is specific to your script and not shared.
182
193
  These are values that you want to use in your script but have them here for easy adjustment.
183
194
 
184
195
  ### new_stories.html.mako
196
+
185
197
  ```html
186
198
  <h1>Stories created in the last ${days} days</h1>
187
199
  <ul>
@@ -194,6 +206,7 @@ These are values that you want to use in your script but have them here for easy
194
206
  This file is the template for the email body.
195
207
 
196
208
  ### new_stories.py
209
+
197
210
  ```python
198
211
  from datetime import date, timedelta
199
212
 
@@ -229,9 +242,9 @@ send_email(
229
242
 
230
243
  ### The email sent
231
244
 
232
- **From**: JohnDoe@company.com
245
+ **From**: `JohnDoe@company.com`
233
246
 
234
- **To**: JohnDoe@company.com, JaneDoe@company.com
247
+ **To**: `JohnDoe@company.com`, `JaneDoe@company.com`
235
248
 
236
249
  **Subject**: Stories created in the last 3 days
237
250
 
@@ -246,4 +259,3 @@ send_email(
246
259
  - 754 frontend - store to schema
247
260
  - 755 Transfer job to production. Setup migrations to move to production
248
261
  - 756 Query subscription status from App
249
-
@@ -28,6 +28,8 @@ devopsdriver/azdo/pipeline/run.py
28
28
  devopsdriver/azdo/workitem/__init__.py
29
29
  devopsdriver/azdo/workitem/client.py
30
30
  devopsdriver/azdo/workitem/wiql.py
31
+ devopsdriver/github/__init__.py
32
+ devopsdriver/github/client.py
31
33
  devopsdriver/templates/manage_settings.txt.mako
32
34
  tests/test_azure_azureobject.py
33
35
  tests/test_azure_build.py
@@ -1,8 +1,9 @@
1
- PyYAML==6.0.2
2
- keyring==25.3.0
3
- setuptools==74.0.0
1
+ PyYAML==6.0.3
2
+ keyring==25.6.0
3
+ setuptools==80.9.0
4
4
  azure-devops==7.1.0b4
5
- Mako==1.3.5
5
+ Mako==1.3.10
6
+ PyGithub==2.5.0
6
7
 
7
8
  [dev]
8
9
  black>=24.3.0
@@ -0,0 +1,65 @@
1
+ [project]
2
+ name = "devopsdriver"
3
+ description = "DevOps tools"
4
+ readme = "README.md"
5
+ license = { file = "LICENSE" }
6
+ dynamic = ["version"]
7
+ requires-python = ">= 3.10"
8
+ dependencies = [
9
+ "PyYAML==6.0.3",
10
+ "keyring==25.6.0",
11
+ "setuptools==80.9.0", # neded for azure-devops to use 7.1 API
12
+ "azure-devops==7.1.0b4",
13
+ "Mako==1.3.10",
14
+ "PyGithub==2.5.0",
15
+ ]
16
+ keywords = [
17
+ "azure",
18
+ "devops",
19
+ "jira",
20
+ "confluence",
21
+ "email",
22
+ "pipelines",
23
+ "tools",
24
+ "github",
25
+ ]
26
+ classifiers = [
27
+ "Development Status :: 1 - Planning",
28
+ "Environment :: Console",
29
+ "Intended Audience :: Developers",
30
+ "Programming Language :: Python",
31
+ "Programming Language :: Python :: 3",
32
+ "License :: OSI Approved :: The Unlicense (Unlicense)",
33
+ "Programming Language :: Python :: 3.10",
34
+ "Topic :: Utilities",
35
+ "Topic :: Software Development",
36
+ ]
37
+ authors = [{ name = "Marc Page", email = "marcallenpage@gmail.com" }]
38
+
39
+ [project.scripts]
40
+ settings = "devopsdriver.manage_settings:main"
41
+
42
+ [tool.setuptools.package-data]
43
+ "*" = ["*.mako"]
44
+
45
+ [tool.setuptools.packages.find]
46
+ include = ["devopsdriver*"]
47
+
48
+ [project.optional-dependencies]
49
+ dev = ["black>=24.3.0", "pylint>=3.1.0"]
50
+ test = ["pytest>=8.1.1", "coverage>=7.4.4"]
51
+ doc = []
52
+
53
+ [project.urls]
54
+ Homepage = "https://github.com/marcpage/devops-driver"
55
+ Documentation = "https://github.com/marcpage/devops-driver"
56
+ Repository = "https://github.com/marcpage/devops-driver.git"
57
+ Issues = "https://github.com/marcpage/devops-driver/issues"
58
+ Changelog = "https://github.com/marcpage/devops-driver/releases"
59
+
60
+ [tool.setuptools.dynamic]
61
+ version = { attr = "devopsdriver.__version__" }
62
+
63
+ [build-system]
64
+ requires = ["setuptools >= 69.2"]
65
+ build-backend = "setuptools.build_meta"
@@ -1 +0,0 @@
1
- """ init workitem module """
@@ -1,64 +0,0 @@
1
- [project]
2
- name = "devopsdriver"
3
- description = "DevOps tools"
4
- readme = "README.md"
5
- license = {file = "LICENSE"}
6
- dynamic = ["version"]
7
- requires-python = ">= 3.10"
8
- dependencies = [
9
- "PyYAML==6.0.2",
10
- "keyring==25.3.0",
11
- "setuptools==74.0.0", # neded for azure-devops to use 7.1 API
12
- "azure-devops==7.1.0b4",
13
- "Mako==1.3.5",
14
- ]
15
- keywords = ["azure", "devops", "jira", "confluence", "email", "pipelines", "tools"]
16
- classifiers=[
17
- "Development Status :: 1 - Planning",
18
- "Environment :: Console",
19
- "Intended Audience :: Developers",
20
- "Programming Language :: Python",
21
- "Programming Language :: Python :: 3",
22
- "License :: OSI Approved :: The Unlicense (Unlicense)",
23
- "Programming Language :: Python :: 3.10",
24
- "Topic :: Utilities",
25
- "Topic :: Software Development",
26
- ]
27
- authors = [
28
- {name = "Marc Page", email = "marcallenpage@gmail.com"},
29
- ]
30
-
31
- [project.scripts]
32
- settings = "devopsdriver.manage_settings:main"
33
-
34
- [tool.setuptools.package-data]
35
- "*" = ["*.mako"]
36
-
37
- [tool.setuptools.packages.find]
38
- include = ["devopsdriver*"]
39
-
40
- [project.optional-dependencies]
41
- dev = [
42
- "black>=24.3.0",
43
- "pylint>=3.1.0",
44
- ]
45
- test = [
46
- "pytest>=8.1.1",
47
- "coverage>=7.4.4",
48
- ]
49
- doc = []
50
-
51
- [project.urls]
52
- Homepage = "https://github.com/marcpage/devops-driver"
53
- Documentation = "https://github.com/marcpage/devops-driver"
54
- Repository = "https://github.com/marcpage/devops-driver.git"
55
- Issues = "https://github.com/marcpage/devops-driver/issues"
56
- Changelog = "https://github.com/marcpage/devops-driver/releases"
57
-
58
- [tool.setuptools.dynamic]
59
- version = {attr = "devopsdriver.__version__"}
60
-
61
- [build-system]
62
- requires = ["setuptools >= 69.2"]
63
- build-backend = "setuptools.build_meta"
64
-
File without changes
File without changes