From 6ddcdedee85912a1b6de927807ceb4bd5e3a0226 Mon Sep 17 00:00:00 2001 From: Nicolas Dorier Date: Fri, 13 Mar 2026 14:04:27 +0900 Subject: [PATCH] Bump the builder to dotnet 10.0 --- .github/workflows/playwright.yml | 4 +-- Dockerfile | 29 +++++++++++------ .../PluginBuilder.Tests.csproj | 12 +++---- PluginBuilder.Tests/ServerTester.cs | 14 ++++----- PluginBuilder/Controllers/AdminController.cs | 2 +- PluginBuilder/Controllers/HomeController.cs | 2 +- PluginBuilder/PluginBuilder.Dockerfile | 5 ++- PluginBuilder/PluginBuilder.csproj | 31 +++++++++---------- PluginBuilder/Program.cs | 7 +++-- 9 files changed, 57 insertions(+), 49 deletions(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index ead09f4..f6a58ec 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -16,10 +16,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Setup .NET 8 + - name: Setup .NET 10 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.x + dotnet-version: 10.0.x - name: Build solution run: dotnet build --configuration Release diff --git a/Dockerfile b/Dockerfile index 985e174..eb6a5f7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/sdk:8.0.100-bookworm-slim AS builder +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 WORKDIR /source @@ -9,27 +9,36 @@ ARG VERSION ARG GIT_COMMIT RUN cd PluginBuilder && dotnet publish -p:Version=${VERSION} -p:GitCommit=${GIT_COMMIT} --output /app/ --configuration ${CONFIGURATION_NAME} -FROM mcr.microsoft.com/dotnet/aspnet:8.0.0-bookworm-slim -ENV LC_ALL en_US.UTF-8 -ENV LANG en_US.UTF-8 +FROM mcr.microsoft.com/dotnet/aspnet:10.0 +ENV LC_ALL=en_US.UTF-8 +ENV LANG=en_US.UTF-8 WORKDIR /datadir WORKDIR /app ENV PB_DATADIR=/datadir ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 VOLUME /datadir -ENV DEBIAN_FRONTEND=noninteractive +ENV DEBIAN_FRONTEND=noninteractive # Install curl RUN apt-get -qq update \ - && apt-get -qq install apt-transport-https ca-certificates curl gnupg lsb-release --no-install-recommends \ + && apt-get -y -qq install apt-transport-https ca-certificates curl gnupg lsb-release --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # Install docker -RUN curl -o cli.deb https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-ce-cli_24.0.7-1~debian.12~bookworm_amd64.deb && \ - curl -o buildx.deb https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/docker-buildx-plugin_0.11.2-1~debian.12~bookworm_amd64.deb && \ - dpkg -i cli.deb buildx.deb && \ - rm cli.deb buildx.deb +RUN install -m 0755 -d /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + chmod a+r /etc/apt/keyrings/docker.gpg && \ + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + +RUN apt-get -qq update \ + && apt-get -y -qq install docker-ce-cli docker-buildx-plugin docker-compose-plugin \ + && rm -rf /var/lib/apt/lists/* COPY --from=builder "/app" . ENTRYPOINT ["/app/PluginBuilder"] diff --git a/PluginBuilder.Tests/PluginBuilder.Tests.csproj b/PluginBuilder.Tests/PluginBuilder.Tests.csproj index 5eacae6..14dff09 100644 --- a/PluginBuilder.Tests/PluginBuilder.Tests.csproj +++ b/PluginBuilder.Tests/PluginBuilder.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable false @@ -16,14 +16,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/PluginBuilder.Tests/ServerTester.cs b/PluginBuilder.Tests/ServerTester.cs index dd2f10f..ab6469f 100644 --- a/PluginBuilder.Tests/ServerTester.cs +++ b/PluginBuilder.Tests/ServerTester.cs @@ -105,18 +105,16 @@ public class ServerTester : IAsyncDisposable Program host = new(); var projectDir = FindPluginBuilderDirectory(); + var webappBuilder = host.CreateWebApplicationBuilder(new WebApplicationOptions { ContentRootPath = projectDir, WebRootPath = Path.Combine(projectDir, "wwwroot"), - Args = ["--urls=http://127.0.0.1:0"] - }); - - // Inject configuration directly instead of using environment variables to avoid cross-test contamination - webappBuilder.Configuration.AddInMemoryCollection(new Dictionary - { - ["POSTGRES"] = connStr, - ["STORAGE_CONNECTION_STRING"] = StorageConnectionString + Args = [ + "--urls=http://127.0.0.1:0", + $"--postgres={connStr}", + $"--storage_connection_string={StorageConnectionString}", + ] }); webappBuilder.Services.AddHttpClient(); diff --git a/PluginBuilder/Controllers/AdminController.cs b/PluginBuilder/Controllers/AdminController.cs index d9b9ea6..976e92b 100644 --- a/PluginBuilder/Controllers/AdminController.cs +++ b/PluginBuilder/Controllers/AdminController.cs @@ -84,7 +84,7 @@ public class AdminController( AdminPluginViewModel plugin = new() { PluginSlug = row.slug, - Visibility = row.visibility, + Visibility = Enum.Parse((string)row.visibility, true), PrimaryOwnerEmail = row.email, HasPendingListingRequest = row.has_pending_request, PluginTitle = pluginSettings?.PluginTitle diff --git a/PluginBuilder/Controllers/HomeController.cs b/PluginBuilder/Controllers/HomeController.cs index 999a1de..ea2c422 100644 --- a/PluginBuilder/Controllers/HomeController.cs +++ b/PluginBuilder/Controllers/HomeController.cs @@ -494,7 +494,7 @@ public class HomeController( IsAdmin = isAdmin, IsOwner = userId != null && userId == primaryOwnerId, PluginVersions = versions.ToList(), - ShowHiddenNotice = (int)pluginDetails.visibility == (int)PluginVisibilityEnum.Hidden, + ShowHiddenNotice = Enum.Parse((string)pluginDetails.visibility, true) == PluginVisibilityEnum.Hidden, Contributors = pluginContributors, RatingFilter = model.RatingFilter, OwnerGithubUrl = ownerGithubUrl, diff --git a/PluginBuilder/PluginBuilder.Dockerfile b/PluginBuilder/PluginBuilder.Dockerfile index dae1dd7..6b6f9d2 100644 --- a/PluginBuilder/PluginBuilder.Dockerfile +++ b/PluginBuilder/PluginBuilder.Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/sdk:8.0 +FROM mcr.microsoft.com/dotnet/sdk:10.0 RUN apt-get update && apt-get install -y git jq openssh-client && rm -rf /var/lib/apt/lists/* @@ -8,12 +8,11 @@ USER dotnet WORKDIR /build-tools ENV PLUGIN_PACKER_VERSION=https://github.com/btcpayserver/btcpayserver -RUN git clone --depth 1 -b v2.0.0 --single-branch https://github.com/btcpayserver/btcpayserver && \ +RUN git clone --depth 1 -b v2.3.6-rc5 --single-branch https://github.com/btcpayserver/btcpayserver && \ cd btcpayserver/BTCPayServer.PluginPacker && \ dotnet build -c Release -o "/build-tools/PluginPacker" && \ rm -rf /build-tools/btcpayserver - WORKDIR /out WORKDIR /build COPY --chown=dotnet:dotnet entrypoint.sh /entrypoint.sh diff --git a/PluginBuilder/PluginBuilder.csproj b/PluginBuilder/PluginBuilder.csproj index fcf9d29..96a6c51 100644 --- a/PluginBuilder/PluginBuilder.csproj +++ b/PluginBuilder/PluginBuilder.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 $(Version) enable enable @@ -14,24 +14,23 @@ - - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + + + + + + + + diff --git a/PluginBuilder/Program.cs b/PluginBuilder/Program.cs index 32d14c6..a617966 100644 --- a/PluginBuilder/Program.cs +++ b/PluginBuilder/Program.cs @@ -249,11 +249,14 @@ public class Program .Tag(CacheTags.Plugins)); }); + var dataSourceBuilder = new NpgsqlDataSourceBuilder(configuration.GetRequired("POSTGRES")); + dataSourceBuilder.MapEnum("plugin_visibility_enum"); + var dataSource = dataSourceBuilder.Build(); + services.AddDbContext>(b => { - b.UseNpgsql(configuration.GetRequired("POSTGRES")); + b.UseNpgsql(dataSource); }); - NpgsqlConnection.GlobalTypeMapper.MapEnum("plugin_visibility_enum"); services.AddIdentity(options => {