diff --git a/.github/workflows/docker-publish-release.yaml b/.github/workflows/docker-publish-release.yaml new file mode 100644 index 000000000..d2b809e98 --- /dev/null +++ b/.github/workflows/docker-publish-release.yaml @@ -0,0 +1,71 @@ +name: docker-publish-release + +on: + push: + branches: + - release/* + pull_request: + workflow_dispatch: + +env: + REGISTRY: ghcr.io + CACHE-FROM: /tmp/.buildx-cache + CACHE-TO: /tmp/.buildx-cache-new + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install GitVersion + uses: gittools/actions/gitversion/setup@v1.1.1 + with: + versionSpec: '5.x' + + - name: Determine SemVer + uses: gittools/actions/gitversion/execute@v1.1.1 + with: + useConfigFile: true + + - run: | + echo "SemVer ${{ env.semVer }} FullSemVer ${{ env.fullSemVer }}" + name: Display SemVer + + - name: Setup Buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + driver-opts: image=moby/buildkit:master + + - name: Cache docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + if: ${{ success() }} + + - name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + if: ${{ success() }} + + # Build And Push Image + - name: Build docker image release + run: make docker-release-build + if: ${{ success() }} + + - name: Push docker image release + run: make docker-release-push + if: ${{ success() }} diff --git a/Makefile b/Makefile index 97420a3ee..c40ad271c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,22 @@ .PHONY: compile-el compile-dl clean protoc lint build unit-tests integration-tests-churner integration-tests-indexer integration-tests-inabox integration-tests-inabox-nochurner integration-tests-graph-indexer +ifeq ($(wildcard .git/*),) +$(warning semver disabled - building from release zip) +GITCOMMIT := "" +GITDATE := "" +SEMVER := $(shell basename $(CURDIR)) +else +GITCOMMIT := $(shell git rev-parse --short HEAD) +GITDATE := $(shell git log -1 --format=%cd --date=unix) +SEMVER := $(shell docker run --rm --volume "$(PWD):/repo" gittools/gitversion:5.12.0 /repo -output json -showvariable SemVer) +ifeq ($(SEMVER), ) +$(warning semver disabled - docker not installed) +SEMVER := "0.0.0" +endif +endif + +RELEASE_TAG := $(or $(RELEASE_TAG),latest) + PROTOS := ./api/proto PROTOS_DISPERSER := ./disperser/api/proto PROTO_GEN := ./api/grpc @@ -75,3 +92,12 @@ integration-tests-graph-indexer: integration-tests-dataapi: make dataapi-build go test -v ./disperser/dataapi + +docker-release-build: + RELEASE_TAG=${SEMVER} docker compose -f docker-compose-release.yaml build --build-arg SEMVER=${SEMVER} --build-arg GITCOMMIT=${GITCOMMIT} --build-arg GITDATE=${GITDATE} + +docker-release-push: + RELEASE_TAG=${SEMVER} docker compose -f docker-compose-release.yaml push + +semver: + echo "${SEMVER}" diff --git a/docker-compose-release.yaml b/docker-compose-release.yaml new file mode 100644 index 000000000..8b567e19b --- /dev/null +++ b/docker-compose-release.yaml @@ -0,0 +1,12 @@ +# This file is used for building and pushing images +services: + node: + build: + context: . + dockerfile: node/cmd/Dockerfile + image: ghcr.io/layr-labs/eigenda/node:${RELEASE_TAG} + nodeplugin: + build: + context: . + dockerfile: node/plugin/cmd/Dockerfile + image: ghcr.io/layr-labs/eigenda/nodeplugin:${RELEASE_TAG}