footer und AppVersion eingebaut
All checks were successful
Docker Release Build / push_to_registry (push) Successful in 1m2s

This commit is contained in:
Florian Walther
2026-02-07 16:45:02 +01:00
parent dd8eab7975
commit c9296beb5f
5 changed files with 55 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
iname: Docker Release Build name: Docker Release Build
on: on:
push: push:
tags: tags:
@@ -25,6 +25,8 @@ jobs:
push: true push: true
# Hier wird die Git-Referenz automatisch als Docker-Tag genutzt # Hier wird die Git-Referenz automatisch als Docker-Tag genutzt
#tags: gitea.scu.si/florianwalther/password-generator:${{ gitea.ref_name }} #tags: gitea.scu.si/florianwalther/password-generator:${{ gitea.ref_name }}
build-args: |
APP_VERSION=${{ gitea.ref_name }}
tags: | tags: |
gitea.scu.si/florian.walther/password-generator:${{ gitea.ref_name }} gitea.scu.si/florian.walther/password-generator:${{ gitea.ref_name }}
gitea.scu.si/florian.walther/password-generator:latest gitea.scu.si/florian.walther/password-generator:latest

View File

@@ -8,7 +8,8 @@ WORKDIR /app
COPY . . COPY . .
# Baue die Anwendung # Baue die Anwendung
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app/password-generator ARG APP_VERSION=dev
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w -X 'main.AppVersion=${APP_VERSION}'" -o /app/password-generator
# Verwende ein minimales Image für die finale Stage # Verwende ein minimales Image für die finale Stage
FROM scratch FROM scratch

25
main.go
View File

@@ -12,13 +12,30 @@ const (
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
) )
//var tmpl *template.Template
var templates = make(map[string]*template.Template) var templates = make(map[string]*template.Template)
var AppVersion = "development"
func loadTemplates() { func loadTemplates() {
templates["index.html"] = template.Must(template.ParseFiles("templates/base.html", "templates/index.html")) // 1. FuncMap definieren
templates["help.html"] = template.Must(template.ParseFiles("templates/base.html", "templates/help.html")) funcMap := template.FuncMap{
log.Printf("Alle Templates erfolgreich geladen") "getAppVersion": func() string {
return AppVersion
},
}
// 2. Templates mit FuncMap laden
// Wir nutzen New("base.html"), da base.html meist das Haupt-Layout definiert
templates["index.html"] = template.Must(template.New("base.html").Funcs(funcMap).ParseFiles(
"templates/base.html",
"templates/index.html",
))
templates["help.html"] = template.Must(template.New("base.html").Funcs(funcMap).ParseFiles(
"templates/base.html",
"templates/help.html",
))
log.Printf("Alle Templates erfolgreich geladen")
} }
func generatePassword() string { func generatePassword() string {

View File

@@ -47,6 +47,33 @@ body {
position: relative; position: relative;
} }
footer {
/* Fixierung am unteren Rand */
position: fixed;
bottom: 0;
left: 0;
/* Ausdehnung */
width: 100%;
/* Design & Abstände */
background: var(--password-bg);
border-top: 1px solid #e0e0e0;
padding: 8px 16px;
/* Text-Ausrichtung */
text-align: left;
font-family: monospace; /* Monospace sieht für Versionen oft "technischer" aus */
font-size: 12px;
color: var(--text-color);
/* Sicherstellen, dass nichts drüber liegt */
z-index: 9999;
/* Padding in die Breite einrechnen */
box-sizing: border-box;
}
#password { #password {
font-family: 'Courier New', Courier, monospace; font-family: 'Courier New', Courier, monospace;
font-size: 1.2rem; font-size: 1.2rem;

View File

@@ -45,5 +45,7 @@
<body> <body>
<button id="theme-toggle">🌓</button> <button id="theme-toggle">🌓</button>
{{ block "body" . }}{{end}} {{ block "body" . }}{{end}}
<footer>Version: {{getAppVersion}} | made with golang and ♥️ {{ block "footer" . }}{{ end }}</footer>
</body> </body>
</html> </html>