name: CI on: [push, pull_request] # We currently use Python 3.7 for most things: # - zstandard currently doesn't have 3.8 wheels, # - we need to upgrade cryptography from version 2.4, which also doesn't have wheels env: # Codecov CODECOV_TOKEN: "0409bdfd-57a4-477d-a8af-f6172ef431d3" jobs: lint-pr: if: github.event_name == 'pull_request' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: TrueBrain/actions-flake8@v1.2 lint-local: # do not use external action when secrets are exposed. if: github.event_name == 'push' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 - run: pip install flake8 - run: flake8 mitmproxy pathod examples test release mypy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 - run: pip install mypy - run: mypy . test: strategy: fail-fast: false matrix: os: [macos-latest, windows-latest, ubuntu-latest] runs-on: ${{ matrix.os }} steps: - run: printenv - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' - run: pip install tox - run: tox -e py37 # codecov's GitHub action only supports Linux. https://github.com/codecov/codecov-action/issues/7 # codecov's Python uploader has no github actions support yet. https://github.com/codecov/codecov-python/pull/214 - name: Extract branch name # https://stackoverflow.com/a/58035262/934719 shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch - run: pip install codecov - run: > codecov -f coverage.xml --name python-${{ matrix.os }} --commit ${{ github.sha }} --slug ${{ github.repository }} --branch ${{ steps.extract_branch.outputs.branch }} test-py35: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.5' - run: pip install tox - run: tox -e py35 build-wheel: runs-on: ubuntu-latest env: CI_BUILD_WHEEL: 1 steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' - run: pip install tox - run: tox -e cibuild -- build - uses: actions/upload-artifact@master with: name: wheel path: release/dist build-binaries: strategy: fail-fast: false matrix: # Old Ubuntu version for old glibc os: [macos-latest, windows-latest, ubuntu-16.04] runs-on: ${{ matrix.os }} env: CI_BUILD_PYINSTALLER: 1 CI_BUILD_WININSTALLER: ${{ matrix.os == 'windows-latest' }} CI_BUILD_KEY: ${{ secrets.CI_BUILD_KEY }} steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' - if: matrix.os == 'windows-latest' uses: actions/cache@v1 with: path: release/installbuilder/setup key: installbuilder - run: pip install tox - run: tox -e cibuild -- build # artifacts must have different names, see https://github.com/actions/upload-artifact/issues/24 - uses: actions/upload-artifact@master with: name: binaries.${{ matrix.os }} path: release/dist test-web-ui: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - run: git rev-parse --abbrev-ref HEAD - uses: actions/setup-node@v1 - id: yarn-cache run: echo "::set-output name=dir::$(yarn cache dir)" - uses: actions/cache@v1 with: path: ${{ steps.yarn-cache.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - working-directory: ./web run: yarn - working-directory: ./web run: npm test - run: bash <(curl -s https://codecov.io/bash) docs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' - run: pip install tox - run: | wget https://github.com/gohugoio/hugo/releases/download/v0.59.1/hugo_0.59.1_Linux-64bit.deb sudo dpkg -i hugo*.deb - run: tox -e docs # Separate from everything else because slow. build-and-deploy-docker: if: github.repository == 'mitmproxy/mitmproxy' && github.event_name == 'push' needs: [test, test-web-ui, build-wheel] runs-on: ubuntu-latest env: CI_BUILD_DOCKER: 1 DOCKER_USERNAME: mitmbot DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' - run: pip install tox - uses: actions/download-artifact@master with: name: wheel path: release/dist - run: tox -e cibuild -- build - run: tox -e cibuild -- upload deploy: if: github.repository == 'mitmproxy/mitmproxy' && github.event_name == 'push' runs-on: ubuntu-latest needs: [test, test-web-ui, build-wheel, build-binaries] env: CI_BUILD_WHEEL: 1 CI_BUILD_PYINSTALLER: 1 CI_BUILD_WININSTALLER: 1 TWINE_USERNAME: mitmproxy TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} steps: - uses: actions/checkout@v1 - uses: actions/setup-python@v1 with: python-version: '3.7' # artifacts must be downloaded individually, see https://github.com/actions/download-artifact/issues/6 - uses: actions/download-artifact@master with: name: wheel path: release/dist - uses: actions/download-artifact@master with: name: binaries.windows-latest path: release/dist - uses: actions/download-artifact@master with: name: binaries.macos-latest path: release/dist - uses: actions/download-artifact@master with: name: binaries.ubuntu-16.04 path: release/dist - run: ls release/dist - run: pip install tox - run: tox -e cibuild -- upload