Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2cc1f16bce | |||
| c6fdcc8a11 | |||
| baf6977a33 | |||
| f1e4b0c2ba | |||
| fa63d56e43 | |||
| 46d23bf565 | |||
| c7d68c742d | |||
| 674c75f5eb | |||
| 02a108a58e |
@@ -4,6 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -24,6 +27,7 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
needs: test
|
||||
if: gitea.event_name == 'push'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
# Stage 1: Build
|
||||
FROM golang:1.22-alpine AS builder
|
||||
WORKDIR /app
|
||||
COPY go.mod ./
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /gitea-mobile ./cmd/server
|
||||
|
||||
+34
-3
@@ -1,10 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"gitea.leeworks.dev/0xwheatyz/gitea-mobile/internal/config"
|
||||
giteaclient "gitea.leeworks.dev/0xwheatyz/gitea-mobile/internal/gitea"
|
||||
@@ -36,8 +40,35 @@ func main() {
|
||||
handler = middleware.Auth(cfg.SessionSecret, cfg.GiteaToken)(handler)
|
||||
handler = middleware.Logging()(handler)
|
||||
|
||||
slog.Info("server starting", "addr", cfg.ListenAddr, "gitea_url", cfg.GiteaURL)
|
||||
if err := http.ListenAndServe(cfg.ListenAddr, handler); err != nil {
|
||||
log.Fatalf("server error: %v", err)
|
||||
srv := &http.Server{
|
||||
Addr: cfg.ListenAddr,
|
||||
Handler: handler,
|
||||
}
|
||||
|
||||
// Channel to receive shutdown signals.
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGTERM, syscall.SIGINT)
|
||||
|
||||
// Start server in a goroutine.
|
||||
go func() {
|
||||
slog.Info("server starting", "addr", cfg.ListenAddr, "gitea_url", cfg.GiteaURL)
|
||||
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatalf("server error: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Block until a shutdown signal is received.
|
||||
sig := <-quit
|
||||
slog.Info("shutdown signal received, draining in-flight requests", "signal", sig.String())
|
||||
|
||||
// Give in-flight requests up to 15 seconds to complete.
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||
defer cancel()
|
||||
|
||||
if err := srv.Shutdown(ctx); err != nil {
|
||||
slog.Error("server forced to shutdown", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
slog.Info("server stopped gracefully")
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
</span>
|
||||
<span>{{.Issue.RepoOwner}}/{{.Issue.RepoName}} #{{.Issue.Number}}</span>
|
||||
{{range .Issue.Labels}}
|
||||
<span class="label" style="color:#{{.Color}};border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
<span class="label label-pill" style="background-color:#{{.Color}};color:#fff;border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
{{end}}
|
||||
</div>
|
||||
{{if .RenderedBody}}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="card-meta">
|
||||
<span>{{.RepoOwner}}/{{.RepoName}} #{{.Number}}</span>
|
||||
{{range .Labels}}
|
||||
<span class="label" style="color:#{{.Color}};border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
<span class="label label-pill" style="background-color:#{{.Color}};color:#fff;border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
{{end}}
|
||||
{{if .Assignee}}
|
||||
<img src="{{.Assignee.AvatarURL}}" alt="{{.Assignee.Login}}" class="avatar" title="Assigned to {{.Assignee.Login}}">
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
{{if eq .Pull.State "closed"}}<span class="state-closed">{{.Pull.State}}</span>{{else}}<span class="state-open">{{.Pull.State}}</span>{{end}}
|
||||
<span>{{.Pull.RepoOwner}}/{{.Pull.RepoName}} #{{.Pull.Number}}</span>
|
||||
{{range .Pull.Labels}}
|
||||
<span class="label" style="color:#{{.Color}};border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
<span class="label label-pill" style="background-color:#{{.Color}};color:#fff;border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
{{end}}
|
||||
</div>
|
||||
<div class="card-meta" style="margin-top:0.5rem;">
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="card-meta">
|
||||
<span>{{.RepoOwner}}/{{.RepoName}} #{{.Number}}</span>
|
||||
{{range .Labels}}
|
||||
<span class="label" style="color:#{{.Color}};border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
<span class="label label-pill" style="background-color:#{{.Color}};color:#fff;border:1px solid #{{.Color}}">{{.Name}}</span>
|
||||
{{end}}
|
||||
<span class="diff-add">+{{.Additions}}</span>
|
||||
<span class="diff-del">-{{.Deletions}}</span>
|
||||
|
||||
@@ -176,6 +176,11 @@ a:active {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.label-pill {
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.type-badge {
|
||||
font-size: 0.65rem;
|
||||
text-transform: uppercase;
|
||||
|
||||
Reference in New Issue
Block a user