fix(ci): route runs-on: deploy jobs through Spot, not the deleted executor

The dispatcher routed `deploy`-labelled jobs (deploy-arikigame, release) to
invokeLambdaExec → the tinqs-ci-exec Lambda. That Lambda was deleted on
26 May 2026, and EXECUTOR_FUNCTION_NAME was never set, so every deploy job
silently hit the `[DRY RUN] Would invoke executor` no-op and never ran.

DEVOPS.md already states "deploy jobs go through Spot now" — the code just
never followed. Drop the dead `case "deploy"` so `deploy` falls through to
the default Spot path (labelToSpot already maps deploy → t3.micro). Remove
the now-unused invokeLambdaExec, ExecFnName, and awslambda import.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 19:50:47 +01:00
parent 46bef04a7d
commit 80a358e8da
2 changed files with 7 additions and 41 deletions
+3
View File
@@ -0,0 +1,3 @@
/bootstrap
/function.zip
/dispatch.exe
+4 -41
View File
@@ -31,7 +31,6 @@ import (
"github.com/aws/aws-sdk-go-v2/service/dynamodb/types"
"github.com/aws/aws-sdk-go-v2/service/ec2"
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
awslambda "github.com/aws/aws-sdk-go-v2/service/lambda"
"gopkg.in/yaml.v3"
)
@@ -113,7 +112,6 @@ type cfg struct {
GiteaURL string
GiteaToken string // API token (for fetching workflows, setting commit status)
RunnerToken string // Runner registration token (for act_runner register)
ExecFnName string
AMI string // pre-baked AMI with Go, Node, Docker, AWS CLI, act_runner
Subnet string
SecurityGroup string
@@ -126,7 +124,6 @@ func loadCfg() cfg {
GiteaURL: os.Getenv("GITEA_URL"),
GiteaToken: os.Getenv("GITEA_TOKEN"),
RunnerToken: os.Getenv("RUNNER_TOKEN"),
ExecFnName: os.Getenv("EXECUTOR_FUNCTION_NAME"),
AMI: os.Getenv("RUNNER_AMI"),
Subnet: os.Getenv("SUBNET"),
SecurityGroup: os.Getenv("SECURITY_GROUP"),
@@ -266,15 +263,14 @@ func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events
runID := fmt.Sprintf("%s-%s-%d", push.After[:7], name, time.Now().UnixMilli())
switch label {
case "deploy":
if err := invokeLambdaExec(ctx, c, push, name, content); err != nil {
log.Printf("Failed to invoke executor for %s: %v", name, err)
continue
}
case "host":
log.Printf("Skipping %s (runs-on: host — registered runner)", name)
continue
default:
// All non-host jobs (go/node/docker/deploy/godot) go through Spot.
// The old `deploy` → Lambda-executor path was retired when
// tinqs-ci-exec was deleted (26 May 2026); deploy now launches
// a t3.micro Spot runner labelled `deploy` like any other job.
instanceID, err := startSpotRunner(ctx, c, label, runID)
if err != nil {
log.Printf("Failed to start spot for %s: %v", name, err)
@@ -385,39 +381,6 @@ func startSpotRunner(ctx context.Context, c cfg, label, runID string) (string, e
return instanceID, nil
}
// --- Lambda executor (for deploy-only jobs) ---
func invokeLambdaExec(ctx context.Context, c cfg, push GiteaPushEvent, workflow, content string) error {
if c.ExecFnName == "" {
log.Printf("[DRY RUN] Would invoke executor for %s", workflow)
return nil
}
awsCfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return err
}
payload, _ := json.Marshal(map[string]interface{}{
"repo": push.Repository,
"ref": push.Ref,
"commit_sha": push.After,
"pusher": push.Pusher.Login,
"workflow_name": workflow,
"workflow_yaml": content,
"gitea_url": c.GiteaURL,
"gitea_token": c.GiteaToken,
})
client := awslambda.NewFromConfig(awsCfg)
_, err = client.Invoke(ctx, &awslambda.InvokeInput{
FunctionName: aws.String(c.ExecFnName),
InvocationType: "Event",
Payload: payload,
})
return err
}
// --- Cancel handler ---
func handleCancel(ctx context.Context, c cfg, body string) (events.APIGatewayProxyResponse, error) {