ci: build workflow to release artifacts and multi-platform image
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>master
							parent
							
								
									f13d1e02fe
								
							
						
					
					
						commit
						4941d83cc7
					
				|  | @ -0,0 +1,85 @@ | |||
| name: build | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - 'main' | ||||
|       - 'release/*' | ||||
|     tags: | ||||
|       - 'v*' | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - '*' | ||||
| 
 | ||||
| env: | ||||
|   DOCKERHUB_SLUG: distribution/distribution | ||||
| 
 | ||||
| jobs: | ||||
|   build: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - | ||||
|         name: Checkout | ||||
|         uses: actions/checkout@v2 | ||||
|         with: | ||||
|           fetch-depth: 0 | ||||
|       - | ||||
|         name: Docker meta | ||||
|         id: meta | ||||
|         uses: docker/metadata-action@v3 | ||||
|         with: | ||||
|           images: | | ||||
|             ${{ env.DOCKERHUB_SLUG }} | ||||
|           tags: | | ||||
|             type=semver,pattern={{version}} | ||||
|             type=ref,event=pr | ||||
|             type=edge | ||||
|           labels: | | ||||
|             org.opencontainers.image.title=Distribution | ||||
|             org.opencontainers.image.description=The toolkit to pack, ship, store, and deliver container content | ||||
|       - | ||||
|         name: Set up Docker Buildx | ||||
|         uses: docker/setup-buildx-action@v1 | ||||
|       - | ||||
|         name: Login to DockerHub | ||||
|         if: github.event_name != 'pull_request' | ||||
|         uses: docker/login-action@v1 | ||||
|         with: | ||||
|           username: ${{ secrets.DOCKERHUB_USERNAME }} | ||||
|           password: ${{ secrets.DOCKERHUB_TOKEN }} | ||||
|       - | ||||
|         name: Build artifacts | ||||
|         uses: docker/bake-action@v1 | ||||
|         with: | ||||
|           targets: artifact-all | ||||
|       - | ||||
|         name: Move artifacts | ||||
|         run: | | ||||
|           mv ./bin/**/* ./bin/ | ||||
|       - | ||||
|         name: Upload artifacts | ||||
|         uses: actions/upload-artifact@v2 | ||||
|         with: | ||||
|           name: registry | ||||
|           path: ./bin/* | ||||
|           if-no-files-found: error | ||||
|       - | ||||
|         name: Build image | ||||
|         uses: docker/bake-action@v1 | ||||
|         with: | ||||
|           files: | | ||||
|             ./docker-bake.hcl | ||||
|             ${{ steps.meta.outputs.bake-file }} | ||||
|           targets: image-all | ||||
|           push: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') }} | ||||
|       - | ||||
|         name: GitHub Release | ||||
|         uses: softprops/action-gh-release@v1 | ||||
|         if: startsWith(github.ref, 'refs/tags/') | ||||
|         with: | ||||
|           draft: true | ||||
|           files: | | ||||
|             bin/*.tar.gz | ||||
|             bin/*.zip | ||||
|         env: | ||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||
|  | @ -1,60 +0,0 @@ | |||
| name: Release docker image | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - "*" | ||||
| 
 | ||||
| jobs: | ||||
|   publish: | ||||
|     name: Build and publish docker image | ||||
|     runs-on: ubuntu-latest | ||||
|     env: | ||||
|       DOCKER_BUILDTAGS: "include_oss include_gcs" | ||||
|       CGO_ENABLED: 1 | ||||
|       GO111MODULE: "auto" | ||||
|       GOPATH: ${{ github.workspace }} | ||||
|       GOOS: linux | ||||
|       COMMIT_RANGE: ${{ github.event_name == 'pull_request' && format('{0}..{1}',github.event.pull_request.base.sha, github.event.pull_request.head.sha) || format('{0}..{1}', github.event.before, github.event.after) }} | ||||
| 
 | ||||
|     steps: | ||||
|       - name: Get git tag | ||||
|         id: get_git_tag | ||||
|         run: echo ::set-output name=git_tag::${GITHUB_REF#refs/tags/} | ||||
| 
 | ||||
|       - name: Verify git tag | ||||
|         env: | ||||
|           GIT_TAG: ${{ steps.get_git_tag.outputs.git_tag }} | ||||
|         # NOTE: this is a simple Regexp, following the current versioning scheme | ||||
|         # In ideal world we should use this monstrosity: | ||||
|         # https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string | ||||
|         run: | | ||||
|           [[ ${GIT_TAG} =~ ^v[0-9]+.[0-9]+.[0-9]+ ]] | ||||
| 
 | ||||
|       - name: Check out source code | ||||
|         if: ${{ success() }} | ||||
|         uses: actions/checkout@v2 | ||||
|         with: | ||||
|           ref: ${{ steps.get_git_tag.outputs.git_tag }} | ||||
| 
 | ||||
|       - name: Set image tag | ||||
|         env: | ||||
|           GIT_TAG: ${{ steps.get_git_tag.outputs.git_tag }} | ||||
|         id: get_image_tag | ||||
|         run: echo ::set-output name=docker_tag::${GIT_TAG} | ||||
| 
 | ||||
|       - name: Login to Docker Hub | ||||
|         uses: docker/login-action@v1 | ||||
|         with: | ||||
|           username: ${{ secrets.DOCKERHUB_USERNAME }} | ||||
|           password: ${{ secrets.DOCKERHUB_TOKEN }} | ||||
| 
 | ||||
|       - name: Build and push | ||||
|         if: ${{ success() }} | ||||
|         uses: docker/build-push-action@v2 | ||||
|         with: | ||||
|           context: . | ||||
|           file: ./Dockerfile | ||||
|           platforms: linux/amd64 | ||||
|           push: true | ||||
|           tags: distribution/distribution:{{ steps.get_image_tag.outputs.docker_tag }} | ||||
		Loading…
	
		Reference in New Issue