Stand up the Go project alongside the Python backend so both run
independently during migration. `make web-go` builds and serves on :8080;
`make web-py` (alias: `make web`) keeps the Python side on :5001.
- go/: new module `fuj-management/go` (Go 1.26)
- cmd/fuj: stdlib-flag dispatcher; `server` + `version` work,
fees/reconcile/sync/infer stubbed for M2/M4
- internal/config: env loader mirroring scripts/config.py
- internal/logging: slog setup, level taken from config
- internal/web: net/http ServeMux + request-timer middleware
- build/Dockerfile: golang:1.26 → alpine:3 multi-stage image
- .golangci.yml: govet, staticcheck, errcheck, gofumpt, unused
- Makefile: web→web-py alias; go-build/go-test/go-run/go-lint/web-go
- CI: parallel build-go job in .gitea/workflows/build.yaml (<tag>-go image)
- docs/plans/: M1 kickoff plan + progress tracker (M1 complete)
- .claude/settings.json: gofumpt + golangci-lint permissions
Gate: make go-build ✓ make go-lint ✓ make go-test ✓ curl :8080 ✓
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
66 lines
1.9 KiB
YAML
66 lines
1.9 KiB
YAML
name: Build and Push
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: 'Image tag'
|
|
required: true
|
|
default: 'latest'
|
|
push:
|
|
tags:
|
|
- '*'
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Login to Gitea registry
|
|
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login -u ${{ github.actor }} --password-stdin gitea.home.hrajfrisbee.cz
|
|
|
|
- name: Build and push
|
|
run: |
|
|
TAG=${{ github.ref_name }}
|
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
TAG=${{ inputs.tag }}
|
|
fi
|
|
IMAGE=gitea.home.hrajfrisbee.cz/${{ github.repository }}:$TAG
|
|
docker build -f build/Dockerfile \
|
|
--build-arg GIT_TAG=$TAG \
|
|
--build-arg GIT_COMMIT=${{ github.sha }} \
|
|
--build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
|
|
-t $IMAGE .
|
|
docker push $IMAGE
|
|
|
|
build-go:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Login to Gitea registry
|
|
run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login -u ${{ github.actor }} --password-stdin gitea.home.hrajfrisbee.cz
|
|
|
|
- name: Build and push Go image
|
|
run: |
|
|
TAG=${{ github.ref_name }}
|
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
TAG=${{ inputs.tag }}
|
|
fi
|
|
IMAGE=gitea.home.hrajfrisbee.cz/${{ github.repository }}:$TAG-go
|
|
docker build -f go/build/Dockerfile \
|
|
--build-arg GIT_TAG=$TAG \
|
|
--build-arg GIT_COMMIT=${{ github.sha }} \
|
|
--build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
|
|
-t $IMAGE go/
|
|
docker push $IMAGE
|