diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 588900d..a765d2e 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -34,15 +34,15 @@ jobs: - name: Build API image run: | - docker build -f api/Dockerfile -t "${REGISTRY_HOST}/${API_IMAGE}:${IMAGE_TAG}" . + docker build -f Apis/api/Dockerfile -t "${REGISTRY_HOST}/${API_IMAGE}:${IMAGE_TAG}" . - name: Build CV Matcher API image run: | - docker build -f cv-matcher-api/Dockerfile -t "${REGISTRY_HOST}/${CV_MATCHER_API_IMAGE}:${IMAGE_TAG}" . + docker build -f Apis/cv-matcher-api/Dockerfile -t "${REGISTRY_HOST}/${CV_MATCHER_API_IMAGE}:${IMAGE_TAG}" . - name: Build RAG API image run: | - docker build -f rag-api/Dockerfile -t "${REGISTRY_HOST}/${RAG_API_IMAGE}:${IMAGE_TAG}" . + docker build -f Apis/rag-api/Dockerfile -t "${REGISTRY_HOST}/${RAG_API_IMAGE}:${IMAGE_TAG}" . - name: Build Web image run: | @@ -50,7 +50,7 @@ jobs: - name: Build Job worker image run: | - docker build -f cv-cleanup-job/Dockerfile -t "${REGISTRY_HOST}/${JOB_IMAGE}:${IMAGE_TAG}" . + docker build -f Jobs/cv-cleanup-job/Dockerfile -t "${REGISTRY_HOST}/${JOB_IMAGE}:${IMAGE_TAG}" . - name: Push API image run: | diff --git a/Apis/api/Dockerfile b/Apis/api/Dockerfile new file mode 100644 index 0000000..3450b36 --- /dev/null +++ b/Apis/api/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src + +COPY Apis/api/api.csproj Apis/api/ +COPY Apis/shared-models/shared-models.csproj Apis/shared-models/ +COPY Apis/api-models/api-models.csproj Apis/api-models/ +COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/ +COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/ + +RUN dotnet restore Apis/api/api.csproj + +COPY Apis/api/ Apis/api/ +COPY Apis/shared-models/ Apis/shared-models/ +COPY Apis/api-models/ Apis/api-models/ +COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/ +COPY Helpers/startup-helpers/ Helpers/startup-helpers/ + +RUN dotnet publish Apis/api/api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final +WORKDIR /app +EXPOSE 8080 +ENV ASPNETCORE_URLS=http://0.0.0.0:8080 + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "api.dll"] \ No newline at end of file diff --git a/Apis/api/api.csproj b/Apis/api/api.csproj new file mode 100644 index 0000000..282531a --- /dev/null +++ b/Apis/api/api.csproj @@ -0,0 +1,44 @@ + + + + net10.0 + enable + enable + 1.0.0-build.$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) + $(Version) + + false + Linux + true + Api + true + $(NoWarn);1591 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Apis/cv-matcher-api/Dockerfile b/Apis/cv-matcher-api/Dockerfile new file mode 100644 index 0000000..343c535 --- /dev/null +++ b/Apis/cv-matcher-api/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src + +COPY Apis/cv-matcher-api/cv-matcher-api.csproj Apis/cv-matcher-api/ +COPY Apis/shared-models/shared-models.csproj Apis/shared-models/ +COPY Apis/cv-matcher-api-models/cv-matcher-api-models.csproj Apis/cv-matcher-api-models/ +COPY Helpers/common-helpers/common-helpers.csproj Helpers/common-helpers/ +COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/ + +RUN dotnet restore Apis/cv-matcher-api/cv-matcher-api.csproj + +COPY Apis/cv-matcher-api/ Apis/cv-matcher-api/ +COPY Apis/shared-models/ Apis/shared-models/ +COPY Apis/cv-matcher-api-models/ Apis/cv-matcher-api-models/ +COPY Helpers/common-helpers/ Helpers/common-helpers/ +COPY Helpers/startup-helpers/ Helpers/startup-helpers/ + +RUN dotnet publish Apis/cv-matcher-api/cv-matcher-api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final +WORKDIR /app +EXPOSE 8080 +ENV ASPNETCORE_URLS=http://0.0.0.0:8080 + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "cv-matcher-api.dll"] \ No newline at end of file diff --git a/Apis/cv-matcher-api/cv-matcher-api.csproj b/Apis/cv-matcher-api/cv-matcher-api.csproj new file mode 100644 index 0000000..3abf857 --- /dev/null +++ b/Apis/cv-matcher-api/cv-matcher-api.csproj @@ -0,0 +1,85 @@ + + + net10.0 + enable + enable + Linux + Api + true + $(NoWarn);1591 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + diff --git a/Apis/rag-api/Dockerfile b/Apis/rag-api/Dockerfile new file mode 100644 index 0000000..9878095 --- /dev/null +++ b/Apis/rag-api/Dockerfile @@ -0,0 +1,28 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src + +COPY Apis/rag-api/rag-api.csproj Apis/rag-api/ +COPY Apis/shared-models/shared-models.csproj Apis/shared-models/ +COPY Apis/rag-api-models/rag-api-models.csproj Apis/rag-api-models/ +COPY Helpers/common-helpers/common-helpers.csproj Helpers/common-helpers/ +COPY Helpers/startup-helpers/startup-helpers.csproj Helpers/startup-helpers/ + +RUN dotnet restore Apis/rag-api/rag-api.csproj + +COPY Apis/rag-api/ Apis/rag-api/ +COPY Apis/shared-models/ Apis/shared-models/ +COPY Apis/rag-api-models/ Apis/rag-api-models/ +COPY Helpers/common-helpers/ Helpers/common-helpers/ +COPY Helpers/startup-helpers/ Helpers/startup-helpers/ + +RUN dotnet publish Apis/rag-api/rag-api.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final +WORKDIR /app +EXPOSE 8080 +ENV ASPNETCORE_URLS=http://0.0.0.0:8080 + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "rag-api.dll"] \ No newline at end of file diff --git a/Apis/rag-api/rag-api.csproj b/Apis/rag-api/rag-api.csproj new file mode 100644 index 0000000..91f151b --- /dev/null +++ b/Apis/rag-api/rag-api.csproj @@ -0,0 +1,85 @@ + + + net10.0 + enable + enable + Linux + Api + true + $(NoWarn);1591 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + diff --git a/Helpers/startup-helpers/startup-helpers.csproj b/Helpers/startup-helpers/startup-helpers.csproj new file mode 100644 index 0000000..8a5bc9a --- /dev/null +++ b/Helpers/startup-helpers/startup-helpers.csproj @@ -0,0 +1,28 @@ + + + + net10.0 + StartupHelpers + enable + enable + + + + + + + + + + + + + + + + + + + + + diff --git a/Jobs/cv-cleanup-job/Dockerfile b/Jobs/cv-cleanup-job/Dockerfile new file mode 100644 index 0000000..cee0119 --- /dev/null +++ b/Jobs/cv-cleanup-job/Dockerfile @@ -0,0 +1,24 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src + +COPY Jobs/cv-cleanup-job/cv-cleanup-job.csproj Jobs/cv-cleanup-job/ +COPY Jobs/job-scheduler/job-scheduler.csproj Jobs/job-scheduler/ +COPY Apis/api-models/api-models.csproj Apis/api-models/ +COPY Apis/shared-models/shared-models.csproj Apis/shared-models/ + +RUN dotnet restore Jobs/cv-cleanup-job/cv-cleanup-job.csproj + +COPY Jobs/cv-cleanup-job/ Jobs/cv-cleanup-job/ +COPY Jobs/job-scheduler/ Jobs/job-scheduler/ +COPY Apis/api-models/ Apis/api-models/ +COPY Apis/shared-models/ Apis/shared-models/ + +RUN dotnet publish Jobs/cv-cleanup-job/cv-cleanup-job.csproj -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +FROM mcr.microsoft.com/dotnet/runtime:10.0 AS final +WORKDIR /app + +COPY --from=build /app/publish . + +ENTRYPOINT ["dotnet", "cv-cleanup-job.dll"] diff --git a/Jobs/cv-cleanup-job/cv-cleanup-job.csproj b/Jobs/cv-cleanup-job/cv-cleanup-job.csproj new file mode 100644 index 0000000..f5ed4a2 --- /dev/null +++ b/Jobs/cv-cleanup-job/cv-cleanup-job.csproj @@ -0,0 +1,20 @@ + + + + net10.0 + enable + enable + CvCleanupJob + cv-cleanup-job + + + + + + + + + + + + diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index 2004176..119405e 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -2,7 +2,7 @@ services: rag-api: build: context: .. - dockerfile: rag-api/Dockerfile + dockerfile: Apis/rag-api/Dockerfile container_name: myai-rag-api ports: - "8081:8080" @@ -60,7 +60,7 @@ services: - Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587} - Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true} volumes: - - ../api/logs:/app/logs + - ../Apis/api/logs:/app/logs networks: - myai-network restart: unless-stopped @@ -70,7 +70,7 @@ services: cv-matcher-api: build: context: .. - dockerfile: cv-matcher-api/Dockerfile + dockerfile: Apis/cv-matcher-api/Dockerfile container_name: myai-cv-matcher-api depends_on: - rag-api @@ -128,7 +128,7 @@ services: - Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587} - Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true} volumes: - - ../api/logs:/app/logs + - ../Apis/api/logs:/app/logs networks: - myai-network restart: unless-stopped @@ -138,7 +138,7 @@ services: api: build: context: .. - dockerfile: api/Dockerfile + dockerfile: Apis/api/Dockerfile container_name: myai-api depends_on: - cv-matcher-api @@ -146,8 +146,8 @@ services: - "8080:8080" env_file: - .env - # Keep this only if api/.env contains api-specific overrides not present in docker-compose/.env. - # - ../api/.env + # Keep this only if Apis/api/.env contains api-specific overrides not present in docker-compose/.env. + # - ../Apis/api/.env environment: # ASP.NET - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Development} @@ -218,7 +218,7 @@ services: - Serilog__WriteTo__2__Args__port=${Serilog__WriteTo__2__Args__port:-587} - Serilog__WriteTo__2__Args__enableSsl=${Serilog__WriteTo__2__Args__enableSsl:-true} volumes: - - ../api/logs:/app/logs + - ../Apis/api/logs:/app/logs - ${FileStorage__Path:-../Files}:/app/Files networks: - myai-network @@ -229,7 +229,7 @@ services: job: build: context: .. - dockerfile: cv-cleanup-job/Dockerfile + dockerfile: Jobs/cv-cleanup-job/Dockerfile container_name: myai-job depends_on: - api diff --git a/myAi.sln b/myAi.sln index 732b8b7..13ee5c1 100644 --- a/myAi.sln +++ b/myAi.sln @@ -2,13 +2,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 VisualStudioVersion = 18.2.11415.280 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api", "api\api.csproj", "{16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api", "Apis\api\api.csproj", "{16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "web", "web\web.csproj", "{B0A3EAB7-759A-448A-A906-52DF75A70016}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api", "rag-api\rag-api.csproj", "{A63E1C1A-4A78-49F4-9F5C-D43783294861}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api", "Apis\rag-api\rag-api.csproj", "{A63E1C1A-4A78-49F4-9F5C-D43783294861}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api", "cv-matcher-api\cv-matcher-api.csproj", "{C40F5025-B0A6-4B25-B4A2-7EA568E06C40}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api", "Apis\cv-matcher-api\cv-matcher-api.csproj", "{C40F5025-B0A6-4B25-B4A2-7EA568E06C40}" EndProject Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose\docker-compose.dcproj", "{81DDED9D-158B-E303-5F62-77A2896D2A5A}" EndProject @@ -16,25 +16,25 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apis", "Apis", "{0FE6558F-2 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Models", "Models", "{E08A1D43-24A3-4F93-B66A-4230FD8261BA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api-models", "cv-matcher-api-models\cv-matcher-api-models.csproj", "{D09DA1C2-3DC5-48E7-9F5B-739CA41174F1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-matcher-api-models", "Apis\cv-matcher-api-models\cv-matcher-api-models.csproj", "{D09DA1C2-3DC5-48E7-9F5B-739CA41174F1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api-models", "api-models\api-models.csproj", "{FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "api-models", "Apis\api-models\api-models.csproj", "{FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api-models", "rag-api-models\rag-api-models.csproj", "{6A1ADA81-28E9-4A64-A32D-0755876D5EB7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "rag-api-models", "Apis\rag-api-models\rag-api-models.csproj", "{6A1ADA81-28E9-4A64-A32D-0755876D5EB7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shared-models", "shared-models\shared-models.csproj", "{185A8BB0-344A-4856-AEB4-213866EB2EE7}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shared-models", "Apis\shared-models\shared-models.csproj", "{185A8BB0-344A-4856-AEB4-213866EB2EE7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{43E9CD21-25B6-4CB4-B94E-5B953B2E1284}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "startup-helpers", "startup-helpers\startup-helpers.csproj", "{7446D193-8636-4E58-96E4-0C8CB8790679}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "startup-helpers", "Helpers\startup-helpers\startup-helpers.csproj", "{7446D193-8636-4E58-96E4-0C8CB8790679}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "common-helpers", "common-helpers\common-helpers.csproj", "{4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "common-helpers", "Helpers\common-helpers\common-helpers.csproj", "{4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jobs", "Jobs", "{F1A2B3C4-D5E6-4789-ABCD-EF0123456789}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-cleanup-job", "cv-cleanup-job\cv-cleanup-job.csproj", "{E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cv-cleanup-job", "Jobs\cv-cleanup-job\cv-cleanup-job.csproj", "{E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "job-scheduler", "job-scheduler\job-scheduler.csproj", "{A19D2776-B935-BD35-4AB1-3FCE2092805A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "job-scheduler", "Jobs\job-scheduler\job-scheduler.csproj", "{A19D2776-B935-BD35-4AB1-3FCE2092805A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -102,10 +102,10 @@ Global {16F8CA9D-341F-47B8-8E34-F4C5B3E72F3C} = {0FE6558F-2157-47F2-A835-558416CE0E2B} {A63E1C1A-4A78-49F4-9F5C-D43783294861} = {0FE6558F-2157-47F2-A835-558416CE0E2B} {C40F5025-B0A6-4B25-B4A2-7EA568E06C40} = {0FE6558F-2157-47F2-A835-558416CE0E2B} - {D09DA1C2-3DC5-48E7-9F5B-739CA41174F1} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA} - {FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA} - {6A1ADA81-28E9-4A64-A32D-0755876D5EB7} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA} - {185A8BB0-344A-4856-AEB4-213866EB2EE7} = {E08A1D43-24A3-4F93-B66A-4230FD8261BA} + {D09DA1C2-3DC5-48E7-9F5B-739CA41174F1} = {0FE6558F-2157-47F2-A835-558416CE0E2B} + {FB5EAA9E-1B83-41E4-A3BC-F4B7D1AA0769} = {0FE6558F-2157-47F2-A835-558416CE0E2B} + {6A1ADA81-28E9-4A64-A32D-0755876D5EB7} = {0FE6558F-2157-47F2-A835-558416CE0E2B} + {185A8BB0-344A-4856-AEB4-213866EB2EE7} = {0FE6558F-2157-47F2-A835-558416CE0E2B} {7446D193-8636-4E58-96E4-0C8CB8790679} = {43E9CD21-25B6-4CB4-B94E-5B953B2E1284} {4EDDEE9A-E9C7-4972-9C4A-3177611CCFE3} = {43E9CD21-25B6-4CB4-B94E-5B953B2E1284} {E7F21C94-6D88-4E9B-A12F-9C3E8D5B7A41} = {F1A2B3C4-D5E6-4789-ABCD-EF0123456789}