diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c5c5be923..9d2f47d63 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,12 +8,28 @@ on: paths-ignore: - 'scripts/**' - '**/*.md' + push: + # Build for the master branch. + branches: + - master + release: + # Publish released commit as Docker `latest` and `git_revision` images. + types: + - published workflow_dispatch: inputs: ref: description: 'Ref to build CLI for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]' required: false default: '' + push_image: + description: 'Push images to DockerHub [default: false; examples: true, false]' + required: false + default: 'false' + use_latest_tag: + description: 'Use `latest` tag while pushing images to DockerHub (applied to Ubuntu image only) [default: false; examples: true, false]' + required: false + default: 'false' env: GO111MODULE: "on" @@ -65,7 +81,7 @@ jobs: build_image: needs: build_cli - name: Build Docker image + name: Build and push docker image runs-on: ubuntu-20.04 steps: @@ -81,23 +97,34 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Set vars id: setvars run: make gh-docker-vars + - name: Set latest tag + id: setlatest + if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }} + run: echo "::set-output name=latest::,${{ steps.setvars.outputs.repo }}:latest" + - name: Build and push uses: docker/build-push-action@v3 with: - push: false + push: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} platforms: linux/amd64,linux/arm64 build-args: | REPO=${{ steps.setvars.outputs.repo }} VERSION=${{ steps.setvars.outputs.version }} - tags: ${{ steps.setvars.outputs.repo }}:${{ steps.setvars.outputs.version }}${{ steps.setvars.outputs.suffix }} + tags: ${{ steps.setvars.outputs.repo }}:${{ steps.setvars.outputs.version }}${{ steps.setvars.outputs.suffix }}${{ steps.setlatest.outputs.latest }} build_image_wsc: needs: build_cli - name: Build Docker image (Windows Server Core) + name: Build and push docker image (Windows Server Core) runs-on: windows-2022 steps: @@ -112,5 +139,15 @@ jobs: with: go-version: 1.18 + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Build Docker image run: make image + + - name: Push image to registry + if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} + run: make image-push diff --git a/.github/workflows/publish_to_dockerhub.yml b/.github/workflows/publish_to_dockerhub.yml deleted file mode 100644 index d8cf5e969..000000000 --- a/.github/workflows/publish_to_dockerhub.yml +++ /dev/null @@ -1,169 +0,0 @@ -name: Push images to DockerHub - -# Controls when the action will run. -on: - push: - # Publish `master` as Docker `latest` and `git_revision` images. - branches: - - master - release: - # Publish released commit as Docker `latest` and `git_revision` images. - types: - - published - - # Allows to run this workflow manually from the Actions tab. - workflow_dispatch: - inputs: - ref: - description: 'Ref to build Docker images for Ubuntu and Windows Server Core [default: latest master; examples: v0.92.0, 0a4ff9d3e4a9ab432fd5812eb18c98e03b5a7432]' - required: false - default: '' - push_image: - description: 'Push images to DockerHub [default: false; examples: true, false]' - required: false - default: 'false' - use_latest_tag: - description: 'Use `latest` tag while pushing images to DockerHub (applied to Ubuntu image only) [default: false; examples: true, false]' - required: false - default: 'false' - -# Environment variables. -env: - GO111MODULE: "on" - -# A workflow run. -jobs: - tests_ubuntu: - name: Run Ubuntu-based tests before publishing - runs-on: ubuntu-20.04 - - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.inputs.ref }} - # Allows to fetch all history for all branches and tags. Need this for proper versioning. - fetch-depth: 0 - - - name: Sync VM submodule - run: | - git submodule sync - git submodule update --init - - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - - name: Restore go modules from cache - uses: actions/cache@v2 - with: - path: /home/runner/go/pkg/mod - key: deps-${{ hashFiles('go.sum') }} - - - name: Update Go modules - run: go mod download -json - - - name: Run tests - run: make test - publish_ubuntu: - # Ensure test job passes before pushing image. - needs: tests_ubuntu - name: Publish Ubuntu-based image to DockerHub - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.inputs.ref }} - # Allows to fetch all history for all branches and tags. Need this for proper versioning. - fetch-depth: 0 - - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - - name: Build image - run: make image - - - name: Build image with 'latest' tag - if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }} - run: make image-latest - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} - - - name: Push image to registry - if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} - run: make image-push - - - name: Push image with 'latest' tag to registry - if: ${{ (github.event_name == 'release' && github.event.release.target_commitish == 'master') || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true' && github.event.inputs.use_latest_tag == 'true') }} - run: make image-push-latest - - tests_wsc: - name: Run WindowsServerCore-based tests before publishing - runs-on: windows-2022 - - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.inputs.ref }} - # Allows to fetch all history for all branches and tags. Need this for proper versioning. - fetch-depth: 0 - - - name: Sync VM submodule - run: | - git submodule sync - git submodule update --init - - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - - name: Restore go modules from cache - uses: actions/cache@v2 - with: - path: /home/runner/go/pkg/mod - key: deps-${{ hashFiles('go.sum') }} - - - name: Update Go modules - run: go mod download -json - - - name: Run tests - run: make test - publish_wsc: - # Ensure test job passes before pushing image. - needs: tests_wsc - name: Publish WindowsServerCore-based image to DockerHub - runs-on: windows-2022 - steps: - - uses: actions/checkout@v2 - with: - ref: ${{ github.event.inputs.ref }} - # Allows to fetch all history for all branches and tags. Need this for proper versioning. - fetch-depth: 0 - - - name: Show docker images - run: docker images - - - name: Set up Go - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - - name: Build image - run: make image - - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} - - - name: Push image to registry - if: ${{ github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.push_image == 'true') }} - run: make image-push