Compare commits

...

7 Commits

Author SHA1 Message Date
AI-Manager c6fdcc8a11 Merge pull request 'feat: implement graceful shutdown on SIGTERM/SIGINT (#201)' (#211) from feat/graceful-shutdown-201 into master
Build and Push / test (push) Successful in 34s
Build and Push / build (push) Failing after 14s
2026-04-20 17:08:14 +00:00
AI-Manager baf6977a33 Merge pull request 'feat: add GetChangedFiles() to Gitea client (#205)' (#208) from feat/get-changed-files-205 into master
Build and Push / test (push) Successful in 53s
Build and Push / build (push) Failing after 15s
2026-04-20 17:05:47 +00:00
AI-Manager f1e4b0c2ba Merge pull request 'chore: add go.sum and fix Dockerfile build (#203, #180)' (#209) from chore/add-go-sum-203 into master
Build and Push / test (push) Successful in 1m40s
Build and Push / build (push) Failing after 14s
2026-04-20 17:05:34 +00:00
AI-Manager fa63d56e43 Merge pull request 'fix: add pull_request trigger to CI workflow (#204)' (#207) from fix/ci-pull-request-trigger-204 into master
Build and Push / test (push) Successful in 2m42s
Build and Push / build (push) Failing after 13s
2026-04-20 17:05:20 +00:00
agent-company c7d68c742d feat: implement graceful shutdown on SIGTERM/SIGINT with request draining
Replace http.ListenAndServe with http.Server and signal handling to
support graceful shutdown. On SIGTERM or SIGINT, the server drains
in-flight requests with a 15-second timeout before exiting cleanly.
This prevents dropped connections during Kubernetes pod termination.

Closes leeworks-agents/gitea-mobile#201

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 15:07:29 +00:00
agent-company 674c75f5eb chore: add go.sum to version control and copy in Dockerfile
Add empty go.sum file (no external dependencies yet) and update the
Dockerfile build stage to COPY go.sum alongside go.mod for reproducible
module downloads. This ensures the Docker build does not fail when Go
requires go.sum to be present.

Closes leeworks-agents/gitea-mobile#203
Closes leeworks-agents/gitea-mobile#180

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 15:06:53 +00:00
agent-company 02a108a58e fix: add pull_request trigger to CI workflow so tests gate all PRs
Build and Push / test (pull_request) Successful in 3m33s
Build and Push / build (pull_request) Has been skipped
The CI workflow previously only triggered on push to master, meaning PRs
were not tested before merge. Add pull_request trigger for the test job
while restricting the Docker build+push job to push events only.

Closes leeworks-agents/gitea-mobile#204

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-20 15:04:58 +00:00
4 changed files with 39 additions and 4 deletions
+4
View File
@@ -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
View File
@@ -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
View File
@@ -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")
}
View File