diff --git a/.github/workflows/push-docker-image-manual.yml b/.github/workflows/push-docker-image-manual.yml new file mode 100644 index 000000000..2f13a18e4 --- /dev/null +++ b/.github/workflows/push-docker-image-manual.yml @@ -0,0 +1,15 @@ +on: + workflow_dispatch: + inputs: + release: + description: name of release to push on docker registry + required: true + default: v0.0.1 + +name: push-docker-image-manual + +jobs: + push-docker-image-manual: + uses: ./.github/workflows/push-docker-image-reusable.yml + with: + release: ${{ github.event.inputs.release }} diff --git a/.github/workflows/push-docker-image-release.yml b/.github/workflows/push-docker-image-release.yml new file mode 100644 index 000000000..d3f11c4a4 --- /dev/null +++ b/.github/workflows/push-docker-image-release.yml @@ -0,0 +1,11 @@ +on: + release: + types: [published] + +name: push-docker-image-release + +jobs: + push-docker-image-release: + uses: ./.github/workflows/push-docker-image-reusable.yml + with: + release: ${{ github.event.release.tag_name }} diff --git a/.github/workflows/push-docker-image-reusable.yml b/.github/workflows/push-docker-image-reusable.yml new file mode 100644 index 000000000..9b800bf5e --- /dev/null +++ b/.github/workflows/push-docker-image-reusable.yml @@ -0,0 +1,88 @@ +on: + workflow_call: + inputs: + release: + description: name of release to push on docker registry + type: string + required: true + default: v0.0.1 + +name: push-docker-image + +jobs: + push-docker-image: + name: Build Docker image and push to registry + runs-on: ubuntu-22.04 + steps: + - name: debug + run: | + echo inputs.release = ${{ inputs.release }} + + - name: Set env ARTIFACT_PREFIX + run: | + echo ARTIFACT_PREFIX=js_${{ inputs.release }}_linux >> $GITHUB_ENV + + - name: Download release asset amd64 + uses: dsaltares/fetch-gh-release-asset@master + with: + version: tags/${{ inputs.release }} + file: ${{ env.ARTIFACT_PREFIX }}-amd64.tar.gz + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Download release asset arm64 + uses: dsaltares/fetch-gh-release-asset@master + with: + version: tags/${{ inputs.release }} + file: ${{ env.ARTIFACT_PREFIX }}-arm64.tar.gz + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Unpack archive amd64 + run: | + tar -zxf ${{ env.ARTIFACT_PREFIX }}-amd64.tar.gz + rm -f ${{ env.ARTIFACT_PREFIX }}-amd64.tar.gz + mv grpc-server grpc-server-amd64 + + - name: Unpack archive arm64 + run: | + tar -zxf ${{ env.ARTIFACT_PREFIX }}-arm64.tar.gz + rm -f ${{ env.ARTIFACT_PREFIX }}-arm64.tar.gz + mv grpc-server grpc-server-arm64 + + - name: Generate Dockerfile + run: | + cat < Dockerfile + # syntax=docker/dockerfile:1 + FROM alpine + ARG TARGETARCH + COPY grpc-server-\$TARGETARCH grpc-server + COPY protobuf protobuf + EXPOSE 31007 + EXPOSE 31008 + ENV ANYTYPE_GRPC_ADDR=:31007 + ENV ANYTYPE_GRPCWEB_ADDR=:31008 + CMD ["./grpc-server"] + EOF + + - name: Debug + run: pwd; cat Dockerfile; ls -R + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Push to registry + uses: docker/build-push-action@v4 + with: + context: . + file: Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/${{ github.repository }}:latest + ghcr.io/${{ github.repository }}:${{ inputs.release }} diff --git a/Makefile b/Makefile index 71e8bacd0..a2380ba33 100644 --- a/Makefile +++ b/Makefile @@ -264,3 +264,7 @@ ifdef GOLANGCI_LINT_BRANCH else @golangci-lint run -v ./... --new-from-rev=master --skip-files ".*_test.go" --timeout 15m --fix --skip-files ".*_test.go" endif + +version = latest +docker-run: + @docker run --interactive --tty --rm --publish 31007:31007 --publish 31008:31008 ghcr.io/anytypeio/go-anytype-middleware:$(version) diff --git a/README.md b/README.md index 71c512459..9f0ea862c 100644 --- a/README.md +++ b/README.md @@ -122,3 +122,20 @@ To generate Swift protobuf: ``` brew install swift-protobuf ``` + +### Run local gRPC server in docker from prebuild images in registry +1. Creating a personal access token - https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token +2. login in ghcr.io: + ``` + echo | docker login ghcr.io -u --password-stdin + ``` +3. run gRPC server in docker: + latest version + ``` + make docker-run + ``` + or run specific version + ``` + make docker-run version=v0.25.0 + ``` +