diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml
index 66379e6..2474e71 100644
--- a/.github/workflows/ci-release.yml
+++ b/.github/workflows/ci-release.yml
@@ -30,25 +30,28 @@ jobs:
runs-on: ubuntu-latest
outputs:
src_changed: ${{ steps.check.outputs.src_changed }}
+ docs_changed: ${{ steps.check.outputs.docs_changed }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- - name: Check for src/ changes
+ - name: Check for changes
id: check
+ env:
+ BEFORE: ${{ github.event.before }}
run: |
- BEFORE=${{ github.event.before }}
if [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
# Initial push — treat everything as changed
echo "src_changed=true" >> "$GITHUB_OUTPUT"
+ echo "docs_changed=true" >> "$GITHUB_OUTPUT"
else
- CHANGED=$(git diff --name-only "$BEFORE" HEAD -- 'src/' | wc -l)
- if [ "$CHANGED" -gt 0 ]; then
- echo "src_changed=true" >> "$GITHUB_OUTPUT"
- else
- echo "src_changed=false" >> "$GITHUB_OUTPUT"
- fi
+ SRC_CHANGED=$(git diff --name-only "$BEFORE" HEAD -- 'src/' | wc -l)
+ DOCS_CHANGED=$(git diff --name-only "$BEFORE" HEAD -- 'docs/' | wc -l)
+
+ [ "$SRC_CHANGED" -gt 0 ] && echo "src_changed=true" >> "$GITHUB_OUTPUT" || echo "src_changed=false" >> "$GITHUB_OUTPUT"
+ # Docs rebuild on docs/ OR src/ changes (docfx reads XML comments from assemblies)
+ [ "$DOCS_CHANGED" -gt 0 ] || [ "$SRC_CHANGED" -gt 0 ] && echo "docs_changed=true" >> "$GITHUB_OUTPUT" || echo "docs_changed=false" >> "$GITHUB_OUTPUT"
fi
test:
@@ -64,6 +67,13 @@ jobs:
with:
dotnet-version: '10.0.x'
+ - name: Cache NuGet packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.nuget/packages
+ key: nuget-${{ runner.os }}-${{ hashFiles('src/**/*.csproj') }}
+ restore-keys: nuget-${{ runner.os }}-
+
- name: Restore dependencies
run: dotnet restore src/EchoHub.slnx
@@ -118,6 +128,10 @@ jobs:
# if: steps.check_release.outputs.exists == 'false'
# run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r osx-x64 --self-contained true -o publish/server-osx-x64
#
+ # - name: Publish Server osx-arm64
+ # if: steps.check_release.outputs.exists == 'false'
+ # run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r osx-arm64 --self-contained true -o publish/server-osx-arm64
+ #
# - name: Publish Client win-x64
# if: steps.check_release.outputs.exists == 'false'
# run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r win-x64 --self-contained true -o publish/client-win-x64
@@ -130,6 +144,10 @@ jobs:
# if: steps.check_release.outputs.exists == 'false'
# run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r osx-x64 --self-contained true -o publish/client-osx-x64
#
+ # - name: Publish Client osx-arm64
+ # if: steps.check_release.outputs.exists == 'false'
+ # run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r osx-arm64 --self-contained true -o publish/client-osx-arm64
+ #
# - name: Zip artifacts
# if: steps.check_release.outputs.exists == 'false'
# run: |
@@ -137,9 +155,11 @@ jobs:
# zip -r ../EchoHub-Server-win-x64.zip server-win-x64/
# zip -r ../EchoHub-Server-linux-x64.zip server-linux-x64/
# zip -r ../EchoHub-Server-osx-x64.zip server-osx-x64/
+ # zip -r ../EchoHub-Server-osx-arm64.zip server-osx-arm64/
# zip -r ../EchoHub-Client-win-x64.zip client-win-x64/
# zip -r ../EchoHub-Client-linux-x64.zip client-linux-x64/
# zip -r ../EchoHub-Client-osx-x64.zip client-osx-x64/
+ # zip -r ../EchoHub-Client-osx-arm64.zip client-osx-arm64/
#
# - name: Create GitHub Release
# if: steps.check_release.outputs.exists == 'false'
@@ -150,15 +170,18 @@ jobs:
# EchoHub-Server-win-x64.zip \
# EchoHub-Server-linux-x64.zip \
# EchoHub-Server-osx-x64.zip \
+ # EchoHub-Server-osx-arm64.zip \
# EchoHub-Client-win-x64.zip \
# EchoHub-Client-linux-x64.zip \
- # EchoHub-Client-osx-x64.zip
+ # EchoHub-Client-osx-x64.zip \
+ # EchoHub-Client-osx-arm64.zip
# env:
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
docs:
name: Build & Deploy Docs
- needs: lint-markdown
+ needs: [lint-markdown, detect-changes]
+ if: needs.detect-changes.outputs.docs_changed == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
@@ -168,6 +191,13 @@ jobs:
with:
dotnet-version: '10.0.x'
+ - name: Cache NuGet packages
+ uses: actions/cache@v4
+ with:
+ path: ~/.nuget/packages
+ key: nuget-${{ runner.os }}-${{ hashFiles('src/**/*.csproj') }}
+ restore-keys: nuget-${{ runner.os }}-
+
- name: Restore .NET tools
run: dotnet tool restore
diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml
index 94ae104..c1a4b93 100644
--- a/.github/workflows/pr-check.yml
+++ b/.github/workflows/pr-check.yml
@@ -28,14 +28,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- name: Check for src/ changes
id: changes
+ env:
+ BASE_REF: ${{ github.base_ref }}
run: |
- git fetch origin ${{ github.base_ref }} --depth=1
- CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD -- 'src/' | wc -l)
+ git fetch origin "$BASE_REF" --depth=1
+ CHANGED=$(git diff --name-only "origin/$BASE_REF"...HEAD -- 'src/' | wc -l)
if [ "$CHANGED" -gt 0 ]; then
echo "src_changed=true" >> "$GITHUB_OUTPUT"
else
@@ -48,6 +48,14 @@ jobs:
with:
dotnet-version: '10.0.x'
+ - name: Cache NuGet packages
+ if: steps.changes.outputs.src_changed == 'true'
+ uses: actions/cache@v4
+ with:
+ path: ~/.nuget/packages
+ key: nuget-${{ runner.os }}-${{ hashFiles('src/**/*.csproj') }}
+ restore-keys: nuget-${{ runner.os }}-
+
- name: Restore dependencies
if: steps.changes.outputs.src_changed == 'true'
run: dotnet restore src/EchoHub.slnx
diff --git a/src/EchoHub.Client/EchoHub.Client.csproj b/src/EchoHub.Client/EchoHub.Client.csproj
index 01a3034..b81b1dd 100644
--- a/src/EchoHub.Client/EchoHub.Client.csproj
+++ b/src/EchoHub.Client/EchoHub.Client.csproj
@@ -17,6 +17,9 @@
PreserveNewest
+
+ EchoHub.Client.appsettings.json
+
diff --git a/src/EchoHub.Client/Program.cs b/src/EchoHub.Client/Program.cs
index 30f5f20..608f310 100644
--- a/src/EchoHub.Client/Program.cs
+++ b/src/EchoHub.Client/Program.cs
@@ -5,9 +5,22 @@ using Microsoft.Extensions.Configuration;
using Serilog;
using Terminal.Gui.App;
+var appSettingsPath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
+if (!File.Exists(appSettingsPath))
+{
+ using var stream = typeof(AppOrchestrator).Assembly
+ .GetManifestResourceStream("EchoHub.Client.appsettings.json");
+
+ if (stream is not null)
+ {
+ using var file = File.Create(appSettingsPath);
+ stream.CopyTo(file);
+ }
+}
+
var configuration = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
+ .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
.Build();
Log.Logger = new LoggerConfiguration()