diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7c98de1..670887b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ stages: include: - local: .gitlab/_common.gitlab-ci.yml - local: .gitlab/_rules.gitlab-ci.yml + - local: /.gitlab/test.gitlab-ci.yml - local: /.gitlab/build.gitlab-ci.yml - local: /.gitlab/deploy.gitlab-ci.yml - template: Jobs/Secret-Detection.gitlab-ci.yml diff --git a/.gitlab/test.gitlab-ci.yml b/.gitlab/test.gitlab-ci.yml new file mode 100644 index 0000000..78333f8 --- /dev/null +++ b/.gitlab/test.gitlab-ci.yml @@ -0,0 +1,15 @@ +unit_tests: + rules: !reference [.rules:default, rules] + stage: test + image: golang:$GOLANG_VERSION-alpine + extends: + - .go-cache + script: + - go install gotest.tools/gotestsum@latest + - gotestsum --junitfile report.xml --format testname -- ./... -coverprofile=profile.cov + - go tool cover -func profile.cov + coverage: '/\(statements\)(?:\s+)?(\d+(?:\.\d+)?%)/' + artifacts: + when: always + reports: + junit: report.xml diff --git a/docker/Dockerfile b/docker/Dockerfile index 130bcfb..ef281f2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -41,7 +41,6 @@ COPY ./scripts/entrypoint.sh . COPY --from=logo /logo.txt . COPY --from=nodeBuilder /app/dist/ ./templates/ COPY --from=goBuilder /app/cafe-plaetschwiesle . -COPY config.toml . ARG VERSION ENV VERSION=$VERSION diff --git a/internal/env/env.go b/internal/env/env.go index 6d09c8e..07e8f06 100644 --- a/internal/env/env.go +++ b/internal/env/env.go @@ -14,7 +14,7 @@ type Config struct { TimeZone string `env:"TZ" envDefault:"Etc/UTC" validate:"timezone"` Port int `env:"PORT" envDefault:"8080" validate:"min=1024,max=49151"` LogLevel string `env:"LOG_LEVEL" envDefault:"info" validate:"oneof=debug info warn error panic fatal"` - Version string `env:"APP_VERSION" envDefault:"v0.0.0"` + Version string `env:"VERSION" envDefault:"v0.0.0"` SwaggerHost string `env:"SWAGGER_HOST" envDefault:"https://cafe.test"` DB_Host string `env:"DB_HOST"` DB_User string `env:"DB_USER"` diff --git a/internal/router/router.go b/internal/router/router.go index 173e5e1..ce5bebe 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -75,13 +75,13 @@ func SetupRoutes(e *echo.Echo, ctrl *controller.Controller, env *env.Config) { health := api.Group("/health", authHeader) { health.GET("", func(ctx echo.Context) error { - return ctx.String(http.StatusOK, ".") + return ctx.String(http.StatusOK, env.Version) }) } if env.SwaggerHost != "" { - docs.SwaggerInfo.Title = "Cafe" - docs.SwaggerInfo.Description = "This is the backend of a cafe" + docs.SwaggerInfo.Title = "Café Plätschwiesle" + docs.SwaggerInfo.Description = "This is the backend of Café Plätschwiesle" docs.SwaggerInfo.Version = env.Version docs.SwaggerInfo.BasePath = "/api" parsed, _ := url.Parse(env.SwaggerHost) diff --git a/web/src/components/UI/TheNavigation.vue b/web/src/components/UI/TheNavigation.vue index e784958..0cc63fb 100644 --- a/web/src/components/UI/TheNavigation.vue +++ b/web/src/components/UI/TheNavigation.vue @@ -103,6 +103,7 @@ export default defineComponent({ visible: () => maker.value, }, { label: "Abmelden", icon: "pi pi-fw pi-power-off", command: () => emit("logout") }, + { label: store.getters.getVersion, icon: "pi pi-fw pi-github", disabled: true }, ], }, ]); diff --git a/web/src/main.ts b/web/src/main.ts index 62086ae..bb9db5c 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -1,4 +1,4 @@ -import { createApp } from "vue"; +import { createApp, version } from "vue"; import { OpenAPI, UsersService } from "@/services/openapi"; import App from "./App.vue"; import router from "./router"; @@ -26,6 +26,7 @@ async function getHealth() { store.commit("setGroups", groups); const user = await UsersService.getUsers(response.headers.get("remote-name") || "Benutzer"); store.commit("setUser", user); + store.commit("setVersion", await response.text()); } getHealth().then(() => { diff --git a/web/src/store/index.ts b/web/src/store/index.ts index 28b8201..861806e 100644 --- a/web/src/store/index.ts +++ b/web/src/store/index.ts @@ -6,6 +6,7 @@ import { controller_User } from "@/services/openapi"; interface AppStateModel { user: controller_User; groups: string[]; + version: string; } export default createStore({ state: { @@ -15,6 +16,7 @@ export default createStore({ show_hot_drinks: true, }, groups: [""], + version: "", }, getters: { getUser(state: AppStateModel) { @@ -26,6 +28,9 @@ export default createStore({ getUsername(state: AppStateModel) { return state.user.username; }, + getVersion(state: AppStateModel) { + return state.version; + }, }, mutations: { setUser(state: AppStateModel, _user: controller_User) { @@ -34,6 +39,9 @@ export default createStore({ setGroups(state: AppStateModel, groups: string[]) { state.groups = groups; }, + setVersion(state: AppStateModel, version: string) { + state.version = version; + }, }, actions: {}, modules: {