--- a
+++ b/.github/workflows/build.yml
@@ -0,0 +1,222 @@
+name: build
+
+on:
+  push:
+    paths-ignore:
+      - 'demo/**'
+      - '.dev/**'
+      - 'docker/**'
+      - 'tools/**'
+      - '**.md'
+
+  pull_request:
+    paths-ignore:
+      - 'demo/**'
+      - '.dev/**'
+      - 'docker/**'
+      - 'tools/**'
+      - 'docs/**'
+      - 'docs_zh-CN/**'
+      - '**.md'
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
+jobs:
+  build_cpu:
+    runs-on: ubuntu-18.04
+    strategy:
+      matrix:
+        python-version: [3.7]
+        torch: [1.5.1, 1.6.0, 1.7.0, 1.8.0, 1.9.0]
+        include:
+          - torch: 1.5.1
+            torchvision: 0.6.1
+            mmcv: 1.5.0
+          - torch: 1.6.0
+            torchvision: 0.7.0
+            mmcv: 1.6.0
+          - torch: 1.7.0
+            torchvision: 0.8.1
+            mmcv: 1.7.0
+          - torch: 1.8.0
+            torchvision: 0.9.0
+            mmcv: 1.8.0
+          - torch: 1.9.0
+            torchvision: 0.10.0
+            mmcv: 1.9.0
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Upgrade pip
+        run: pip install pip --upgrade
+      - name: Install Pillow
+        run: pip install Pillow==6.2.2
+        if: ${{matrix.torchvision == '0.4.2'}}
+      - name: Install PyTorch
+        run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/torch_stable.html
+      - name: Install MMCV
+        run: |
+          pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cpu/torch${{matrix.mmcv}}/index.html
+          python -c 'import mmcv; print(mmcv.__version__)'
+      - name: Install unittest dependencies
+        run: |
+          pip install -r requirements.txt
+      - name: Build and install
+        run: rm -rf .eggs && pip install -e .
+      - name: Run unittests and generate coverage report
+        run: |
+          pip install timm
+          coverage run --branch --source mmseg -m pytest tests/
+          coverage xml
+          coverage report -m
+        if: ${{matrix.torch >= '1.5.0'}}
+      - name: Skip timm unittests and generate coverage report
+        run: |
+          coverage run --branch --source mmseg -m pytest tests/ --ignore tests/test_models/test_backbones/test_timm_backbone.py
+          coverage xml
+          coverage report -m
+        if: ${{matrix.torch < '1.5.0'}}
+
+  build_cuda101:
+    runs-on: ubuntu-18.04
+    container:
+      image: pytorch/pytorch:1.6.0-cuda10.1-cudnn7-devel
+
+    strategy:
+      matrix:
+        python-version: [3.7]
+        torch:
+          [
+            1.5.1+cu101,
+            1.6.0+cu101,
+            1.7.0+cu101,
+            1.8.0+cu101
+          ]
+        include:
+          - torch: 1.5.1+cu101
+            torch_version: torch1.5.1
+            torchvision: 0.6.1+cu101
+            mmcv: 1.5.0
+          - torch: 1.6.0+cu101
+            torch_version: torch1.6.0
+            torchvision: 0.7.0+cu101
+            mmcv: 1.6.0
+          - torch: 1.7.0+cu101
+            torch_version: torch1.7.0
+            torchvision: 0.8.1+cu101
+            mmcv: 1.7.0
+          - torch: 1.8.0+cu101
+            torch_version: torch1.8.0
+            torchvision: 0.9.0+cu101
+            mmcv: 1.8.0
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Install system dependencies
+        run: |
+          apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 python${{matrix.python-version}}-dev
+          apt-get clean
+          rm -rf /var/lib/apt/lists/*
+      - name: Install Pillow
+        run: python -m pip install Pillow==6.2.2
+        if: ${{matrix.torchvision < 0.5}}
+      - name: Install PyTorch
+        run: python -m pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html
+      - name: Install mmseg dependencies
+        run: |
+          python -V
+          python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch${{matrix.mmcv}}/index.html
+          python -m pip install -r requirements.txt
+          python -c 'import mmcv; print(mmcv.__version__)'
+      - name: Build and install
+        run: |
+          rm -rf .eggs
+          python setup.py check -m -s
+          TORCH_CUDA_ARCH_LIST=7.0 pip install .
+      - name: Run unittests and generate coverage report
+        run: |
+          python -m pip install timm
+          coverage run --branch --source mmseg -m pytest tests/
+          coverage xml
+          coverage report -m
+        if: ${{matrix.torch >= '1.5.0'}}
+      - name: Skip timm unittests and generate coverage report
+        run: |
+          coverage run --branch --source mmseg -m pytest tests/ --ignore tests/test_models/test_backbones/test_timm_backbone.py
+          coverage xml
+          coverage report -m
+        if: ${{matrix.torch < '1.5.0'}}
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@v1.0.10
+        with:
+          file: ./coverage.xml
+          flags: unittests
+          env_vars: OS,PYTHON
+          name: codecov-umbrella
+          fail_ci_if_error: false
+
+  build_cuda102:
+    runs-on: ubuntu-18.04
+    container:
+      image: pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel
+
+    strategy:
+      matrix:
+        python-version: [3.6, 3.7, 3.8, 3.9]
+        torch: [1.9.0+cu102]
+        include:
+          - torch: 1.9.0+cu102
+            torch_version: torch1.9.0
+            torchvision: 0.10.0+cu102
+            mmcv_link: 1.9.0
+
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v2
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Install system dependencies
+        run: |
+          apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6
+          apt-get clean
+          rm -rf /var/lib/apt/lists/*
+      - name: Install Pillow
+        run: python -m pip install Pillow==6.2.2
+        if: ${{matrix.torchvision < 0.5}}
+      - name: Install PyTorch
+        run: python -m pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html
+      - name: Install mmseg dependencies
+        run: |
+          python -V
+          python -m pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch${{matrix.mmcv_link}}/index.html
+          python -m pip install -r requirements.txt
+          python -c 'import mmcv; print(mmcv.__version__)'
+      - name: Build and install
+        run: |
+          rm -rf .eggs
+          python setup.py check -m -s
+          TORCH_CUDA_ARCH_LIST=7.0 pip install .
+      - name: Run unittests and generate coverage report
+        run: |
+          python -m pip install timm
+          coverage run --branch --source mmseg -m pytest tests/
+          coverage xml
+          coverage report -m
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@v2
+        with:
+          files: ./coverage.xml
+          flags: unittests
+          env_vars: OS,PYTHON
+          name: codecov-umbrella
+          fail_ci_if_error: false