pullup 0.0.2__tar.gz → 0.0.6__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.
@@ -0,0 +1,153 @@
1
+ _docs/
2
+ _proc/
3
+ sidebar.yml
4
+
5
+ *.bak
6
+ .gitattributes
7
+ .last_checked
8
+ .gitconfig
9
+ *.bak
10
+ *.log
11
+ *~
12
+ ~*
13
+ _tmp*
14
+ tmp*
15
+ tags
16
+ *.pkg
17
+
18
+ # Byte-compiled / optimized / DLL files
19
+ __pycache__/
20
+ *.py[cod]
21
+ *$py.class
22
+
23
+ # C extensions
24
+ *.so
25
+
26
+ # Distribution / packaging
27
+ .Python
28
+ env/
29
+ build/
30
+ conda/
31
+ develop-eggs/
32
+ dist/
33
+ downloads/
34
+ eggs/
35
+ .eggs/
36
+ lib/
37
+ lib64/
38
+ parts/
39
+ sdist/
40
+ var/
41
+ wheels/
42
+ *.egg-info/
43
+ .installed.cfg
44
+ *.egg
45
+
46
+ # PyInstaller
47
+ # Usually these files are written by a python script from a template
48
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
49
+ *.manifest
50
+ *.spec
51
+
52
+ # Installer logs
53
+ pip-log.txt
54
+ pip-delete-this-directory.txt
55
+
56
+ # Unit test / coverage reports
57
+ htmlcov/
58
+ .tox/
59
+ .coverage
60
+ .coverage.*
61
+ .cache
62
+ nosetests.xml
63
+ coverage.xml
64
+ *.cover
65
+ .hypothesis/
66
+
67
+ # Translations
68
+ *.mo
69
+ *.pot
70
+
71
+ # Django stuff:
72
+ *.log
73
+ local_settings.py
74
+
75
+ # Flask stuff:
76
+ instance/
77
+ .webassets-cache
78
+
79
+ # Scrapy stuff:
80
+ .scrapy
81
+
82
+ # Sphinx documentation
83
+ docs/_build/
84
+
85
+ # PyBuilder
86
+ target/
87
+
88
+ # Jupyter Notebook
89
+ .ipynb_checkpoints
90
+
91
+ # pyenv
92
+ .python-version
93
+
94
+ # celery beat schedule file
95
+ celerybeat-schedule
96
+
97
+ # SageMath parsed files
98
+ *.sage.py
99
+
100
+ # dotenv
101
+ .env
102
+
103
+ # virtualenv
104
+ .venv
105
+ venv/
106
+ ENV/
107
+
108
+ # Spyder project settings
109
+ .spyderproject
110
+ .spyproject
111
+
112
+ # Rope project settings
113
+ .ropeproject
114
+
115
+ # mkdocs documentation
116
+ /site
117
+
118
+ # mypy
119
+ .mypy_cache/
120
+
121
+ .vscode
122
+ *.swp
123
+
124
+ # osx generated files
125
+ .DS_Store
126
+ .DS_Store?
127
+ .Trashes
128
+ ehthumbs.db
129
+ Thumbs.db
130
+ .idea
131
+
132
+ # pytest
133
+ .pytest_cache
134
+
135
+ # tools/trust-doc-nbs
136
+ docs_src/.last_checked
137
+
138
+ # symlinks to fastai
139
+ docs_src/fastai
140
+ tools/fastai
141
+
142
+ # link checker
143
+ checklink/cookies.txt
144
+
145
+ # .gitconfig is now autogenerated
146
+ .gitconfig
147
+
148
+ # Quarto installer
149
+ .deb
150
+ .pkg
151
+
152
+ # Quarto
153
+ .quarto
pullup-0.0.6/PKG-INFO ADDED
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.5
2
+ Name: pullup
3
+ Version: 0.0.6
4
+ Summary: build, release, and deploy projects
5
+ Project-URL: Repository, https://github.com/vedicreader/pullup
6
+ Project-URL: Documentation, https://vedicreader.github.io/pullup
7
+ Author-email: Karthik Rajgopal <karthik.rajgopal@hotmail.com>
8
+ License: Apache-2.0
9
+ License-File: LICENSE
10
+ Keywords: jupyter,nbdev,notebook,python
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Natural Language :: English
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Requires-Python: >=3.11
17
+ Requires-Dist: cfeasy>=0.0.4
18
+ Requires-Dist: dockeasy>=0.0.5
19
+ Requires-Dist: fastcore>=1.8.17
20
+ Requires-Dist: gheasy>=0.0.10
21
+ Requires-Dist: keyring>=25.0.0
22
+ Requires-Dist: ptymini>=0.0.5
23
+ Requires-Dist: python-dotenv>=1.0.0
24
+ Requires-Dist: pyyaml>=6.0
25
+ Requires-Dist: vpseasy>=0.0.18
26
+ Description-Content-Type: text/markdown
27
+
28
+ # pullup
29
+
30
+
31
+ <!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->
32
+
33
+ ## Install
34
+
35
+ ``` sh
36
+ pip install pullup
37
+ ```
38
+
39
+ Cloud integrations load only when used.
40
+
41
+ ## Project detection
42
+
43
+ [`Project`](https://vedicreader.github.io/pullup/project.html#project) detects the release flow from files in the project directory.
44
+
45
+ ``` python
46
+ project = Project(root)
47
+ project.kind, [step.id for step in project.steps()]
48
+ ```
49
+
50
+ ('nbdev', ['prepare', 'bump', 'gh', 'pypi'])
51
+
52
+ ## Running steps
53
+
54
+ Steps run in one PTY. Automatic execution stops at the first failure.
55
+
56
+ ``` python
57
+ pipeline = Pipeline(root, dir='.demo')
58
+ pipeline.save([{'id': 'hello', 'cmd': 'say hello',
59
+ 'argv': [sys.executable, '-c', 'print("ready")']}])
60
+ await pipeline.start()
61
+ pipeline.state()['done'], pipeline.tail().splitlines()[-2:]
62
+ ```
63
+
64
+ (False, ['', '❯ say hello'])
65
+
66
+ ## Plan storage
67
+
68
+ Plans are written only below the project directory.
69
+
70
+ ``` python
71
+ custom = Pipeline(root, dir='.myapp')
72
+ custom.save([{'id': 'show', 'cmd': 'show', 'argv': [sys.executable, '-c', 'print("saved")']}])
73
+ custom.path.relative_to(root)
74
+ ```
75
+
76
+ Path('.myapp/pipeline.json')
77
+
78
+ ## Deployment pipelines
79
+
80
+ [`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.
81
+
82
+ ``` python
83
+ Deploy(root).state()['kind'], Drive(root).state()['kind']
84
+ ```
85
+
86
+ ('deploy', 'drive')
87
+
88
+ ## Workflows
89
+
90
+ Local workflow inspection needs no GitHub credentials.
91
+
92
+ ``` python
93
+ workflow_dir = root/'.github'/'workflows'
94
+ workflow_dir.mkdir(parents=True)
95
+ (workflow_dir/'ci.yml').write_text('''name: CI
96
+ on: push
97
+ jobs:
98
+ test:
99
+ runs-on: ubuntu-latest
100
+ steps:
101
+ - run: pytest
102
+ ''')
103
+ workflows = Workflows(root)
104
+ [(row['name'], [job['id'] for job in row['jobs']]) for row in workflows.parsed()]
105
+ ```
106
+
107
+ [('CI', ['test'])]
108
+
109
+ ## Environment
110
+
111
+ A pipeline injects required values into the child without changing the parent environment.
112
+
113
+ ``` python
114
+ class Values:
115
+ def get(self, key, secret=True): return 'demo-token' if key == 'DEMO_TOKEN' else ''
116
+ def values(self, keys): return {key: self.get(key) for key in keys if self.get(key)}
117
+
118
+ with_values = Pipeline(root, env=Values(), dir='.env-demo')
119
+ with_values.save([{'id': 'env', 'cmd': 'read environment', 'needs': ['DEMO_TOKEN'],
120
+ 'argv': [sys.executable, '-c', 'import os; print(os.environ["DEMO_TOKEN"])']}])
121
+ await with_values.start()
122
+ with_values.tail().splitlines()[-2:]
123
+ ```
124
+
125
+ ['', '❯ read environment']
126
+
127
+ ## Package errors
128
+
129
+ [`blame`](https://vedicreader.github.io/pullup/stack.html#blame) identifies the deepest selected-package frame.
130
+
131
+ ``` python
132
+ trace = '''Traceback (most recent call last):
133
+ File "/tmp/pullup/demo.py", line 7, in release
134
+ raise RuntimeError("stopped")
135
+ RuntimeError: stopped
136
+ '''
137
+ blame(trace, family=['pullup'])
138
+ ```
139
+
140
+ {'package': 'pullup',
141
+ 'file': '/tmp/pullup/demo.py',
142
+ 'line': 7,
143
+ 'fn': 'release',
144
+ 'error': 'RuntimeError: stopped',
145
+ 'open': '/tmp/pullup/demo.py',
146
+ 'checkout': '',
147
+ 'version': '0.0.4'}
148
+
149
+ ## Infrastructure
150
+
151
+ [`Infra.status`](https://vedicreader.github.io/pullup/infra.html#infra.status) reports provider and token availability without making a request.
152
+
153
+ ``` python
154
+ infra = Infra(env={})
155
+ infra.status()
156
+ ```
157
+
158
+ {'vpseasy': True,
159
+ 'cfeasy': True,
160
+ 'hcloud_token': True,
161
+ 'cf_token': False,
162
+ 'keys': ['HCLOUD_TOKEN', 'CLOUDFLARE_API_TOKEN']}
pullup-0.0.6/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.6"
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')}}}