pushing to docker hub, testing in container build
This commit is contained in:
parent
a2db15831c
commit
090b12eebd
10
.github/workflows/ci.yml
vendored
10
.github/workflows/ci.yml
vendored
@ -38,14 +38,24 @@ jobs:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build CLI Container
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: sarsoo/selector-cli:latest
|
||||
file: Dockerfile.CLI
|
||||
|
||||
- name: Build Web Container
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: sarsoo/selector-web:latest
|
||||
file: Dockerfile.Web
|
||||
|
||||
build-Js:
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,6 +4,7 @@
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
appsettings.Development.json
|
||||
appsettings.Production.json
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
|
@ -1,4 +1,4 @@
|
||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
|
||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base
|
||||
|
||||
COPY *.sln .
|
||||
COPY Selector/*.csproj ./Selector/
|
||||
@ -6,14 +6,21 @@ COPY Selector.Cache/*.csproj ./Selector.Cache/
|
||||
COPY Selector.Event/*.csproj ./Selector.Event/
|
||||
COPY Selector.Model/*.csproj ./Selector.Model/
|
||||
COPY Selector.CLI/*.csproj ./Selector.CLI/
|
||||
COPY Selector.Tests/*.csproj ./Selector.Tests/
|
||||
RUN dotnet restore ./Selector.CLI/Selector.CLI.csproj
|
||||
|
||||
COPY . ./
|
||||
|
||||
FROM base as test
|
||||
RUN dotnet restore ./Selector.Tests/Selector.Tests.csproj
|
||||
RUN dotnet test --no-restore --verbosity normal
|
||||
|
||||
FROM base as publish
|
||||
RUN dotnet publish Selector.CLI/Selector.CLI.csproj -c Release -o /app --no-restore
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/runtime:6.0
|
||||
WORKDIR /app
|
||||
COPY --from=build /app ./
|
||||
COPY --from=publish /app ./
|
||||
ENV DOTNET_EnableDiagnostics=0
|
||||
ENTRYPOINT ["dotnet", "Selector.CLI.dll"]
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
|
||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS base
|
||||
|
||||
COPY *.sln .
|
||||
COPY Selector/*.csproj ./Selector/
|
||||
@ -6,14 +6,21 @@ COPY Selector.Cache/*.csproj ./Selector.Cache/
|
||||
COPY Selector.Event/*.csproj ./Selector.Event/
|
||||
COPY Selector.Model/*.csproj ./Selector.Model/
|
||||
COPY Selector.Web/*.csproj ./Selector.Web/
|
||||
COPY Selector.Tests/*.csproj ./Selector.Tests/
|
||||
RUN dotnet restore ./Selector.Web/Selector.Web.csproj
|
||||
|
||||
COPY . ./
|
||||
|
||||
FROM base as test
|
||||
RUN dotnet restore ./Selector.Tests/Selector.Tests.csproj
|
||||
RUN dotnet test --no-restore --verbosity normal
|
||||
|
||||
FROM base as publish
|
||||
RUN dotnet publish Selector.Web/Selector.Web.csproj -c Release -o /app --no-restore
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:6.0
|
||||
EXPOSE 80
|
||||
WORKDIR /app
|
||||
COPY --from=build /app ./
|
||||
COPY --from=publish /app ./
|
||||
ENV DOTNET_EnableDiagnostics=0
|
||||
ENTRYPOINT ["dotnet", "Selector.Web.dll"]
|
||||
|
@ -78,13 +78,6 @@ namespace Selector.CLI
|
||||
AudioFeatures, AudioFeaturesCache, CacheWriter, Publisher, PlayCounter
|
||||
}
|
||||
|
||||
public class DatabaseOptions {
|
||||
public const string Key = "Database";
|
||||
|
||||
public bool Enabled { get; set; } = false;
|
||||
public string ConnectionString { get; set; }
|
||||
}
|
||||
|
||||
public class RedisOptions
|
||||
{
|
||||
public const string Key = "Redis";
|
||||
|
@ -12,6 +12,7 @@ using Selector.Model;
|
||||
using Selector.Cache;
|
||||
using Selector.Cache.Extensions;
|
||||
using Selector.Events;
|
||||
using Selector.Model.Services;
|
||||
|
||||
namespace Selector.CLI
|
||||
{
|
||||
@ -74,6 +75,8 @@ namespace Selector.CLI
|
||||
services.AddDbContext<ApplicationDbContext>(options =>
|
||||
options.UseNpgsql(config.DatabaseOptions.ConnectionString)
|
||||
);
|
||||
|
||||
services.AddHostedService<MigratorService>();
|
||||
}
|
||||
}
|
||||
|
||||
|
11
Selector.Model/DatabaseOptions.cs
Normal file
11
Selector.Model/DatabaseOptions.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace Selector
|
||||
{
|
||||
public class DatabaseOptions
|
||||
{
|
||||
public const string Key = "Database";
|
||||
|
||||
public bool Enabled { get; set; } = false;
|
||||
public string ConnectionString { get; set; }
|
||||
public bool Migrate { get; set; } = false;
|
||||
}
|
||||
}
|
39
Selector.Model/Services/MigratorService.cs
Normal file
39
Selector.Model/Services/MigratorService.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Selector.Model.Services
|
||||
{
|
||||
public class MigratorService : IHostedService
|
||||
{
|
||||
private readonly ApplicationDbContext context;
|
||||
private readonly DatabaseOptions options;
|
||||
private readonly ILogger<MigratorService> logger;
|
||||
|
||||
public MigratorService(ApplicationDbContext _context, IOptions<DatabaseOptions> _options, ILogger<MigratorService> _logger)
|
||||
{
|
||||
context = _context;
|
||||
options = _options.Value;
|
||||
logger = _logger;
|
||||
}
|
||||
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
if(options.Migrate)
|
||||
{
|
||||
logger.LogInformation("Applying migrations");
|
||||
context.Database.Migrate();
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
36
docker-compose.build.yml
Normal file
36
docker-compose.build.yml
Normal file
@ -0,0 +1,36 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.Web
|
||||
ports:
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- database
|
||||
- redis
|
||||
volumes:
|
||||
- "./Selector.Web/appsettings.Production.json:/appsettings.Production.json"
|
||||
environment:
|
||||
DOTNET_ENVIRONMENT: Production
|
||||
|
||||
cli:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.CLI
|
||||
depends_on:
|
||||
- database
|
||||
- redis
|
||||
volumes:
|
||||
- "./Selector.CLI/appsettings.Production.json:/appsettings.Production.json"
|
||||
environment:
|
||||
DOTNET_ENVIRONMENT: Production
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
ports:
|
||||
- "6379:6379"
|
||||
database:
|
||||
image: postgres
|
||||
ports:
|
||||
- "5432:5432"
|
@ -1,15 +1,27 @@
|
||||
version: "3.9"
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.Web
|
||||
image: sarsoo/selector-web:latest
|
||||
ports:
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- database
|
||||
- redis
|
||||
volumes:
|
||||
- "./Selector.Web/appsettings.Production.json:/appsettings.Production.json"
|
||||
environment:
|
||||
DOTNET_ENVIRONMENT: Production
|
||||
|
||||
cli:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.CLI
|
||||
image: sarsoo/selector-cli:latest
|
||||
depends_on:
|
||||
- database
|
||||
- redis
|
||||
volumes:
|
||||
- "./Selector.CLI/appsettings.Production.json:/appsettings.Production.json"
|
||||
environment:
|
||||
DOTNET_ENVIRONMENT: Production
|
||||
|
||||
redis:
|
||||
image: redis:alpine
|
||||
ports:
|
||||
|
Loading…
Reference in New Issue
Block a user