diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4932c3cbf..50c4f27aa 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: publish +name: Publish a Docker image on: push: @@ -11,62 +11,59 @@ concurrency: cancel-in-progress: true jobs: - docker: + docker-registry: + name: Push Docker image to Docker Hub runs-on: ubuntu-latest + + strategy: + max-parallel: 2 + fail-fast: false + matrix: + target: + - amd64 + - arm64v8 + steps: - - name: Set up Go 1.16 - uses: actions/setup-go@v2 - with: - go-version: '1.16' - - name: Checkout + - name: Check out the repo uses: actions/checkout@v2 - - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@master - with: - service_account_key: ${{ secrets.GCR_JSON_KEY }} - export_default_credentials: true - - uses: haya14busa/action-cond@v1 + + - name: Determine versioning strategy + uses: haya14busa/action-cond@v1 id: condval with: cond: ${{ github.ref == 'refs/heads/main' }} if_true: "minor" if_false: "patch" - - name: Auto Increment Semver Action + + - name: Auto increment SemVer action uses: MCKanpolat/auto-semver-action@1.0.5 id: versioning with: releaseType: ${{ steps.condval.outputs.value }} github_token: ${{ secrets.GITHUB_TOKEN }} + - name: Get version parameters shell: bash run: | echo "##[set-output name=build_timestamp;]$(echo $(date +%s))" echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: version_parameters - - name: Get base image name - shell: bash - run: echo "##[set-output name=image;]$(echo gcr.io/up9-docker-hub/mizu/${GITHUB_REF#refs/heads/})" - id: base_image_step + - name: Docker meta id: meta uses: crazy-max/ghaction-docker-meta@v2 with: images: | - ${{ steps.base_image_step.outputs.image }} up9inc/mizu tags: | type=raw,${{ steps.versioning.outputs.version }} - - name: Login to DockerHub + + - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_PASS }} - - name: Login to GCR - uses: docker/login-action@v1 - with: - registry: gcr.io - username: _json_key - password: ${{ secrets.GCR_JSON_KEY }} + - name: Build and push uses: docker/build-push-action@v2 with: @@ -79,12 +76,182 @@ jobs: BUILD_TIMESTAMP=${{ steps.version_parameters.outputs.build_timestamp }} GIT_BRANCH=${{ steps.version_parameters.outputs.branch }} COMMIT_HASH=${{ github.sha }} + + gcp-registry: + name: Push Docker image to GCR + runs-on: ubuntu-latest + + strategy: + max-parallel: 2 + fail-fast: false + matrix: + target: + - amd64 + - arm64v8 + + steps: + - name: Check out the repo + uses: actions/checkout@v2 + + - name: Set up Cloud SDK + uses: google-github-actions/setup-gcloud@master + with: + service_account_key: ${{ secrets.GCR_JSON_KEY }} + export_default_credentials: true + + - name: Determine versioning strategy + uses: haya14busa/action-cond@v1 + id: condval + with: + cond: ${{ github.ref == 'refs/heads/main' }} + if_true: "minor" + if_false: "patch" + + - name: Auto increment SemVer action + uses: MCKanpolat/auto-semver-action@1.0.5 + id: versioning + with: + releaseType: ${{ steps.condval.outputs.value }} + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Get version parameters + shell: bash + run: | + echo "##[set-output name=build_timestamp;]$(echo $(date +%s))" + echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: version_parameters + + - name: Get base image name + shell: bash + run: echo "##[set-output name=image;]$(echo gcr.io/up9-docker-hub/mizu/${GITHUB_REF#refs/heads/})" + id: base_image_step + + - name: Docker meta + id: meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + ${{ steps.base_image_step.outputs.image }} + tags: | + type=raw,${{ steps.versioning.outputs.version }} + + - name: Login to GCR + uses: docker/login-action@v1 + with: + registry: gcr.io + username: _json_key + password: ${{ secrets.GCR_JSON_KEY }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + SEM_VER=${{ steps.versioning.outputs.version }} + BUILD_TIMESTAMP=${{ steps.version_parameters.outputs.build_timestamp }} + GIT_BRANCH=${{ steps.version_parameters.outputs.branch }} + COMMIT_HASH=${{ github.sha }} + + docker-manifest: + name: Create and Push a Docker Manifest + runs-on: ubuntu-latest + needs: [docker-registry] + steps: + - name: Determine versioning strategy + uses: haya14busa/action-cond@v1 + id: condval + with: + cond: ${{ github.ref == 'refs/heads/main' }} + if_true: "minor" + if_false: "patch" + + - name: Auto increment SemVer action + uses: MCKanpolat/auto-semver-action@1.0.5 + id: versioning + with: + releaseType: ${{ steps.condval.outputs.value }} + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Get version parameters + shell: bash + run: | + echo "##[set-output name=build_timestamp;]$(echo $(date +%s))" + echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: version_parameters + + - name: Docker meta + id: meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: | + up9inc/mizu + tags: | + type=raw,${{ steps.versioning.outputs.version }} + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USER }} + password: ${{ secrets.DOCKERHUB_PASS }} + + - name: Create manifest + run: | + while IFS= read -r line; do + docker manifest create $line --amend $line-amd64 --amend $line-arm64v8 + done <<< "${{ steps.meta.outputs.tags }}" + + - name: Push manifest + run: | + while IFS= read -r line; do + docker manifest push $line + done <<< "${{ steps.meta.outputs.tags }}" + + cli: + name: Build the CLI and release + runs-on: ubuntu-latest + needs: [docker-manifest, gcp-registry] + steps: + - name: Set up Go 1.17 + uses: actions/setup-go@v2 + with: + go-version: '1.17' + + - name: Check out the repo + uses: actions/checkout@v2 + + - uses: haya14busa/action-cond@v1 + id: condval + with: + cond: ${{ github.ref == 'refs/heads/main' }} + if_true: "minor" + if_false: "patch" + + - name: Auto Increment Semver Action + uses: MCKanpolat/auto-semver-action@1.0.5 + id: versioning + with: + releaseType: ${{ steps.condval.outputs.value }} + github_token: ${{ secrets.GITHUB_TOKEN }} + + - name: Get version parameters + shell: bash + run: | + echo "##[set-output name=build_timestamp;]$(echo $(date +%s))" + echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: version_parameters + - name: Build and Push CLI run: make push-cli SEM_VER='${{ steps.versioning.outputs.version }}' BUILD_TIMESTAMP='${{ steps.version_parameters.outputs.build_timestamp }}' - - shell: bash + + - name: Log the version into a .txt file + shell: bash run: | echo '${{ steps.versioning.outputs.version }}' >> cli/bin/version.txt - - name: publish + + - name: Release uses: ncipollo/release-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }}