Compare commits
23 Commits
7d9cb5e611
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f80388351f | |||
| 9332f77959 | |||
| 6353e0c7b3 | |||
| 1161717f74 | |||
| b50f928318 | |||
| 256858f169 | |||
| fcab8b4a25 | |||
| fa62efc2e3 | |||
| 2fef8bf255 | |||
| 7737dde2ed | |||
| 3a4e8a2f5a | |||
| 158bd873e2 | |||
| ffa48d5370 | |||
| 240d93ace1 | |||
| 693e906ab7 | |||
| a06c329e97 | |||
| 6027cc4415 | |||
| 6b8081497f | |||
| 378418b9b6 | |||
| 8c46889650 | |||
| 600cae63a2 | |||
| 4e305c0a4a | |||
| cecf5fddc1 |
@@ -0,0 +1,99 @@
|
|||||||
|
name: Build & Push MinAttest
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- dev
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: gitea.theriise.net/steinhelge
|
||||||
|
REGISTRY_HOST: gitea.theriise.net
|
||||||
|
REGISTRY_NAMESPACE: steinhelge
|
||||||
|
IMAGE_NAME: minattest
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
wake-zorin:
|
||||||
|
name: Wake Zorin
|
||||||
|
runs-on: waker # t610-waker-runneren med label "waker"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Wake Zorin via WOL
|
||||||
|
run: /home/steinhelge/wake-zorin.sh
|
||||||
|
|
||||||
|
- name: Vent på at Zorin våkner
|
||||||
|
run: sleep 10
|
||||||
|
|
||||||
|
build-and-push:
|
||||||
|
runs-on: self-hosted
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Finn ut hvilken tag vi skal bruke
|
||||||
|
- name: Set image tag
|
||||||
|
run: |
|
||||||
|
# Gitea prøver å være kompatibel med GitHub Actions
|
||||||
|
# Noen ganger er GITHUB_REF_NAME bare 'main', andre ganger 'refs/heads/main'
|
||||||
|
REF="${GITHUB_REF_NAME:-$GITHUB_REF}"
|
||||||
|
REF="${REF#refs/heads/}"
|
||||||
|
|
||||||
|
if [ "$REF" = "main" ]; then
|
||||||
|
TAG="latest"
|
||||||
|
elif [ "$REF" = "dev" ]; then
|
||||||
|
TAG="dev"
|
||||||
|
else
|
||||||
|
# fallback: bruk branchnavnet som tag, men uten skråstreker
|
||||||
|
TAG="$(echo "$REF" | tr '/' '-')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Bygger med TAG=$TAG"
|
||||||
|
echo "TAG=$TAG" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Log in to Gitea Container Registry
|
||||||
|
run: |
|
||||||
|
echo "${{ secrets.REGISTRY_TOKEN }}" | docker login $REGISTRY -u steinhelge --password-stdin
|
||||||
|
|
||||||
|
# ---------- Frontend ----------
|
||||||
|
- name: Build Frontend (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker build \
|
||||||
|
-t $REGISTRY/minattest-frontend:${TAG} \
|
||||||
|
-f frontend/minattest-app/Dockerfile \
|
||||||
|
frontend/minattest-app
|
||||||
|
|
||||||
|
- name: Push Frontend (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker push $REGISTRY/minattest-frontend:${TAG}
|
||||||
|
|
||||||
|
# ---------- Backend API ----------
|
||||||
|
- name: Build API (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker build \
|
||||||
|
-t $REGISTRY/minattest-api:${TAG} \
|
||||||
|
-f backend/Dockerfile \
|
||||||
|
backend
|
||||||
|
|
||||||
|
- name: Push API (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker push $REGISTRY/minattest-api:${TAG}
|
||||||
|
|
||||||
|
# ---------- App Host / BFF ----------
|
||||||
|
- name: Build App Host (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker build \
|
||||||
|
-t $REGISTRY/minattest-app-host:${TAG} \
|
||||||
|
-f frontend/minattest-app-host/Dockerfile \
|
||||||
|
frontend/minattest-app-host
|
||||||
|
|
||||||
|
- name: Push App Host (${{ env.TAG }})
|
||||||
|
run: |
|
||||||
|
docker push $REGISTRY/minattest-app-host:${TAG}
|
||||||
|
|
||||||
|
- name: Deploy (docker compose pull + up)
|
||||||
|
run: |
|
||||||
|
cd /srv/minattest # ← Endre denne pathen hvis compose ligger et annet sted
|
||||||
|
docker compose pull
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# ci ping ma. 17. nov. 20:22:27 +0100 2025
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# test ma. 17. nov. 17:50:01 +0100 2025
|
||||||
|
# test ma. 17. nov. 17:51:01 +0100 2025
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"isRoot": true,
|
"isRoot": true,
|
||||||
"tools": {
|
"tools": {
|
||||||
"dotnet-ef": {
|
"dotnet-ef": {
|
||||||
"version": "9.0.9",
|
"version": "9.0.11",
|
||||||
"commands": [
|
"commands": [
|
||||||
"dotnet-ef"
|
"dotnet-ef"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*"
|
"AllowedHosts": "*"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<PackageReference Include="MediatR" Version="12.*" />
|
<PackageReference Include="MediatR" Version="12.*" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.*" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.*" />
|
||||||
<PackageReference Include="FluentValidation" Version="12.*" />
|
<PackageReference Include="FluentValidation" Version="12.*" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.9" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.11" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\MinAttest.Domain\MinAttest.Domain.csproj" />
|
<ProjectReference Include="..\MinAttest.Domain\MinAttest.Domain.csproj" />
|
||||||
|
|||||||
Generated
+1
-1
@@ -20,7 +20,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
backend/src/MinAttest.Infrastructure/Data/Migrations/20250913112309_EnableTemporalTables.Designer.cs
Generated
+1
-1
@@ -20,7 +20,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
Generated
+1
-1
@@ -20,7 +20,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace MinAttest.Infrastructure.Data.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "9.0.9")
|
.HasAnnotation("ProductVersion", "9.0.11")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.*" />
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.*" />
|
||||||
<PackageReference Include="FluentAssertions" Version="8.*" />
|
<PackageReference Include="FluentAssertions" Version="8.*" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.*" />
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.*" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.9" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.11" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.9" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.11" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.9" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.11" />
|
||||||
<PackageReference Include="Azure.Core" Version="1.48.0" />
|
<PackageReference Include="Azure.Core" Version="1.48.0" />
|
||||||
<PackageReference Include="Testcontainers" Version="4.*" />
|
<PackageReference Include="Testcontainers" Version="4.*" />
|
||||||
<PackageReference Include="Testcontainers.MsSql" Version="4.*" />
|
<PackageReference Include="Testcontainers.MsSql" Version="4.*" />
|
||||||
|
|||||||
@@ -1,42 +1,42 @@
|
|||||||
{
|
{
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [ "Serilog.Sinks.Console" ],
|
"Using": [ "Serilog.Sinks.Console" ],
|
||||||
"MinimumLevel": {
|
"MinimumLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Verbose",
|
||||||
"Override": {
|
"Override": {
|
||||||
"Microsoft": "Information",
|
"Microsoft": "Information",
|
||||||
"System": "Information"
|
"System": "Information"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WriteTo": [
|
"WriteTo": [
|
||||||
{
|
{
|
||||||
"Name": "Console",
|
"Name": "Console",
|
||||||
"Args": {
|
"Args": {
|
||||||
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console",
|
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console",
|
||||||
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}|{RequestId}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
|
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}|{RequestId}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Enrich": [ "FromLogContext" ]
|
"Enrich": [ "FromLogContext" ]
|
||||||
},
|
},
|
||||||
"ReverseProxy": {
|
"ReverseProxy": {
|
||||||
"Routes": {
|
"Routes": {
|
||||||
"userApiRoute": {
|
"userApiRoute": {
|
||||||
"ClusterId": "clusterUser",
|
"ClusterId": "clusterUser",
|
||||||
"Match": {
|
"Match": {
|
||||||
"Path": "/api/{**catch-all}"
|
"Path": "/api/{**catch-all}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Clusters": {
|
"Clusters": {
|
||||||
"clusterUser": {
|
"clusterUser": {
|
||||||
"Destinations": {
|
"Destinations": {
|
||||||
"destination1": {
|
"destination1": {
|
||||||
"Address": "https://localhost:7172/"
|
"Address": "http://backend-api:8080/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*"
|
"AllowedHosts": "*"
|
||||||
}
|
}
|
||||||
@@ -1,42 +1,42 @@
|
|||||||
{
|
{
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"Using": [ "Serilog.Sinks.Console" ],
|
"Using": [ "Serilog.Sinks.Console" ],
|
||||||
"MinimumLevel": {
|
"MinimumLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Verbose",
|
||||||
"Override": {
|
"Override": {
|
||||||
"Microsoft": "Information",
|
"Microsoft": "Information",
|
||||||
"System": "Information"
|
"System": "Information"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"WriteTo": [
|
"WriteTo": [
|
||||||
{
|
{
|
||||||
"Name": "Console",
|
"Name": "Console",
|
||||||
"Args": {
|
"Args": {
|
||||||
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console",
|
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Literate, Serilog.Sinks.Console",
|
||||||
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}|{RequestId}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
|
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}|{RequestId}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Enrich": [ "FromLogContext" ]
|
"Enrich": [ "FromLogContext" ]
|
||||||
},
|
},
|
||||||
"ReverseProxy": {
|
"ReverseProxy": {
|
||||||
"Routes": {
|
"Routes": {
|
||||||
"userApiRoute": {
|
"userApiRoute": {
|
||||||
"ClusterId": "clusterUser",
|
"ClusterId": "clusterUser",
|
||||||
"Match": {
|
"Match": {
|
||||||
"Path": "/api/{**catch-all}"
|
"Path": "/api/{**catch-all}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Clusters": {
|
"Clusters": {
|
||||||
"clusterUser": {
|
"clusterUser": {
|
||||||
"Destinations": {
|
"Destinations": {
|
||||||
"destination1": {
|
"destination1": {
|
||||||
"Address": "https://localhost:7172/"
|
"Address": "http://backend-api:8080/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*"
|
"AllowedHosts": "*"
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>MinAttest</title>
|
<title>MinAttest.</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
Reference in New Issue
Block a user