2018-06-08 18:36:55 +00:00
|
|
|
# https://circleci.com/docs/2.0/
|
|
|
|
|
|
|
|
version: 2
|
|
|
|
workflows:
|
|
|
|
version: 2
|
|
|
|
ci:
|
|
|
|
jobs:
|
2018-06-16 20:06:14 +00:00
|
|
|
- "lint"
|
2018-06-15 18:53:19 +00:00
|
|
|
- "debian-8"
|
2018-06-16 20:06:14 +00:00
|
|
|
- "debian-9"
|
|
|
|
- "ubuntu-16.04"
|
|
|
|
- "ubuntu-18.04"
|
|
|
|
- "centos-7"
|
|
|
|
- "fedora-27"
|
|
|
|
- "fedora-28"
|
2018-07-03 18:52:10 +00:00
|
|
|
- "slackware-14.2"
|
2018-06-08 18:36:55 +00:00
|
|
|
|
2018-06-15 17:34:17 +00:00
|
|
|
- "magic-folder-ubuntu-14.04"
|
2018-06-16 20:06:14 +00:00
|
|
|
- "deprecations"
|
2018-06-19 12:37:18 +00:00
|
|
|
- "c-locale"
|
2018-06-15 12:57:50 +00:00
|
|
|
|
2018-06-08 18:36:55 +00:00
|
|
|
jobs:
|
|
|
|
lint:
|
|
|
|
docker:
|
|
|
|
- image: "circleci/python:2"
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
2018-06-08 18:52:16 +00:00
|
|
|
name: "Install tox"
|
2018-06-08 18:36:55 +00:00
|
|
|
command: |
|
2018-06-08 18:47:00 +00:00
|
|
|
pip install --user tox
|
2018-06-08 18:52:16 +00:00
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Static-ish code checks"
|
|
|
|
command: |
|
2018-06-08 18:47:00 +00:00
|
|
|
~/.local/bin/tox -e codechecks
|
2018-06-08 18:58:25 +00:00
|
|
|
|
2018-06-08 20:19:52 +00:00
|
|
|
debian-8: &DEBIAN
|
2018-06-08 18:58:25 +00:00
|
|
|
docker:
|
|
|
|
- image: "debian:8"
|
|
|
|
|
2018-06-14 16:32:41 +00:00
|
|
|
environment: &UTF_8_ENVIRONMENT
|
|
|
|
# Tell Hypothesis which configuration we want it to use.
|
2018-06-15 12:29:40 +00:00
|
|
|
TAHOE_LAFS_HYPOTHESIS_PROFILE: "ci"
|
2018-06-14 16:32:41 +00:00
|
|
|
# Tell the C runtime things about character encoding (mainly to do with
|
2018-06-14 16:32:49 +00:00
|
|
|
# filenames and argv).
|
2018-06-15 12:29:40 +00:00
|
|
|
LANG: "en_US.UTF-8"
|
2018-06-15 19:34:21 +00:00
|
|
|
# The package name for this software varies somewhat across distros.
|
|
|
|
EXTRA_PACKAGES: "virtualenv"
|
2018-06-14 20:00:02 +00:00
|
|
|
# Select a tox environment to run for this job.
|
2018-06-15 12:29:40 +00:00
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "coverage"
|
2018-06-15 17:34:17 +00:00
|
|
|
# Additional arguments to pass to tox.
|
|
|
|
TAHOE_LAFS_TOX_ARGS: ""
|
2018-06-13 16:36:51 +00:00
|
|
|
|
2018-06-08 18:58:25 +00:00
|
|
|
steps:
|
2018-06-15 18:21:33 +00:00
|
|
|
- run: &INSTALL_GIT
|
2018-06-08 20:07:41 +00:00
|
|
|
node: "Install Git"
|
2018-06-15 18:51:11 +00:00
|
|
|
command: |
|
2018-06-15 18:54:10 +00:00
|
|
|
apt-get --quiet update
|
|
|
|
apt-get --quiet --yes install git
|
2018-06-08 20:07:41 +00:00
|
|
|
|
2018-06-08 18:58:25 +00:00
|
|
|
- "checkout"
|
|
|
|
|
2018-06-15 18:21:33 +00:00
|
|
|
- run: &BOOTSTRAP_TEST_ENVIRONMENT
|
2018-06-08 18:58:25 +00:00
|
|
|
name: "Bootstrap test environment"
|
2018-06-15 18:53:19 +00:00
|
|
|
command: |
|
2018-06-15 19:52:59 +00:00
|
|
|
~/project/.circleci/bootstrap-test-environment.sh ~/project "${EXTRA_PACKAGES}"
|
2018-06-13 15:31:56 +00:00
|
|
|
|
2018-06-14 17:20:48 +00:00
|
|
|
- run: &SETUP_VIRTUALENV
|
|
|
|
name: "Setup virtualenv"
|
|
|
|
# pip cannot install packages if the working directory is not
|
|
|
|
# readable.
|
|
|
|
working_directory: "/tmp"
|
2018-06-15 19:14:55 +00:00
|
|
|
command: |
|
2018-06-15 20:00:27 +00:00
|
|
|
env
|
2018-06-15 20:07:24 +00:00
|
|
|
/tmp/project/.circleci/setup-virtualenv.sh "${TAHOE_LAFS_TOX_ENVIRONMENT}" "${TAHOE_LAFS_TOX_ARGS}"
|
2018-06-08 18:58:25 +00:00
|
|
|
|
2018-06-14 16:32:18 +00:00
|
|
|
- run: &RUN_TESTS
|
2018-06-08 18:58:25 +00:00
|
|
|
name: "Run test suite"
|
2018-06-15 12:54:01 +00:00
|
|
|
# Something about when it re-uses an existing environment blows up
|
|
|
|
# if the working directory is not readable.
|
|
|
|
working_directory: "/tmp"
|
2018-06-15 19:14:55 +00:00
|
|
|
command: |
|
2018-06-15 20:00:27 +00:00
|
|
|
env
|
2018-06-15 20:07:24 +00:00
|
|
|
/tmp/project/.circleci/run-tests.sh "${TAHOE_LAFS_TOX_ENVIRONMENT}" "${TAHOE_LAFS_TOX_ARGS}"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
- store_artifacts: &STORE_TEST_LOG
|
2018-06-14 16:50:51 +00:00
|
|
|
# Despite passing --workdir /tmp to tox above, it still runs trial
|
|
|
|
# in the project source checkout.
|
|
|
|
path: "/tmp/project/_trial_temp/test.log"
|
|
|
|
|
2018-06-15 18:21:33 +00:00
|
|
|
- store_artifacts: &STORE_OTHER_ARTIFACTS
|
2018-06-15 17:20:26 +00:00
|
|
|
# Store any other artifacts, too. This is handy to allow other jobs
|
|
|
|
# sharing most of the definition of this one to be able to
|
|
|
|
# contribute artifacts easily.
|
|
|
|
path: "/tmp/artifacts"
|
|
|
|
|
2018-06-15 18:21:33 +00:00
|
|
|
- run: &SUBMIT_COVERAGE
|
2018-06-14 17:20:48 +00:00
|
|
|
name: "Submit coverage results"
|
2018-06-16 14:19:45 +00:00
|
|
|
working_directory: "/tmp/project"
|
2018-06-14 17:20:48 +00:00
|
|
|
command: |
|
|
|
|
/tmp/tests/bin/codecov
|
|
|
|
|
2018-06-14 15:43:59 +00:00
|
|
|
|
2018-06-08 19:52:29 +00:00
|
|
|
debian-9:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *DEBIAN
|
2018-06-08 19:52:29 +00:00
|
|
|
docker:
|
|
|
|
- image: "debian:9"
|
|
|
|
|
2018-06-13 17:59:52 +00:00
|
|
|
|
2018-06-19 12:37:18 +00:00
|
|
|
c-locale:
|
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
|
|
|
- image: "debian:9"
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
LANG: "C"
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-06-15 12:57:50 +00:00
|
|
|
deprecations:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *DEBIAN
|
2018-06-15 12:57:50 +00:00
|
|
|
docker:
|
|
|
|
- image: "debian:9"
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
2018-06-15 15:36:15 +00:00
|
|
|
# Select the deprecations tox environments.
|
2018-06-15 12:57:50 +00:00
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "deprecations,upcoming-deprecations"
|
2018-06-15 17:20:26 +00:00
|
|
|
# Put the logs somewhere we can report them.
|
|
|
|
TAHOE_LAFS_WARNINGS_LOG: "/tmp/artifacts/deprecation-warnings.log"
|
2018-06-15 12:57:50 +00:00
|
|
|
|
|
|
|
|
2018-06-14 15:44:39 +00:00
|
|
|
ubuntu-16.04:
|
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
|
|
|
- image: "ubuntu:16.04"
|
|
|
|
|
2018-06-14 16:32:49 +00:00
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
# Necessary for en_US LANG setting.
|
2018-06-15 19:34:21 +00:00
|
|
|
EXTRA_PACKAGES: "virtualenv language-pack-en"
|
2018-06-14 16:32:49 +00:00
|
|
|
|
2018-06-14 15:44:39 +00:00
|
|
|
|
2018-06-14 14:46:45 +00:00
|
|
|
ubuntu-18.04:
|
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
|
|
|
- image: "ubuntu:18.04"
|
|
|
|
|
2018-06-15 18:01:42 +00:00
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
# Necessary for automatic address detection/assignment.
|
2018-06-15 19:34:21 +00:00
|
|
|
EXTRA_PACKAGES: "virtualenv iproute2"
|
2018-06-15 18:01:42 +00:00
|
|
|
|
2018-06-14 14:46:45 +00:00
|
|
|
|
2018-06-14 14:09:42 +00:00
|
|
|
centos-7: &RHEL_DERIV
|
2018-06-13 17:59:52 +00:00
|
|
|
docker:
|
|
|
|
- image: "centos:7"
|
|
|
|
|
2018-06-14 16:32:49 +00:00
|
|
|
environment: *UTF_8_ENVIRONMENT
|
2018-06-13 17:59:52 +00:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
node: "Install Git"
|
|
|
|
command: |
|
|
|
|
yum install --assumeyes git
|
|
|
|
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Bootstrap test environment"
|
|
|
|
working_directory: "/tmp"
|
|
|
|
command: |
|
|
|
|
# Avoid the /nonexistent home directory in nobody's /etc/passwd
|
|
|
|
# entry.
|
|
|
|
usermod --home /tmp/nobody nobody
|
|
|
|
|
|
|
|
# Grant read access to nobody, the user which will eventually try
|
|
|
|
# to test this checkout.
|
|
|
|
mv /root/project /tmp/project
|
|
|
|
|
|
|
|
# Python build/install toolchain wants to write to the source
|
|
|
|
# checkout, too.
|
|
|
|
chown --recursive nobody:nobody /tmp/project
|
|
|
|
|
|
|
|
yum install --assumeyes \
|
|
|
|
sudo \
|
|
|
|
make automake gcc gcc-c++ \
|
|
|
|
python \
|
|
|
|
python-devel \
|
|
|
|
libffi-devel \
|
|
|
|
openssl-devel \
|
|
|
|
libyaml-devel \
|
|
|
|
python-virtualenv
|
|
|
|
|
|
|
|
# XXX net-tools is actually a Tahoe-LAFS runtime dependency!
|
|
|
|
yum install --assumeyes \
|
|
|
|
net-tools
|
|
|
|
|
2018-06-14 17:20:48 +00:00
|
|
|
- run: *SETUP_VIRTUALENV
|
2018-06-14 17:05:08 +00:00
|
|
|
- run: *RUN_TESTS
|
2018-06-14 14:09:42 +00:00
|
|
|
|
2018-06-15 18:21:33 +00:00
|
|
|
- store_artifacts: *STORE_TEST_LOG
|
|
|
|
- store_artifacts: *STORE_OTHER_ARTIFACTS
|
|
|
|
- run: *SUBMIT_COVERAGE
|
2018-06-14 16:50:51 +00:00
|
|
|
|
2018-06-15 15:07:56 +00:00
|
|
|
|
2018-06-14 14:09:42 +00:00
|
|
|
fedora-27:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *RHEL_DERIV
|
2018-06-14 14:09:42 +00:00
|
|
|
docker:
|
|
|
|
- image: "fedora:27"
|
|
|
|
|
2018-06-14 14:11:49 +00:00
|
|
|
|
|
|
|
fedora-28:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *RHEL_DERIV
|
2018-06-14 14:11:49 +00:00
|
|
|
docker:
|
2018-06-15 17:34:17 +00:00
|
|
|
- image: "fedora"
|
|
|
|
|
|
|
|
|
2018-07-03 18:52:10 +00:00
|
|
|
slackware-14.2:
|
|
|
|
docker:
|
|
|
|
- image: "vbatts/slackware:14.2"
|
|
|
|
|
|
|
|
environment: *UTF_8_ENVIRONMENT
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- run:
|
|
|
|
node: "Install Git"
|
|
|
|
command: |
|
|
|
|
slackpkg update
|
2018-07-03 19:36:26 +00:00
|
|
|
slackpkg install openssh-7.4p1 git-2.14.4 </dev/null
|
2018-07-03 18:52:10 +00:00
|
|
|
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Bootstrap test environment"
|
|
|
|
working_directory: "/tmp"
|
|
|
|
command: |
|
|
|
|
# Avoid the /nonexistent home directory in nobody's /etc/passwd
|
|
|
|
# entry.
|
|
|
|
usermod --home /tmp/nobody nobody
|
|
|
|
|
|
|
|
# Grant read access to nobody, the user which will eventually try
|
|
|
|
# to test this checkout.
|
|
|
|
mv /root/project /tmp/project
|
|
|
|
|
|
|
|
# Python build/install toolchain wants to write to the source
|
|
|
|
# checkout, too.
|
|
|
|
chown --recursive nobody:nobody /tmp/project
|
|
|
|
|
|
|
|
slackpkg install \
|
2018-07-03 19:36:26 +00:00
|
|
|
sudo-1.8.20p2 \
|
|
|
|
make-4.1 \
|
|
|
|
automake-1.15 \
|
|
|
|
gcc-5.5.0 \
|
|
|
|
gcc-c++-5.5.0 \
|
|
|
|
python-2.7.15 \
|
|
|
|
libffi-3.2.1 \
|
|
|
|
openssl-solibs \
|
|
|
|
libyaml-0.1.6 </dev/null
|
|
|
|
|
2018-07-03 19:40:48 +00:00
|
|
|
# neither virtualenv nor pip is packaged.
|
|
|
|
# do it the hard way.
|
|
|
|
# and it is extra hard since it is slackware.
|
|
|
|
slackpkg install \
|
|
|
|
cyrus-sasl-2.1.26 \
|
|
|
|
curl-7.60 </dev/null
|
2018-07-03 19:36:26 +00:00
|
|
|
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
|
|
|
|
python get-pip.py
|
|
|
|
pip install virtualenv
|
2018-07-03 18:52:10 +00:00
|
|
|
|
|
|
|
- run: *SETUP_VIRTUALENV
|
|
|
|
- run: *RUN_TESTS
|
|
|
|
|
|
|
|
- store_artifacts: *STORE_TEST_LOG
|
|
|
|
- store_artifacts: *STORE_OTHER_ARTIFACTS
|
|
|
|
- run: *SUBMIT_COVERAGE
|
|
|
|
|
|
|
|
|
2018-06-15 17:34:17 +00:00
|
|
|
magic-folder-ubuntu-14.04:
|
|
|
|
machine:
|
|
|
|
enabled: true
|
|
|
|
image: "circleci/classic:201711-01"
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
2018-06-15 19:34:21 +00:00
|
|
|
EXTRA_PACKAGES: "python-virtualenv"
|
2018-06-15 17:34:17 +00:00
|
|
|
TAHOE_LAFS_TOX_ARGS: "-- allmydata.test.test_magic_folder"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
# Unfortunately, duplicate all the steps here but run with `sudo`.
|
|
|
|
steps:
|
2018-06-15 18:55:57 +00:00
|
|
|
- run:
|
|
|
|
node: "Install Git"
|
|
|
|
command: |
|
|
|
|
sudo apt-get --quiet update
|
|
|
|
sudo apt-get --quiet --yes install git
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
|
|
|
<<: *BOOTSTRAP_TEST_ENVIRONMENT
|
2018-06-15 18:53:19 +00:00
|
|
|
command: |
|
2018-06-15 19:40:50 +00:00
|
|
|
sudo ~/project/.circleci/bootstrap-test-environment.sh ~/project "${EXTRA_PACKAGES}"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
- run:
|
|
|
|
<<: *SETUP_VIRTUALENV
|
2018-06-15 19:14:55 +00:00
|
|
|
command: |
|
2018-06-15 20:00:27 +00:00
|
|
|
env
|
2018-06-15 20:07:24 +00:00
|
|
|
sudo /tmp/project/.circleci/setup-virtualenv.sh "${TAHOE_LAFS_TOX_ENVIRONMENT}" "${TAHOE_LAFS_TOX_ARGS}"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
- run:
|
|
|
|
<<: *RUN_TESTS
|
2018-06-15 19:14:55 +00:00
|
|
|
command: |
|
2018-06-15 20:00:27 +00:00
|
|
|
env
|
2018-06-15 20:07:24 +00:00
|
|
|
sudo /tmp/project/.circleci/run-tests.sh "${TAHOE_LAFS_TOX_ENVIRONMENT}" "${TAHOE_LAFS_TOX_ARGS}"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
|
|
|
- store_artifacts: *STORE_TEST_LOG
|
|
|
|
- store_artifacts: *STORE_OTHER_ARTIFACTS
|
|
|
|
- run: *SUBMIT_COVERAGE
|