Skip to content

Commit 95a3bc8

Browse files
committed
Add CircleCI
1 parent 566e62d commit 95a3bc8

2 files changed

Lines changed: 202 additions & 0 deletions

File tree

.circleci/config.yml

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
version: 2.1
2+
3+
orbs:
4+
codeclimate: rohanpm/codeclimate@1.0.0
5+
6+
parameter-templates: &parameter-templates
7+
py-version: &py-version-template
8+
description: "Python version to be used in the executor"
9+
default: "3.7"
10+
type: enum
11+
enum:
12+
- "2.7"
13+
- "3.4"
14+
- "3.5"
15+
- "3.6"
16+
- "3.7"
17+
18+
executors:
19+
linux-docker:
20+
parameters:
21+
py-version:
22+
<<: *py-version-template
23+
working_directory: ~/pytest-sftpserver
24+
environment:
25+
PY_VERSION: << parameters.py-version >>
26+
CC_TEST_REPORTER_ID: a5d30104a199142891dfdc6a6e2280d45df4d684f0ea215e8a4b354d66bf665c
27+
docker:
28+
- image: circleci/python:<< parameters.py-version >>
29+
30+
jobs:
31+
prepare:
32+
executor:
33+
name: linux-docker
34+
steps:
35+
- checkout
36+
- persist_to_workspace:
37+
root: "~"
38+
paths:
39+
- pytest-sftpserver
40+
41+
lint:
42+
parameters:
43+
py-version:
44+
<<: *py-version-template
45+
skip-black:
46+
description: "Skip running black on old Python versions"
47+
type: boolean
48+
default: false
49+
executor:
50+
name: linux-docker
51+
py-version: << parameters.py-version >>
52+
steps:
53+
- attach_workspace:
54+
at: "~"
55+
- restore_cache:
56+
keys:
57+
- v1-pip-cache-<< parameters.py-version >>-{{ checksum "requirements-dev.txt" }}
58+
- v1-pip-cache-<< parameters.py-version >>-
59+
- run:
60+
name: Install deps
61+
command: |
62+
pip install --user -r requirements-dev.txt
63+
echo 'export PATH=~/.local/bin:${PATH}' >> ${BASH_ENV}
64+
- when:
65+
name: Workaround for black on old Python versions
66+
condition: << parameters.skip-black >>
67+
steps:
68+
- run:
69+
name: Link dummy black
70+
command: ln -s /bin/true ~/.local/bin/black
71+
- run:
72+
name: Lint
73+
command: make lint
74+
- save_cache:
75+
key: v1-pip-cache-<< parameters.py-version >>-{{ checksum "requirements-dev.txt" }}
76+
paths:
77+
- "~/.cache/pip"
78+
79+
test:
80+
parameters:
81+
py-version:
82+
<<: *py-version-template
83+
executor:
84+
name: linux-docker
85+
py-version: << parameters.py-version >>
86+
steps:
87+
- attach_workspace:
88+
at: "~"
89+
- codeclimate/install_cc_test_reporter
90+
- run:
91+
name: Set Python version
92+
command: 'echo "export TOXENV=py${PY_VERSION/./}" >> ${BASH_ENV}'
93+
- restore_cache:
94+
keys:
95+
- v1-pip-cache-<< parameters.py-version >>-{{ checksum "requirements-dev.txt" }}
96+
- v1-pip-cache-<< parameters.py-version >>-
97+
- run:
98+
name: Install deps
99+
command: |
100+
pip install --user tox
101+
echo 'export PATH=~/.local/bin:${PATH}' >> ${BASH_ENV}
102+
- restore_cache:
103+
keys:
104+
- v1-tox-<< parameters.py-version >>-{{ checksum "requirements-dev.txt" }}-{{ checksum "setup.py" }}
105+
- v1-tox-<< parameters.py-version >>-
106+
- run:
107+
name: Prepare Code Climate
108+
command: cc-test-reporter before-build
109+
- run:
110+
name: Run tests
111+
command: tox
112+
- save_cache:
113+
key: v1-tox-<< parameters.py-version >>-{{ checksum "requirements-dev.txt" }}-{{ checksum "setup.py" }}
114+
paths:
115+
- "~/pytest-sftpserver/.tox"
116+
- persist_to_workspace:
117+
root: "~"
118+
paths:
119+
- "pytest-sftpserver/.coverage.*"
120+
121+
finalize:
122+
executor:
123+
name: linux-docker
124+
steps:
125+
- attach_workspace:
126+
at: "~"
127+
- codeclimate/install_cc_test_reporter
128+
- run:
129+
name: Install coverage
130+
command: |
131+
pip install --user coverage
132+
echo 'export PATH=~/.local/bin:${PATH}' >> ${BASH_ENV}
133+
- run:
134+
name: Merge coverage
135+
command: |
136+
coverage combine
137+
coverage xml
138+
- run:
139+
name: Report to Code Climate
140+
command: cc-test-reporter after-build
141+
142+
workflows:
143+
pr:
144+
jobs:
145+
- prepare
146+
147+
- lint:
148+
name: lint-2.7
149+
py-version: "2.7"
150+
skip-black: true
151+
requires:
152+
- prepare
153+
- lint:
154+
name: lint-3.5
155+
py-version: "3.5"
156+
skip-black: true
157+
requires:
158+
- prepare
159+
- lint:
160+
name: lint-3.6
161+
py-version: "3.6"
162+
requires:
163+
- prepare
164+
- lint:
165+
name: lint-3.7
166+
py-version: "3.7"
167+
requires:
168+
- prepare
169+
170+
- test:
171+
name: test-2.7
172+
py-version: "2.7"
173+
requires:
174+
- lint-2.7
175+
- test:
176+
name: test-3.5
177+
py-version: "3.5"
178+
requires:
179+
- lint-3.5
180+
- test:
181+
name: test-3.6
182+
py-version: "3.6"
183+
requires:
184+
- lint-3.6
185+
- test:
186+
name: test-3.7
187+
py-version: "3.7"
188+
requires:
189+
- lint-3.7
190+
191+
- finalize:
192+
requires:
193+
- test-2.7
194+
- test-3.5
195+
- test-3.6
196+
- test-3.7

requirements-dev.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
black==19.3b0;python_version>="3.6"
2+
flake8==3.7.8
3+
flake8-bugbear==19.8.0;python_version>="3.5"
4+
flake8-tuple==0.4.0
5+
isort==4.3.21
6+
tox

0 commit comments

Comments
 (0)