name: .NET Core CI on: push: paths-ignore: - '.github/*' - '.github/*_TEMPLATE/**' - '*.md' pull_request: paths-ignore: - '.github/*' - '.github/*_TEMPLATE/**' - '*.md' workflow_dispatch: jobs: build: name: .NET on ${{ matrix.runs-on }} (${{ matrix.configuration }}) runs-on: ${{ matrix.runs-on }} strategy: fail-fast: false matrix: runs-on: [macos-latest, macos-14, ubuntu-latest, windows-latest] configuration: [Release, Debug] env: DOTNET_CLI_TELEMETRY_OPTOUT: 1 steps: - uses: actions/checkout@v4 - name: Setup .NET Core uses: actions/setup-dotnet@v4 - name: Build run: dotnet publish DepotDownloader/DepotDownloader.csproj -c ${{ matrix.configuration }} -o artifacts /p:ContinuousIntegrationBuild=true - name: Upload artifact uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'windows-latest' with: name: DepotDownloader-framework path: artifacts if-no-files-found: error - name: Publish Windows-x64 if: matrix.configuration == 'Release' && matrix.runs-on == 'windows-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime win-x64 --output selfcontained-win-x64 - name: Publish Windows-arm64 if: matrix.configuration == 'Release' && matrix.runs-on == 'windows-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime win-arm64 --output selfcontained-win-arm64 - name: Publish Linux-x64 if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime linux-x64 --output selfcontained-linux-x64 - name: Publish Linux-arm if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime linux-arm --output selfcontained-linux-arm - name: Publish Linux-arm64 if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime linux-arm64 --output selfcontained-linux-arm64 - name: Publish macOS-x64 if: matrix.configuration == 'Release' && matrix.runs-on == 'macos-latest' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime osx-x64 --output selfcontained-osx-x64 - name: Publish macOS-arm64 if: matrix.configuration == 'Release' && matrix.runs-on == 'macos-14' run: dotnet publish DepotDownloader/DepotDownloader.csproj --configuration Release -p:PublishSingleFile=true -p:DebugType=embedded --self-contained --runtime osx-arm64 --output selfcontained-osx-arm64 - name: Upload Windows-x64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'windows-latest' with: name: DepotDownloader-windows-x64 path: selfcontained-win-x64 if-no-files-found: error - name: Upload Windows-arm64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'windows-latest' with: name: DepotDownloader-windows-arm64 path: selfcontained-win-arm64 if-no-files-found: error - name: Upload Linux-x64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' with: name: DepotDownloader-linux-x64 path: selfcontained-linux-x64 if-no-files-found: error - name: Upload Linux-arm uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' with: name: DepotDownloader-linux-arm path: selfcontained-linux-arm if-no-files-found: error - name: Upload Linux-arm64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'ubuntu-latest' with: name: DepotDownloader-linux-arm64 path: selfcontained-linux-arm64 if-no-files-found: error - name: Upload macOS-x64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'macos-latest' with: name: DepotDownloader-macos-x64 path: selfcontained-osx-x64 if-no-files-found: error - name: Upload macOS-arm64 uses: actions/upload-artifact@v4 if: matrix.configuration == 'Release' && matrix.runs-on == 'macos-14' with: name: DepotDownloader-macos-arm64 path: selfcontained-osx-arm64 if-no-files-found: error release: if: startsWith(github.ref, 'refs/tags/') needs: build runs-on: ubuntu-latest steps: - name: Download artifacts uses: actions/download-artifact@v5 with: path: artifacts - name: Display artifacts folder structure run: ls -Rl working-directory: artifacts - name: Create release files run: | set -eux mkdir release chmod +x artifacts/DepotDownloader-linux-x64/DepotDownloader chmod +x artifacts/DepotDownloader-linux-arm/DepotDownloader chmod +x artifacts/DepotDownloader-linux-arm64/DepotDownloader chmod +x artifacts/DepotDownloader-macos-x64/DepotDownloader chmod +x artifacts/DepotDownloader-macos-arm64/DepotDownloader zip -9j release/DepotDownloader-framework.zip artifacts/DepotDownloader-framework/* zip -9j release/DepotDownloader-windows-x64.zip artifacts/DepotDownloader-windows-x64/* zip -9j release/DepotDownloader-windows-arm64.zip artifacts/DepotDownloader-windows-arm64/* zip -9j release/DepotDownloader-linux-x64.zip artifacts/DepotDownloader-linux-x64/* zip -9j release/DepotDownloader-linux-arm.zip artifacts/DepotDownloader-linux-arm/* zip -9j release/DepotDownloader-linux-arm64.zip artifacts/DepotDownloader-linux-arm64/* zip -9j release/DepotDownloader-macos-x64.zip artifacts/DepotDownloader-macos-x64/* zip -9j release/DepotDownloader-macos-arm64.zip artifacts/DepotDownloader-macos-arm64/* - name: Display structure of archived files run: ls -Rl working-directory: release - name: Release uses: softprops/action-gh-release@v2 with: draft: true files: release/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}