From e63d1eb493fd77bdb20d5e0fde80b8dbef6a0c42 Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:01:04 +0100 Subject: [PATCH 1/5] Initial implementation of workspace continuation feature in CI --- .github/workflows/ci.yml | 169 +++++++++++---------------------------- 1 file changed, 45 insertions(+), 124 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54481bc28..fe82e33f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: env: - WORKING_DIR: ${{ github.workspace }} + WORKSPACE: ${{ github.workspace }} GLOBAL_JSON_PATH: '${{ github.workspace }}\global.json' SOLUTION_PATH: '${{ github.workspace }}\SecureFolderFS.Public.slnx' SFFS_UNO_PROJECT_PATH: '${{ github.workspace }}\src\Platforms\SecureFolderFS.Uno\SecureFolderFS.Uno.csproj' @@ -61,9 +61,11 @@ jobs: matrix: configuration: [Release, Debug] project: [NWebDav.Server, NWebDav.Server.HttpListener, Tmds.Fuse] + targetFramework: [net10.0] env: CONFIGURATION: ${{ matrix.configuration }} PROJECT: ${{ matrix.project }} + ID: runtime.lib.${{ matrix.project }}.${{ matrix.targetFramework }}.Environment-${{ matrix.configuration }} steps: - name: Checkout the repository @@ -84,7 +86,7 @@ jobs: } else { $thisProject = "Tmds.Fuse" } - $thisProjectPath = "$env:WORKING_DIR\lib\$thisProject\src\$env:PROJECT" + $thisProjectPath = "$env:WORKSPACE\lib\$thisProject\src\$env:PROJECT" Add-Content -Path $env:GITHUB_ENV -Value "THIS_PROJECT_PATH=$thisProjectPath" - name: Restore @@ -101,11 +103,12 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' + - name: Upload workspace + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ID }} + path: ${{ github.workspace }} + retention-days: 1 # Builds the shared libraries consumed by almost all projects in the SecureFolderFS codebase. shared: @@ -120,6 +123,7 @@ jobs: CONFIGURATION: ${{ matrix.configuration }} PROJECT: ${{ matrix.project }} THIS_PROJECT_PATH: ${{ github.workspace }}\src\Shared\SecureFolderFS.${{ matrix.project }} + ID: runtime.shared.${{ matrix.project }}.${{ matrix.targetFramework }}.Environment-${{ matrix.configuration }} steps: - name: Checkout the repository @@ -147,11 +151,12 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' + - name: Upload workspace + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ID }} + path: ${{ github.workspace }} + retention-days: 1 # Builds the SecureFolderFS SDK libraries. sdk: @@ -166,18 +171,14 @@ jobs: env: CONFIGURATION: ${{ matrix.configuration }} PROJECT: ${{ matrix.project }} + ID: runtime.sdk.${{ matrix.project }}.${{ matrix.targetFramework }}.Environment-${{ matrix.configuration }} + PREREQUISITE: runtime.shared.Storage.net10.0.Environment-${{ matrix.configuration }} steps: - - name: Checkout the repository - uses: actions/checkout@v6 + - name: Download workspace + uses: actions/download-artifact@v8 with: - submodules: recursive - - - name: Install Dependencies - uses: "./.github/install_dependencies" - with: - dotnet-version: ${{ env.DOTNET_SDK }} - run-uno-check: false + name: ${{ env.PREREQUISITE }} - name: Find appropriate project to build run: | @@ -186,16 +187,9 @@ jobs: } else { $thisProject = "Sdk.$env:PROJECT" } - $thisProjectPath = "$env:WORKING_DIR\src\Sdk\SecureFolderFS.$thisProject" + $thisProjectPath = "$env:WORKSPACE\src\Sdk\SecureFolderFS.$thisProject" Add-Content -Path $env:GITHUB_ENV -Value "THIS_PROJECT_PATH=$thisProjectPath" - - name: Restore - run: | - msbuild $env:SOLUTION_PATH ` - -t:Restore ` - -p:Platform="Any CPU" ` - -p:Configuration=$env:CONFIGURATION - - name: Build run: | msbuild $env:THIS_PROJECT_PATH ` @@ -203,12 +197,6 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' - # Builds the SecureFolderFS Core libraries. core: needs: [shared, lib] @@ -237,18 +225,14 @@ jobs: PROJECT: ${{ matrix.project }} THIS_PROJECT_PATH: ${{ github.workspace }}\src\Core\SecureFolderFS.Core.${{ matrix.project }} THIS_TFM: ${{ matrix.targetFramework }} + ID: runtime.core.${{ matrix.project }}.${{ matrix.targetFramework }}.Environment-${{ matrix.configuration }} + PREREQUISITE: runtime.shared.Storage.net10.0.Environment-${{ matrix.configuration }} steps: - - name: Checkout the repository - uses: actions/checkout@v6 + - name: Download workspace + uses: actions/download-artifact@v8 with: - submodules: recursive - - - name: Install Dependencies - uses: "./.github/install_dependencies" - with: - dotnet-version: ${{ env.DOTNET_SDK }} - run-uno-check: false + name: ${{ env.PREREQUISITE }} - name: Find appropriate project to build run: | @@ -257,16 +241,9 @@ jobs: } else { $thisProject = "Core.$env:PROJECT" } - $thisProjectPath = "$env:WORKING_DIR\src\Core\SecureFolderFS.$thisProject" + $thisProjectPath = "$env:WORKSPACE\src\Core\SecureFolderFS.$thisProject" Add-Content -Path $env:GITHUB_ENV -Value "THIS_PROJECT_PATH=$thisProjectPath" - - name: Restore - run: | - msbuild $env:SOLUTION_PATH ` - -t:Restore ` - -p:Platform="Any CPU" ` - -p:Configuration=$env:CONFIGURATION - - name: Build run: | msbuild $env:THIS_PROJECT_PATH ` @@ -275,12 +252,6 @@ jobs: -p:Configuration=$env:CONFIGURATION ` -p:TargetFramework=$env:THIS_TFM -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' - # Builds the SecureFolderFS cross-platform UI library. # This library is the common denominator for both the MAUI and Uno Platform project heads. ui: @@ -290,30 +261,20 @@ jobs: fail-fast: false matrix: configuration: [Release, Debug] + project: [UI] targetFramework: [net10.0] env: CONFIGURATION: ${{ matrix.configuration }} THIS_PROJECT_PATH: ${{ github.workspace }}\src\Platforms\SecureFolderFS.UI THIS_TFM: ${{ matrix.targetFramework }} + ID: runtime.ui.${{ matrix.project }}.${{ matrix.targetFramework }}.Environment-${{ matrix.configuration }} + PREREQUISITE: runtime.sdk.Sdk.net10.0.Environment-${{ matrix.configuration }} steps: - - name: Checkout the repository - uses: actions/checkout@v6 - with: - submodules: recursive - - - name: Install Dependencies - uses: "./.github/install_dependencies" + - name: Download workspace + uses: actions/download-artifact@v8 with: - dotnet-version: ${{ env.DOTNET_SDK }} - run-uno-check: false - - - name: Restore - run: | - msbuild $env:SOLUTION_PATH ` - -t:Restore ` - -p:Platform="Any CPU" ` - -p:Configuration=$env:CONFIGURATION + name: ${{ env.PREREQUISITE }} - name: Build run: | @@ -322,12 +283,6 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' - # Builds the SecureFolderFS Uno Platform app project head. uno: needs: [core, sdk, shared, ui] @@ -336,30 +291,19 @@ jobs: fail-fast: false matrix: configuration: [Release, Debug] + project: [Uno] targetFramework: [net10.0-desktop, net10.0-windows10.0.26100.0] env: CONFIGURATION: ${{ matrix.configuration }} THIS_PROJECT_PATH: ${{ github.workspace }}\src\Platforms\SecureFolderFS.Uno THIS_TFM: ${{ matrix.targetFramework }} + PREREQUISITE: runtime.ui.UI.net10.0.Environment-${{ matrix.configuration }} steps: - - name: Checkout the repository - uses: actions/checkout@v6 - with: - submodules: recursive - - - name: Install Dependencies - uses: "./.github/install_dependencies" + - name: Download workspace + uses: actions/download-artifact@v8 with: - dotnet-version: ${{ env.DOTNET_SDK }} - run-uno-check: false - - - name: Restore - run: | - msbuild $env:SOLUTION_PATH ` - -t:Restore ` - -p:Platform="Any CPU" ` - -p:Configuration=$env:CONFIGURATION + name: ${{ env.PREREQUISITE }} - name: Build run: | @@ -369,12 +313,6 @@ jobs: -p:Configuration=$env:CONFIGURATION ` -p:TargetFramework=$env:THIS_TFM -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' - # Builds the SecureFolderFS MAUI app project head. maui: needs: [core, sdk, shared, ui] @@ -383,30 +321,19 @@ jobs: fail-fast: false matrix: configuration: [Release, Debug] + project: [Maui] targetFramework: [net10.0-android, net10.0-ios] env: CONFIGURATION: ${{ matrix.configuration }} THIS_PROJECT_PATH: ${{ github.workspace }}\src\Platforms\SecureFolderFS.Maui THIS_TFM: ${{ matrix.targetFramework }} + PREREQUISITE: runtime.ui.UI.net10.0.Environment-${{ matrix.configuration }} steps: - - name: Checkout the repository - uses: actions/checkout@v6 - with: - submodules: recursive - - - name: Install Dependencies - uses: "./.github/install_dependencies" + - name: Download workspace + uses: actions/download-artifact@v8 with: - dotnet-version: ${{ env.DOTNET_SDK }} - run-uno-check: false - - - name: Restore - run: | - msbuild $env:SOLUTION_PATH ` - -t:Restore ` - -p:Platform="Any CPU" ` - -p:Configuration=$env:CONFIGURATION + name: ${{ env.PREREQUISITE }} - name: Build run: | @@ -415,9 +342,3 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION ` -p:TargetFramework=$env:THIS_TFM - -# - name: Upload artifact -# uses: actions/upload-artifact@v7 -# with: -# name: '' -# path: '' From a5df1dca1077b2ff5357942f2bc608ae0df37205 Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:03:35 +0100 Subject: [PATCH 2/5] Fix workspace not uploading --- .github/workflows/ci.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe82e33f3..5009a1a10 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -197,6 +197,13 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION + - name: Upload workspace + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ID }} + path: ${{ github.workspace }} + retention-days: 1 + # Builds the SecureFolderFS Core libraries. core: needs: [shared, lib] @@ -252,6 +259,13 @@ jobs: -p:Configuration=$env:CONFIGURATION ` -p:TargetFramework=$env:THIS_TFM + - name: Upload workspace + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ID }} + path: ${{ github.workspace }} + retention-days: 1 + # Builds the SecureFolderFS cross-platform UI library. # This library is the common denominator for both the MAUI and Uno Platform project heads. ui: @@ -283,6 +297,13 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION + - name: Upload workspace + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ID }} + path: ${{ github.workspace }} + retention-days: 1 + # Builds the SecureFolderFS Uno Platform app project head. uno: needs: [core, sdk, shared, ui] From eca9ad2cf8716e879d7766e0f498a940b6bf7fb8 Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:16:04 +0100 Subject: [PATCH 3/5] Try fixing SDK installation and restore --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5009a1a10..e24b454e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,8 @@ env: SFFS_CLI_PROJECT_PATH: '${{ github.workspace }}\src\Platforms\SecureFolderFS.Cli\SecureFolderFS.Cli.csproj' DOTNET_TFM: 'net10.0' DOTNET_SDK: '10.0.102' + NUGET_PACKAGES: ${{ github.workspace }}\.nuget\packages + NUGET_HTTP_CACHE_PATH: ${{ github.workspace }}\.nuget\http-cache jobs: # Ensures that the formatting in all XAML files across the codebase is correct for the latest commit. @@ -180,6 +182,12 @@ jobs: with: name: ${{ env.PREREQUISITE }} + - name: Install Dependencies + uses: "./.github/install_dependencies" + with: + dotnet-version: ${{ env.DOTNET_SDK }} + run-uno-check: false + - name: Find appropriate project to build run: | if ($env:PROJECT -eq "Sdk") { @@ -241,6 +249,12 @@ jobs: with: name: ${{ env.PREREQUISITE }} + - name: Install Dependencies + uses: "./.github/install_dependencies" + with: + dotnet-version: ${{ env.DOTNET_SDK }} + run-uno-check: false + - name: Find appropriate project to build run: | if ($env:PROJECT -eq "Core") { @@ -290,6 +304,12 @@ jobs: with: name: ${{ env.PREREQUISITE }} + - name: Install Dependencies + uses: "./.github/install_dependencies" + with: + dotnet-version: ${{ env.DOTNET_SDK }} + run-uno-check: false + - name: Build run: | msbuild $env:THIS_PROJECT_PATH ` @@ -326,6 +346,12 @@ jobs: with: name: ${{ env.PREREQUISITE }} + - name: Install Dependencies + uses: "./.github/install_dependencies" + with: + dotnet-version: ${{ env.DOTNET_SDK }} + run-uno-check: false + - name: Build run: | msbuild $env:THIS_PROJECT_PATH ` @@ -356,6 +382,12 @@ jobs: with: name: ${{ env.PREREQUISITE }} + - name: Install Dependencies + uses: "./.github/install_dependencies" + with: + dotnet-version: ${{ env.DOTNET_SDK }} + run-uno-check: false + - name: Build run: | msbuild $env:THIS_PROJECT_PATH ` From 68301063aee0b985efdf0b87da0fd1772ff4ea8d Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:31:48 +0100 Subject: [PATCH 4/5] Fix files and folders beginning with `.` disappearing --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e24b454e1..6a8d7317a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,6 +111,7 @@ jobs: name: ${{ env.ID }} path: ${{ github.workspace }} retention-days: 1 + include-hidden-files: true # Builds the shared libraries consumed by almost all projects in the SecureFolderFS codebase. shared: @@ -159,6 +160,7 @@ jobs: name: ${{ env.ID }} path: ${{ github.workspace }} retention-days: 1 + include-hidden-files: true # Builds the SecureFolderFS SDK libraries. sdk: @@ -211,6 +213,7 @@ jobs: name: ${{ env.ID }} path: ${{ github.workspace }} retention-days: 1 + include-hidden-files: true # Builds the SecureFolderFS Core libraries. core: @@ -279,6 +282,7 @@ jobs: name: ${{ env.ID }} path: ${{ github.workspace }} retention-days: 1 + include-hidden-files: true # Builds the SecureFolderFS cross-platform UI library. # This library is the common denominator for both the MAUI and Uno Platform project heads. @@ -323,6 +327,7 @@ jobs: name: ${{ env.ID }} path: ${{ github.workspace }} retention-days: 1 + include-hidden-files: true # Builds the SecureFolderFS Uno Platform app project head. uno: From e95df5c96b48aacb8f78d5c8a571412040abdbb8 Mon Sep 17 00:00:00 2001 From: Lamparter <71598437+Lamparter@users.noreply.github.com> Date: Fri, 3 Apr 2026 11:36:45 +0000 Subject: [PATCH 5/5] Disable unnecessary workspace uploads --- .github/workflows/ci.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a8d7317a..7da3a2446 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,14 +105,6 @@ jobs: -p:Platform="Any CPU" ` -p:Configuration=$env:CONFIGURATION - - name: Upload workspace - uses: actions/upload-artifact@v7 - with: - name: ${{ env.ID }} - path: ${{ github.workspace }} - retention-days: 1 - include-hidden-files: true - # Builds the shared libraries consumed by almost all projects in the SecureFolderFS codebase. shared: runs-on: windows-2025-vs2026 @@ -155,6 +147,7 @@ jobs: -p:Configuration=$env:CONFIGURATION - name: Upload workspace + if: ${{ matrix.project == 'Storage' }} uses: actions/upload-artifact@v7 with: name: ${{ env.ID }} @@ -208,6 +201,7 @@ jobs: -p:Configuration=$env:CONFIGURATION - name: Upload workspace + if: ${{ matrix.project == 'Sdk' }} uses: actions/upload-artifact@v7 with: name: ${{ env.ID }} @@ -276,14 +270,6 @@ jobs: -p:Configuration=$env:CONFIGURATION ` -p:TargetFramework=$env:THIS_TFM - - name: Upload workspace - uses: actions/upload-artifact@v7 - with: - name: ${{ env.ID }} - path: ${{ github.workspace }} - retention-days: 1 - include-hidden-files: true - # Builds the SecureFolderFS cross-platform UI library. # This library is the common denominator for both the MAUI and Uno Platform project heads. ui: