File: test.yml

package info (click to toggle)
python-cross-web 0.4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 744 kB
  • sloc: python: 2,262; sh: 23; makefile: 10
file content (147 lines) | stat: -rw-r--r-- 3,687 bytes parent folder | download
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
name: Test

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  generate-jobs:
    name: Generate test matrix
    runs-on: ubuntu-latest
    outputs:
      sessions: ${{ steps.set-matrix.outputs.sessions }}
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v6
        with:
          enable-cache: true

      - name: Install Python
        run: uv python install 3.12

      - name: Install nox
        run: uv tool install nox

      - name: Generate test matrix
        id: set-matrix
        shell: bash
        run: |
          echo sessions=$(
            uvx nox --json -t tests -l |
            jq 'map(
              {
                session,
                name: "\( .name ) on \( .python )\( if .call_spec != {} then " (\(.call_spec | to_entries | map("\(.key)=\(.value)") | join(", ")))" else "" end )"
              }
            )'
          ) | tee --append $GITHUB_OUTPUT

  tests:
    name: 🔬 ${{ matrix.session.name }}
    needs: generate-jobs
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        session: ${{ fromJson(needs.generate-jobs.outputs.sessions) }}

    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v6
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - name: Install Python ${{ matrix.session.python }}
        run: uv python install ${{ matrix.session.python }}

      - name: Install nox
        run: uv tool install nox

      - name: Run tests
        run: uvx nox -r -t tests -s "${{ matrix.session.session }}"
        env:
          COVERAGE_FILE: .coverage.${{ matrix.session.session }}.${{ github.run_id }}

      - name: Generate artifact name
        id: artifact-name
        run: |
          NAME="${{ matrix.session.name }}"
          # Replace spaces with dashes and remove parentheses
          SANITIZED=$(echo "$NAME" | tr ' ' '-' | tr -d '()')
          echo "name=coverage-data-$SANITIZED" >> $GITHUB_OUTPUT

      - name: Upload coverage data
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.artifact-name.outputs.name }}
          path: |
            .coverage
            .coverage.*
          include-hidden-files: true
          if-no-files-found: ignore

  coverage:
    name: Combine & check coverage
    if: always()
    needs: tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v6
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - name: Download coverage data
        uses: actions/download-artifact@v4
        with:
          pattern: coverage-data-*
          merge-multiple: true

      - name: Install Python
        run: uv python install 3.12

      - name: Install nox
        run: uv tool install nox

      - name: Combine coverage & generate report
        run: |
          uvx nox -s coverage -- --ci

  lint:
    name: Linting
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v6
        with:
          enable-cache: true
          cache-dependency-glob: "uv.lock"

      - name: Install Python
        run: uv python install 3.12

      - name: Install nox
        run: uv tool install nox

      - name: Run lint
        run: uvx nox -s lint

      - name: Run mypy
        run: uvx nox -s mypy