summaryrefslogtreecommitdiffstats
path: root/.github/workflows/release.yml
blob: 582140745470358254f719eaec99c42ad2ee9d3b (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
name: Release

on:
  push:
    tags:
      - '*.*.*'
  workflow_dispatch:

jobs:
  build:
    name: Build on ${{ matrix.platform || matrix.os }} (${{ matrix.target }} - ${{ matrix.manylinux || 'auto' }})
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu, macos, windows]
        target: [x86_64, aarch64]
        manylinux: [auto]
        include:
          - os: ubuntu
            platform: linux
          - os: windows
            ls: dir
            interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 pypy3.8 pypy3.9 pypy3.10
          - os: windows
            ls: dir
            target: aarch64
            interpreter: 3.11 3.12
          - os: macos
            target: aarch64
            interpreter: 3.7 3.8 3.9 3.10 3.11 3.12 pypy3.8 pypy3.9 pypy3.10
          - os: ubuntu
            platform: linux
            target: aarch64
            # mimalloc not supported on manylinux2014 cross-compile container
            extra-build-args: --no-default-features
          # musllinux
          - os: ubuntu
            platform: linux
            target: x86_64
            manylinux: musllinux_1_1
          - os: ubuntu
            platform: linux
            target: aarch64
            manylinux: musllinux_1_1
          - os: ubuntu
            platform: linux
            target: ppc64le
            interpreter: 3.7 3.8 3.9 3.10 3.11 3.12
            # mimalloc not supported on manylinux2014 cross-compile container
            extra-build-args: --no-default-features
          - os: ubuntu
            platform: linux
            target: s390x
            interpreter: 3.7 3.8 3.9 3.10 3.11 3.12
            # mimalloc not supported on manylinux2014 cross-compile container
            extra-build-args: --no-default-features

    runs-on: ${{ matrix.os }}-latest
    steps:
      - uses: actions/checkout@v4

      - name: set up python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          architecture: ${{ matrix.python-architecture || 'x64' }}

      - name: build wheels
        uses: PyO3/maturin-action@v1
        with:
          target: ${{ matrix.target }}
          manylinux: ${{ matrix.manylinux || 'auto' }}
          container: ${{ matrix.container }}
          args: --release --out dist --interpreter ${{ matrix.interpreter || '3.7 3.8 3.9 3.10 3.11 3.12 pypy3.7 pypy3.8 pypy3.9 pypy3.10' }} ${{ matrix.extra-build-args }}
          rust-toolchain: stable
          docker-options: -e CI

      - run: ${{ matrix.ls || 'ls -lh' }} dist/

      - uses: actions/upload-artifact@v3
        with:
          name: dist
          path: dist

  build_sdist:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build sdist
        uses: PyO3/maturin-action@v1
        with:
          command: sdist
          args: --out dist
      - name: Upload sdist
        uses: actions/upload-artifact@v3
        with:
          name: dist
          path: dist


  Release:
    needs: [ build, build_sdist ]
    if: success() && startsWith(github.ref, 'refs/tags/')
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Download artifacts
        uses: actions/download-artifact@v3
        with:
          name: dist
          path: dist

      - name: Install Poetry
        run: |
          curl -fsS https://install.python-poetry.org | python - -y

      - name: Update PATH
        run: echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: Check distributions
        run: |
          ls -la dist

      - name: Check Version
        id: check-version
        run: |
          [[ "${GITHUB_REF#refs/tags/}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \
            || echo ::set-output name=prerelease::true

      - name: Create Release
        uses: ncipollo/release-action@v1
        with:
          artifacts: "dist/*"
          token: ${{ secrets.GITHUB_TOKEN }}
          draft: false
          prerelease: steps.check-version.outputs.prerelease == 'true'

      - name: Publish to PyPI
        env:
          POETRY_PYPI_TOKEN_PYPI: ${{ secrets.PYPI_TOKEN }}
        run: |
          poetry publish