mirror of
https://github.com/pocket-id/pocket-id.git
synced 2025-12-16 17:23:24 +03:00
refactor: do not include test controller in production builds (#402)
Co-authored-by: Elias Schneider <login@eliasschneider.com>
This commit is contained in:
committed by
GitHub
parent
fc68cf7eb2
commit
b3b43a56af
2
.github/workflows/e2e-tests.yml
vendored
2
.github/workflows/e2e-tests.yml
vendored
@@ -27,6 +27,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
tags: pocket-id/pocket-id:test
|
tags: pocket-id/pocket-id:test
|
||||||
outputs: type=docker,dest=/tmp/docker-image.tar
|
outputs: type=docker,dest=/tmp/docker-image.tar
|
||||||
|
build-args: BUILD_TAGS=e2etest
|
||||||
|
|
||||||
- name: Upload Docker image artifact
|
- name: Upload Docker image artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
@@ -51,6 +52,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: docker-image
|
name: docker-image
|
||||||
path: /tmp
|
path: /tmp
|
||||||
|
|
||||||
- name: Load Docker Image
|
- name: Load Docker Image
|
||||||
run: docker load -i /tmp/docker-image.tar
|
run: docker load -i /tmp/docker-image.tar
|
||||||
|
|
||||||
|
|||||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"go.buildTags": "e2etest"
|
||||||
|
}
|
||||||
@@ -49,7 +49,7 @@ The backend is built with [Gin](https://gin-gonic.com) and written in Go.
|
|||||||
|
|
||||||
1. Open the `backend` folder
|
1. Open the `backend` folder
|
||||||
2. Copy the `.env.example` file to `.env` and change the `APP_ENV` to `development`
|
2. Copy the `.env.example` file to `.env` and change the `APP_ENV` to `development`
|
||||||
3. Start the backend with `go run cmd/main.go`
|
3. Start the backend with `go run -tags e2etest ./cmd`
|
||||||
|
|
||||||
### Frontend
|
### Frontend
|
||||||
|
|
||||||
|
|||||||
11
Dockerfile
11
Dockerfile
@@ -1,3 +1,6 @@
|
|||||||
|
# Tags passed to "go build"
|
||||||
|
ARG BUILD_TAGS=""
|
||||||
|
|
||||||
# Stage 1: Build Frontend
|
# Stage 1: Build Frontend
|
||||||
FROM node:22-alpine AS frontend-builder
|
FROM node:22-alpine AS frontend-builder
|
||||||
WORKDIR /app/frontend
|
WORKDIR /app/frontend
|
||||||
@@ -9,6 +12,7 @@ RUN npm prune --production
|
|||||||
|
|
||||||
# Stage 2: Build Backend
|
# Stage 2: Build Backend
|
||||||
FROM golang:1.23-alpine AS backend-builder
|
FROM golang:1.23-alpine AS backend-builder
|
||||||
|
ARG BUILD_TAGS
|
||||||
WORKDIR /app/backend
|
WORKDIR /app/backend
|
||||||
COPY ./backend/go.mod ./backend/go.sum ./
|
COPY ./backend/go.mod ./backend/go.sum ./
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
@@ -17,7 +21,12 @@ RUN apk add --no-cache gcc musl-dev
|
|||||||
|
|
||||||
COPY ./backend ./
|
COPY ./backend ./
|
||||||
WORKDIR /app/backend/cmd
|
WORKDIR /app/backend/cmd
|
||||||
RUN CGO_ENABLED=1 GOOS=linux go build -o /app/backend/pocket-id-backend .
|
RUN CGO_ENABLED=1 \
|
||||||
|
GOOS=linux \
|
||||||
|
go build \
|
||||||
|
-tags "${BUILD_TAGS}" \
|
||||||
|
-o /app/backend/pocket-id-backend \
|
||||||
|
.
|
||||||
|
|
||||||
# Stage 3: Production Image
|
# Stage 3: Production Image
|
||||||
FROM node:22-alpine
|
FROM node:22-alpine
|
||||||
|
|||||||
21
backend/internal/bootstrap/e2etest_router_bootstrap.go
Normal file
21
backend/internal/bootstrap/e2etest_router_bootstrap.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
//go:build e2etest
|
||||||
|
|
||||||
|
package bootstrap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"github.com/pocket-id/pocket-id/backend/internal/controller"
|
||||||
|
"github.com/pocket-id/pocket-id/backend/internal/service"
|
||||||
|
)
|
||||||
|
|
||||||
|
// When building for E2E tests, add the e2etest controller
|
||||||
|
func init() {
|
||||||
|
registerTestControllers = []func(apiGroup *gin.RouterGroup, db *gorm.DB, appConfigService *service.AppConfigService, jwtService *service.JwtService){
|
||||||
|
func(apiGroup *gin.RouterGroup, db *gorm.DB, appConfigService *service.AppConfigService, jwtService *service.JwtService) {
|
||||||
|
testService := service.NewTestService(db, appConfigService, jwtService)
|
||||||
|
controller.NewTestController(apiGroup, testService)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,10 +16,12 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// This is used to register additional controllers for tests
|
||||||
|
var registerTestControllers []func(apiGroup *gin.RouterGroup, db *gorm.DB, appConfigService *service.AppConfigService, jwtService *service.JwtService)
|
||||||
|
|
||||||
// @title Pocket ID API
|
// @title Pocket ID API
|
||||||
// @version 1
|
// @version 1
|
||||||
// @description API for Pocket ID
|
// @description API for Pocket ID
|
||||||
|
|
||||||
func initRouter(db *gorm.DB, appConfigService *service.AppConfigService) {
|
func initRouter(db *gorm.DB, appConfigService *service.AppConfigService) {
|
||||||
// Set the appropriate Gin mode based on the environment
|
// Set the appropriate Gin mode based on the environment
|
||||||
switch common.EnvConfig.AppEnv {
|
switch common.EnvConfig.AppEnv {
|
||||||
@@ -47,7 +49,6 @@ func initRouter(db *gorm.DB, appConfigService *service.AppConfigService) {
|
|||||||
userService := service.NewUserService(db, jwtService, auditLogService, emailService, appConfigService)
|
userService := service.NewUserService(db, jwtService, auditLogService, emailService, appConfigService)
|
||||||
customClaimService := service.NewCustomClaimService(db)
|
customClaimService := service.NewCustomClaimService(db)
|
||||||
oidcService := service.NewOidcService(db, jwtService, appConfigService, auditLogService, customClaimService)
|
oidcService := service.NewOidcService(db, jwtService, appConfigService, auditLogService, customClaimService)
|
||||||
testService := service.NewTestService(db, appConfigService, jwtService)
|
|
||||||
userGroupService := service.NewUserGroupService(db, appConfigService)
|
userGroupService := service.NewUserGroupService(db, appConfigService)
|
||||||
ldapService := service.NewLdapService(db, appConfigService, userService, userGroupService)
|
ldapService := service.NewLdapService(db, appConfigService, userService, userGroupService)
|
||||||
apiKeyService := service.NewApiKeyService(db)
|
apiKeyService := service.NewApiKeyService(db)
|
||||||
@@ -79,7 +80,9 @@ func initRouter(db *gorm.DB, appConfigService *service.AppConfigService) {
|
|||||||
|
|
||||||
// Add test controller in non-production environments
|
// Add test controller in non-production environments
|
||||||
if common.EnvConfig.AppEnv != "production" {
|
if common.EnvConfig.AppEnv != "production" {
|
||||||
controller.NewTestController(apiGroup, testService)
|
for _, f := range registerTestControllers {
|
||||||
|
f(apiGroup, db, appConfigService, jwtService)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up base routes
|
// Set up base routes
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
//go:build e2etest
|
||||||
|
|
||||||
package controller
|
package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
"github.com/pocket-id/pocket-id/backend/internal/service"
|
"github.com/pocket-id/pocket-id/backend/internal/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
//go:build e2etest
|
||||||
|
|
||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
Reference in New Issue
Block a user