version: 2 defaults: &defaults working_directory: ~/repo docker: - image: circleci/python:3.7.0-stretch-browsers jobs: build: <<: *defaults steps: - checkout - run: name: dependencies command: | # We need at least g++-8, but stretch comes with g++-6 # Set up the Debian testing repo, and then install g++ from there... sudo bash -c "echo \"deb http://ftp.us.debian.org/debian testing main contrib non-free\" >> /etc/apt/sources.list" sudo apt-get update sudo apt-get install node-less cmake build-essential clang-format-6.0 flake8 uglifyjs python3-yaml chromium ccache sudo apt-get install -t testing g++-8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8 sudo update-alternatives --set gcc /usr/bin/gcc-8 sudo ln -s /usr/bin/clang-format-6.0 /usr/bin/clang-format sudo pip install virtualenv virtualenv pyodide-env source pyodide-env/bin/activate pip install pytest pytest-xdist pytest-instafail selenium PyYAML # Get recent version of Firefox and geckodriver wget -O firefox.tar.bz2 https://download.mozilla.org/\?product\=firefox-nightly-latest-ssl\&os\=linux64\&lang\=en-US tar jxf firefox.tar.bz2 wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz tar zxf geckodriver-v0.21.0-linux64.tar.gz -C firefox # Get recent version of chromedriver wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip unzip chromedriver_linux64.zip mv chromedriver firefox - run: name: lint command: | source pyodide-env/bin/activate make lint - restore_cache: keys: - v1-emsdk-{{ checksum "emsdk/Makefile" }}-v6- - run: name: build no_output_timeout: 1200 command: | source pyodide-env/bin/activate ccache -z make ccache -s - save_cache: paths: - ./emsdk/emsdk - ~/.ccache key: v1-emsdk-{{ checksum "emsdk/Makefile" }}-v6-{{ .BuildNum }} - persist_to_workspace: root: . paths: - ./build - ./pyodide-env - ./firefox - store_artifacts: path: /home/circleci/repo/build/ test-firefox: <<: *defaults steps: - checkout - attach_workspace: at: . - run: name: test command: | # This Debian is so old, it doesn't know about wasm as a mime type, which then # causes Firefox to complain when loading it. Let's just add the new mime type. sudo bash -c "echo 'application/wasm wasm' >> /etc/mime.types" source pyodide-env/bin/activate export PATH=$PWD/firefox:$PATH pytest test -v -k firefox test-chrome: <<: *defaults steps: - checkout - attach_workspace: at: . - run: name: test command: | # This Debian is so old, it doesn't know about wasm as a mime type, which then # causes Firefox to complain when loading it. Let's just add the new mime type. sudo bash -c "echo 'application/wasm wasm' >> /etc/mime.types" source pyodide-env/bin/activate export PATH=$PWD/firefox:$PATH pytest test -v -k chrome deploy: machine: enabled: true steps: - checkout - attach_workspace: at: . - run: name: Deploy to Github Pages command: | .circleci/deploy.sh workflows: version: 2 build-and-deploy: jobs: - build - test-chrome: requires: - build - test-firefox: requires: - build - deploy: requires: - test-chrome - test-firefox filters: branches: only: master