name: CI on: [push, pull_request] # Cancel any previous workflows if the pull request was updated concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: build: if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository strategy: fail-fast: false matrix: os: [ubuntu-22.04, windows-2022] platform: [x64] build-cfg: [DebugOpt, Release] #build-cfg: [Debug, DebugOpt, Release] # our local copy of clang isn't build for debug on linux/macos currently include: - os: windows-2022 platform: x64 build-cfg: Debug runs-on: ${{ matrix.os }} env: CC: ${{ startsWith(matrix.os, 'ubuntu') && 'gcc-11' || 'clang' }} CXX: ${{ startsWith(matrix.os, 'ubuntu') && 'g++-11' || 'clang++' }} VS_VERSION: "Program Files/Microsoft Visual Studio/2022" PLATFORM: ${{ matrix.platform }} BUILD_CONFIGURATION: ${{ matrix.build-cfg }} DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true EMSCRIPTEN_VERSION: 3.1.65 steps: - uses: actions/checkout@v4 with: fetch-depth: '0' - name: Setup emsdk uses: mymindstorm/setup-emsdk@v11 with: version: ${{ env.EMSCRIPTEN_VERSION }} actions-cache-folder: emsdk-cache-${{ runner.os }} - name: Setup cmake uses: jwlawson/actions-setup-cmake@v2 with: cmake-version: '3.30.x' - name: Install nbgv if: startsWith(matrix.os, 'macos') run: | dotnet tool install -g nbgv - name: Set version run: nbgv cloud --all-vars - name: Environment if: startsWith(matrix.os, 'windows') shell: bash run: echo "/c/$VS_VERSION/Enterprise/MSBuild/Current/Bin" >> $GITHUB_PATH - name: Setup shell: bash run: | build/build.sh generate -platform $PLATFORM -configuration $BUILD_CONFIGURATION build/build.sh download_llvm -platform $PLATFORM -configuration $BUILD_CONFIGURATION - name: Restore shell: bash run: build/build.sh restore -platform $PLATFORM -configuration $BUILD_CONFIGURATION - name: Build shell: bash run: build/build.sh -platform $PLATFORM -build_only -configuration $BUILD_CONFIGURATION - name: Test (.NET) # Disable test for debug configs, since they take over 6 hours to complete if: matrix.build-cfg != 'Debug' shell: bash run: build/test.sh -platform $PLATFORM -configuration $BUILD_CONFIGURATION - name: Build (QuickJS runtime) if: runner.os != 'Windows' shell: bash run: tests/quickjs/bootstrap.sh - name: Test (QuickJS) if: runner.os != 'Windows' shell: bash run: tests/quickjs/test.sh -dotnet_configuration $BUILD_CONFIGURATION - name: Test (Emscripten) if: runner.os != 'Windows' shell: bash run: tests/emscripten/test.sh -dotnet_configuration $BUILD_CONFIGURATION - name: Pack shell: bash run: build/build.sh prepack -platform $PLATFORM -configuration $BUILD_CONFIGURATION - name: Upload Artifacts # We only need a release version of this in the create_package job if: matrix.build-cfg == 'Release' uses: actions/upload-artifact@v4 with: name: intermediate-${{ matrix.build-cfg }}-${{ matrix.platform }} retention-days: 7 overwrite: true path: | artifacts include/**/*.h create_package: runs-on: windows-2019 needs: build if: | (github.event_name == 'push' && (github.ref == 'refs/heads/main' || contains(github.ref, 'nuget') || startsWith(github.ref, 'refs/tags/v'))) || (github.event.pull_request.head.repo.full_name != github.repository && (contains(github.event.pull_request.head.ref, 'nuget') || startsWith(github.event.pull_request.head.ref, 'refs/tags/v'))) env: DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true BUILD_CONFIGURATION: Release steps: - uses: actions/checkout@v4 with: fetch-depth: '0' - name: Set version run: nbgv cloud --all-vars - uses: actions/download-artifact@v4 with: name: intermediate-Release-x64 - name: Setup shell: bash run: build/build.sh generate_config -configuration $BUILD_CONFIGURATION - name: Create package shell: bash run: build/build.sh pack -configuration $BUILD_CONFIGURATION - name: Upload package uses: actions/upload-artifact@v4 with: name: CppSharp.nupkg path: | artifacts/*.nupkg - name: Upload package to GitHub Packages run: | cd artifacts dotnet nuget push "*.nupkg" --api-key ${{ secrets.GITHUB_TOKEN }} --source "https://nuget.pkg.github.com/mono/index.json" --skip-duplicate - name: Publish package to nuget.org if: startsWith(github.ref, 'refs/tags/v') run: | cd artifacts dotnet nuget push "*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source "https://api.nuget.org/v3/index.json" --skip-duplicate