name: CI / Release / Docs on: push: branches: [master] permissions: contents: write jobs: lint-markdown: name: Markdown Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Run markdownlint-cli2 uses: DavidAnson/markdownlint-cli2-action@v19 with: globs: | **/*.md !.dev/** !docs/api/** !**/node_modules/** !**/bin/** !**/obj/** detect-changes: name: Detect Changes runs-on: ubuntu-latest outputs: src_changed: ${{ steps.check.outputs.src_changed }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Check for src/ changes id: check run: | BEFORE=${{ github.event.before }} if [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then # Initial push — treat everything as changed echo "src_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 fi test: name: Build & Test needs: [lint-markdown, detect-changes] if: needs.detect-changes.outputs.src_changed == 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET 10 uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Restore dependencies run: dotnet restore src/EchoHub.slnx - name: Build run: dotnet build src/EchoHub.slnx --no-restore --configuration Release - name: Test run: dotnet test src/EchoHub.slnx --no-build --configuration Release --verbosity normal # NOTE: Release job disabled until workflows are verified. # Uncomment to enable automatic releases with tags. # release: # name: Create Release # needs: [lint-markdown, detect-changes, test] # if: needs.detect-changes.outputs.src_changed == 'true' # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v4 # # - name: Setup .NET 10 # uses: actions/setup-dotnet@v4 # with: # dotnet-version: '10.0.x' # # - name: Read version # id: version # run: | # VERSION=$(grep -oP '(?<=)[^<]+' src/Directory.Build.props) # echo "version=$VERSION" >> "$GITHUB_OUTPUT" # echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" # # - name: Check if release exists # id: check_release # run: | # if gh release view "${{ steps.version.outputs.tag }}" &>/dev/null; then # echo "exists=true" >> "$GITHUB_OUTPUT" # else # echo "exists=false" >> "$GITHUB_OUTPUT" # fi # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # # - name: Publish Server win-x64 # if: steps.check_release.outputs.exists == 'false' # run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r win-x64 --self-contained true -o publish/server-win-x64 # # - name: Publish Server linux-x64 # if: steps.check_release.outputs.exists == 'false' # run: dotnet publish src/EchoHub.Server/EchoHub.Server.csproj -c Release -r linux-x64 --self-contained true -o publish/server-linux-x64 # # - name: Publish Server osx-x64 # 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 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 # # - name: Publish Client linux-x64 # if: steps.check_release.outputs.exists == 'false' # run: dotnet publish src/EchoHub.Client/EchoHub.Client.csproj -c Release -r linux-x64 --self-contained true -o publish/client-linux-x64 # # - name: Publish Client osx-x64 # 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: Zip artifacts # if: steps.check_release.outputs.exists == 'false' # run: | # cd publish # 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-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/ # # - name: Create GitHub Release # if: steps.check_release.outputs.exists == 'false' # run: | # gh release create "${{ steps.version.outputs.tag }}" \ # --title "EchoHub ${{ steps.version.outputs.tag }}" \ # --generate-notes \ # EchoHub-Server-win-x64.zip \ # EchoHub-Server-linux-x64.zip \ # EchoHub-Server-osx-x64.zip \ # EchoHub-Client-win-x64.zip \ # EchoHub-Client-linux-x64.zip \ # EchoHub-Client-osx-x64.zip # env: # GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} docs: name: Build & Deploy Docs needs: lint-markdown runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup .NET 10 uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Restore .NET tools run: dotnet tool restore - name: Build solution run: dotnet build src/EchoHub.slnx --configuration Release - name: Generate documentation run: dotnet docfx docs/docfx.json - name: Deploy to web branch uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./docs/_site publish_branch: web