summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-04-11 11:34:50 -0600
committermo khan <mo@mokhan.ca>2025-04-11 11:34:50 -0600
commit0f18f887b4608f7a9923440bafcd04c9efdd7617 (patch)
tree0464cb07d6b99960ce55260abeda0f9234b97469
parent826d715c38d1999044e3e89c9d53cd46e5489786 (diff)
chore: build scratch image with make
-rw-r--r--.gitignore1
-rw-r--r--.gitlab-ci.yml14
-rw-r--r--Dockerfile10
-rw-r--r--Makefile31
4 files changed, 50 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..392d385
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+sparkled
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9e80d44..9d5f78d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,13 +7,19 @@ build image:
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- - echo "Building $CONTAINER_IMAGE_COMMIT"
- - docker build --tag "$CONTAINER_IMAGE_COMMIT" .
+ - IMAGE_TAG=$CONTAINER_IMAGE_COMMIT make build-image
- docker push $CONTAINER_IMAGE_COMMIT
variables:
CONTAINER_IMAGE_COMMIT: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
-test:
+unit:
image: golang:alpine
+ stage: test
script:
- - go test ./...
+ - make test
+
+integration:
+ image: golang:alpine
+ stage: test
+ script:
+ - make integration-test
diff --git a/Dockerfile b/Dockerfile
index e2d2df0..cd16728 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,15 @@
# syntax=docker/dockerfile:1
-FROM golang:1.24.0
+FROM golang:1.24.0 AS build
ENV BIND_ADDR=":8080"
ENV CGO_ENABLED=0
WORKDIR /app
COPY . ./
-RUN go build -o /bin/sparkled ./cmd/sparkled/main.go
+RUN make build && mv ./sparkled /bin/sparkled
EXPOSE 8080
CMD ["/bin/sparkled"]
+
+FROM scratch
+WORKDIR /var/www/
+COPY --from=build /bin/sparkled /bin/sparkled
+COPY --from=build /app/public /var/www/public
+CMD ["/bin/sparkled"]
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..eb0c720
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,31 @@
+PROJECT_NAME := $(shell basename $(shell pwd))
+GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD | sed 's/\//_/g')
+IMAGE_TAG := $(PROJECT_NAME):$(GIT_BRANCH)
+
+.PHONY: build-test-image integration-test
+
+sparkled:
+ go build -o sparkled ./cmd/sparkled/main.go
+
+clean:
+ rm -f sparkled
+
+build: sparkled
+
+test:
+ go test ./...
+
+build-image:
+ docker build --tag $(IMAGE_TAG) .
+
+build-builder-image:
+ docker build --target build --tag $(IMAGE_TAG) .
+
+run: build
+ BIND_ADDR=:8080 ./sparkled
+
+run-image: build-image
+ docker run -it $(IMAGE_TAG)
+
+sh-image: build-builder-image
+ docker run -it $(IMAGE_TAG) /bin/sh