2018-06-08 18:36:55 +00:00
|
|
|
# https://circleci.com/docs/2.0/
|
|
|
|
|
2020-09-14 11:38:54 +00:00
|
|
|
# We use version 2.1 of CircleCI's configuration format (the docs are still at
|
|
|
|
# the 2.0 link) in order to have access to Windows executors. This means we
|
|
|
|
# can't use dots in job names anymore. They have a new "parameters" feature
|
|
|
|
# that is supposed to remove the need to have version numbers in job names (the
|
|
|
|
# source of our dots), but switching to that is going to be a bigger refactor:
|
|
|
|
#
|
|
|
|
# https://discuss.circleci.com/t/v2-1-job-name-validation/31123
|
|
|
|
# https://circleci.com/docs/2.0/reusing-config/
|
|
|
|
#
|
2020-09-14 11:12:47 +00:00
|
|
|
version: 2.1
|
2020-09-14 11:38:54 +00:00
|
|
|
|
2018-06-08 18:36:55 +00:00
|
|
|
workflows:
|
|
|
|
ci:
|
|
|
|
jobs:
|
2020-10-22 16:04:59 +00:00
|
|
|
# Start with jobs testing various platforms.
|
2021-08-11 11:40:16 +00:00
|
|
|
- "debian-9":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2021-02-11 20:59:51 +00:00
|
|
|
- "debian-10":
|
2020-08-10 13:16:19 +00:00
|
|
|
requires:
|
|
|
|
- "debian-9"
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2020-10-22 16:04:59 +00:00
|
|
|
- "ubuntu-20-04":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-09-14 11:30:10 +00:00
|
|
|
- "ubuntu-18-04":
|
2020-08-07 18:59:27 +00:00
|
|
|
requires:
|
2020-09-14 11:30:10 +00:00
|
|
|
- "ubuntu-20-04"
|
|
|
|
- "ubuntu-16-04":
|
2020-08-10 13:16:19 +00:00
|
|
|
requires:
|
2020-09-14 11:30:10 +00:00
|
|
|
- "ubuntu-20-04"
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2020-10-22 16:04:59 +00:00
|
|
|
- "fedora-29":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-08-10 13:16:19 +00:00
|
|
|
- "fedora-28":
|
|
|
|
requires:
|
|
|
|
- "fedora-29"
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2020-10-22 16:04:59 +00:00
|
|
|
- "centos-8":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2022-01-27 20:35:23 +00:00
|
|
|
- "nixos":
|
2022-01-27 20:37:12 +00:00
|
|
|
name: "NixOS 21.05"
|
2022-01-27 20:35:23 +00:00
|
|
|
nixpkgs: "21.05"
|
2019-12-13 15:39:15 +00:00
|
|
|
|
2022-01-27 20:35:23 +00:00
|
|
|
- "nixos":
|
2022-01-27 20:37:12 +00:00
|
|
|
name: "NixOS 21.11"
|
2022-01-27 20:35:23 +00:00
|
|
|
nixpkgs: "21.11"
|
2021-09-29 19:16:01 +00:00
|
|
|
|
2020-08-10 13:16:19 +00:00
|
|
|
# Test against PyPy 2.7
|
2020-10-22 16:04:59 +00:00
|
|
|
- "pypy27-buster":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2022-01-24 15:40:26 +00:00
|
|
|
# Test against Python 3:
|
|
|
|
- "python37":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-07-17 17:48:08 +00:00
|
|
|
|
2020-08-10 13:16:19 +00:00
|
|
|
# Other assorted tasks and configurations
|
2020-10-22 16:04:59 +00:00
|
|
|
- "lint":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2021-08-11 14:25:49 +00:00
|
|
|
- "codechecks3":
|
|
|
|
{}
|
2020-10-22 16:04:59 +00:00
|
|
|
- "pyinstaller":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-10-22 16:04:59 +00:00
|
|
|
- "deprecations":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-10-22 16:04:59 +00:00
|
|
|
- "c-locale":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2020-08-10 13:16:19 +00:00
|
|
|
# Any locale other than C or UTF-8.
|
2020-10-22 16:04:59 +00:00
|
|
|
- "another-locale":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2019-09-13 17:09:36 +00:00
|
|
|
|
2020-08-10 13:16:19 +00:00
|
|
|
- "integration":
|
|
|
|
requires:
|
|
|
|
# If the unit test suite doesn't pass, don't bother running the
|
|
|
|
# integration tests.
|
|
|
|
- "debian-9"
|
2019-01-24 15:20:47 +00:00
|
|
|
|
2020-12-04 15:34:21 +00:00
|
|
|
- "typechecks":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2021-03-19 19:55:19 +00:00
|
|
|
- "docs":
|
2021-08-11 11:45:45 +00:00
|
|
|
{}
|
2021-03-19 19:55:19 +00:00
|
|
|
|
2020-10-22 21:00:02 +00:00
|
|
|
images:
|
|
|
|
# Build the Docker images used by the ci jobs. This makes the ci jobs
|
|
|
|
# faster and takes various spurious failures out of the critical path.
|
|
|
|
triggers:
|
|
|
|
# Build once a day
|
2022-01-24 16:06:58 +00:00
|
|
|
- schedule:
|
|
|
|
cron: "0 0 * * *"
|
|
|
|
filters:
|
|
|
|
branches:
|
|
|
|
only:
|
|
|
|
- "master"
|
2019-04-04 20:54:22 +00:00
|
|
|
|
2020-10-22 21:00:02 +00:00
|
|
|
jobs:
|
2021-08-11 11:41:59 +00:00
|
|
|
# Every job that pushes a Docker image from Docker Hub needs to provide
|
|
|
|
# credentials. Use this first job to define a yaml anchor that can be
|
|
|
|
# used to supply a CircleCI job context which makes Docker Hub
|
|
|
|
# credentials available in the environment.
|
|
|
|
#
|
|
|
|
# Contexts are managed in the CircleCI web interface:
|
|
|
|
#
|
|
|
|
# https://app.circleci.com/settings/organization/github/tahoe-lafs/contexts
|
|
|
|
- "build-image-debian-10": &DOCKERHUB_CONTEXT
|
|
|
|
context: "dockerhub-auth"
|
2020-10-22 16:04:59 +00:00
|
|
|
- "build-image-debian-9":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-ubuntu-16-04":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-ubuntu-18-04":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-ubuntu-20-04":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-fedora-28":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-fedora-29":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-centos-8":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
|
|
|
- "build-image-pypy27-buster":
|
|
|
|
<<: *DOCKERHUB_CONTEXT
|
2022-01-24 15:40:26 +00:00
|
|
|
- "build-image-python37-ubuntu":
|
2020-10-22 16:04:59 +00:00
|
|
|
<<: *DOCKERHUB_CONTEXT
|
2019-04-04 20:54:22 +00:00
|
|
|
|
2018-06-15 12:57:50 +00:00
|
|
|
|
2018-06-08 18:36:55 +00:00
|
|
|
jobs:
|
2020-10-22 16:08:30 +00:00
|
|
|
dockerhub-auth-template:
|
|
|
|
# This isn't a real job. It doesn't get scheduled as part of any
|
2020-10-22 16:27:22 +00:00
|
|
|
# workflow. Instead, it's just a place we can hang a yaml anchor to
|
2020-10-22 16:08:30 +00:00
|
|
|
# finish the Docker Hub authentication configuration. Workflow jobs using
|
|
|
|
# the DOCKERHUB_CONTEXT anchor will have access to the environment
|
|
|
|
# variables used here. These variables will allow the Docker Hub image
|
|
|
|
# pull to be authenticated and hopefully avoid hitting and rate limits.
|
2020-10-22 16:21:11 +00:00
|
|
|
docker: &DOCKERHUB_AUTH
|
2020-10-22 16:08:30 +00:00
|
|
|
- image: "null"
|
2020-10-22 16:21:11 +00:00
|
|
|
auth:
|
2020-10-22 16:08:30 +00:00
|
|
|
username: $DOCKERHUB_USERNAME
|
|
|
|
password: $DOCKERHUB_PASSWORD
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- run:
|
2020-10-22 18:46:26 +00:00
|
|
|
name: "CircleCI YAML schema conformity"
|
2020-10-22 16:08:30 +00:00
|
|
|
command: |
|
2020-10-22 18:46:26 +00:00
|
|
|
# This isn't a real command. We have to have something in this
|
|
|
|
# space, though, or the CircleCI yaml schema validator gets angry.
|
|
|
|
# Since this job is never scheduled this step is never run so the
|
|
|
|
# actual value here is irrelevant.
|
2020-10-22 16:08:30 +00:00
|
|
|
|
2021-08-11 14:25:42 +00:00
|
|
|
lint:
|
2020-10-22 16:08:30 +00:00
|
|
|
docker:
|
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "circleci/python:2"
|
2018-06-08 18:36:55 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
2021-08-11 13:50:23 +00:00
|
|
|
codechecks3:
|
|
|
|
docker:
|
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "circleci/python:3"
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Install tox"
|
|
|
|
command: |
|
|
|
|
pip install --user tox
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Static-ish code checks"
|
|
|
|
command: |
|
|
|
|
~/.local/bin/tox -e codechecks3
|
|
|
|
|
2019-10-04 15:39:14 +00:00
|
|
|
pyinstaller:
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "circleci/python:2"
|
2019-10-04 15:39:14 +00:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Install tox"
|
|
|
|
command: |
|
|
|
|
pip install --user tox
|
|
|
|
|
|
|
|
- run:
|
|
|
|
name: "Make PyInstaller executable"
|
|
|
|
command: |
|
|
|
|
~/.local/bin/tox -e pyinstaller
|
|
|
|
|
|
|
|
- run:
|
2019-10-07 15:31:29 +00:00
|
|
|
# To verify that the resultant PyInstaller-generated binary executes
|
|
|
|
# cleanly (i.e., that it terminates with an exit code of 0 and isn't
|
|
|
|
# failing due to import/packaging-related errors, etc.).
|
2019-10-04 15:39:14 +00:00
|
|
|
name: "Test PyInstaller executable"
|
|
|
|
command: |
|
|
|
|
dist/Tahoe-LAFS/tahoe --version
|
|
|
|
|
2019-01-23 23:15:25 +00:00
|
|
|
debian-9: &DEBIAN
|
2018-06-08 18:58:25 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/debian:9-py2.7"
|
2019-04-04 16:52:35 +00:00
|
|
|
user: "nobody"
|
2018-06-08 18:58:25 +00:00
|
|
|
|
2018-06-14 16:32:41 +00:00
|
|
|
environment: &UTF_8_ENVIRONMENT
|
2019-06-25 18:50:42 +00:00
|
|
|
# In general, the test suite is not allowed to fail while the job
|
|
|
|
# succeeds. But you can set this to "yes" if you want it to be
|
|
|
|
# otherwise.
|
|
|
|
ALLOWED_FAILURE: "no"
|
2018-06-14 16:32:41 +00:00
|
|
|
# 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-14 20:00:02 +00:00
|
|
|
# Select a tox environment to run for this job.
|
2021-01-05 20:58:21 +00:00
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "py27"
|
2018-06-15 17:34:17 +00:00
|
|
|
# Additional arguments to pass to tox.
|
2018-07-09 19:55:32 +00:00
|
|
|
TAHOE_LAFS_TOX_ARGS: ""
|
2019-01-24 21:04:26 +00:00
|
|
|
# The path in which test artifacts will be placed.
|
|
|
|
ARTIFACTS_OUTPUT_PATH: "/tmp/artifacts"
|
2018-07-09 17:32:59 +00:00
|
|
|
# Convince all of our pip invocations to look at the cached wheelhouse
|
|
|
|
# we maintain.
|
|
|
|
WHEELHOUSE_PATH: &WHEELHOUSE_PATH "/tmp/wheelhouse"
|
|
|
|
PIP_FIND_LINKS: "file:///tmp/wheelhouse"
|
2020-10-14 16:58:15 +00:00
|
|
|
# Upload the coverage report.
|
2021-01-05 20:58:21 +00:00
|
|
|
UPLOAD_COVERAGE: ""
|
2018-06-13 16:36:51 +00:00
|
|
|
|
2019-04-04 15:44:27 +00:00
|
|
|
# pip cannot install packages if the working directory is not readable.
|
|
|
|
# We want to run a lot of steps as nobody instead of as root.
|
2019-04-04 15:45:16 +00:00
|
|
|
working_directory: "/tmp/project"
|
2019-04-04 15:44:27 +00:00
|
|
|
|
2018-06-08 18:58:25 +00:00
|
|
|
steps:
|
|
|
|
- "checkout"
|
2018-06-14 17:20:48 +00:00
|
|
|
- run: &SETUP_VIRTUALENV
|
|
|
|
name: "Setup virtualenv"
|
2018-06-15 19:14:55 +00:00
|
|
|
command: |
|
2019-04-04 16:52:35 +00:00
|
|
|
/tmp/project/.circleci/setup-virtualenv.sh \
|
2019-04-04 16:07:32 +00:00
|
|
|
"/tmp/venv" \
|
|
|
|
"/tmp/project" \
|
2019-04-04 16:15:35 +00:00
|
|
|
"${WHEELHOUSE_PATH}" \
|
2018-07-06 15:32:12 +00:00
|
|
|
"${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 19:14:55 +00:00
|
|
|
command: |
|
2018-07-06 15:28:52 +00:00
|
|
|
/tmp/project/.circleci/run-tests.sh \
|
2019-04-04 16:07:32 +00:00
|
|
|
"/tmp/venv" \
|
|
|
|
"/tmp/project" \
|
2019-06-25 18:50:42 +00:00
|
|
|
"${ALLOWED_FAILURE}" \
|
2019-01-24 21:04:26 +00:00
|
|
|
"${ARTIFACTS_OUTPUT_PATH}" \
|
2018-07-06 15:28:52 +00:00
|
|
|
"${TAHOE_LAFS_TOX_ENVIRONMENT}" \
|
|
|
|
"${TAHOE_LAFS_TOX_ARGS}"
|
2018-07-08 23:06:34 +00:00
|
|
|
# trial output gets directed straight to a log. avoid the circleci
|
|
|
|
# timeout while the test suite runs.
|
|
|
|
no_output_timeout: "20m"
|
2018-06-15 18:21:33 +00:00
|
|
|
|
2018-07-05 18:19:23 +00:00
|
|
|
- store_test_results: &STORE_TEST_RESULTS
|
2018-07-06 14:59:10 +00:00
|
|
|
path: "/tmp/artifacts/junit"
|
2018-07-05 18:19:23 +00:00
|
|
|
|
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"
|
|
|
|
|
2021-09-08 13:14:47 +00:00
|
|
|
- store_artifacts: &STORE_ELIOT_LOG
|
|
|
|
# Despite passing --workdir /tmp to tox above, it still runs trial
|
|
|
|
# in the project source checkout.
|
|
|
|
path: "/tmp/project/eliot.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"
|
|
|
|
command: |
|
2020-10-16 10:54:06 +00:00
|
|
|
if [ -n "${UPLOAD_COVERAGE}" ]; then
|
|
|
|
/tmp/venv/bin/codecov
|
|
|
|
fi
|
2018-06-14 17:20:48 +00:00
|
|
|
|
2018-06-14 15:43:59 +00:00
|
|
|
|
2021-02-11 20:59:51 +00:00
|
|
|
debian-10:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *DEBIAN
|
2018-06-08 19:52:29 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
2021-02-11 20:59:51 +00:00
|
|
|
image: "tahoelafsci/debian:10-py2.7"
|
2019-04-04 17:16:28 +00:00
|
|
|
user: "nobody"
|
2019-06-25 17:12:57 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
pypy27-buster:
|
2019-06-25 17:12:57 +00:00
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/pypy:buster-py2"
|
2019-06-25 17:12:57 +00:00
|
|
|
user: "nobody"
|
2018-06-08 19:52:29 +00:00
|
|
|
|
2019-06-25 18:16:26 +00:00
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
2020-09-04 16:05:31 +00:00
|
|
|
# We don't do coverage since it makes PyPy far too slow:
|
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "pypy27"
|
2020-10-14 17:09:18 +00:00
|
|
|
# Since we didn't collect it, don't upload it.
|
|
|
|
UPLOAD_COVERAGE: ""
|
2019-06-25 18:16:26 +00:00
|
|
|
|
2018-06-13 17:59:52 +00:00
|
|
|
|
2018-06-19 12:37:18 +00:00
|
|
|
c-locale:
|
|
|
|
<<: *DEBIAN
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
LANG: "C"
|
|
|
|
|
|
|
|
|
2019-03-20 19:56:01 +00:00
|
|
|
another-locale:
|
|
|
|
<<: *DEBIAN
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
# aka "Latin 1"
|
|
|
|
LANG: "en_US.ISO-8859-1"
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
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"
|
2020-10-14 16:58:15 +00:00
|
|
|
# The deprecations tox environments don't do coverage measurement.
|
|
|
|
UPLOAD_COVERAGE: ""
|
2018-06-15 12:57:50 +00:00
|
|
|
|
|
|
|
|
2019-01-24 14:02:27 +00:00
|
|
|
integration:
|
|
|
|
<<: *DEBIAN
|
|
|
|
|
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
|
|
|
# Select the integration tests tox environments.
|
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "integration"
|
2019-01-24 21:04:26 +00:00
|
|
|
# Disable artifact collection because py.test can't produce any.
|
|
|
|
ARTIFACTS_OUTPUT_PATH: ""
|
|
|
|
|
2019-01-24 14:02:27 +00:00
|
|
|
steps:
|
|
|
|
- "checkout"
|
2019-04-03 18:27:45 +00:00
|
|
|
# DRY, YAML-style. See the debian-9 steps.
|
2019-01-24 14:02:27 +00:00
|
|
|
- run: *SETUP_VIRTUALENV
|
|
|
|
- run: *RUN_TESTS
|
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
ubuntu-16-04:
|
2018-06-14 15:44:39 +00:00
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/ubuntu:16.04-py2.7"
|
2019-04-04 17:16:28 +00:00
|
|
|
user: "nobody"
|
2018-06-14 16:32:49 +00:00
|
|
|
|
2018-06-14 15:44:39 +00:00
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
ubuntu-18-04: &UBUNTU_18_04
|
2018-06-14 14:46:45 +00:00
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/ubuntu:18.04-py2.7"
|
2019-04-04 17:16:28 +00:00
|
|
|
user: "nobody"
|
2018-06-15 18:01:42 +00:00
|
|
|
|
2018-06-14 14:46:45 +00:00
|
|
|
|
2022-01-24 15:40:26 +00:00
|
|
|
python37:
|
2020-07-17 17:48:08 +00:00
|
|
|
<<: *UBUNTU_18_04
|
2020-07-18 00:00:13 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
2022-01-24 15:51:55 +00:00
|
|
|
image: "tahoelafsci/ubuntu:18.04-py3.7"
|
2020-07-18 00:00:13 +00:00
|
|
|
user: "nobody"
|
|
|
|
|
2020-07-17 17:48:08 +00:00
|
|
|
environment:
|
|
|
|
<<: *UTF_8_ENVIRONMENT
|
2020-08-14 15:24:42 +00:00
|
|
|
# The default trial args include --rterrors which is incompatible with
|
|
|
|
# this reporter on Python 3. So drop that and just specify the
|
|
|
|
# reporter.
|
|
|
|
TAHOE_LAFS_TRIAL_ARGS: "--reporter=subunitv2-file"
|
2022-01-24 15:40:26 +00:00
|
|
|
TAHOE_LAFS_TOX_ENVIRONMENT: "py37"
|
2020-07-17 17:48:08 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
ubuntu-20-04:
|
2020-08-07 18:59:27 +00:00
|
|
|
<<: *DEBIAN
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/ubuntu:20.04"
|
2020-08-07 18:59:27 +00:00
|
|
|
user: "nobody"
|
|
|
|
|
|
|
|
|
2020-04-13 14:09:25 +00:00
|
|
|
centos-8: &RHEL_DERIV
|
2018-06-13 17:59:52 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/centos:8-py2"
|
2019-04-04 18:00:19 +00:00
|
|
|
user: "nobody"
|
2018-06-13 17:59:52 +00:00
|
|
|
|
2018-06-14 16:32:49 +00:00
|
|
|
environment: *UTF_8_ENVIRONMENT
|
2018-06-13 17:59:52 +00:00
|
|
|
|
2019-04-04 18:00:19 +00:00
|
|
|
# pip cannot install packages if the working directory is not readable.
|
|
|
|
# We want to run a lot of steps as nobody instead of as root.
|
|
|
|
working_directory: "/tmp/project"
|
2018-06-13 17:59:52 +00:00
|
|
|
|
2019-04-04 18:00:19 +00:00
|
|
|
steps:
|
2018-06-13 17:59:52 +00:00
|
|
|
- "checkout"
|
2018-06-14 17:20:48 +00:00
|
|
|
- run: *SETUP_VIRTUALENV
|
2018-06-14 17:05:08 +00:00
|
|
|
- run: *RUN_TESTS
|
2018-07-05 18:19:23 +00:00
|
|
|
- store_test_results: *STORE_TEST_RESULTS
|
2018-06-15 18:21:33 +00:00
|
|
|
- store_artifacts: *STORE_TEST_LOG
|
2021-09-08 13:14:47 +00:00
|
|
|
- store_artifacts: *STORE_ELIOT_LOG
|
2018-06-15 18:21:33 +00:00
|
|
|
- store_artifacts: *STORE_OTHER_ARTIFACTS
|
|
|
|
- run: *SUBMIT_COVERAGE
|
2018-06-14 16:50:51 +00:00
|
|
|
|
2018-06-15 15:07:56 +00:00
|
|
|
|
2019-01-23 16:14:58 +00:00
|
|
|
fedora-28:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *RHEL_DERIV
|
2018-06-14 14:09:42 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/fedora:28-py"
|
2019-04-04 18:02:00 +00:00
|
|
|
user: "nobody"
|
2018-06-14 14:09:42 +00:00
|
|
|
|
2018-06-14 14:11:49 +00:00
|
|
|
|
2019-01-23 16:14:58 +00:00
|
|
|
fedora-29:
|
2018-06-15 15:07:56 +00:00
|
|
|
<<: *RHEL_DERIV
|
2018-06-14 14:11:49 +00:00
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/fedora:29-py"
|
2019-04-04 18:02:00 +00:00
|
|
|
user: "nobody"
|
2018-06-15 17:34:17 +00:00
|
|
|
|
2022-01-27 20:35:23 +00:00
|
|
|
nixos:
|
|
|
|
parameters:
|
|
|
|
nixpkgs:
|
|
|
|
description: >-
|
|
|
|
Reference the name of a niv-managed nixpkgs source (see `niv show`
|
|
|
|
and nix/sources.json)
|
|
|
|
type: "string"
|
|
|
|
|
2019-12-13 15:39:15 +00:00
|
|
|
docker:
|
|
|
|
# Run in a highly Nix-capable environment.
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
2022-01-27 19:22:35 +00:00
|
|
|
image: "nixos/nix:2.3.16"
|
2019-12-13 15:39:15 +00:00
|
|
|
|
|
|
|
environment:
|
2022-01-27 20:35:23 +00:00
|
|
|
# CACHIX_AUTH_TOKEN is manually set in the CircleCI web UI and
|
|
|
|
# allows us to push to CACHIX_NAME. We only need this set for
|
|
|
|
# `cachix use` in this step.
|
|
|
|
CACHIX_NAME: "tahoe-lafs-opensource"
|
2019-12-13 15:39:15 +00:00
|
|
|
|
|
|
|
steps:
|
2022-01-27 19:31:56 +00:00
|
|
|
- "run":
|
2022-01-27 20:03:21 +00:00
|
|
|
# The nixos/nix image does not include ssh. Install it so the
|
2022-01-27 20:09:52 +00:00
|
|
|
# `checkout` step will succeed. We also want cachix for
|
|
|
|
# Nix-friendly caching.
|
2022-01-27 19:31:56 +00:00
|
|
|
name: "Install Basic Dependencies"
|
|
|
|
command: |
|
|
|
|
nix-env \
|
2022-01-27 20:35:23 +00:00
|
|
|
--file https://github.com/nixos/nixpkgs/archive/nixos-<<parameters.nixpkgs>>.tar.gz \
|
2022-01-27 19:31:56 +00:00
|
|
|
--install \
|
2022-01-27 20:09:52 +00:00
|
|
|
-A openssh cachix bash
|
2022-01-27 19:31:56 +00:00
|
|
|
|
2019-12-13 15:39:15 +00:00
|
|
|
- "checkout"
|
2022-01-27 19:31:56 +00:00
|
|
|
|
2022-01-27 20:09:52 +00:00
|
|
|
- run:
|
|
|
|
name: "Cachix setup"
|
|
|
|
# Record the store paths that exist before we did much. There's no
|
|
|
|
# reason to cache these, they're either in the image or have to be
|
|
|
|
# retrieved before we can use cachix to restore from cache.
|
|
|
|
command: |
|
|
|
|
cachix use "${CACHIX_NAME}"
|
|
|
|
nix path-info --all > /tmp/store-path-pre-build
|
|
|
|
|
2022-01-27 18:52:10 +00:00
|
|
|
- "run":
|
2022-01-27 19:01:40 +00:00
|
|
|
# The Nix package doesn't know how to do this part, unfortunately.
|
2022-01-27 19:04:21 +00:00
|
|
|
name: "Generate version"
|
2022-01-27 19:05:59 +00:00
|
|
|
command: |
|
2022-01-27 19:59:29 +00:00
|
|
|
nix-shell \
|
|
|
|
-p 'python3.withPackages (ps: [ ps.setuptools ])' \
|
|
|
|
--run 'python setup.py update_version'
|
2022-01-27 18:52:10 +00:00
|
|
|
|
2019-12-13 15:39:15 +00:00
|
|
|
- "run":
|
2022-01-27 20:35:23 +00:00
|
|
|
name: "Build"
|
2019-12-13 15:39:15 +00:00
|
|
|
command: |
|
2019-12-18 14:31:04 +00:00
|
|
|
# CircleCI build environment looks like it has a zillion and a
|
|
|
|
# half cores. Don't let Nix autodetect this high core count
|
|
|
|
# because it blows up memory usage and fails the test run. Pick a
|
|
|
|
# number of cores that suites the build environment we're paying
|
|
|
|
# for (the free one!).
|
|
|
|
#
|
|
|
|
# Also, let it run more than one job at a time because we have to
|
|
|
|
# build a couple simple little dependencies that don't take
|
|
|
|
# advantage of multiple cores and we get a little speedup by doing
|
|
|
|
# them in parallel.
|
2022-01-27 20:35:23 +00:00
|
|
|
nix-build --cores 3 --max-jobs 2 --argstr pkgsVersion "nixpkgs-<<parameters.nixpkgs>>"
|
|
|
|
|
|
|
|
- "run":
|
|
|
|
name: "Test"
|
|
|
|
command: |
|
|
|
|
# Let it go somewhat wild for the test suite itself
|
|
|
|
nix-build --cores 8 --argstr pkgsVersion "nixpkgs-<<parameters.nixpkgs>>" tests.nix
|
2019-12-13 15:39:15 +00:00
|
|
|
|
2022-01-27 20:09:52 +00:00
|
|
|
- run:
|
|
|
|
# Send any new store objects to cachix.
|
|
|
|
name: "Push to Cachix"
|
|
|
|
when: "always"
|
|
|
|
command: |
|
|
|
|
# Cribbed from
|
|
|
|
# https://circleci.com/blog/managing-secrets-when-you-have-pull-requests-from-outside-contributors/
|
|
|
|
if [ -n "$CIRCLE_PR_NUMBER" ]; then
|
|
|
|
# I'm sure you're thinking "CIRCLE_PR_NUMBER must just be the
|
|
|
|
# number of the PR being built". Sorry, dear reader, you have
|
|
|
|
# guessed poorly. It is also conditionally set based on whether
|
|
|
|
# this is a PR from a fork or not.
|
|
|
|
#
|
|
|
|
# https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
|
|
|
|
echo "Skipping Cachix push for forked PR."
|
|
|
|
else
|
2022-01-28 15:37:43 +00:00
|
|
|
# If this *isn't* a build from a fork then we have the Cachix
|
|
|
|
# write key in our environment and we can push any new objects
|
|
|
|
# to Cachix.
|
|
|
|
#
|
|
|
|
# To decide what to push, we inspect the list of store objects
|
|
|
|
# that existed before and after we did most of our work. Any
|
|
|
|
# that are new after the work is probably a useful thing to have
|
|
|
|
# around so push it to the cache. We exclude all derivation
|
|
|
|
# objects (.drv files) because they're cheap to reconstruct and
|
|
|
|
# by the time you know their cache key you've already done all
|
|
|
|
# the work anyway.
|
|
|
|
#
|
|
|
|
# This shell expression for finding the objects and pushing them
|
|
|
|
# was from the Cachix docs:
|
|
|
|
#
|
2022-01-27 20:09:52 +00:00
|
|
|
# https://docs.cachix.org/continuous-integration-setup/circleci.html
|
2022-01-28 15:37:43 +00:00
|
|
|
#
|
|
|
|
# but they seem to have removed it now.
|
2022-01-27 20:09:52 +00:00
|
|
|
bash -c "comm -13 <(sort /tmp/store-path-pre-build | grep -v '\.drv$') <(nix path-info --all | grep -v '\.drv$' | sort) | cachix push $CACHIX_NAME"
|
|
|
|
fi
|
|
|
|
|
2020-12-04 15:34:21 +00:00
|
|
|
typechecks:
|
|
|
|
docker:
|
|
|
|
- <<: *DOCKERHUB_AUTH
|
2021-01-15 20:00:57 +00:00
|
|
|
image: "tahoelafsci/ubuntu:18.04-py3"
|
2019-09-13 15:05:05 +00:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
- run:
|
2020-12-04 15:34:21 +00:00
|
|
|
name: "Validate Types"
|
2019-09-13 15:05:05 +00:00
|
|
|
command: |
|
2021-01-15 20:00:57 +00:00
|
|
|
/tmp/venv/bin/tox -e typechecks
|
2019-09-13 15:05:05 +00:00
|
|
|
|
2021-03-09 21:57:20 +00:00
|
|
|
docs:
|
|
|
|
docker:
|
|
|
|
- <<: *DOCKERHUB_AUTH
|
|
|
|
image: "tahoelafsci/ubuntu:18.04-py3"
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
- run:
|
|
|
|
name: "Build documentation"
|
|
|
|
command: |
|
|
|
|
/tmp/venv/bin/tox -e docs
|
|
|
|
|
2019-04-04 19:34:34 +00:00
|
|
|
build-image: &BUILD_IMAGE
|
|
|
|
# This is a template for a job to build a Docker image that has as much of
|
|
|
|
# the setup as we can manage already done and baked in. This cuts down on
|
|
|
|
# the per-job setup time the actual testing jobs have to perform - by
|
|
|
|
# perhaps 10% - 20%.
|
2019-04-03 17:15:08 +00:00
|
|
|
#
|
|
|
|
# https://circleci.com/blog/how-to-build-a-docker-image-on-circleci-2-0/
|
|
|
|
docker:
|
2020-10-22 16:08:30 +00:00
|
|
|
- <<: *DOCKERHUB_AUTH
|
2022-01-24 16:01:47 +00:00
|
|
|
# CircleCI build images; https://github.com/CircleCI-Public/cimg-base
|
|
|
|
# for details.
|
|
|
|
image: "cimg/base:2022.01"
|
2019-04-03 17:15:08 +00:00
|
|
|
|
2019-04-04 19:34:34 +00:00
|
|
|
environment:
|
2020-07-18 00:00:13 +00:00
|
|
|
DISTRO: "tahoelafsci/<DISTRO>:foo-py2"
|
|
|
|
TAG: "tahoelafsci/distro:<TAG>-py2"
|
|
|
|
PYTHON_VERSION: "tahoelafsci/distro:tag-py<PYTHON_VERSION}"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
2019-04-03 17:15:08 +00:00
|
|
|
steps:
|
|
|
|
- "checkout"
|
|
|
|
- "setup_remote_docker"
|
2019-04-03 19:24:58 +00:00
|
|
|
- run:
|
|
|
|
name: "Log in to Dockerhub"
|
|
|
|
command: |
|
2020-10-22 16:08:30 +00:00
|
|
|
docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
|
2019-04-03 19:24:58 +00:00
|
|
|
- run:
|
2019-04-04 19:34:34 +00:00
|
|
|
name: "Build image"
|
2019-04-04 18:02:00 +00:00
|
|
|
command: |
|
2019-04-04 19:34:34 +00:00
|
|
|
docker \
|
|
|
|
build \
|
|
|
|
--build-arg TAG=${TAG} \
|
2020-07-17 20:26:56 +00:00
|
|
|
--build-arg PYTHON_VERSION=${PYTHON_VERSION} \
|
2020-07-18 00:00:13 +00:00
|
|
|
-t tahoelafsci/${DISTRO}:${TAG}-py${PYTHON_VERSION} \
|
2019-04-04 20:51:51 +00:00
|
|
|
-f ~/project/.circleci/Dockerfile.${DISTRO} \
|
2019-04-04 19:34:34 +00:00
|
|
|
~/project/
|
2019-04-04 19:41:22 +00:00
|
|
|
- run:
|
|
|
|
name: "Push image"
|
|
|
|
command: |
|
2020-07-18 00:00:13 +00:00
|
|
|
docker push tahoelafsci/${DISTRO}:${TAG}-py${PYTHON_VERSION}
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
2021-02-11 20:59:51 +00:00
|
|
|
build-image-debian-10:
|
2019-04-04 19:34:34 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "debian"
|
2021-02-11 20:59:51 +00:00
|
|
|
TAG: "10"
|
2020-07-17 20:23:42 +00:00
|
|
|
PYTHON_VERSION: "2.7"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
build-image-debian-9:
|
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "debian"
|
|
|
|
TAG: "9"
|
2020-07-17 20:23:42 +00:00
|
|
|
PYTHON_VERSION: "2.7"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
build-image-ubuntu-16-04:
|
2019-04-04 19:34:34 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "ubuntu"
|
|
|
|
TAG: "16.04"
|
2020-07-17 20:23:42 +00:00
|
|
|
PYTHON_VERSION: "2.7"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
build-image-ubuntu-18-04:
|
2019-04-04 19:34:34 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "ubuntu"
|
|
|
|
TAG: "18.04"
|
2020-07-17 20:23:42 +00:00
|
|
|
PYTHON_VERSION: "2.7"
|
|
|
|
|
|
|
|
|
2022-01-24 15:40:26 +00:00
|
|
|
build-image-python37-ubuntu:
|
2020-07-17 20:23:42 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "ubuntu"
|
|
|
|
TAG: "18.04"
|
2022-01-24 15:51:55 +00:00
|
|
|
PYTHON_VERSION: "3.7"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
build-image-ubuntu-20-04:
|
2020-08-07 18:59:27 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "ubuntu"
|
|
|
|
TAG: "20.04"
|
2020-08-20 17:21:48 +00:00
|
|
|
PYTHON_VERSION: "2.7"
|
2020-08-07 18:59:27 +00:00
|
|
|
|
|
|
|
|
2020-04-13 14:09:25 +00:00
|
|
|
build-image-centos-8:
|
2019-04-04 19:34:34 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "centos"
|
2020-04-13 14:09:25 +00:00
|
|
|
TAG: "8"
|
2020-07-17 20:23:42 +00:00
|
|
|
PYTHON_VERSION: "2"
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
build-image-fedora-28:
|
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "fedora"
|
|
|
|
TAG: "28"
|
2020-07-17 20:23:42 +00:00
|
|
|
# The default on Fedora (this version anyway) is still Python 2.
|
|
|
|
PYTHON_VERSION: ""
|
2019-04-04 19:34:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
build-image-fedora-29:
|
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "fedora"
|
|
|
|
TAG: "29"
|
2019-04-04 20:50:59 +00:00
|
|
|
|
|
|
|
|
2020-09-14 11:30:10 +00:00
|
|
|
build-image-pypy27-buster:
|
2019-06-25 17:12:09 +00:00
|
|
|
<<: *BUILD_IMAGE
|
|
|
|
|
|
|
|
environment:
|
|
|
|
DISTRO: "pypy"
|
2020-07-18 00:00:13 +00:00
|
|
|
TAG: "buster"
|
2020-07-17 20:23:42 +00:00
|
|
|
# We only have Python 2 for PyPy right now so there's no support for
|
2020-07-18 00:00:13 +00:00
|
|
|
# setting up PyPy 3 in the image building toolchain. This value is just
|
|
|
|
# for constructing the right Docker image tag.
|
|
|
|
PYTHON_VERSION: "2"
|