Commit 0f18f88

mo khan <mo@mokhan.ca>
2025-04-11 17:34:50
chore: build scratch image with make
1 parent 826d715
.gitignore
@@ -0,0 +1,1 @@
+sparkled
.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
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"]
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