aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.github/workflows/test.yml
blob: c6742338c93be436e3d91874472425176e71ecad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
name: Test

on:
  push:
  pull_request:
  schedule:
    # Weekly, at 5:45 AM on Friday (somewhat randomly chosen).
    - cron: '45 5 * * 5'
  workflow_dispatch:

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        os: [windows-2019, windows-2022, windows-latest]
        python: [0, 1]
        default: [0, 1]

        include:
          # Prettier run names.
          - {os: windows-2019, name: 2019}
          - {os: windows-2022, name: 2022}
          - {os: windows-latest, name: latest}
          - {default: 0, default_descr: ''}
          - {default: 1, default_descr: ' + C:\Windows'}
          - {python: 0, python_descr: ''}
          - {python: 1, python_descr: ' + setup-python'}

    runs-on: '${{ matrix.os }}'

    name: '${{ matrix.name }}${{ matrix.default_descr }}${{ matrix.python_descr }}'

    defaults:
      run:
        shell: pwsh

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
        if: matrix.python

      - name: Show %PATH%
        run: |
          $env:PATH.Split([IO.Path]::PathSeparator) | %{ echo $_ }

      # There should be plenty of MinGW distributions in PATH, some kind of GCC
      # should be there.
      - name: gcc.exe should be found
        run: |
          $(Get-Command gcc -ErrorAction SilentlyContinue) -or $(throw "gcc.exe wasn't found!")

      - name: python.exe should be found
        run: |
          $(Get-Command python -ErrorAction SilentlyContinue) -or $(throw "python.exe wasn't found!")
        if: matrix.python

      - name: Clean up PATH
        uses: ./
        with:
          dirs: C:\foo;C:\bar
          default: '${{ matrix.default }}'

      - name: Show %PATH%
        run: |
          $env:PATH.Split([IO.Path]::PathSeparator) | %{ echo $_ }

      - name: gcc.exe shouldn't be found
        run: |
          $(Get-Command gcc -ErrorAction SilentlyContinue) -and $(throw "cl.exe was found!")

      # I'm not sure how this works actually.
      # Do these setup-* actions use a different API?
      - name: python.exe should _still_ be found
        run: |
          $(Get-Command python -ErrorAction SilentlyContinue) -or $(throw "python.exe wasn't found!")
        if: matrix.python

      - name: Check %PATH%
        run: |
          $env:PATH.Split([IO.Path]::PathSeparator) | %{
              if ($_.StartsWith('C:\Program Files\PowerShell')) {
                  # Thanks to `shell: pwsh`, C:\Program Files\PowerShell should
                  # be there.
              } elseif ('${{ matrix.default }}' -eq '1' -and $_.StartsWith('C:\Windows')) {
                  # If the default paths are added, they all should start with
                  # C:\Windows.
              } elseif ('${{ matrix.python }}' -eq '1' -and $_.Contains('\Python\')) {
                  # If we're testing w/ setup-python, it should still be there.
              } elseif ($_ -eq 'C:\foo' -or $_ -eq 'C:\bar') {
                  # Our custom directories.
              } else {
                  throw "Unexpected path: $_"
              }
          }