version: 2.1 commands: restore_cached_venv: description: "Restores a cached venv" parameters: reqs_checksum: type: string default: "1234" venv_name: type: string default: "default-name" steps: - restore_cache: keys: - << parameters.venv_name >>-venv-<< parameters.reqs_checksum >> # fallback to using the latest cache if no exact match is found - << parameters.venv_name >>-venv- save_cached_venv: description: "Saves a venv into a cache" parameters: reqs_checksum: type: string default: "1234" venv_path: type: string default: "venv" venv_name: type: string default: "default-name" steps: - save_cache: key: << parameters.venv_name >>-venv-<< parameters.reqs_checksum >> paths: << parameters.venv_path >> jobs: checkout_specs: docker: - image: circleci/python:3.6 working_directory: ~/specs-repo steps: # Restore git repo at point close to target branch/revision, to speed up checkout - restore_cache: keys: - v1-specs-repo-{{ .Branch }}-{{ .Revision }} - v1-specs-repo-{{ .Branch }}- - v1-specs-repo- - checkout - run: name: Clean up git repo to reduce cache size command: git gc # Save the git checkout as a cache, to make cloning next time faster. - save_cache: key: v1-specs-repo-{{ .Branch }}-{{ .Revision }} paths: - ~/specs-repo install_test: docker: - image: circleci/python:3.6 working_directory: ~/specs-repo steps: - restore_cache: key: v1-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_cached_venv: venv_name: v1-pyspec reqs_checksum: '{{ checksum "test_libs/pyspec/requirements.txt" }}-{{ checksum "test_libs/pyspec/requirements-testing.txt" }}' - run: name: Install pyspec requirements command: make install_test - save_cached_venv: venv_name: v1-pyspec reqs_checksum: '{{ checksum "test_libs/pyspec/requirements.txt" }}-{{ checksum "test_libs/pyspec/requirements-testing.txt" }}' venv_path: ./test_libs/pyspec/venv test: docker: - image: circleci/python:3.6 working_directory: ~/specs-repo steps: - restore_cache: key: v1-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_cached_venv: venv_name: v1-pyspec reqs_checksum: '{{ checksum "test_libs/pyspec/requirements.txt" }}-{{ checksum "test_libs/pyspec/requirements-testing.txt" }}' - run: name: Run py-tests command: make citest - store_test_results: path: test_libs/pyspec/test-reports lint: docker: - image: circleci/python:3.6 working_directory: ~/specs-repo steps: - restore_cache: key: v1-specs-repo-{{ .Branch }}-{{ .Revision }} - restore_cached_venv: venv_name: v1-pyspec reqs_checksum: '{{ checksum "test_libs/pyspec/requirements.txt" }}-{{ checksum "test_libs/pyspec/requirements-testing.txt" }}' - run: name: Run linter command: make install_lint && make pyspec && make lint workflows: version: 2.1 test_spec: jobs: - checkout_specs - lint - install_test: requires: - checkout_specs - test: requires: - install_test