name: continuous-integration on: push: branches: - master - v[1-9].* tags: - v[1-9].* pull_request: branches: - master - v[1-9].* env: BUILDTIME_BASE: "golang:1.17.10-alpine3.15" RUNTIME_BASE: "alpine:3.15" GO_VERSION: "~1.17.10" jobs: # Runs Golangci-lint on the source code ci-go-lint: name: ci-go-lint runs-on: ubuntu-latest steps: - name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Lint kube-router code run: | make lint # Executes Unit Tests ci-unit-tests: name: ci-unit-tests runs-on: ubuntu-latest steps: - name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Run unit tests for kube-router run: | make test env: DOCKER_BUILD_IMAGE: ${{ env.BUILDTIME_BASE }} # Builds Kube-Router binary ci-build-kube-router: name: ci-build-kube-router runs-on: ubuntu-latest steps: - name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Build kube-router run: | make kube-router # Builds Container only if a new push to main branch, a tag or a pull request from a source branch within the repository ci-build-container: runs-on: ubuntu-latest if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]') }} steps: - name: Checkout uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Extract branch from github ref - New Push if: ${{ startsWith(github.ref, 'refs/tags/v') != true && github.event_name != 'pull_request' }} shell: bash run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch - name: Extract tag from github ref - New Release if: ${{ startsWith(github.ref, 'refs/tags/v') }} shell: bash run: echo "##[set-output name=tag;]$(echo ${GITHUB_REF#refs/tags/})" id: extract_tag - name: Build and push - New Push uses: docker/build-push-action@v2 if: ${{ startsWith(github.ref, 'refs/tags/v') != true && github.event_name != 'pull_request' }} with: context: . platforms: | linux/amd64 linux/arm64 linux/arm/v7 linux/s390x push: true build-args: | BUILDTIME_BASE=${{ env.BUILDTIME_BASE }} RUNTIME_BASE=${{ env.RUNTIME_BASE }} tags: cloudnativelabs/kube-router-git:${{ steps.extract_branch.outputs.branch }} - name: Build and push - New PR uses: docker/build-push-action@v2 if: github.event_name == 'pull_request' with: context: . # Don't build multi arch images for PR as they take more than 30 min to build platforms: linux/amd64 push: true build-args: | BUILDTIME_BASE=${{ env.BUILDTIME_BASE }} RUNTIME_BASE=${{ env.RUNTIME_BASE }} tags: cloudnativelabs/kube-router-git:PR-${{ github.event.pull_request.number }} - name: Build and push - New Tag uses: docker/build-push-action@v2 if: ${{ startsWith(github.ref, 'refs/tags/v') }} with: context: . platforms: | linux/amd64 linux/arm64 linux/arm/v7 linux/s390x push: true build-args: | BUILDTIME_BASE=${{ env.BUILDTIME_BASE }} RUNTIME_BASE=${{ env.RUNTIME_BASE }} tags: | cloudnativelabs/kube-router:${{ steps.extract_tag.outputs.tag }} cloudnativelabs/kube-router:latest # Runs Go Releaser on Tag Event ci-goreleaser-tag: runs-on: ubuntu-latest if: ${{ startsWith(github.ref, 'refs/tags/v') }} steps: - name: Set up Go 1.x uses: actions/setup-go@v2 with: go-version: ${{ env.GO_VERSION }} id: go - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Run GoReleaser uses: goreleaser/goreleaser-action@v2 with: version: latest args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}