name: .NET Build and Publish on: push: branches: ["main", "installer-test/**"] tags: ["v3.*.*"] # Manual delivery on every 3.x tag jobs: build-windows: runs-on: windows-latest env: SEMVER: "unset" FILE_VERSION: "unset" outputs: semver: ${{ steps.set-version.outputs.semver }} file_version: ${{ steps.set-version.outputs.file_version }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.4xx # Align with global.json (including roll forward rules) - name: Cache Nuget uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - name: ⚒️ Run build on Windows run: ./build.ps1 zip - name: ⬆️ Upload artifacts uses: actions/upload-artifact@v4 with: name: output-${{ env.SEMVER }} path: output/*.* if-no-files-found: error retention-days: 1 compression-level: 0 # no compression - id: set-version name: Set version to output run: | echo "semver=${{ env.SEMVER }}" >> "$Env:GITHUB_OUTPUT" echo "file_version=${{ env.FILE_VERSION }}" >> "$Env:GITHUB_OUTPUT" deploy-installers: runs-on: ubuntu-latest needs: build-windows env: IS_PUBLIC_RELEASE: ${{ github.ref_type == 'tag' }} steps: - name: 🔫 Trigger Build Installers uses: the-actions-org/workflow-dispatch@v4.0.0 with: workflow: Build Installers repo: specklesystems/connector-installers token: ${{ secrets.CONNECTORS_GH_TOKEN }} inputs: '{ "run_id": "${{ github.run_id }}", "semver": "${{ needs.build-windows.outputs.semver }}", "file_version": "${{ needs.build-windows.outputs.file_version }}", "repo": "${{ github.repository }}", "is_public_release": ${{ env.IS_PUBLIC_RELEASE }} }' ref: main wait-for-completion: true wait-for-completion-interval: 10s wait-for-completion-timeout: 10m display-workflow-run-url: true display-workflow-run-url-interval: 10s - uses: geekyeggo/delete-artifact@v5 with: name: output-* build-linux: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.4xx # Align with global.json (including roll forward rules) - name: Cache Nuget uses: actions/cache@v4 with: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - name: ⚒️ Run tests on Linux run: ./build.sh test-only - name: ⚒️ Run Build and Pack on Linux run: ./build.sh build-linux - name: Upload coverage reports to Codecov with GitHub Action uses: codecov/codecov-action@v5 with: files: Converters/**/coverage.xml token: ${{ secrets.CODECOV_TOKEN }} - name: Push to nuget.org if: (github.ref_type == 'tag') run: dotnet nuget push output/*.nupkg --source "https://api.nuget.org/v3/index.json" --api-key ${{secrets.CONNECTORS_NUGET_TOKEN }} --skip-duplicate