File: ci.yaml

package info (click to toggle)
python-syrupy 5.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,460 kB
  • sloc: python: 6,156; makefile: 3
file content (132 lines) | stat: -rw-r--r-- 4,045 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
name: CI

on:
  push:
    branches:
      - main
      - next
  pull_request:

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

env:
  VENV: .venv

permissions:
  contents: read
  checks: write

jobs:
  analysis:
    name: Code Analysis
    runs-on: ubuntu-latest
    if: (!contains(github.event.head_commit.message, '[skip ci]'))
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Setup Environment
        uses: ./.github/actions/setup-env
      - name: Install project dependencies
        run: . script/bootstrap
      - name: Lint
        run: |
          poetry run invoke lint

  tests:
    name: Tests
    runs-on: ${{ matrix.os }}
    if: (!contains(github.event.head_commit.message, '[skip ci]'))
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        python-version: ['3.10', '3.11', '3.12', '3.13', '3.14-dev']
      fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'ci/run-all-tests') }}
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Setup Environment
        uses: ./.github/actions/setup-env
        with:
          python-version: ${{ matrix.python-version }}
      - name: Install project dependencies
        run: . script/bootstrap
        shell: bash
      - name: Run Tests (with coverage)
        id: tests-with-coverage
        if: matrix.python-version == '3.14-dev' && matrix.os == 'ubuntu-latest'
        shell: bash
        run: poetry run invoke test --coverage
      - name: Run Tests
        if: steps.tests-with-coverage.outcome == 'skipped'
        shell: bash
        run: poetry run invoke test
      - name: Upload Coverage
        if: steps.tests-with-coverage.conclusion == 'success'
        uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

# # TODO: How to do this with poetry?
  # version_checks:
  #   name: Dependency Version Constraint Checks
  #   runs-on: ubuntu-latest
  #   if: "!contains(github.event.head_commit.message, '[skip ci]')"
  #   env:
  #     SKIP_DEPS: 1
  #   steps:
  #    - uses: actions/checkout@v3.1.0
  #    - name: Setup Environment
  #      uses: ./.github/actions/setup-env
  #      with:
  #         python-version: 3.7 # it's min, so we'll use an older version of python
  #     - name: Install project dependencies
  #       run: |
  #         . script/bootstrap
  #         poetry install --with=test
  #     - name: Test
  #       env:
  #         CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
  #       run: |
  #         . $VENV/bin/activate
  #         poetry run invoke test --coverage

  benchmark:
    name: Benchmark
    runs-on: ubuntu-latest
    if: github.event_name == 'pull_request' && !contains(github.event.head_commit.message, '[skip ci]')
    needs: [tests]
    permissions:
      contents: write
      pull-requests: write
    steps:
      - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Setup Environment
        uses: ./.github/actions/setup-env
      - name: Install project dependencies
        run: . script/bootstrap
      - name: Benchmark
        run: poetry run invoke benchmark
      - name: Publish Benchmark Results
        uses: benchmark-action/github-action-benchmark@4bdcce38c94cec68da58d012ac24b7b1155efe8b # v1.20.7
        with:
          tool: 'pytest'
          output-file-path: benchmarks.json
          github-token: ${{ github.token }}
          auto-push: false
          alert-threshold: '200%'
          comment-on-alert: true
          fail-on-alert: false
          comment-always: true

  required_checks:
    name: Required Checks
    needs:
      - analysis
      - tests
      - benchmark
    runs-on: ubuntu-latest
    if: always()
    steps:
      - name: Fail on error
        if: contains(needs.*.result, 'failure') || cancelled()
        run: exit 1