Files
EchoHub/.github/workflows/ci-release.yml
T

167 lines
6.4 KiB
YAML

name: CI / Release
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
run: bash scripts/lint-markdown.sh
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 changes
id: check
env:
BEFORE: ${{ github.event.before }}
run: |
if [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
# Initial push — treat everything as changed
echo "src_changed=true" >> "$GITHUB_OUTPUT"
else
SRC_CHANGED=$(git diff --name-only "$BEFORE" HEAD -- 'src/' | wc -l)
[ "$SRC_CHANGED" -gt 0 ] && echo "src_changed=true" >> "$GITHUB_OUTPUT" || echo "src_changed=false" >> "$GITHUB_OUTPUT"
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: 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
- 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 '(?<=<Version>)[^<]+' 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 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
#
# - 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: 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: |
# 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-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'
# 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-Server-osx-arm64.zip \
# EchoHub-Client-win-x64.zip \
# EchoHub-Client-linux-x64.zip \
# EchoHub-Client-osx-x64.zip \
# EchoHub-Client-osx-arm64.zip
# env:
# GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}