diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2874557..5e39193 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,89 +6,33 @@ on: pull_request: branches: [master, main] -env: - NIM_VERSION: '2.2.4' - NIMBLE_VERSION: '0.22.3' - jobs: - test: - strategy: - fail-fast: false - matrix: - os: [ubuntu-22.04, macos-15, windows-latest] - nim-version: ['2.2.4', 'stable'] - mm: [orc, refc] + alloc: + name: Alloc + uses: ./.github/workflows/test.yml + with: + test: test_alloc - runs-on: ${{ matrix.os }} - name: ${{ matrix.os }} / Nim ${{ matrix.nim-version }} / ${{ matrix.mm }} + ffi-context: + name: FFI Context + uses: ./.github/workflows/test.yml + with: + test: test_ffi_context - steps: - - uses: actions/checkout@v4 + gc-compat: + name: GC Compatibility + uses: ./.github/workflows/test.yml + with: + test: test_gc_compat - - name: Setup Nim - uses: jiro4989/setup-nim-action@v2 - with: - nim-version: ${{ matrix.nim-version }} - repo-token: ${{ secrets.GITHUB_TOKEN }} + serial: + name: Serial + uses: ./.github/workflows/test.yml + with: + test: test_serial - - name: Install Nimble ${{ env.NIMBLE_VERSION }} - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$PATH" - fi - cd /tmp && nimble install "nimble@${{ env.NIMBLE_VERSION }}" -y - echo "$HOME/.nimble/bin" >> $GITHUB_PATH - - - name: Cache nimble deps - id: cache-nimbledeps - uses: actions/cache@v4 - with: - path: | - nimbledeps/ - nimble.paths - key: ${{ runner.os }}-nimbledeps-${{ matrix.nim-version }}-${{ hashFiles('*.nimble') }} - restore-keys: | - ${{ runner.os }}-nimbledeps-${{ matrix.nim-version }}- - ${{ runner.os }}-nimbledeps- - - - name: Install nimble deps - if: steps.cache-nimbledeps.outputs.cache-hit != 'true' - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" - fi - nimble setup --localdeps -y - - - name: Build - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" - fi - nimble buildffi -y - - - name: Run allocation tests (${{ matrix.mm }}) - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" - fi - nim c -r --mm:${{ matrix.mm }} -d:chronicles_log_level=WARN tests/test_alloc.nim - - - name: Run FFI context tests (${{ matrix.mm }}) - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" - fi - nim c -r --mm:${{ matrix.mm }} -d:chronicles_log_level=WARN tests/test_ffi_context.nim - - - name: Run GC compatibility tests (${{ matrix.mm }}) - shell: bash - run: | - if [ "$RUNNER_OS" == "Windows" ]; then - export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" - fi - nim c -r --mm:${{ matrix.mm }} -d:chronicles_log_level=WARN tests/test_gc_compat.nim + ctx-validation: + name: Context Validation + uses: ./.github/workflows/test.yml + with: + test: test_ctx_validation diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..9295670 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,85 @@ +name: test + +on: + workflow_call: + inputs: + test: + required: true + type: string + +env: + NIMBLE_VERSION: '0.22.3' + +jobs: + run: + strategy: + fail-fast: false + matrix: + os: [ubuntu-22.04, macos-15, windows-latest] + nim-version: ['2.2.4', 'stable'] + mm: [orc, refc] + include: + - os: ubuntu-22.04 + label: Linux + - os: macos-15 + label: macOS + - os: windows-latest + label: Windows + + runs-on: ${{ matrix.os }} + name: ${{ matrix.label }} · Nim ${{ matrix.nim-version }} · ${{ matrix.mm }} + + steps: + - uses: actions/checkout@v4 + + - name: Setup Nim + uses: jiro4989/setup-nim-action@v2 + with: + nim-version: ${{ matrix.nim-version }} + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install Nimble ${{ env.NIMBLE_VERSION }} + shell: bash + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$PATH" + fi + cd /tmp && nimble install "nimble@${{ env.NIMBLE_VERSION }}" -y + echo "$HOME/.nimble/bin" >> $GITHUB_PATH + + - name: Cache nimble deps + id: cache-nimbledeps + uses: actions/cache@v4 + with: + path: | + nimbledeps/ + nimble.paths + key: ${{ runner.os }}-nimbledeps-${{ matrix.nim-version }}-${{ hashFiles('*.nimble') }} + restore-keys: | + ${{ runner.os }}-nimbledeps-${{ matrix.nim-version }}- + ${{ runner.os }}-nimbledeps- + + - name: Install nimble deps + if: steps.cache-nimbledeps.outputs.cache-hit != 'true' + shell: bash + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" + fi + nimble setup --localdeps -y + + - name: Build + shell: bash + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" + fi + nimble buildffi -y + + - name: Run ${{ inputs.test }} (${{ matrix.mm }}) + shell: bash + run: | + if [ "$RUNNER_OS" == "Windows" ]; then + export PATH="$GITHUB_WORKSPACE/.nim_runtime/bin:$HOME/.nimble/bin:$PATH" + fi + nim c -r --mm:${{ matrix.mm }} -d:chronicles_log_level=WARN tests/${{ inputs.test }}.nim