diff options
Diffstat (limited to '.github/workflows/main.yml')
-rw-r--r-- | .github/workflows/main.yml | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..c9f83e4e --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,210 @@ +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 |