c407aad58a
Rot-CI:n föll med 107 lint-fel efter merge:n. Orsaken var inte kod som blivit sämre: Semantikas rot-eslint började granska felsokning/, ett träd med egen verktygskedja och andra regler. Felen låg i värdappens befintliga Supabase-funktioner, oförändrade sedan innan. Rätt åtgärd är att låta varje produkt äga sitt eget träd, inte att lätta på någons regler. felsokning/ ignoreras därför av Semantikas eslint och prettier — den har egen eslint-konfiguration, egna prettier-regler och eget CI-flöde. Ingen regel är försvagad för någon av produkterna. Samtidigt: mina GitHub-workflows för publicering och driftsättning är borttagna. Guidad Felsökning ska inte längre bero på GitHub Actions eller GHCR — bygge, publicering till eget ECR och terraform apply mot EKS ligger nu i .gitea/workflows/felsokning.yml och körs av egna runners. Driftsättningen är fortsatt ett eget, manuellt steg med en bildtagg; rollback är att köra igen med en tidigare tagg. .github/workflows/ci.yml är Semantikas och lämnas orörd. Verifierat: rotens lint, format:check, typecheck och test går igenom, och Guidad Felsöknings egna 96 tester, typkontroll, bygge och integrationstest mot riktig Postgres likaså. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
126 lines
4.4 KiB
YAML
126 lines
4.4 KiB
YAML
# Guidad Felsökning — CI på egna runners i klustret.
|
|
#
|
|
# Samma syntax som GitHub Actions men körs av Gitea Actions-runners på
|
|
# vår egen EKS. Inget externt beroende: koden, bygget och registret
|
|
# ligger i vår AWS-miljö.
|
|
#
|
|
# .github/workflows/ tillhör Semantika och rörs inte.
|
|
name: Guidad Felsökning
|
|
|
|
on:
|
|
push:
|
|
paths: ['felsokning/**', '.gitea/workflows/felsokning.yml']
|
|
pull_request:
|
|
paths: ['felsokning/**']
|
|
workflow_dispatch:
|
|
inputs:
|
|
bildtagg:
|
|
description: 'Bildtagg att driftsätta (commit-SHA från publiceringen)'
|
|
required: true
|
|
type: string
|
|
|
|
jobs:
|
|
test-och-bygg:
|
|
runs-on: felsokning
|
|
defaults:
|
|
run:
|
|
working-directory: felsokning/app
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with: { node-version: 22 }
|
|
- run: npm ci --no-audit --no-fund
|
|
- run: npx vitest run
|
|
- run: npm run typkontroll
|
|
- run: npx eslint src/felsokning src/pages/felsokning src/test --ext .ts,.tsx
|
|
- run: npm run build
|
|
|
|
tjanster:
|
|
runs-on: felsokning
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with: { node-version: 22 }
|
|
- run: npm install --no-audit --no-fund
|
|
working-directory: felsokning/services/plattform
|
|
- run: npx eslint . --ext .mjs
|
|
working-directory: felsokning/services
|
|
# Hela flödet mot riktig Postgres: organisationer, roller,
|
|
# append-only-triggern, isolering, delning, bilagor.
|
|
- run: sudo apt-get update && sudo apt-get install -y postgresql
|
|
- run: sudo bash integrationstest.sh
|
|
working-directory: felsokning/services/plattform
|
|
- run: npx swagger-cli validate felsokning/services/plattform/openapi.yaml
|
|
working-directory: .
|
|
|
|
terraform:
|
|
runs-on: felsokning
|
|
defaults:
|
|
run:
|
|
working-directory: felsokning/infra/terraform
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: hashicorp/setup-terraform@v3
|
|
with: { terraform_version: 1.9.8 }
|
|
- run: terraform fmt -check -recursive
|
|
- run: terraform init -backend=false -input=false
|
|
- run: terraform validate
|
|
|
|
# Bygger och publicerar till vårt eget ECR. Bara på main och bara när
|
|
# kontrollerna ovan gått igenom.
|
|
publicera:
|
|
needs: [test-och-bygg, tjanster, terraform]
|
|
if: gitea.ref == 'refs/heads/main'
|
|
runs-on: felsokning
|
|
permissions:
|
|
id-token: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: aws-actions/configure-aws-credentials@v4
|
|
with:
|
|
role-to-assume: ${{ vars.BYGG_ROLL_ARN }}
|
|
aws-region: ${{ vars.AWS_REGION }}
|
|
- uses: aws-actions/amazon-ecr-login@v2
|
|
id: ecr
|
|
|
|
- name: Bygg och publicera
|
|
env:
|
|
REGISTER: ${{ steps.ecr.outputs.registry }}
|
|
TAGG: ${{ gitea.sha }}
|
|
run: |
|
|
# Klientens API-adress bakas in vid bygget (Vite), så bilden är
|
|
# miljöbunden.
|
|
docker build -t "$REGISTER/guidad-felsokning-web:$TAGG" \
|
|
--build-arg VITE_PLATTFORM_URL="https://${{ vars.DOMAN }}" \
|
|
--build-arg VITE_AI_ORKESTER_URL="https://${{ vars.DOMAN }}" \
|
|
felsokning/app
|
|
docker build -t "$REGISTER/guidad-felsokning-plattform:$TAGG" felsokning/services/plattform
|
|
docker build -t "$REGISTER/guidad-felsokning-ai-orkester:$TAGG" felsokning/services/ai-orkester
|
|
for bild in web plattform ai-orkester; do
|
|
docker push "$REGISTER/guidad-felsokning-$bild:$TAGG"
|
|
done
|
|
|
|
# Driftsättning är ett eget, manuellt steg: en bild i registret är inte
|
|
# samma sak som en bild som kör. Rollback = kör igen med tidigare tagg.
|
|
driftsatt:
|
|
if: gitea.event_name == 'workflow_dispatch'
|
|
runs-on: felsokning
|
|
environment: produktion
|
|
permissions:
|
|
id-token: write
|
|
defaults:
|
|
run:
|
|
working-directory: felsokning/infra/terraform
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: aws-actions/configure-aws-credentials@v4
|
|
with:
|
|
role-to-assume: ${{ vars.DRIFT_ROLL_ARN }}
|
|
aws-region: ${{ vars.AWS_REGION }}
|
|
- run: aws eks update-kubeconfig --name ${{ vars.KLUSTER }}
|
|
- uses: hashicorp/setup-terraform@v3
|
|
with: { terraform_version: 1.9.8 }
|
|
- run: terraform init -input=false
|
|
- run: terraform apply -input=false -auto-approve -var bildtagg=${{ inputs.bildtagg }}
|
|
- run: terraform output karta
|