13 Commits
Author SHA1 Message Date
rock 2f86507c52 test: final Forgejo CI validation
ci / buf (push) Successful in 11s
ci / codegen-check (push) Successful in 3m41s
2026-08-30 20:36:27 -07:00
rock 9b61d0cb16 test: verify CI passes after proto regen
ci / buf (push) Successful in 12s
ci / codegen-check (push) Successful in 2m18s
2026-08-30 20:33:11 -07:00
rock 8afd65a9a4 chore: regenerate protobuf code with latest protoc plugins
ci / buf (push) Successful in 8s
ci / codegen-check (push) Successful in 2m58s
2026-08-30 20:33:10 -07:00
rock c516f79c15 test: verify Forgejo URL fix
ci / buf (push) Successful in 8s
ci / codegen-check (push) Failing after 1m59s
2026-08-30 20:27:05 -07:00
rock a08fe65027 fix: replace GITHUB_SERVER_URL/GITHUB_REPOSITORY/GITHUB_SHA with forgejo.riotpiao.com hardcoded URL
ci / buf (push) Successful in 10s
ci / codegen-check (push) Failing after 2m46s
2026-08-30 20:27:04 -07:00
rock f28b793cec test: final CI validation
ci / buf (push) Successful in 44s
ci / codegen-check (push) Failing after 3m3s
2026-08-30 09:37:03 -07:00
rock 93b0188826 fix: use REGISTRY_PAT secret for git auth (exists on all repos)
ci / buf (push) Successful in 13s
ci / codegen-check (push) Failing after 55s
2026-08-29 22:53:26 -07:00
rock 9b643d9a48 fix: update CI workflow golang image from 1.25 to 1.26
ci / buf (push) Successful in 5s
ci / codegen-check (push) Failing after 1m30s
2026-08-28 15:52:30 -07:00
rock 3a165d6633 upgrade: Go from 1.25.0 to 1.26.0
ci / buf (push) Successful in 9s
ci / codegen-check (push) Failing after 1m43s
2026-08-28 15:52:17 -07:00
rock 6cde453e04 fix: use golang runner label instead of deprecated docker label
ci / buf (push) Canceled after 0s
ci / codegen-check (push) Canceled after 0s
2026-08-28 15:36:26 -07:00
Story Crater Bot c790721f47 test(ci): verify main-branch CI trigger
ci / buf (push) Canceled after 0s
ci / codegen-check (push) Canceled after 0s
2026-08-21 21:07:38 -07:00
Story Crater Bot e0ad32ea0f ci(main): trigger on main branch only
ci / buf (push) Canceled after 0s
ci / codegen-check (push) Canceled after 0s
2026-08-21 21:07:06 -07:00
Story Crater Bot c6131bc111 fix(ci): move to .gitea/workflows, fix malformed clone URL, drop unused CA-trust step
ci / buf (push) Canceled after 0s
ci / codegen-check (push) Canceled after 0s
2026-08-21 18:11:40 -07:00
6 changed files with 86 additions and 99 deletions
-79
View File
@@ -1,79 +0,0 @@
name: ci
on:
push:
pull_request:
jobs:
buf:
runs-on: docker
container:
image: bufbuild/buf:latest
steps:
# actions/checkout@v4 is a JS action — it needs `node` inside the job's
# container to run, but bufbuild/buf has no Node.js. Plain git clone has
# no such dependency and works in any image.
#
# The runner's own homelab CA isn't trusted by this container's
# default CA bundle, so https clone fails cert verification — install
# the CA before cloning.
- name: trust homelab CA
env:
HOMELAB_CA_CERT: ${{ secrets.HOMELAB_CA_CERT }}
run: |
mkdir -p /usr/local/share/ca-certificates
echo "$HOMELAB_CA_CERT" > /usr/local/share/ca-certificates/homelab-ca.crt
update-ca-certificates
- name: checkout
env:
GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone "https://x-access-token:${GIT_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY}.git" .
git checkout "${GITHUB_SHA}"
- name: buf lint
run: buf lint
- name: buf breaking (against main)
run: buf breaking --against '.git#branch=main'
if: github.ref != 'refs/heads/main'
codegen-check:
runs-on: docker
container:
image: golang:1.25
steps:
# Same reason as the buf job: golang:1.25 has no Node.js, so the JS
# action actions/checkout@v4 can't run here — plain git clone instead.
- name: trust homelab CA
env:
HOMELAB_CA_CERT: ${{ secrets.HOMELAB_CA_CERT }}
run: |
mkdir -p /usr/local/share/ca-certificates
echo "$HOMELAB_CA_CERT" > /usr/local/share/ca-certificates/homelab-ca.crt
apt-get update -qq && apt-get install -y -qq ca-certificates >/dev/null
update-ca-certificates
- name: checkout
env:
GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone "https://x-access-token:${GIT_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY}.git" .
git checkout "${GITHUB_SHA}"
- name: Install buf and protoc plugins
run: |
go install github.com/bufbuild/buf/cmd/buf@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest
- name: Regenerate and diff
run: |
export PATH="$PATH:$(go env GOPATH)/bin"
buf generate
git diff --exit-code -- gen || (echo "::error::gen/ is out of date — run buf generate and commit the result" && exit 1)
- name: go build
run: go build ./...
+62
View File
@@ -0,0 +1,62 @@
# Path is .gitea/workflows/, not .forgejo/workflows/ -- verified live on this
# Forgejo instance (forgejo.riotpiao.com) that a .forgejo/workflows/*.yaml
# file never creates an action_run row on push, for any repo. This CI has
# never once executed until this move.
name: ci
on:
push:
branches: [main]
pull_request:
jobs:
buf:
runs-on: golang
container:
image: bufbuild/buf:latest
steps:
# Manual git clone (no actions/checkout@v4 since bufbuild/buf has no node.js).
# Use forgejo.riotpiao.com directly + REGISTRY_PAT for auth.
- name: checkout
env:
REGISTRY_PAT: ${{ secrets.REGISTRY_PAT }}
run: |
git clone "https://oauth2:${REGISTRY_PAT}@forgejo.riotpiao.com/rock/kmsvc-proto.git" .
git checkout "${{ github.sha }}"
- name: buf lint
run: buf lint
- name: buf breaking (against main)
run: buf breaking --against '.git#branch=main'
if: github.ref != 'refs/heads/main'
codegen-check:
runs-on: golang
container:
image: golang:1.26
steps:
# Manual git clone (no actions/checkout@v4 since golang:1.26 has no node.js).
# Use forgejo.riotpiao.com directly + REGISTRY_PAT for auth.
- name: checkout
env:
REGISTRY_PAT: ${{ secrets.REGISTRY_PAT }}
run: |
git clone "https://oauth2:${REGISTRY_PAT}@forgejo.riotpiao.com/rock/kmsvc-proto.git" .
git checkout "${{ github.sha }}"
- name: Install buf and protoc plugins
run: |
go install github.com/bufbuild/buf/cmd/buf@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest
- name: Regenerate and diff
run: |
export PATH="$PATH:$(go env GOPATH)/bin"
buf generate
git diff --exit-code -- gen || (echo "::error::gen/ is out of date — run buf generate and commit the result" && exit 1)
- name: go build
run: go build ./...
+4
View File
@@ -28,3 +28,7 @@ git add -A && git commit -m "..." && git tag vX.Y.Z && git push --tags
CI (`buf-lint-and-breaking`) gates lint + breaking-change checks. CI (`codegen-check`) re-runs `buf generate` and fails if `gen/` doesn't match what's committed — never hand-edit `gen/`. CI (`buf-lint-and-breaking`) gates lint + breaking-change checks. CI (`codegen-check`) re-runs `buf generate` and fails if `gen/` doesn't match what's committed — never hand-edit `gen/`.
See `PLAN.md` for the full rollout plan (tagging convention, server/SDK/CLI migration). See `PLAN.md` for the full rollout plan (tagging convention, server/SDK/CLI migration).
# Final test - clean cache removal
# Test kmsvc-proto with Forgejo URLs
# Test after proto regen
# Final CI validation - Forgejo ready
+1 -1
View File
@@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// versions: // versions:
// protoc-gen-go v1.36.11 // protoc-gen-go v1.36.12
// protoc (unknown) // protoc (unknown)
// source: kafkamgmt/v1/queue_service.proto // source: kafkamgmt/v1/queue_service.proto
+18 -18
View File
@@ -44,9 +44,6 @@ func request_QueueService_SendMessage_0(ctx context.Context, marshaler runtime.M
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -55,6 +52,9 @@ func request_QueueService_SendMessage_0(ctx context.Context, marshaler runtime.M
if err != nil { if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.SendMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.SendMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
@@ -89,9 +89,6 @@ func request_QueueService_SendMessageBatch_0(ctx context.Context, marshaler runt
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -100,6 +97,9 @@ func request_QueueService_SendMessageBatch_0(ctx context.Context, marshaler runt
if err != nil { if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.SendMessageBatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.SendMessageBatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
@@ -133,9 +133,6 @@ func request_QueueService_ReceiveMessage_0(ctx context.Context, marshaler runtim
metadata runtime.ServerMetadata metadata runtime.ServerMetadata
err error err error
) )
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -150,6 +147,9 @@ func request_QueueService_ReceiveMessage_0(ctx context.Context, marshaler runtim
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_QueueService_ReceiveMessage_0); err != nil { if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_QueueService_ReceiveMessage_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.ReceiveMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.ReceiveMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
@@ -184,9 +184,6 @@ func request_QueueService_DeleteMessage_0(ctx context.Context, marshaler runtime
metadata runtime.ServerMetadata metadata runtime.ServerMetadata
err error err error
) )
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -203,6 +200,9 @@ func request_QueueService_DeleteMessage_0(ctx context.Context, marshaler runtime
if err != nil { if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "receipt_handle", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "receipt_handle", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.DeleteMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.DeleteMessage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
@@ -242,9 +242,6 @@ func request_QueueService_DeleteMessageBatch_0(ctx context.Context, marshaler ru
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -253,6 +250,9 @@ func request_QueueService_DeleteMessageBatch_0(ctx context.Context, marshaler ru
if err != nil { if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "queue_name", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.DeleteMessageBatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.DeleteMessageBatch(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
@@ -287,9 +287,6 @@ func request_QueueService_ChangeMessageVisibility_0(ctx context.Context, marshal
if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
val, ok := pathParams["queue_name"] val, ok := pathParams["queue_name"]
if !ok { if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name") return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "queue_name")
@@ -306,6 +303,9 @@ func request_QueueService_ChangeMessageVisibility_0(ctx context.Context, marshal
if err != nil { if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "receipt_handle", err) return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "receipt_handle", err)
} }
if req.Body != nil {
_, _ = io.Copy(io.Discard, req.Body)
}
msg, err := client.ChangeMessageVisibility(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) msg, err := client.ChangeMessageVisibility(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err return msg, metadata, err
} }
+1 -1
View File
@@ -1,6 +1,6 @@
module forgejo.riotpiao.com/rock/kmsvc-proto module forgejo.riotpiao.com/rock/kmsvc-proto
go 1.25.0 go 1.26.0
require ( require (
github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0