tahoe-lafs/.circleci/config.yml

244 lines
6.6 KiB
YAML
Raw Normal View History

# https://circleci.com/docs/2.0/
version: 2
workflows:
version: 2
ci:
jobs:
- "lint"
2018-06-08 19:52:29 +00:00
- "debian-8"
- "debian-9"
2018-06-14 15:44:39 +00:00
- "ubuntu-16.04"
2018-06-14 14:46:45 +00:00
- "ubuntu-18.04"
2018-06-13 17:59:52 +00:00
- "centos-7"
2018-06-14 14:09:42 +00:00
- "fedora-27"
2018-06-14 14:11:49 +00:00
- "fedora-28"
2018-06-15 17:34:17 +00:00
- "magic-folder-ubuntu-14.04"
2018-06-15 12:57:50 +00:00
- "deprecations"
jobs:
lint:
docker:
- image: "circleci/python:2"
steps:
- "checkout"
- run:
name: "Install tox"
command: |
2018-06-08 18:47:00 +00:00
pip install --user tox
- 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
debian-8: &DEBIAN
2018-06-08 18:58:25 +00:00
docker:
- image: "debian:8"
environment: &UTF_8_ENVIRONMENT
# Tell Hypothesis which configuration we want it to use.
TAHOE_LAFS_HYPOTHESIS_PROFILE: "ci"
# Tell the C runtime things about character encoding (mainly to do with
2018-06-14 16:32:49 +00:00
# filenames and argv).
LANG: "en_US.UTF-8"
# Select a tox environment to run for this job.
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:
- run:
node: "Install Git"
command: |
apt-get --quiet update
apt-get --quiet --yes install git
2018-06-08 18:58:25 +00:00
- "checkout"
- run:
name: "Bootstrap test environment"
command: |
2018-06-13 15:31:56 +00:00
# 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:nogroup /tmp/project
2018-06-08 18:58:25 +00:00
apt-get --quiet --yes install \
2018-06-13 15:31:56 +00:00
sudo \
2018-06-08 18:58:25 +00:00
build-essential \
python2.7 \
python2.7-dev \
libffi-dev \
libssl-dev \
libyaml-dev \
2018-06-14 16:32:49 +00:00
virtualenv \
${EXTRA_PACKAGES}
2018-06-13 15:31:56 +00:00
- run: &SETUP_VIRTUALENV
name: "Setup virtualenv"
# pip cannot install packages if the working directory is not
# readable.
working_directory: "/tmp"
command: |
2018-06-13 15:31:56 +00:00
# Set up the virtualenv as a non-root user so we can run the test
# suite as a non-root user. See below.
2018-06-14 16:32:49 +00:00
sudo --set-home -u nobody virtualenv --python python2.7 /tmp/tests
sudo --set-home -u nobody /tmp/tests/bin/pip install tox codecov
# Get everything installed in it, too.
2018-06-15 17:34:17 +00:00
sudo --set-home -u nobody /tmp/tests/bin/tox -c /tmp/project/tox.ini --workdir /tmp --notest -e "${TAHOE_LAFS_TOX_ENVIRONMENT}" ${TAHOE_LAFS_TOX_ARGS}
2018-06-08 18:58:25 +00:00
- run: &RUN_TESTS
2018-06-08 18:58:25 +00:00
name: "Run test suite"
# Something about when it re-uses an existing environment blows up
# if the working directory is not readable.
working_directory: "/tmp"
command: |
2018-06-13 15:31:56 +00:00
# Run the test suite as a non-root user. This is the expected
# usage some small areas of the test suite assume non-root
# privileges (such as unreadable files being unreadable).
#
# Also run with /tmp as a workdir because the non-root user won't
# be able to create the tox working filesystem state in the source
# checkout because it is owned by root.
sudo --set-home -u nobody /tmp/tests/bin/tox -c /tmp/project/tox.ini --workdir /tmp -e ${TAHOE_LAFS_TOX_ENVIRONMENT}
2018-06-08 19:52:29 +00:00
- store_artifacts: &STORE_ARTIFACTS
# Despite passing --workdir /tmp to tox above, it still runs trial
# in the project source checkout.
path: "/tmp/project/_trial_temp/test.log"
- store_artifacts:
# 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"
- run:
name: "Submit coverage results"
command: |
/tmp/tests/bin/codecov
2018-06-14 15:43:59 +00:00
2018-06-08 19:52:29 +00:00
debian-9:
<<: *DEBIAN
2018-06-08 19:52:29 +00:00
docker:
- image: "debian:9"
2018-06-13 17:59:52 +00:00
2018-06-15 12:57:50 +00:00
deprecations:
<<: *DEBIAN
2018-06-15 12:57:50 +00:00
docker:
- image: "debian:9"
environment:
<<: *UTF_8_ENVIRONMENT
# Select the deprecations tox environments.
2018-06-15 12:57:50 +00:00
TAHOE_LAFS_TOX_ENVIRONMENT: "deprecations,upcoming-deprecations"
# 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.
EXTRA_PACKAGES: "language-pack-en"
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-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
- run: *SETUP_VIRTUALENV
- run: *RUN_TESTS
2018-06-14 14:09:42 +00:00
- store_artifacts: *STORE_ARTIFACTS
2018-06-14 14:09:42 +00:00
fedora-27:
<<: *RHEL_DERIV
2018-06-14 14:09:42 +00:00
docker:
- image: "fedora:27"
2018-06-14 14:11:49 +00:00
fedora-28:
<<: *RHEL_DERIV
2018-06-14 14:11:49 +00:00
docker:
2018-06-15 17:34:17 +00:00
- image: "fedora"
magic-folder-ubuntu-14.04:
<<: *DEBIAN
# Turn off the inherited docker executor.
docker: null
machine:
enabled: true
image: "circleci/classic:201711-01"
environment:
<<: *UTF_8_ENVIRONMENT
TAHOE_LAFS_TOX_ARGS: "-- allmydata.test.test_magic_folder"