pullup 0.0.2__tar.gz → 0.0.5__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.
- pullup-0.0.5/PKG-INFO +163 -0
- pullup-0.0.5/README.md +135 -0
- pullup-0.0.5/pullup/__init__.py +15 -0
- pullup-0.0.5/pullup/_modidx.py +190 -0
- pullup-0.0.5/pullup/deploy.py +357 -0
- pullup-0.0.5/pullup/drive.py +179 -0
- pullup-0.0.5/pullup/env.py +127 -0
- pullup-0.0.5/pullup/infra.py +121 -0
- pullup-0.0.5/pullup/pipeline.py +247 -0
- pullup-0.0.5/pullup/project.py +167 -0
- pullup-0.0.5/pullup/stack.py +127 -0
- pullup-0.0.5/pullup/wfbuild.py +244 -0
- pullup-0.0.5/pullup/workflows.py +463 -0
- pullup-0.0.5/pullup.egg-info/PKG-INFO +163 -0
- pullup-0.0.5/pullup.egg-info/SOURCES.txt +26 -0
- pullup-0.0.5/pullup.egg-info/requires.txt +9 -0
- pullup-0.0.5/pyproject.toml +41 -0
- pullup-0.0.5/tests/test_env.py +54 -0
- pullup-0.0.5/tests/test_pipeline.py +103 -0
- pullup-0.0.5/tests/test_project.py +56 -0
- pullup-0.0.5/tests/test_stack.py +55 -0
- pullup-0.0.5/tests/test_workflows.py +59 -0
- pullup-0.0.2/PKG-INFO +0 -105
- pullup-0.0.2/README.md +0 -67
- pullup-0.0.2/pullup/__init__.py +0 -1
- pullup-0.0.2/pullup/_modidx.py +0 -8
- pullup-0.0.2/pullup/core.py +0 -9
- pullup-0.0.2/pullup.egg-info/PKG-INFO +0 -105
- pullup-0.0.2/pullup.egg-info/SOURCES.txt +0 -16
- pullup-0.0.2/pullup.egg-info/not-zip-safe +0 -1
- pullup-0.0.2/pullup.egg-info/requires.txt +0 -7
- pullup-0.0.2/pyproject.toml +0 -24
- pullup-0.0.2/settings.ini +0 -39
- pullup-0.0.2/setup.py +0 -64
- {pullup-0.0.2 → pullup-0.0.5}/LICENSE +0 -0
- {pullup-0.0.2 → pullup-0.0.5}/MANIFEST.in +0 -0
- {pullup-0.0.2 → pullup-0.0.5}/pullup.egg-info/dependency_links.txt +0 -0
- {pullup-0.0.2 → pullup-0.0.5}/pullup.egg-info/entry_points.txt +0 -0
- {pullup-0.0.2 → pullup-0.0.5}/pullup.egg-info/top_level.txt +0 -0
- {pullup-0.0.2 → pullup-0.0.5}/setup.cfg +0 -0
pullup-0.0.5/PKG-INFO
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pullup
|
|
3
|
+
Version: 0.0.5
|
|
4
|
+
Summary: build, release, and deploy projects
|
|
5
|
+
Author-email: Karthik Rajgopal <karthik.rajgopal@hotmail.com>
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Repository, https://github.com/vedicreader/pullup
|
|
8
|
+
Project-URL: Documentation, https://vedicreader.github.io/pullup
|
|
9
|
+
Keywords: nbdev,jupyter,notebook,python
|
|
10
|
+
Classifier: Natural Language :: English
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: fastcore>=1.8.17
|
|
19
|
+
Requires-Dist: ptymini>=0.0.5
|
|
20
|
+
Requires-Dist: pyyaml>=6.0
|
|
21
|
+
Requires-Dist: dockeasy>=0.0.5
|
|
22
|
+
Requires-Dist: gheasy>=0.0.10
|
|
23
|
+
Requires-Dist: vpseasy>=0.0.18
|
|
24
|
+
Requires-Dist: cfeasy>=0.0.4
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Requires-Dist: keyring>=25.0.0
|
|
27
|
+
Dynamic: license-file
|
|
28
|
+
|
|
29
|
+
# pullup
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->
|
|
33
|
+
|
|
34
|
+
## Install
|
|
35
|
+
|
|
36
|
+
``` sh
|
|
37
|
+
pip install pullup
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Cloud integrations load only when used.
|
|
41
|
+
|
|
42
|
+
## Project detection
|
|
43
|
+
|
|
44
|
+
[`Project`](https://vedicreader.github.io/pullup/project.html#project) detects the release flow from files in the project directory.
|
|
45
|
+
|
|
46
|
+
``` python
|
|
47
|
+
project = Project(root)
|
|
48
|
+
project.kind, [step.id for step in project.steps()]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
('nbdev', ['prepare', 'bump', 'gh', 'pypi'])
|
|
52
|
+
|
|
53
|
+
## Running steps
|
|
54
|
+
|
|
55
|
+
Steps run in one PTY. Automatic execution stops at the first failure.
|
|
56
|
+
|
|
57
|
+
``` python
|
|
58
|
+
pipeline = Pipeline(root, dir='.demo')
|
|
59
|
+
pipeline.save([{'id': 'hello', 'cmd': 'say hello',
|
|
60
|
+
'argv': [sys.executable, '-c', 'print("ready")']}])
|
|
61
|
+
await pipeline.start()
|
|
62
|
+
pipeline.state()['done'], pipeline.tail().splitlines()[-2:]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
(False, ['', '❯ say hello'])
|
|
66
|
+
|
|
67
|
+
## Plan storage
|
|
68
|
+
|
|
69
|
+
Plans are written only below the project directory.
|
|
70
|
+
|
|
71
|
+
``` python
|
|
72
|
+
custom = Pipeline(root, dir='.myapp')
|
|
73
|
+
custom.save([{'id': 'show', 'cmd': 'show', 'argv': [sys.executable, '-c', 'print("saved")']}])
|
|
74
|
+
custom.path.relative_to(root)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Path('.myapp/pipeline.json')
|
|
78
|
+
|
|
79
|
+
## Deployment pipelines
|
|
80
|
+
|
|
81
|
+
[`Deploy`](https://vedicreader.github.io/pullup/deploy.html#deploy) runs a project’s deployment script. [`Drive`](https://vedicreader.github.io/pullup/drive.html#drive) exposes each operation as a library call.
|
|
82
|
+
|
|
83
|
+
``` python
|
|
84
|
+
Deploy(root).state()['kind'], Drive(root).state()['kind']
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
('deploy', 'drive')
|
|
88
|
+
|
|
89
|
+
## Workflows
|
|
90
|
+
|
|
91
|
+
Local workflow inspection needs no GitHub credentials.
|
|
92
|
+
|
|
93
|
+
``` python
|
|
94
|
+
workflow_dir = root/'.github'/'workflows'
|
|
95
|
+
workflow_dir.mkdir(parents=True)
|
|
96
|
+
(workflow_dir/'ci.yml').write_text('''name: CI
|
|
97
|
+
on: push
|
|
98
|
+
jobs:
|
|
99
|
+
test:
|
|
100
|
+
runs-on: ubuntu-latest
|
|
101
|
+
steps:
|
|
102
|
+
- run: pytest
|
|
103
|
+
''')
|
|
104
|
+
workflows = Workflows(root)
|
|
105
|
+
[(row['name'], [job['id'] for job in row['jobs']]) for row in workflows.parsed()]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
[('CI', ['test'])]
|
|
109
|
+
|
|
110
|
+
## Environment
|
|
111
|
+
|
|
112
|
+
A pipeline injects required values into the child without changing the parent environment.
|
|
113
|
+
|
|
114
|
+
``` python
|
|
115
|
+
class Values:
|
|
116
|
+
def get(self, key, secret=True): return 'demo-token' if key == 'DEMO_TOKEN' else ''
|
|
117
|
+
def values(self, keys): return {key: self.get(key) for key in keys if self.get(key)}
|
|
118
|
+
|
|
119
|
+
with_values = Pipeline(root, env=Values(), dir='.env-demo')
|
|
120
|
+
with_values.save([{'id': 'env', 'cmd': 'read environment', 'needs': ['DEMO_TOKEN'],
|
|
121
|
+
'argv': [sys.executable, '-c', 'import os; print(os.environ["DEMO_TOKEN"])']}])
|
|
122
|
+
await with_values.start()
|
|
123
|
+
with_values.tail().splitlines()[-2:]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
['', '❯ read environment']
|
|
127
|
+
|
|
128
|
+
## Package errors
|
|
129
|
+
|
|
130
|
+
[`blame`](https://vedicreader.github.io/pullup/stack.html#blame) identifies the deepest selected-package frame.
|
|
131
|
+
|
|
132
|
+
``` python
|
|
133
|
+
trace = '''Traceback (most recent call last):
|
|
134
|
+
File "/tmp/pullup/demo.py", line 7, in release
|
|
135
|
+
raise RuntimeError("stopped")
|
|
136
|
+
RuntimeError: stopped
|
|
137
|
+
'''
|
|
138
|
+
blame(trace, family=['pullup'])
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
{'package': 'pullup',
|
|
142
|
+
'file': '/tmp/pullup/demo.py',
|
|
143
|
+
'line': 7,
|
|
144
|
+
'fn': 'release',
|
|
145
|
+
'error': 'RuntimeError: stopped',
|
|
146
|
+
'open': '/tmp/pullup/demo.py',
|
|
147
|
+
'checkout': '',
|
|
148
|
+
'version': '0.0.4'}
|
|
149
|
+
|
|
150
|
+
## Infrastructure
|
|
151
|
+
|
|
152
|
+
[`Infra.status`](https://vedicreader.github.io/pullup/infra.html#infra.status) reports provider and token availability without making a request.
|
|
153
|
+
|
|
154
|
+
``` python
|
|
155
|
+
infra = Infra(env={})
|
|
156
|
+
infra.status()
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
{'vpseasy': True,
|
|
160
|
+
'cfeasy': True,
|
|
161
|
+
'hcloud_token': True,
|
|
162
|
+
'cf_token': False,
|
|
163
|
+
'keys': ['HCLOUD_TOKEN', 'CLOUDFLARE_API_TOKEN']}
|
pullup-0.0.5/README.md
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# pullup
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
|
|
8
|
+
``` sh
|
|
9
|
+
pip install pullup
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Cloud integrations load only when used.
|
|
13
|
+
|
|
14
|
+
## Project detection
|
|
15
|
+
|
|
16
|
+
[`Project`](https://vedicreader.github.io/pullup/project.html#project) detects the release flow from files in the project directory.
|
|
17
|
+
|
|
18
|
+
``` python
|
|
19
|
+
project = Project(root)
|
|
20
|
+
project.kind, [step.id for step in project.steps()]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
('nbdev', ['prepare', 'bump', 'gh', 'pypi'])
|
|
24
|
+
|
|
25
|
+
## Running steps
|
|
26
|
+
|
|
27
|
+
Steps run in one PTY. Automatic execution stops at the first failure.
|
|
28
|
+
|
|
29
|
+
``` python
|
|
30
|
+
pipeline = Pipeline(root, dir='.demo')
|
|
31
|
+
pipeline.save([{'id': 'hello', 'cmd': 'say hello',
|
|
32
|
+
'argv': [sys.executable, '-c', 'print("ready")']}])
|
|
33
|
+
await pipeline.start()
|
|
34
|
+
pipeline.state()['done'], pipeline.tail().splitlines()[-2:]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
(False, ['', '❯ say hello'])
|
|
38
|
+
|
|
39
|
+
## Plan storage
|
|
40
|
+
|
|
41
|
+
Plans are written only below the project directory.
|
|
42
|
+
|
|
43
|
+
``` python
|
|
44
|
+
custom = Pipeline(root, dir='.myapp')
|
|
45
|
+
custom.save([{'id': 'show', 'cmd': 'show', 'argv': [sys.executable, '-c', 'print("saved")']}])
|
|
46
|
+
custom.path.relative_to(root)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Path('.myapp/pipeline.json')
|
|
50
|
+
|
|
51
|
+
## Deployment pipelines
|
|
52
|
+
|
|
53
|
+
[`Deploy`](https://vedicreader.github.io/pullup/deploy.html#deploy) runs a project’s deployment script. [`Drive`](https://vedicreader.github.io/pullup/drive.html#drive) exposes each operation as a library call.
|
|
54
|
+
|
|
55
|
+
``` python
|
|
56
|
+
Deploy(root).state()['kind'], Drive(root).state()['kind']
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
('deploy', 'drive')
|
|
60
|
+
|
|
61
|
+
## Workflows
|
|
62
|
+
|
|
63
|
+
Local workflow inspection needs no GitHub credentials.
|
|
64
|
+
|
|
65
|
+
``` python
|
|
66
|
+
workflow_dir = root/'.github'/'workflows'
|
|
67
|
+
workflow_dir.mkdir(parents=True)
|
|
68
|
+
(workflow_dir/'ci.yml').write_text('''name: CI
|
|
69
|
+
on: push
|
|
70
|
+
jobs:
|
|
71
|
+
test:
|
|
72
|
+
runs-on: ubuntu-latest
|
|
73
|
+
steps:
|
|
74
|
+
- run: pytest
|
|
75
|
+
''')
|
|
76
|
+
workflows = Workflows(root)
|
|
77
|
+
[(row['name'], [job['id'] for job in row['jobs']]) for row in workflows.parsed()]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
[('CI', ['test'])]
|
|
81
|
+
|
|
82
|
+
## Environment
|
|
83
|
+
|
|
84
|
+
A pipeline injects required values into the child without changing the parent environment.
|
|
85
|
+
|
|
86
|
+
``` python
|
|
87
|
+
class Values:
|
|
88
|
+
def get(self, key, secret=True): return 'demo-token' if key == 'DEMO_TOKEN' else ''
|
|
89
|
+
def values(self, keys): return {key: self.get(key) for key in keys if self.get(key)}
|
|
90
|
+
|
|
91
|
+
with_values = Pipeline(root, env=Values(), dir='.env-demo')
|
|
92
|
+
with_values.save([{'id': 'env', 'cmd': 'read environment', 'needs': ['DEMO_TOKEN'],
|
|
93
|
+
'argv': [sys.executable, '-c', 'import os; print(os.environ["DEMO_TOKEN"])']}])
|
|
94
|
+
await with_values.start()
|
|
95
|
+
with_values.tail().splitlines()[-2:]
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
['', '❯ read environment']
|
|
99
|
+
|
|
100
|
+
## Package errors
|
|
101
|
+
|
|
102
|
+
[`blame`](https://vedicreader.github.io/pullup/stack.html#blame) identifies the deepest selected-package frame.
|
|
103
|
+
|
|
104
|
+
``` python
|
|
105
|
+
trace = '''Traceback (most recent call last):
|
|
106
|
+
File "/tmp/pullup/demo.py", line 7, in release
|
|
107
|
+
raise RuntimeError("stopped")
|
|
108
|
+
RuntimeError: stopped
|
|
109
|
+
'''
|
|
110
|
+
blame(trace, family=['pullup'])
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
{'package': 'pullup',
|
|
114
|
+
'file': '/tmp/pullup/demo.py',
|
|
115
|
+
'line': 7,
|
|
116
|
+
'fn': 'release',
|
|
117
|
+
'error': 'RuntimeError: stopped',
|
|
118
|
+
'open': '/tmp/pullup/demo.py',
|
|
119
|
+
'checkout': '',
|
|
120
|
+
'version': '0.0.4'}
|
|
121
|
+
|
|
122
|
+
## Infrastructure
|
|
123
|
+
|
|
124
|
+
[`Infra.status`](https://vedicreader.github.io/pullup/infra.html#infra.status) reports provider and token availability without making a request.
|
|
125
|
+
|
|
126
|
+
``` python
|
|
127
|
+
infra = Infra(env={})
|
|
128
|
+
infra.status()
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
{'vpseasy': True,
|
|
132
|
+
'cfeasy': True,
|
|
133
|
+
'hcloud_token': True,
|
|
134
|
+
'cf_token': False,
|
|
135
|
+
'keys': ['HCLOUD_TOKEN', 'CLOUDFLARE_API_TOKEN']}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
__version__ = "0.0.5"
|
|
2
|
+
|
|
3
|
+
# The names a caller reaches for. The modules stay importable for everything else.
|
|
4
|
+
from .env import EnvError, EnvStore, venv_env
|
|
5
|
+
from .project import Project, Step
|
|
6
|
+
from .pipeline import Pipeline, PipelineError, Release
|
|
7
|
+
from .deploy import Deploy
|
|
8
|
+
from .drive import Drive
|
|
9
|
+
from .workflows import Workflows, WorkflowError, levels
|
|
10
|
+
from .infra import Infra, InfraError
|
|
11
|
+
from .stack import blame, survey
|
|
12
|
+
|
|
13
|
+
__all__ = ['EnvError', 'EnvStore', 'venv_env', 'Project', 'Step', 'Pipeline', 'PipelineError',
|
|
14
|
+
'Release', 'Deploy', 'Drive', 'Workflows', 'WorkflowError', 'levels', 'Infra',
|
|
15
|
+
'InfraError', 'blame', 'survey']
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Autogenerated by nbdev
|
|
2
|
+
|
|
3
|
+
d = { 'settings': { 'branch': 'main',
|
|
4
|
+
'doc_baseurl': '/pullup',
|
|
5
|
+
'doc_host': 'https://vedicreader.github.io',
|
|
6
|
+
'git_url': 'https://github.com/vedicreader/pullup',
|
|
7
|
+
'lib_path': 'pullup'},
|
|
8
|
+
'syms': { 'pullup.deploy': { 'pullup.deploy.Deploy': ('deploy.html#deploy', 'pullup/deploy.py'),
|
|
9
|
+
'pullup.deploy.Deploy.defaults': ('deploy.html#deploy.defaults', 'pullup/deploy.py'),
|
|
10
|
+
'pullup.deploy.Deploy.scaffold': ('deploy.html#deploy.scaffold', 'pullup/deploy.py'),
|
|
11
|
+
'pullup.deploy.Deploy.state': ('deploy.html#deploy.state', 'pullup/deploy.py'),
|
|
12
|
+
'pullup.deploy.Deploy.target': ('deploy.html#deploy.target', 'pullup/deploy.py'),
|
|
13
|
+
'pullup.deploy.deploy_template': ('deploy.html#deploy_template', 'pullup/deploy.py'),
|
|
14
|
+
'pullup.deploy.generator': ('deploy.html#generator', 'pullup/deploy.py'),
|
|
15
|
+
'pullup.deploy.setup_template': ('deploy.html#setup_template', 'pullup/deploy.py'),
|
|
16
|
+
'pullup.deploy.use_generator': ('deploy.html#use_generator', 'pullup/deploy.py')},
|
|
17
|
+
'pullup.drive': { 'pullup.drive.Drive': ('drive.html#drive', 'pullup/drive.py'),
|
|
18
|
+
'pullup.drive.Drive.__init__': ('drive.html#drive.__init__', 'pullup/drive.py'),
|
|
19
|
+
'pullup.drive.Drive.defaults': ('drive.html#drive.defaults', 'pullup/drive.py'),
|
|
20
|
+
'pullup.drive.Drive.refresh': ('drive.html#drive.refresh', 'pullup/drive.py'),
|
|
21
|
+
'pullup.drive.Drive.state': ('drive.html#drive.state', 'pullup/drive.py'),
|
|
22
|
+
'pullup.drive.Part': ('drive.html#part', 'pullup/drive.py'),
|
|
23
|
+
'pullup.drive._step': ('drive.html#_step', 'pullup/drive.py'),
|
|
24
|
+
'pullup.drive.context': ('drive.html#context', 'pullup/drive.py'),
|
|
25
|
+
'pullup.drive.parts': ('drive.html#parts', 'pullup/drive.py')},
|
|
26
|
+
'pullup.env': { 'pullup.env.EnvError': ('env.html#enverror', 'pullup/env.py'),
|
|
27
|
+
'pullup.env.EnvStore': ('env.html#envstore', 'pullup/env.py'),
|
|
28
|
+
'pullup.env.EnvStore.__init__': ('env.html#envstore.__init__', 'pullup/env.py'),
|
|
29
|
+
'pullup.env.EnvStore.get': ('env.html#envstore.get', 'pullup/env.py'),
|
|
30
|
+
'pullup.env.EnvStore.set': ('env.html#envstore.set', 'pullup/env.py'),
|
|
31
|
+
'pullup.env.EnvStore.unset': ('env.html#envstore.unset', 'pullup/env.py'),
|
|
32
|
+
'pullup.env.EnvStore.values': ('env.html#envstore.values', 'pullup/env.py'),
|
|
33
|
+
'pullup.env._call': ('env.html#_call', 'pullup/env.py'),
|
|
34
|
+
'pullup.env._dockeasy': ('env.html#_dockeasy', 'pullup/env.py'),
|
|
35
|
+
'pullup.env.clean_env': ('env.html#clean_env', 'pullup/env.py'),
|
|
36
|
+
'pullup.env.env_value': ('env.html#env_value', 'pullup/env.py'),
|
|
37
|
+
'pullup.env.extra': ('env.html#extra', 'pullup/env.py'),
|
|
38
|
+
'pullup.env.needs_extra': ('env.html#needs_extra', 'pullup/env.py'),
|
|
39
|
+
'pullup.env.strip_bundle': ('env.html#strip_bundle', 'pullup/env.py'),
|
|
40
|
+
'pullup.env.use_extra': ('env.html#use_extra', 'pullup/env.py'),
|
|
41
|
+
'pullup.env.venv_env': ('env.html#venv_env', 'pullup/env.py')},
|
|
42
|
+
'pullup.infra': { 'pullup.infra.Infra': ('infra.html#infra', 'pullup/infra.py'),
|
|
43
|
+
'pullup.infra.Infra.__init__': ('infra.html#infra.__init__', 'pullup/infra.py'),
|
|
44
|
+
'pullup.infra.Infra._cf': ('infra.html#infra._cf', 'pullup/infra.py'),
|
|
45
|
+
'pullup.infra.Infra._hetzner': ('infra.html#infra._hetzner', 'pullup/infra.py'),
|
|
46
|
+
'pullup.infra.Infra.delete_server': ('infra.html#infra.delete_server', 'pullup/infra.py'),
|
|
47
|
+
'pullup.infra.Infra.delete_tunnel': ('infra.html#infra.delete_tunnel', 'pullup/infra.py'),
|
|
48
|
+
'pullup.infra.Infra.keys': ('infra.html#infra.keys', 'pullup/infra.py'),
|
|
49
|
+
'pullup.infra.Infra.overview': ('infra.html#infra.overview', 'pullup/infra.py'),
|
|
50
|
+
'pullup.infra.Infra.records': ('infra.html#infra.records', 'pullup/infra.py'),
|
|
51
|
+
'pullup.infra.Infra.servers': ('infra.html#infra.servers', 'pullup/infra.py'),
|
|
52
|
+
'pullup.infra.Infra.status': ('infra.html#infra.status', 'pullup/infra.py'),
|
|
53
|
+
'pullup.infra.Infra.token': ('infra.html#infra.token', 'pullup/infra.py'),
|
|
54
|
+
'pullup.infra.Infra.tunnels': ('infra.html#infra.tunnels', 'pullup/infra.py'),
|
|
55
|
+
'pullup.infra.Infra.verify': ('infra.html#infra.verify', 'pullup/infra.py'),
|
|
56
|
+
'pullup.infra.Infra.zones': ('infra.html#infra.zones', 'pullup/infra.py'),
|
|
57
|
+
'pullup.infra.InfraError': ('infra.html#infraerror', 'pullup/infra.py'),
|
|
58
|
+
'pullup.infra._record': ('infra.html#_record', 'pullup/infra.py'),
|
|
59
|
+
'pullup.infra._why': ('infra.html#_why', 'pullup/infra.py'),
|
|
60
|
+
'pullup.infra._with_env': ('infra.html#_with_env', 'pullup/infra.py')},
|
|
61
|
+
'pullup.pipeline': { 'pullup.pipeline.Pipeline': ('pipeline.html#pipeline', 'pullup/pipeline.py'),
|
|
62
|
+
'pullup.pipeline.Pipeline.__init__': ('pipeline.html#pipeline.__init__', 'pullup/pipeline.py'),
|
|
63
|
+
'pullup.pipeline.Pipeline._after': ('pipeline.html#pipeline._after', 'pullup/pipeline.py'),
|
|
64
|
+
'pullup.pipeline.Pipeline._broadcast': ('pipeline.html#pipeline._broadcast', 'pullup/pipeline.py'),
|
|
65
|
+
'pullup.pipeline.Pipeline._drain': ('pipeline.html#pipeline._drain', 'pullup/pipeline.py'),
|
|
66
|
+
'pullup.pipeline.Pipeline._env': ('pipeline.html#pipeline._env', 'pullup/pipeline.py'),
|
|
67
|
+
'pullup.pipeline.Pipeline._load': ('pipeline.html#pipeline._load', 'pullup/pipeline.py'),
|
|
68
|
+
'pullup.pipeline.Pipeline._next': ('pipeline.html#pipeline._next', 'pullup/pipeline.py'),
|
|
69
|
+
'pullup.pipeline.Pipeline._resolve': ('pipeline.html#pipeline._resolve', 'pullup/pipeline.py'),
|
|
70
|
+
'pullup.pipeline.Pipeline._row': ('pipeline.html#pipeline._row', 'pullup/pipeline.py'),
|
|
71
|
+
'pullup.pipeline.Pipeline._run': ('pipeline.html#pipeline._run', 'pullup/pipeline.py'),
|
|
72
|
+
'pullup.pipeline.Pipeline.blame': ('pipeline.html#pipeline.blame', 'pullup/pipeline.py'),
|
|
73
|
+
'pullup.pipeline.Pipeline.defaults': ('pipeline.html#pipeline.defaults', 'pullup/pipeline.py'),
|
|
74
|
+
'pullup.pipeline.Pipeline.missing': ('pipeline.html#pipeline.missing', 'pullup/pipeline.py'),
|
|
75
|
+
'pullup.pipeline.Pipeline.needs': ('pipeline.html#pipeline.needs', 'pullup/pipeline.py'),
|
|
76
|
+
'pullup.pipeline.Pipeline.path': ('pipeline.html#pipeline.path', 'pullup/pipeline.py'),
|
|
77
|
+
'pullup.pipeline.Pipeline.reset': ('pipeline.html#pipeline.reset', 'pullup/pipeline.py'),
|
|
78
|
+
'pullup.pipeline.Pipeline.reset_plan': ('pipeline.html#pipeline.reset_plan', 'pullup/pipeline.py'),
|
|
79
|
+
'pullup.pipeline.Pipeline.resize': ('pipeline.html#pipeline.resize', 'pullup/pipeline.py'),
|
|
80
|
+
'pullup.pipeline.Pipeline.save': ('pipeline.html#pipeline.save', 'pullup/pipeline.py'),
|
|
81
|
+
'pullup.pipeline.Pipeline.skip': ('pipeline.html#pipeline.skip', 'pullup/pipeline.py'),
|
|
82
|
+
'pullup.pipeline.Pipeline.start': ('pipeline.html#pipeline.start', 'pullup/pipeline.py'),
|
|
83
|
+
'pullup.pipeline.Pipeline.state': ('pipeline.html#pipeline.state', 'pullup/pipeline.py'),
|
|
84
|
+
'pullup.pipeline.Pipeline.step': ('pipeline.html#pipeline.step', 'pullup/pipeline.py'),
|
|
85
|
+
'pullup.pipeline.Pipeline.stop': ('pipeline.html#pipeline.stop', 'pullup/pipeline.py'),
|
|
86
|
+
'pullup.pipeline.Pipeline.subscribe': ('pipeline.html#pipeline.subscribe', 'pullup/pipeline.py'),
|
|
87
|
+
'pullup.pipeline.Pipeline.tail': ('pipeline.html#pipeline.tail', 'pullup/pipeline.py'),
|
|
88
|
+
'pullup.pipeline.Pipeline.unsubscribe': ('pipeline.html#pipeline.unsubscribe', 'pullup/pipeline.py'),
|
|
89
|
+
'pullup.pipeline.Pipeline.write': ('pipeline.html#pipeline.write', 'pullup/pipeline.py'),
|
|
90
|
+
'pullup.pipeline.PipelineError': ('pipeline.html#pipelineerror', 'pullup/pipeline.py'),
|
|
91
|
+
'pullup.pipeline.Release': ('pipeline.html#release', 'pullup/pipeline.py'),
|
|
92
|
+
'pullup.pipeline.Release.defaults': ('pipeline.html#release.defaults', 'pullup/pipeline.py'),
|
|
93
|
+
'pullup.pipeline.Release.state': ('pipeline.html#release.state', 'pullup/pipeline.py'),
|
|
94
|
+
'pullup.pipeline.resolve_script': ('pipeline.html#resolve_script', 'pullup/pipeline.py'),
|
|
95
|
+
'pullup.pipeline.uv_argv': ('pipeline.html#uv_argv', 'pullup/pipeline.py')},
|
|
96
|
+
'pullup.project': { 'pullup.project.Project': ('project.html#project', 'pullup/project.py'),
|
|
97
|
+
'pullup.project.Project.__init__': ('project.html#project.__init__', 'pullup/project.py'),
|
|
98
|
+
'pullup.project.Project.__repr__': ('project.html#project.__repr__', 'pullup/project.py'),
|
|
99
|
+
'pullup.project.Project.dict': ('project.html#project.dict', 'pullup/project.py'),
|
|
100
|
+
'pullup.project.Project.kind': ('project.html#project.kind', 'pullup/project.py'),
|
|
101
|
+
'pullup.project.Project.packages_an_app': ('project.html#project.packages_an_app', 'pullup/project.py'),
|
|
102
|
+
'pullup.project.Project.steps': ('project.html#project.steps', 'pullup/project.py'),
|
|
103
|
+
'pullup.project.Step': ('project.html#step', 'pullup/project.py'),
|
|
104
|
+
'pullup.project.Step.dict': ('project.html#step.dict', 'pullup/project.py'),
|
|
105
|
+
'pullup.project._toml': ('project.html#_toml', 'pullup/project.py'),
|
|
106
|
+
'pullup.project._with_app': ('project.html#_with_app', 'pullup/project.py'),
|
|
107
|
+
'pullup.project.app_project': ('project.html#app_project', 'pullup/project.py'),
|
|
108
|
+
'pullup.project.default_steps': ('project.html#default_steps', 'pullup/project.py'),
|
|
109
|
+
'pullup.project.fastship_project': ('project.html#fastship_project', 'pullup/project.py'),
|
|
110
|
+
'pullup.project.maturin_project': ('project.html#maturin_project', 'pullup/project.py'),
|
|
111
|
+
'pullup.project.nbdev_project': ('project.html#nbdev_project', 'pullup/project.py'),
|
|
112
|
+
'pullup.project.release_flow': ('project.html#release_flow', 'pullup/project.py'),
|
|
113
|
+
'pullup.project.rust_project': ('project.html#rust_project', 'pullup/project.py')},
|
|
114
|
+
'pullup.stack': { 'pullup.stack._is_error': ('stack.html#_is_error', 'pullup/stack.py'),
|
|
115
|
+
'pullup.stack._origin': ('stack.html#_origin', 'pullup/stack.py'),
|
|
116
|
+
'pullup.stack._package_of': ('stack.html#_package_of', 'pullup/stack.py'),
|
|
117
|
+
'pullup.stack._roots': ('stack.html#_roots', 'pullup/stack.py'),
|
|
118
|
+
'pullup.stack._row': ('stack.html#_row', 'pullup/stack.py'),
|
|
119
|
+
'pullup.stack._vendored': ('stack.html#_vendored', 'pullup/stack.py'),
|
|
120
|
+
'pullup.stack._version': ('stack.html#_version', 'pullup/stack.py'),
|
|
121
|
+
'pullup.stack.blame': ('stack.html#blame', 'pullup/stack.py'),
|
|
122
|
+
'pullup.stack.checkout_for': ('stack.html#checkout_for', 'pullup/stack.py'),
|
|
123
|
+
'pullup.stack.frames': ('stack.html#frames', 'pullup/stack.py'),
|
|
124
|
+
'pullup.stack.installed': ('stack.html#installed', 'pullup/stack.py'),
|
|
125
|
+
'pullup.stack.survey': ('stack.html#survey', 'pullup/stack.py')},
|
|
126
|
+
'pullup.wfbuild': { 'pullup.wfbuild._adopt': ('wfbuild.html#_adopt', 'pullup/wfbuild.py'),
|
|
127
|
+
'pullup.wfbuild._branches': ('wfbuild.html#_branches', 'pullup/wfbuild.py'),
|
|
128
|
+
'pullup.wfbuild._lines': ('wfbuild.html#_lines', 'pullup/wfbuild.py'),
|
|
129
|
+
'pullup.wfbuild._listy': ('wfbuild.html#_listy', 'pullup/wfbuild.py'),
|
|
130
|
+
'pullup.wfbuild._run_job': ('wfbuild.html#_run_job', 'pullup/wfbuild.py'),
|
|
131
|
+
'pullup.wfbuild._triggers': ('wfbuild.html#_triggers', 'pullup/wfbuild.py'),
|
|
132
|
+
'pullup.wfbuild.compose': ('wfbuild.html#compose', 'pullup/wfbuild.py'),
|
|
133
|
+
'pullup.wfbuild.deploy_job': ('wfbuild.html#deploy_job', 'pullup/wfbuild.py'),
|
|
134
|
+
'pullup.wfbuild.fastship_job': ('wfbuild.html#fastship_job', 'pullup/wfbuild.py'),
|
|
135
|
+
'pullup.wfbuild.load_spec': ('wfbuild.html#load_spec', 'pullup/wfbuild.py'),
|
|
136
|
+
'pullup.wfbuild.nbdev_job': ('wfbuild.html#nbdev_job', 'pullup/wfbuild.py'),
|
|
137
|
+
'pullup.wfbuild.preset_rows': ('wfbuild.html#preset_rows', 'pullup/wfbuild.py'),
|
|
138
|
+
'pullup.wfbuild.save_spec': ('wfbuild.html#save_spec', 'pullup/wfbuild.py'),
|
|
139
|
+
'pullup.wfbuild.spec_dir': ('wfbuild.html#spec_dir', 'pullup/wfbuild.py'),
|
|
140
|
+
'pullup.wfbuild.spec_path': ('wfbuild.html#spec_path', 'pullup/wfbuild.py'),
|
|
141
|
+
'pullup.wfbuild.use_spec_dir': ('wfbuild.html#use_spec_dir', 'pullup/wfbuild.py')},
|
|
142
|
+
'pullup.workflows': { 'pullup.workflows.WorkflowError': ('workflows.html#workflowerror', 'pullup/workflows.py'),
|
|
143
|
+
'pullup.workflows.Workflows': ('workflows.html#workflows', 'pullup/workflows.py'),
|
|
144
|
+
'pullup.workflows.Workflows.__init__': ('workflows.html#workflows.__init__', 'pullup/workflows.py'),
|
|
145
|
+
'pullup.workflows.Workflows._api': ('workflows.html#workflows._api', 'pullup/workflows.py'),
|
|
146
|
+
'pullup.workflows.Workflows._build': ('workflows.html#workflows._build', 'pullup/workflows.py'),
|
|
147
|
+
'pullup.workflows.Workflows._deploy_workflow': ( 'workflows.html#workflows._deploy_workflow',
|
|
148
|
+
'pullup/workflows.py'),
|
|
149
|
+
'pullup.workflows.Workflows._job': ('workflows.html#workflows._job', 'pullup/workflows.py'),
|
|
150
|
+
'pullup.workflows.Workflows._steps': ('workflows.html#workflows._steps', 'pullup/workflows.py'),
|
|
151
|
+
'pullup.workflows.Workflows._triggers': ('workflows.html#workflows._triggers', 'pullup/workflows.py'),
|
|
152
|
+
'pullup.workflows.Workflows.add': ('workflows.html#workflows.add', 'pullup/workflows.py'),
|
|
153
|
+
'pullup.workflows.Workflows.build': ('workflows.html#workflows.build', 'pullup/workflows.py'),
|
|
154
|
+
'pullup.workflows.Workflows.cancel': ('workflows.html#workflows.cancel', 'pullup/workflows.py'),
|
|
155
|
+
'pullup.workflows.Workflows.catalogue': ('workflows.html#workflows.catalogue', 'pullup/workflows.py'),
|
|
156
|
+
'pullup.workflows.Workflows.config': ('workflows.html#workflows.config', 'pullup/workflows.py'),
|
|
157
|
+
'pullup.workflows.Workflows.detect': ('workflows.html#workflows.detect', 'pullup/workflows.py'),
|
|
158
|
+
'pullup.workflows.Workflows.dir': ('workflows.html#workflows.dir', 'pullup/workflows.py'),
|
|
159
|
+
'pullup.workflows.Workflows.dispatch': ('workflows.html#workflows.dispatch', 'pullup/workflows.py'),
|
|
160
|
+
'pullup.workflows.Workflows.docker': ('workflows.html#workflows.docker', 'pullup/workflows.py'),
|
|
161
|
+
'pullup.workflows.Workflows.files': ('workflows.html#workflows.files', 'pullup/workflows.py'),
|
|
162
|
+
'pullup.workflows.Workflows.generate': ('workflows.html#workflows.generate', 'pullup/workflows.py'),
|
|
163
|
+
'pullup.workflows.Workflows.parse': ('workflows.html#workflows.parse', 'pullup/workflows.py'),
|
|
164
|
+
'pullup.workflows.Workflows.parsed': ('workflows.html#workflows.parsed', 'pullup/workflows.py'),
|
|
165
|
+
'pullup.workflows.Workflows.preview': ('workflows.html#workflows.preview', 'pullup/workflows.py'),
|
|
166
|
+
'pullup.workflows.Workflows.push_env': ('workflows.html#workflows.push_env', 'pullup/workflows.py'),
|
|
167
|
+
'pullup.workflows.Workflows.remote_env': ('workflows.html#workflows.remote_env', 'pullup/workflows.py'),
|
|
168
|
+
'pullup.workflows.Workflows.repo': ('workflows.html#workflows.repo', 'pullup/workflows.py'),
|
|
169
|
+
'pullup.workflows.Workflows.run_jobs': ('workflows.html#workflows.run_jobs', 'pullup/workflows.py'),
|
|
170
|
+
'pullup.workflows.Workflows.runs': ('workflows.html#workflows.runs', 'pullup/workflows.py'),
|
|
171
|
+
'pullup.workflows.Workflows.schema': ('workflows.html#workflows.schema', 'pullup/workflows.py'),
|
|
172
|
+
'pullup.workflows.Workflows.spec': ('workflows.html#workflows.spec', 'pullup/workflows.py'),
|
|
173
|
+
'pullup.workflows.Workflows.status': ('workflows.html#workflows.status', 'pullup/workflows.py'),
|
|
174
|
+
'pullup.workflows.Workflows.write_dockerfile': ( 'workflows.html#workflows.write_dockerfile',
|
|
175
|
+
'pullup/workflows.py'),
|
|
176
|
+
'pullup.workflows.Workflows.write_generated': ( 'workflows.html#workflows.write_generated',
|
|
177
|
+
'pullup/workflows.py'),
|
|
178
|
+
'pullup.workflows.Workflows.write_spec': ('workflows.html#workflows.write_spec', 'pullup/workflows.py'),
|
|
179
|
+
'pullup.workflows._fastship': ('workflows.html#_fastship', 'pullup/workflows.py'),
|
|
180
|
+
'pullup.workflows._from_line': ('workflows.html#_from_line', 'pullup/workflows.py'),
|
|
181
|
+
'pullup.workflows._gh_authed': ('workflows.html#_gh_authed', 'pullup/workflows.py'),
|
|
182
|
+
'pullup.workflows._gheasy': ('workflows.html#_gheasy', 'pullup/workflows.py'),
|
|
183
|
+
'pullup.workflows._opened': ('workflows.html#_opened', 'pullup/workflows.py'),
|
|
184
|
+
'pullup.workflows._read': ('workflows.html#_read', 'pullup/workflows.py'),
|
|
185
|
+
'pullup.workflows._run_row': ('workflows.html#_run_row', 'pullup/workflows.py'),
|
|
186
|
+
'pullup.workflows._sync_api': ('workflows.html#_sync_api', 'pullup/workflows.py'),
|
|
187
|
+
'pullup.workflows._wf_file': ('workflows.html#_wf_file', 'pullup/workflows.py'),
|
|
188
|
+
'pullup.workflows._wf_name': ('workflows.html#_wf_name', 'pullup/workflows.py'),
|
|
189
|
+
'pullup.workflows._yaml': ('workflows.html#_yaml', 'pullup/workflows.py'),
|
|
190
|
+
'pullup.workflows.levels': ('workflows.html#levels', 'pullup/workflows.py')}}}
|