diff --git a/.github/workflows/docker-publish-opr-node-images.yaml b/.github/workflows/docker-publish-opr-node-images.yaml new file mode 100644 index 000000000..7727ec19f --- /dev/null +++ b/.github/workflows/docker-publish-opr-node-images.yaml @@ -0,0 +1,86 @@ +name: Push Docker images to GHCR with Caching + +on: + workflow_dispatch: + inputs: + commit_sha: + description: 'Specific Commit SHA (Required)' + required: true + release_tag: + description: 'Release Tag (Optional)' + required: false + default: '' + +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 at specified commit + uses: actions/checkout@v3 + with: + ref: ${{ github.event.inputs.commit_sha }} + + - 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.event.inputs.commit_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() }} + + - name: Set Tag Name + id: set_tag + run: echo "tag=${{ github.event.inputs.release_tag || github.event.inputs.commit_sha }}" >> $GITHUB_OUTPUT + if: ${{ success() }} + + - name: Build and Push Opr Node Image + uses: docker/build-push-action@v2 + with: + file: ./node/cmd/Dockerfile + push: true + tags: ${{ env.REGISTRY }}/layr-labs/eigenda/opr-node:${{ steps.set_tag.outputs.tag }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new + if: ${{ success() }} + + - name: Build and Push NodePlugin Image + uses: docker/build-push-action@v2 + with: + context: . + file: ./node/plugin/Dockerfile + push: true + tags: ${{ env.REGISTRY }}/layr-labs/eigenda/opr-nodeplugin:${{ steps.set_tag.outputs.tag }} + cache-from: type=local,src=${{ env.CACHE-FROM }} + cache-to: type=local,dest=${{ env.CACHE-TO }} + if: ${{ success() }} + + - name: Update cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHE-TO }} + key: ${{ runner.os }}-buildx-${{ steps.set_tag.outputs.tag }} + restore-keys: | + ${{ runner.os }}-buildx- \ No newline at end of file