split into multiple workflows to speed up CI (#109)

diff --git a/.github/file-filters.yml b/.github/file-filters.yml
new file mode 100644
index 0000000..4be8153
--- /dev/null
+++ b/.github/file-filters.yml
@@ -0,0 +1,25 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+code-changes:
+  - '**/*.go'
+  - 'go.mod'
+  - '.golangci.yml'
+  - '.github/*.yml'
+  - '.github/*.yaml'
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index c062bb5..7f948b4 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -29,44 +29,31 @@
     name: Build
     runs-on: ubuntu-latest
     steps:
+      - uses: actions/checkout@v2
+      - name: Check for go file changes
+        uses: getsentry/paths-filter@v2
+        id: changes
+        with:
+            token: ${{ github.token }}
+            filters: .github/file-filters.yml
+
       - name: Set up Go 1.14
         uses: actions/setup-go@v2
         with:
           go-version: 1.14
 
-      - name: Check out code into the Go module directory
-        uses: actions/checkout@v2
-        with:
-          submodules: true
-
-      - name: Check License
-        uses: apache/skywalking-eyes@9bd5feb86b5817aa6072b008f9866a2c3bbc8587
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
       - name: Check code generation
         run: make check-codegen
-        
+
       - uses: actions/upload-artifact@v2
         if: failure()
         with:
           name: check-diff
           path: /tmp/swctl/check.diff
 
-      - name: Check License
-        run: make license
-
-      - name: Get dependencies
-        run: make deps
-
-      - name: Lint
-        run: make lint
-
-      - name: Test and report coverage
-        run: make coverage
-
       - name: Build
         run: make build -j3
 
       - name: Test commands
+        if: steps.changes.outputs.code-changes == 'true'
         run: make test-commands
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
new file mode 100644
index 0000000..ff338b4
--- /dev/null
+++ b/.github/workflows/golangci-lint.yml
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: golangci-lint
+
+on:
+  pull_request:
+  push:
+    branches:
+      - master
+
+jobs:
+  golangci:
+    name: lint
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Check for go file changes
+        uses: getsentry/paths-filter@v2
+        id: changes
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          filters: .github/file-filters.yml
+
+      - name: golangci-lint
+        if: steps.changes.outputs.code-changes == 'true'
+        uses: golangci/golangci-lint-action@v2
+        with:
+          version: v1.40.1
+          args: --timeout 5m
diff --git a/.github/workflows/license-checker.yml b/.github/workflows/license-checker.yml
new file mode 100644
index 0000000..aafb354
--- /dev/null
+++ b/.github/workflows/license-checker.yml
@@ -0,0 +1,38 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: license-checker
+
+on:
+  pull_request:
+  push:
+    branches:
+      - master
+
+jobs:
+  check-license:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Check License Header
+        uses: apache/skywalking-eyes@main
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          log: info
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
new file mode 100644
index 0000000..0862eb2
--- /dev/null
+++ b/.github/workflows/unit-tests.yml
@@ -0,0 +1,50 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: unit-test
+
+on:
+  pull_request:
+  push:
+    branches:
+      - master
+
+jobs:
+  unit-tests:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Check for go file changes
+        uses: getsentry/paths-filter@v2
+        id: changes
+        with:
+          token: ${{ github.token }}
+          filters: .github/file-filters.yml
+
+      - name: setup go
+        if: steps.changes.outputs.go == 'true'
+        uses: actions/setup-go@v2
+        with:
+          go-version: '1.13'
+
+      - name: run unit tests and report coverage
+        if: steps.changes.outputs.go == 'true'
+        working-directory: ./
+        run: |
+          make coverage
diff --git a/Makefile b/Makefile
index cc61d7e..b4e7faf 100644
--- a/Makefile
+++ b/Makefile
@@ -78,7 +78,7 @@
 	$(GO_LINT) run -v --timeout 5m ./...
 
 .PHONY: test
-test: clean lint
+test: clean
 	$(GO_TEST) ./... -coverprofile=coverage.txt -covermode=atomic
 
 .PHONY: build
@@ -101,7 +101,7 @@
 	bash <(curl -s https://codecov.io/bash) -t a5af28a3-92a2-4b35-9a77-54ad99b1ae00
 
 .PHONY: clean
-clean: tools
+clean:
 	-rm -rf bin
 	-rm -rf coverage.txt
 	-rm -rf *.tgz