Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef183ab1ce | ||
|
|
d2e57f0af4 | ||
|
|
40a9bb4724 | ||
|
|
b4f819eba9 | ||
|
|
f649e91d57 | ||
|
|
d2c0600359 |
@@ -0,0 +1,2 @@
|
|||||||
|
.env
|
||||||
|
.git
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
name: Build
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Login to Gitea Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: gitea.coupxd.com
|
||||||
|
username: ${{ secrets.REGISTRY_USER }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
- name: Build and Push
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: gitea.coupxd.com/cody/go-weather:latest
|
||||||
@@ -1 +1,2 @@
|
|||||||
.env
|
.env
|
||||||
|
.dockerenv
|
||||||
|
|||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
FROM golang:1.25-bookworm AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
COPY . .
|
||||||
|
# Buildx automatically injects TARGETARCH, TARGETOS, and TARGETPLATFORM as build args into the Dockerfile
|
||||||
|
ARG TARGETARCH
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -o go-weather .
|
||||||
|
FROM gcr.io/distroless/static-debian12
|
||||||
|
COPY --from=builder /app/go-weather /go-weather
|
||||||
|
EXPOSE 8080
|
||||||
|
ENTRYPOINT ["/go-weather"]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Creating build environment"
|
||||||
|
docker buildx create --name pibuilder --use
|
||||||
|
|
||||||
|
echo "Printing build environment info"
|
||||||
|
docker buildx inspect --bootstrap
|
||||||
|
|
||||||
|
echo "Doing build"
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/arm64 \
|
||||||
|
--push \
|
||||||
|
-t gitea.coupxd.com/cody/go-weather:latest \
|
||||||
|
.
|
||||||
|
|
||||||
@@ -36,6 +36,10 @@ type Reading struct {
|
|||||||
FetchedAt time.Time `json:"fetched_at"`
|
FetchedAt time.Time `json:"fetched_at"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type HealthResponse struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
func getEnv(key string) string {
|
func getEnv(key string) string {
|
||||||
val := os.Getenv(key)
|
val := os.Getenv(key)
|
||||||
if val == "" {
|
if val == "" {
|
||||||
@@ -243,6 +247,19 @@ func main() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// GET /health
|
||||||
|
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// TODO: Check if database is ready as well
|
||||||
|
if r.Method != http.MethodGet {
|
||||||
|
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
okStatus := HealthResponse{Status: "ok"}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(okStatus)
|
||||||
|
})
|
||||||
|
|
||||||
// GET /weather/history?city=London&limit=10
|
// GET /weather/history?city=London&limit=10
|
||||||
http.HandleFunc("/weather/history", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/weather/history", func(w http.ResponseWriter, r *http.Request) {
|
||||||
if r.Method != http.MethodGet {
|
if r.Method != http.MethodGet {
|
||||||
|
|||||||
Reference in New Issue
Block a user