name: Go on: push: branches: - master - release-* workflow_dispatch: {} pull_request: branches: - master - release-* env: # Common versions GO_VERSION: '1.14' GOLANGCI_VERSION: 'v1.38' DOCKER_BUILDX_VERSION: 'v0.4.2' KIND_VERSION: 'v0.7.0' jobs: detect-noop: runs-on: ubuntu-20.04 outputs: noop: ${{ steps.noop.outputs.should_skip }} steps: - name: Detect No-op Changes id: noop uses: fkirc/skip-duplicate-actions@v3.3.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} paths_ignore: '["**.md", "**.png", "**.jpg"]' do_not_skip: '["workflow_dispatch", "schedule", "push"]' concurrent_skipping: false unit-tests: runs-on: ubuntu-20.04 needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Set up Go 1.14 uses: actions/setup-go@v1 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 with: submodules: true - name: Cache Go Dependencies uses: actions/cache@v2 with: path: .work/pkg key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-pkg- - name: Install ginkgo run: | sudo apt-get install -y golang-ginkgo-dev - name: Setup Kind Cluster uses: engineerd/setup-kind@v0.5.0 with: version: ${{ env.KIND_VERSION }} - name: install Kubebuilder uses: wonderflow/kubebuilder-action@v1.1 - name: Run Make test run: make test - name: Upload coverage report uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage.txt flags: unittests name: codecov-umbrella compatibility-test: runs-on: ubuntu-20.04 needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Set up Go 1.14 uses: actions/setup-go@v1 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 with: submodules: true - name: Cache Go Dependencies uses: actions/cache@v2 with: path: .work/pkg key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-pkg- - name: Install ginkgo run: | sudo apt-get install -y golang-ginkgo-dev - name: Setup Kind Cluster uses: engineerd/setup-kind@v0.5.0 with: version: ${{ env.KIND_VERSION }} - name: install Kubebuilder uses: wonderflow/kubebuilder-action@v1.1 - name: Run Make compatibility-test run: make compatibility-test - name: Clean up testdata run: make compatibility-testdata-cleanup e2e-rollout-tests: runs-on: aliyun needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Setup Go uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} - name: Get dependencies run: | go get -v -t -d ./... - name: Setup Kind uses: engineerd/setup-kind@v0.5.0 with: version: ${{ env.KIND_VERSION }} skipClusterCreation: true - name: Setup Kind Cluster run: | kind delete cluster kind create cluster - name: Load Image to kind cluster run: make kind-load - name: Run Make run: make - name: Run Make Manager run: make manager - name: Prepare for e2e tests run: | make e2e-cleanup make e2e-setup - name: Wait for e2e preparation ready run: | timeout 60 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:38081/api/workloads)" != "200" ]]; do sleep 5; done' || false - name: Run e2e rollout tests run: make e2e-rollout-test - name: Cleanup image if: ${{ always() }} run: make image-cleanup e2e-tests: runs-on: aliyun needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Setup Go uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} - name: Get dependencies run: | go get -v -t -d ./... - name: Setup Kind uses: engineerd/setup-kind@v0.5.0 with: version: ${{ env.KIND_VERSION }} skipClusterCreation: true - name: Setup Kind Cluster run: | kind delete cluster kind create cluster kubectl version kubectl cluster-info - name: Load Image to kind cluster run: make kind-load - name: Run Make run: make - name: Run Make Manager run: make manager - name: Prepare for e2e tests run: | make e2e-cleanup make e2e-setup - name: Wait for e2e preparation ready run: | timeout 60 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:38081/api/workloads)" != "200" ]]; do sleep 5; done' || false - name: Run api e2e tests run: make e2e-api-test - name: Run e2e tests run: make e2e-test - name: Cleanup image if: ${{ always() }} run: make image-cleanup staticcheck: runs-on: ubuntu-20.04 needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Checkout uses: actions/checkout@v2 with: submodules: true - name: Cache Go Dependencies uses: actions/cache@v2 with: path: .work/pkg key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-pkg- - name: Static Check run: go run honnef.co/go/tools/cmd/staticcheck -- ./... lint: runs-on: ubuntu-20.04 needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Checkout uses: actions/checkout@v2 with: submodules: true - name: Cache Go Dependencies uses: actions/cache@v2 with: path: .work/pkg key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-pkg- # This action uses its own setup-go, which always seems to use the latest # stable version of Go. We could run 'make lint' to ensure our desired Go # version, but we prefer this action because it leaves 'annotations' (i.e. # it comments on PRs to point out linter violations). - name: Lint uses: golangci/golangci-lint-action@v2 with: version: ${{ env.GOLANGCI_VERSION }} check-diff: runs-on: ubuntu-20.04 needs: detect-noop if: needs.detect-noop.outputs.noop != 'true' steps: - name: Checkout uses: actions/checkout@v2 with: submodules: true - name: Setup Go uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} - name: Cache Go Dependencies uses: actions/cache@v2 with: path: .work/pkg key: ${{ runner.os }}-pkg-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-pkg- - name: Check code formatting run: go install golang.org/x/tools/cmd/goimports && make fmt - name: Check Diff run: make check-diff build-cli: runs-on: ubuntu-latest steps: - name: Set up Go 1.14 uses: actions/setup-go@v1 with: go-version: 1.14 id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Run cross-build run: make cross-build - name: Run compress binary run: make compress