-
Notifications
You must be signed in to change notification settings - Fork 28
141 lines (122 loc) · 4.06 KB
/
release.yml
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
name: Release
# This workflow builds the wheels "on tag".
# If run from the hyperspy/rosettasciio repository, the wheels will be uploaded to pypi ;
# otherwise, the wheels will be available as a github artifact.
# Can also run on "workflow dispatch" to test building wheels
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
workflow_dispatch:
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }} ${{ matrix.CIBW_ARCHS }}
runs-on: ${{ matrix.os }}
env:
CIBW_ENVIRONMENT: POOCH_BASE_URL=https://github.com/${{ github.repository }}/raw/${{ github.ref_name }}/rsciio/tests/data/
CIBW_TEST_COMMAND: "pytest --pyargs rsciio"
CIBW_TEST_EXTRAS: "tests"
# No need to build wheels for pypy because the pure python wheels can be used
# PyPy documentation recommends no to build the C extension
CIBW_SKIP: "{pp*,*-musllinux*,*win32,*-manylinux_i686}"
strategy:
fail-fast: false
matrix:
include:
- os: "ubuntu-latest"
CIBW_ARCHS: "x86_64"
- os: "ubuntu-24.04-arm"
CIBW_ARCHS: "aarch64"
- os: "windows-latest"
CIBW_ARCHS: "AMD64"
- os: "macos-13"
CIBW_ARCHS: "x86_64"
- os: "macos-14"
CIBW_ARCHS: "arm64"
steps:
- uses: actions/checkout@v4
- name: Build wheels for CPython
uses: pypa/[email protected]
env:
CIBW_ARCHS: ${{ matrix.CIBW_ARCHS }}
- name: List wheels
run: |
ls ./wheelhouse
- uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.os }}-${{ matrix.CIBW_ARCHS }}
path: ./wheelhouse/*.whl
if-no-files-found: error
make_sdist:
name: Make SDist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build SDist
run: pipx run build --sdist
- name: List SDist
run: |
ls ./dist
- uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.os }}-sdist
path: dist/*.tar.gz
pure_python_wheel:
# Build pure python without C extention to be used by pyodide
name: Make pure python wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build pure python wheel
run: DISABLE_C_EXTENTIONS=1 pipx run build --wheel
- name: List SDist
run: |
ls ./dist
- uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.os }}-pure_python
path: dist/*.whl
# Merge all disttribution files into the same directory
merge_artifacts:
runs-on: ubuntu-latest
needs: [ build_wheels, make_sdist, pure_python_wheel ]
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
with:
name: artifacts
pattern: artifacts-*
upload_to_pypi:
needs: merge_artifacts
runs-on: ubuntu-latest
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- name: Download wheels
uses: actions/download-artifact@v4
with:
name: artifacts
path: dist
- name: Display structure of downloaded files
run: ls -R
working-directory: dist
- uses: pypa/gh-action-pypi-publish@release/v1
if: ${{ startsWith(github.ref, 'refs/tags/') && github.repository_owner == 'hyperspy' }}
# See https://docs.pypi.org/trusted-publishers/using-a-publisher/
create_release:
# TODO: once we are happy with the workflow
# setup zenodo to create a DOI automatically
needs: upload_to_pypi
if: ${{ startsWith(github.ref, 'refs/tags/') }}
permissions:
contents: write
name: Create Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create Release
id: create_release
uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048