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' # 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.17 - 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: Build image run: make image - name: Build image with 'latest' tag if: ${{ github.event_name == 'release' && github.event.release.target_commitish == 'master' }} 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' }} 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.17 - 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. # TODO: currently test_wsc job is failing, so we have `always()` condition. # After #2269 and #2268 this condition should be removed. if: ${{ always() }} 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: Build image run: make image-wsc - 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-wsc-push