name: Build and Release on: push: tags: - 'v*' workflow_dispatch: jobs: build: runs-on: windows-latest permissions: contents: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Configure Git Line Endings run: git config --global core.autocrlf input - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Restore dependencies run: dotnet restore # 1. Build Framework-Dependent FIRST (The tiny one) - name: Build Framework-Dependent (Requires .NET 8) run: > dotnet publish SshHandler/SshHandler.csproj --configuration Release --self-contained false /p:PublishSingleFile=true -o ./publish-dotnet8 # 2. Clean to prevent artifact leakage - name: Clean intermediate files run: dotnet clean SshHandler/SshHandler.csproj # 3. Build Standalone SECOND (The heavy one) - name: Build Standalone (Includes Runtime) run: > dotnet publish SshHandler/SshHandler.csproj --configuration Release --runtime win-x64 --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true -o ./publish-standalone - name: Ensure Unix Line Endings for Shell Script shell: pwsh run: | $path = "ssh-handler.sh" if (Test-Path $path) { $content = [System.IO.File]::ReadAllText((Get-Item $path).FullName) $content = $content -replace "`r`n", "`n" [System.IO.File]::WriteAllText((Get-Item $path).FullName, $content, (New-Object System.Text.UTF8Encoding($false))) } - name: Prepare Assets with Versioning shell: pwsh run: | $tag = "${{ github.ref_name }}" if (-not $tag -or $tag -eq "main") { $tag = "manual" } # Rename Executables Move-Item ./publish-standalone/SshHandler.exe "./SshHandler-$tag-Standalone.exe" Move-Item ./publish-dotnet8/SshHandler.exe "./SshHandler-$tag-dotnet8.exe" # Rename Scripts Copy-Item "ssh-handler.sh" "./ssh-handler-$tag.sh" Copy-Item "openssh_protocol_handler.bat" "./openssh_protocol_handler-$tag.bat" - name: Create GitHub Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: | SshHandler-*-Standalone.exe SshHandler-*-dotnet8.exe ssh-handler-*.sh openssh_protocol_handler-*.bat generate_release_notes: true draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}