diff --git a/.github/workflows/docker-publish-backend.yml b/.github/workflows/docker-publish-backend.yml index d8466bdb8..2d84b767f 100644 --- a/.github/workflows/docker-publish-backend.yml +++ b/.github/workflows/docker-publish-backend.yml @@ -8,8 +8,7 @@ on: jobs: production-deploy: - runs-on: ubuntu-latest - + runs-on: ubuntu-26.04 steps: # 1. Récupération du code - name: Check out the repo @@ -25,8 +24,24 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 10.0.x + - name: Workloads restore + run: dotnet workload restore - name: Test - run: dotnet test --no-build --verbosity normal --filter="Category!=Platform-Android" + env: + TEST_FAILED: "" + run: make test || export TEST_FAILED=$? + - uses: actions/upload-artifact@v7 + with: + name: my-artifact + path: test-reports/**/* + - name: Fail if tests failed + if: ${{ env.TEST_FAILED != '' && env.TEST_FAILED != '0' }} + run: exit $TEST_FAILED + # 4. Build et Push de l'image de production finale - name: Build and push production image uses: docker/build-push-action@v7 diff --git a/CHANGELOG.md b/CHANGELOG.md index 946ee328f..3320ee74f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,11 @@ ### Fixed +* [PostIt.Tests] Les tests du bandeau de session utilisent le bandeau + réellement monté dans la fenêtre headless, au lieu d'un contrôle détaché. + Les fenêtres sont fermées après chaque test et les quatre boutons + de navigation sont vérifiés. + * [PostIt] Les liens Markdown des pièces jointes utilisent désormais le même filtre de nom que l'upload serveur, avant l'encodage URL. Le libellé conserve le nom original, notamment ses accents. diff --git a/Dockerfile.backend b/Dockerfile.backend index a4e9a54a9..46c9a982e 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -1,36 +1,12 @@ # Utilisation de l'image globale pour le build et l'exécution -FROM pazof/yavsc-build-env:debian12-dotnet10-android36-v1 AS build-env +FROM pazof/yavsc-build-env:debian13-dotnet10-android36-jdk21-v4 AS build-env WORKDIR /src - # 1. Copie de la solution -COPY *.sln ./ -COPY Directory.*.props ./ - -# 2. Copie de l'intégralité des fichiers de projets (.csproj) pour la restauration -COPY src/Yavsc.Org/*.csproj ./src/Yavsc.Org/ -COPY src/Yavsc.Abstract/*.csproj ./src/Yavsc.Abstract/ -COPY src/Yavsc.Server/*.csproj ./src/Yavsc.Server/ -COPY src/Yavsc.Api/*.csproj ./src/Yavsc.Api/ -COPY src/Yavsc.Blogs/*.csproj ./src/Yavsc.Blogs/ -COPY src/cli/*.csproj ./src/cli/ -COPY src/Yavsc.Org.Tests/*.csproj ./src/Yavsc.Org.Tests/ - -# Projets associés à PostIt -COPY src/PostIt/PostIt/*.csproj ./src/PostIt/PostIt/ -COPY src/PostIt/PostIt.Android/*.csproj ./src/PostIt/PostIt.Android/ -COPY src/PostIt/PostIt.Browser/*.csproj ./src/PostIt/PostIt.Browser/ -COPY src/PostIt/PostIt.Desktop/*.csproj ./src/PostIt/PostIt.Desktop/ - -# 4. Copie de l'intégralité du code source COPY . . - +RUN dotnet workload restore # 4. Restauration des dépendances pour tous les projets RUN dotnet restore - -# 5. Copie de la totalité du code source (filtrée par votre .dockerignore) -COPY . . - # 6. Compilation du serveur Web principal RUN dotnet build src/Yavsc.Org/Yavsc.Org.csproj -c Release --no-restore -clp:ErrorsOnly diff --git a/Makefile b/Makefile index 1893a910e..04efba0be 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,6 @@ DESTDIR=/tmp/yavsc APP_PATH=srv/www/yavsc APP_FULL_PATH=$(DESTDIR)/$(APP_PATH) -include .env - all: dotnet build --nologo diff --git a/src/PostIt/PostIt.Tests/SessionStatusBannerTests.cs b/src/PostIt/PostIt.Tests/SessionStatusBannerTests.cs index 3516e93d6..f53fffd9a 100644 --- a/src/PostIt/PostIt.Tests/SessionStatusBannerTests.cs +++ b/src/PostIt/PostIt.Tests/SessionStatusBannerTests.cs @@ -1,6 +1,5 @@ using Avalonia.Controls; using Avalonia.Headless.XUnit; -using Avalonia.Styling; using Avalonia.VisualTree; using PostIt.ViewModels; using PostIt.Views; @@ -23,41 +22,36 @@ namespace PostIt.Tests; /// new Window().Show() throws because the harness has not /// been initialised for that thread. /// -/// The session banner's DataContext is not wired in -/// these tests: App.OnFrameworkInitializationCompleted is -/// not called in a unit test, so we set the DataContext on the -/// banner directly. The production code path is exercised +/// These tests set the DataContext directly on the banner +/// mounted in the window. The production code path is exercised /// end-to-end by the manual launch, not here. /// -public class SessionStatusBannerTests +public class SessionStatusBannerTests : IDisposable { - [AvaloniaFact] - public void Banner_renders_three_buttons_in_the_visual_tree() - { - MainWindow window = new MainWindow(); - window.Show(); + private MainWindow? _window; - var buttons = window.GetVisualDescendants() + [AvaloniaFact] + public void Banner_renders_four_buttons_in_the_visual_tree() + { + SessionStatusBanner banner = CreateBanner(); + + var buttons = banner.GetVisualDescendants() .OfType