Refactoring complete: v0.4.0 architectural milestone (#1)
## Summary Completed Phase 5 refactoring and reached the target architecture. **Architectural milestone achieved:** - Service layer owns all state and is the sole writer - UI is a thin Fyne view, all widget updates marshaled via `fyne.Do` - Core engines are stateless and injectable - Domain types are pure (no `yaml:"-"` fields) - Full module builds and `go vet ./...` clean ## Changes - Bump version: 0.3.6 → 0.4.0 - Update CHANGELOG with Phase 5 summary - Add ROADMAP "Refactoring Follow-Ups" section ## Known follow-up work 1. **Linux test build broken** — `runner_test.go` needs `//go:build windows` tag 2. **File-size limits exceeded** — `operations.go` (486 lines), `jobs_view.go` (415 lines) See ROADMAP.md for details. --------- Co-authored-by: mixeme <mix.public@ya.ru> Reviewed-on: #1
This commit was merged in pull request #1.
This commit is contained in:
@@ -4,7 +4,7 @@ set -euo pipefail
|
||||
# Optional first argument mirrors build-linux.sh. The Docker build still writes
|
||||
# the final artifact into the local dist/ tree, not into the container. The
|
||||
# default includes the application version and target platform.
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/core/version.go)"
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/app/version.go)"
|
||||
version="${version:-0.0.0-dev}"
|
||||
tag="gitea.mixdep.ru/mix/gosentry-builder:${version}"
|
||||
output="${1:-dist/linux/gosentry-${version}-linux-amd64}"
|
||||
@@ -26,7 +26,7 @@ docker run --rm \
|
||||
-v "$(pwd):/src" \
|
||||
-w /src \
|
||||
"$tag" \
|
||||
bash -c 'CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/core.Version=${VERSION}" -o "${OUTPUT}" ./cmd/gosentry'
|
||||
bash -c 'CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/app.Version=${VERSION}" -o "${OUTPUT}" ./cmd/gosentry'
|
||||
|
||||
# Icons are embedded in the Go binary, so there is no assets directory to copy
|
||||
# after extracting the Linux executable.
|
||||
|
||||
@@ -3,7 +3,7 @@ set -euo pipefail
|
||||
|
||||
# Optional first argument lets a developer or CI job choose the output path. The
|
||||
# default includes the application version and target platform.
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/core/version.go)"
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/app/version.go)"
|
||||
version="${version:-0.0.0-dev}"
|
||||
output="${1:-dist/linux/gosentry-${version}-linux-amd64}"
|
||||
mkdir -p "$(dirname "$output")"
|
||||
@@ -17,7 +17,7 @@ export GOARCH=amd64
|
||||
|
||||
# -trimpath removes local machine paths from debug/build metadata. -s -w strips
|
||||
# symbol/debug tables to keep the desktop binary smaller.
|
||||
go build -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/core.Version=${version}" -o "$output" ./cmd/gosentry
|
||||
go build -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/app.Version=${version}" -o "$output" ./cmd/gosentry
|
||||
|
||||
# The application icon is embedded by Go, so the Linux build does not need a
|
||||
# sidecar assets directory beside the executable.
|
||||
|
||||
@@ -9,7 +9,7 @@ script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
repo_root="$(cd "${script_dir}/.." && pwd)"
|
||||
cd "$repo_root"
|
||||
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/core/version.go)"
|
||||
version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/app/version.go)"
|
||||
version="${version:-0.0.0-dev}"
|
||||
tag="gitea.mixdep.ru/mix/gosentry-builder:${version}"
|
||||
|
||||
@@ -99,15 +99,15 @@ run_in_builder() {
|
||||
}
|
||||
|
||||
build_linux_amd64() {
|
||||
run_in_builder 'mkdir -p dist/linux && CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/core.Version=${VERSION}" -o "dist/linux/gosentry-${VERSION}-linux-amd64" ./cmd/gosentry'
|
||||
run_in_builder 'mkdir -p dist/linux && CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/app.Version=${VERSION}" -o "dist/linux/gosentry-${VERSION}-linux-amd64" ./cmd/gosentry'
|
||||
}
|
||||
|
||||
build_linux_arm64() {
|
||||
run_in_builder 'mkdir -p dist/linux && CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CGO_CFLAGS="--sysroot=/ -I/usr/include/aarch64-linux-gnu" CGO_LDFLAGS="--sysroot=/ -L/usr/lib/aarch64-linux-gnu" PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/core.Version=${VERSION}" -o "dist/linux/gosentry-${VERSION}-linux-arm64" ./cmd/gosentry'
|
||||
run_in_builder 'mkdir -p dist/linux && CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CGO_CFLAGS="--sysroot=/ -I/usr/include/aarch64-linux-gnu" CGO_LDFLAGS="--sysroot=/ -L/usr/lib/aarch64-linux-gnu" PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig go build -buildvcs=false -trimpath -ldflags "-s -w -X gitea.mixdep.ru/mix/gosentry/src/app.Version=${VERSION}" -o "dist/linux/gosentry-${VERSION}-linux-arm64" ./cmd/gosentry'
|
||||
}
|
||||
|
||||
build_windows_amd64() {
|
||||
run_in_builder 'mkdir -p dist/windows && x86_64-w64-mingw32-windres -O coff -o cmd/gosentry/rsrc_windows_amd64.syso packaging/windows/gosentry.rc && CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -H=windowsgui -X gitea.mixdep.ru/mix/gosentry/src/core.Version=${VERSION}" -o "dist/windows/gosentry-${VERSION}-windows-amd64.exe" ./cmd/gosentry'
|
||||
run_in_builder 'mkdir -p dist/windows && x86_64-w64-mingw32-windres -O coff -o cmd/gosentry/rsrc_windows_amd64.syso packaging/windows/gosentry.rc && CC=x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -H=windowsgui -X gitea.mixdep.ru/mix/gosentry/src/app.Version=${VERSION}" -o "dist/windows/gosentry-${VERSION}-windows-amd64.exe" ./cmd/gosentry'
|
||||
}
|
||||
|
||||
mapfile -t targets < <(choose_targets "$@" | normalize_targets | awk '!seen[$0]++')
|
||||
|
||||
@@ -6,7 +6,7 @@ REM directory. Move to the repository root (the parent of scripts\) before using
|
||||
REM relative paths such as .\cmd\gosentry and packaging\windows\gosentry.rc.
|
||||
cd /d "%~dp0\.."
|
||||
|
||||
for /f "tokens=4" %%V in ('findstr /C:"var Version" src\core\version.go') do set "VERSION=%%~V"
|
||||
for /f "tokens=4" %%V in ('findstr /C:"var Version" src\app\version.go') do set "VERSION=%%~V"
|
||||
if "%VERSION%"=="" set "VERSION=0.0.0-dev"
|
||||
set "VERSION=%VERSION:"=%"
|
||||
|
||||
@@ -47,7 +47,7 @@ if %ERRORLEVEL%==0 (
|
||||
REM -trimpath removes local machine paths from the binary, -s -w reduce binary
|
||||
REM size, and -H=windowsgui prevents a separate console window from opening when
|
||||
REM the GUI app starts from Explorer or a shortcut.
|
||||
"%GOEXE%" build -trimpath -ldflags "-s -w -H=windowsgui -X gitea.mixdep.ru/mix/gosentry/src/core.Version=%VERSION%" -o "%OUTPUT%" .\cmd\gosentry
|
||||
"%GOEXE%" build -trimpath -ldflags "-s -w -H=windowsgui -X gitea.mixdep.ru/mix/gosentry/src/app.Version=%VERSION%" -o "%OUTPUT%" .\cmd\gosentry
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
REM Icons are embedded into the executable, so no assets directory is copied next
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
REM GoSentry test runner
|
||||
REM Runs go vet and go test with race detection
|
||||
|
||||
REM Move to repository root
|
||||
cd /d "%~dp0\.."
|
||||
|
||||
REM Fyne uses native libraries through CGO. MSYS2 UCRT64 provides the GCC toolchain
|
||||
REM expected by the Windows build; prepending it keeps the script self-contained
|
||||
REM without permanently changing the user's system PATH.
|
||||
if exist "C:\msys64\ucrt64\bin" set "PATH=C:\msys64\ucrt64\bin;%PATH%"
|
||||
|
||||
REM Race detector requires CGO
|
||||
set "CGO_ENABLED=1"
|
||||
|
||||
echo Running go vet...
|
||||
go vet ./...
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo ✗ go vet failed
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Running go test with race detection...
|
||||
go test -race ./...
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo ✗ go test failed
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ✓ All tests passed
|
||||
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
|
||||
# GoSentry test runner
|
||||
# Runs go vet and go test with race detection
|
||||
|
||||
set -e
|
||||
|
||||
echo "Running go vet..."
|
||||
go vet ./...
|
||||
|
||||
echo ""
|
||||
echo "Running go test with race detection..."
|
||||
go test -race ./...
|
||||
|
||||
echo ""
|
||||
echo "✓ All tests passed"
|
||||
Reference in New Issue
Block a user