File: ci.yml

package info (click to toggle)
python-fnv-hash-fast 0.5.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 192 kB
  • sloc: python: 101; ansic: 9; javascript: 8; makefile: 4
file content (171 lines) | stat: -rw-r--r-- 4,404 bytes parent folder | download | duplicates (2)
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
name: CI

on:
  push:
    branches:
      - main
  pull_request:

concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.10"
      - uses: pre-commit/action@v3.0.0

  # Make sure commit messages follow the conventional commits convention:
  # https://www.conventionalcommits.org
  commitlint:
    name: Lint Commit Messages
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: wagoid/commitlint-github-action@v5.3.1

  test:
    strategy:
      fail-fast: false
      matrix:
        python-version:
          - "3.10"
          - "3.11"
          - "3.12"

        os:
          - ubuntu-latest
          - macOS-latest
        extension:
          - "skip_cython"
          - "use_cython"
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - uses: snok/install-poetry@v1.3.3
      - name: Install Dependencies
        run: |
          if [ "${{ matrix.extension }}" = "skip_cython" ]; then
            SKIP_CYTHON=1 poetry install --only=main,dev
          else
            poetry install --only=main,dev
          fi
        shell: bash
      - name: Test with Pytest
        run: poetry run pytest --cov-report=xml
        shell: bash
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

  release:
    runs-on: ubuntu-latest
    environment: release
    if: github.ref == 'refs/heads/main'
    needs:
      - test
      - lint
      - commitlint

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      # Run semantic release:
      # - Update CHANGELOG.md
      # - Update version in code
      # - Create git tag
      # - Create GitHub release
      # - Publish to PyPI
      - name: Python Semantic Release
        uses: python-semantic-release/python-semantic-release@v7.34.6
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          pypi_token: ${{ secrets.PYPI_TOKEN }}

  build_wheels:
    needs: [release]

    name: Build wheels on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - macos-11
          - ubuntu-20.04
          - windows-2022

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          ref: "main"

      # Used to host cibuildwheel
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.10"

      - name: Install python-semantic-release
        run: python3 -m pip install python-semantic-release==7.34.6

      - name: Get Release Tag
        id: release_tag
        shell: bash
        run: |
          echo "::set-output name=newest_release_tag::$(semantic-release print-version --current)"

      - uses: actions/checkout@v3
        with:
          ref: "v${{ steps.release_tag.outputs.newest_release_tag }}"
          fetch-depth: 0

      - name: Install cibuildwheel
        run: python -m pip install cibuildwheel==2.16.2

      - name: Build wheels
        run: python -m cibuildwheel --output-dir wheelhouse
        # to supply options, put them in 'env', like:
        env:
          CIBW_SKIP: cp36-* cp37-* cp38-* cp39-* pp36-* pp37-* pp38-* pp39-*
          CIBW_BEFORE_ALL_LINUX: apt-get install -y gcc || yum install -y gcc || apk add gcc
          CIBW_BUILD_VERBOSITY: 3
          REQUIRE_CYTHON: 1

      - uses: actions/upload-artifact@v3
        with:
          path: ./wheelhouse/*.whl

  upload_pypi:
    needs: [build_wheels]
    runs-on: ubuntu-latest
    environment: release

    steps:
      - uses: actions/download-artifact@v3
        with:
          # unpacks default artifact into dist/
          # if `name: artifact` is omitted, the action will create extra parent dir
          name: artifact
          path: dist

      - uses: pypa/gh-action-pypi-publish@v1.5.0
        with:
          user: __token__
          password: ${{ secrets.PYPI_TOKEN }}

          # To test: repository_url: https://test.pypi.org/legacy/