diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..5b7ac463a --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,22 @@ +name: Build and Push Docker Image + +on: + push: + branches: [ "main" ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Log in to Docker Hub + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Build and push + run: | + IMAGE=mathiasoverby/backend:latest + IMAGE=mathiasoverby/frontend:latest + docker build -t $IMAGE . + docker push $IMAGE diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..53d84c7a6 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,61 @@ +name: main workflow + +on: + push: + branches: + - main + pull_request: + branches: + - main + +env: + GIT_COMMIT: ${{ github.sha }} + +jobs: + Build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.21.12' + + - name: Build backend + run: | + cd backend + go build . + + - name: Build frontend + run: | + cd frontend + go build . + + - name: Test frontend + run: | + cd frontend + go test ./... + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker images + run: | + docker build -t ghcr.io/albla20/backend:latest backend + docker push ghcr.io/albla20/backend:latest + + docker build -t ghcr.io/albla20/frontend:latest frontend + docker push ghcr.io/albla20/frontend:latest + + - name: Pull docker images + run: | + docker pull ghcr.io/albla20/backend:latest + docker pull ghcr.io/albla20/frontend:latest diff --git a/Manifests/backend-pod.yaml b/Manifests/backend-pod.yaml new file mode 100644 index 000000000..e8fc93925 --- /dev/null +++ b/Manifests/backend-pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: backend +spec: + containers: + - name: backend + image: mathiasoverby/backend:latest + ports: + - containerPort: 9000 diff --git a/Manifests/frontend-pod.yaml b/Manifests/frontend-pod.yaml new file mode 100644 index 000000000..f4453a6fd --- /dev/null +++ b/Manifests/frontend-pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: frontend +spec: + containers: + - name: frontend + image: mathiasoverby/frontend:latest + ports: + - containerPort: 8080 diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 000000000..76f53d3d0 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,14 @@ +# Build stage +FROM golang:1.21 +# as builder +WORKDIR /app +COPY . . +RUN go mod download +RUN go build -o backend . +EXPOSE 9000 +CMD ["./backend", "run", "go"] + +# Run stage +#FROM alpine:3.19 +#COPY --from=builder /app/backend backend +#CMD ["backend"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..5624d10bc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: "3.9" +services: + backend: + build: + context: ./backend + dockerfile: Dockerfile + image: albla20/backend:latest + ports: + - 9000 + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + image: albla20/frontend:latest + ports: + - 8080 + depends_on: + - backend \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 000000000..a32746893 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,12 @@ +# Build stage +FROM golang:1.21 as builder +WORKDIR /app +COPY . . +RUN go mod download +RUN go build -o frontend . + +# Run stage +FROM alpine:3.19 +COPY --from=builder /app/frontend /frontend +EXPOSE 8080 +CMD ["/frontend", "run", "go"] diff --git a/frontend/main.go b/frontend/main.go index bede472b4..27f4da2a4 100644 --- a/frontend/main.go +++ b/frontend/main.go @@ -101,5 +101,5 @@ func main() { http.Handle("/", http.FileServer(http.Dir("./static"))) err := http.ListenAndServe(":8080", nil) - fmt.Println("%v", err) + fmt.Printf("%v", err) }