Skip to content

Commit a69c93e

Browse files
authored
Merge pull request #28 from Workable/feature/pypi_staging_deployment
[circle] Add support for deploying on PyPI infrastructure
2 parents 51d300d + f0f4533 commit a69c93e

File tree

1 file changed

+132
-1
lines changed

1 file changed

+132
-1
lines changed

.circleci/config.yml

+132-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ jobs:
6464
docker:
6565
- image: circleci/python:3.6
6666

67-
6867
steps:
6968
- checkout
7069
- run:
@@ -91,6 +90,107 @@ jobs:
9190
- dist
9291
- version.txt
9392

93+
deploy_test_pypi: &deploy_template
94+
# Job to deploy on test environment
95+
# Requires dist files under workspace/dist
96+
docker:
97+
- image: circleci/python:3.6
98+
99+
steps:
100+
101+
- attach_workspace:
102+
at: workspace
103+
104+
- run:
105+
name: Create VEnv with tools
106+
command: |
107+
python3 -m venv venv
108+
. venv/bin/activate
109+
pip install -U pip setuptools twine
110+
111+
- run:
112+
name: Upload to PyPI
113+
command: |
114+
. venv/bin/activate
115+
export TWINE_USERNAME="${PYPI_TEST_USERNAME}"
116+
export TWINE_PASSWORD="${PYPI_TEST_PASSWORD}"
117+
echo "Uploading to test.pypi.org"
118+
./venv/bin/twine upload --repository-url https://test.pypi.org/legacy/ workspace/dist/*`cat workspace/version.txt`*
119+
120+
deploy_pypi:
121+
# Job to deploy on public PyPI
122+
# Requires dist files under workspace/dist
123+
docker:
124+
- image: circleci/python:3.6
125+
126+
steps:
127+
128+
- attach_workspace:
129+
at: workspace
130+
131+
- run:
132+
name: Create VEnv with tools
133+
command: |
134+
python3 -m venv venv
135+
. venv/bin/activate
136+
pip install -U pip setuptools twine
137+
138+
- run:
139+
name: Upload to PyPI
140+
command: |
141+
. venv/bin/activate
142+
export TWINE_USERNAME="${PYPI_USERNAME}"
143+
export TWINE_PASSWORD="${PYPI_PASSWORD}"
144+
echo "Uploading to pypi.org"
145+
./venv/bin/twine upload workspace/dist/*`cat workspace/version.txt`*
146+
147+
148+
install_from_test_pypi:
149+
# Try to install from test-pypi
150+
docker:
151+
- image: circleci/python:3.6
152+
153+
steps:
154+
- attach_workspace:
155+
at: workspace
156+
157+
- run:
158+
name: Create virtual-environment
159+
command: |
160+
python3 -m venv venv
161+
. venv/bin/activate
162+
163+
- run:
164+
name: Install from pip
165+
# Try to install the same version from PyPI
166+
command: |
167+
. venv/bin/activate
168+
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple flask-log-request-id==`cat workspace/version.txt`
169+
pip freeze | grep -i flask-log-request-id
170+
171+
install_from_pypi:
172+
# Try to install from public pypi
173+
docker:
174+
- image: circleci/python:3.6
175+
176+
steps:
177+
- attach_workspace:
178+
at: workspace
179+
180+
- run:
181+
name: Create virtual-environment
182+
command: |
183+
python3 -m venv venv
184+
. venv/bin/activate
185+
186+
- run:
187+
name: Install from pip
188+
# Try to install the same version from PyPI
189+
command: |
190+
. venv/bin/activate
191+
pip install flask-log-request-id==`cat workspace/version.txt`
192+
pip freeze | grep -i flask-log-request-id
193+
94194
workflows:
95195
version: 2
96196
test_build_deploy:
@@ -101,3 +201,34 @@ workflows:
101201
requires:
102202
- test-3.6
103203
- test-3.5
204+
205+
- deploy_test_pypi:
206+
filters:
207+
branches:
208+
only:
209+
- staging
210+
requires:
211+
- build
212+
213+
- install_from_test_pypi:
214+
requires:
215+
- deploy_test_pypi
216+
217+
- request_permission_for_public_pypi:
218+
type: approval
219+
requires:
220+
- build
221+
filters:
222+
tags:
223+
only:
224+
- /^v[\d\.]+$/
225+
branches:
226+
only: master
227+
228+
- deploy_pypi:
229+
requires:
230+
- request_permission_for_public_pypi
231+
232+
- install_from_pypi:
233+
requires:
234+
- deploy_pypi

0 commit comments

Comments
 (0)