summaryrefslogtreecommitdiff
path: root/.github/workflows/validate.yaml
blob: b496b825610934f4ca7fd0a2873af25c21835476 (plain)
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
148
149
150
151
152
153
154
155
name: Validate

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

env:
  FORCE_COLOR: 1
  XDG_CACHE_HOME: ${{ github.workspace }}/.var/cache
  POETRY_CACHE_DIR: ${{ github.workspace }}/.var/cache/pypoetry
  PIP_CACHE_DIR: ${{ github.workspace }}/.var/cache/pip


concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  validate:
    permissions:
      contents: read
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
        os: [ubuntu-latest, macos-latest, windows-latest]
        # This is used for injecting additional tests for a specific python
        # version and OS.
        suffix: [""]
        include:
          - python-version: "3.7"
            os: ubuntu-latest
            extensive-tests: true
            TOXENV_SUFFIX: "-docs"
          - python-version: "3.7"
            os: ubuntu-latest
            extensive-tests: true
            suffix: "-min"
            TOXENV_SUFFIX: "-min"
          - python-version: "3.8"
            os: ubuntu-latest
            TOX_EXTRA_COMMAND: "- isort --check-only --diff ."
            TOXENV_SUFFIX: "-docs"
          - python-version: "3.9"
            os: ubuntu-latest
            TOX_EXTRA_COMMAND: "- black --check --diff ./rdflib"
            TOXENV_SUFFIX: "-lxml"
          - python-version: "3.10"
            os: ubuntu-latest
            TOX_EXTRA_COMMAND: "flake8 --exit-zero rdflib"
            TOXENV_SUFFIX: "-docs"
          - python-version: "3.11"
            os: ubuntu-latest
            TOXENV_SUFFIX: "-docs"
    steps:
      - uses: actions/checkout@v3
      - name: Cache XDG_CACHE_HOME
        uses: actions/cache@v3
        with:
          path: ${{ env.XDG_CACHE_HOME }}
          key: ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', '**/poetry.lock', '**/with-fuseki.sh', '**/*requirements*.txt') }}
          restore-keys: |
            ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}-
            ${{ github.job }}-xdg-v1-${{ matrix.os }}-
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - name: Python Poetry Action
        uses: abatilo/actions-poetry@v2.3.0
        with:
          poetry-version: 1.4.0
      - uses: actions/setup-java@v3
        if: ${{ matrix.extensive-tests }}
        with:
          distribution: "temurin"
          java-version: "17"
      - name: Install Task
        uses: arduino/setup-task@v1
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
      - name: Run validation
        shell: bash
        run: |
          task \
            TOX_EXTRA_COMMAND="${{ matrix.TOX_EXTRA_COMMAND }}" \
            OS=${{ matrix.os }} \
            MATRIX_SUFFIX=${{ matrix.suffix }} \
            EXTENSIVE=${{ matrix.extensive-tests || 'false' }} \
            TOX_PYTHON_VERSION=${{ matrix.python-version }} \
            TOXENV_SUFFIX=${{ matrix.TOXENV_SUFFIX }} \
            TOX_JUNIT_XML_PREFIX=${{ matrix.python-version }}-${{ matrix.os }}${{matrix.suffix}}- \
            gha:validate
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/upload-artifact@v3
        if: ${{ (success() || failure()) }}
        with:
          name: ${{ matrix.python-version }}-${{ matrix.os }}${{matrix.suffix}}-mypy-junit-xml
          path: test_reports/${{ matrix.python-version }}-${{ matrix.os }}${{matrix.suffix}}-mypy-junit.xml
      - uses: actions/upload-artifact@v3
        if: ${{ (success() || failure()) }}
        with:
          name: ${{ matrix.python-version }}-${{ matrix.os }}${{matrix.suffix}}-pytest-junit-xml
          path: test_reports/${{ matrix.python-version }}-${{ matrix.os }}${{matrix.suffix}}-pytest-junit.xml
  extra-tasks:
    permissions:
      contents: read
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - task: "gha:flake8"
            python-version: 3.8
    steps:
      - uses: actions/checkout@v3
      - name: Cache XDG_CACHE_HOME
        uses: actions/cache@v3
        with:
          path: ${{ env.XDG_CACHE_HOME }}
          key: ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', '**/poetry.lock', '**/with-fuseki.sh', '**/*requirements*.txt') }}
          restore-keys: |
            ${{ github.job }}-xdg-v1-${{ matrix.os }}-${{ matrix.python-version }}-
            ${{ github.job }}-xdg-v1-${{ matrix.os }}-
      - name: Set up Python ${{env.DEFAULT_PYTHON}}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - name: Python Poetry Action
        uses: abatilo/actions-poetry@v2.3.0
        with:
          poetry-version: 1.4.0
      - name: Install Task
        uses: arduino/setup-task@v1
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
      - name: Run task
        shell: bash
        run: |
          task ${{ matrix.task }}
  finish:
    permissions:
      contents: read
    needs: validate
    runs-on: ubuntu-latest
    steps:
      - name: Coveralls Finished
        uses: coverallsapp/github-action@master
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          parallel-finished: true