From b8897af785b8746f6f396edc48b21112e70e0cf1 Mon Sep 17 00:00:00 2001 From: Vegard Stikbakke Date: Thu, 6 Jun 2024 09:09:14 +0200 Subject: [PATCH] Add workflow for building Docker image on commit to main (#4) Postponing pushing to a public registry, need to decide on the offical name. --- .github/workflows/build.yaml | 35 +++++++++++++++++++++++++++++++++++ .github/workflows/pr.yaml | 2 +- Dockerfile | 24 ++++++++++++++++++++++++ Makefile | 16 ++++++++-------- 4 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/build.yaml create mode 100644 Dockerfile diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..522590b --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,35 @@ +--- +name: "Build" + +on: + push: + branches: + - main + +jobs: + build: + name: "Build Docker image and push to Dockerhub" + runs-on: ubuntu-latest + env: + AWS_REGION: eu-west-1 + + steps: + - uses: actions/checkout@v3 + + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v1.6.1 + # with: + # role-to-assume: arn:aws:iam::118330671040:role/duneapi-ci + # aws-region: ${{ env.AWS_REGION }} + + # - name: Login to Amazon ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v1 + + - env: + GITHUB_TOKEN: ${{ secrets.DUNE_ENG_ACCESS_TOKEN }} + ECR_REGISTRY: public.ecr.aws/duneanalytics + ECR_REPOSITORY: blockchain-ingester + run: | + make image-build + make image-push diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 8aa80c3..38fe7ff 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -8,7 +8,7 @@ on: jobs: test: - name: "Build Docker image and push to Dockerhub" + name: "Lint and test" runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f19b1ca --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM golang:1.22-bookworm AS builder + +RUN apt update && apt install -y curl make + +ARG GITHUB_TOKEN + +# first copy just enough to pull all dependencies, to cache this layer +COPY go.mod go.sum Makefile /app/ +WORKDIR /app/ +RUN git config --global url."https://dune-eng:${GITHUB_TOKEN}@github.com".insteadOf "https://github.com" \ + && make setup + +# lint, build, etc.. +COPY . /app/ +RUN make build + +FROM debian:bookworm-slim +RUN apt update \ + && apt install -y ca-certificates \ + && apt clean \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /app/ingester /app/ +ENTRYPOINT ["/app/ingester"] diff --git a/Makefile b/Makefile index 38b28ce..812c458 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ -.PHONY: all setup lint harvester test image-build image-push +.PHONY: all setup lint build test image-build image-push -APPLICATION := harvester +APPLICATION := ingester GITHUB_SHA ?= HEAD REF_TAG := $(shell echo ${GITHUB_REF_NAME} | tr -cd '[:alnum:]') IMAGE_TAG := ${ECR_REGISTRY}/${ECR_REPOSITORY}:${REF_TAG}-$(shell git rev-parse --short "${GITHUB_SHA}")-${GITHUB_RUN_NUMBER} TEST_TIMEOUT := 10s -all: lint test harvester +all: lint test build setup: bin/golangci-lint bin/gofumpt go mod download @@ -16,8 +16,8 @@ bin/golangci-lint: bin/gofumpt: bin GOBIN=$(PWD)/bin go install mvdan.cc/gofumpt@v0.6.0 -harvester: lint cmd/main.go - go build -o harvester cmd/main.go +build: lint cmd/main.go + go build -o ingester cmd/main.go lint: bin/golangci-lint bin/gofumpt go fmt ./... @@ -31,11 +31,11 @@ test: go test -timeout=$(TEST_TIMEOUT) -race -bench=. -benchmem -cover ./... image-build: - @echo "# Building harvester docker image..." + @echo "# Building ingester docker image..." docker build -t $(APPLICATION) -f Dockerfile --build-arg GITHUB_TOKEN=${GITHUB_TOKEN} . image-push: image-build - @echo "# Pushing harvester docker image..." + @echo "# Pushing ingester docker image..." docker tag $(APPLICATION) ${IMAGE_TAG} - docker push ${IMAGE_TAG} + # docker push ${IMAGE_TAG} docker rmi ${IMAGE_TAG}