-
Notifications
You must be signed in to change notification settings - Fork 0
142 lines (122 loc) · 3.92 KB
/
build_and_test_library.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
142
name: 'CI'
# Update the paths once you have created a client library build
on:
workflow_dispatch:
inputs:
publish-to-private-pypi:
description: Whether to publish the build to the private PyPI
type: choice
options:
- 'true'
- 'false'
default: 'false'
push:
tags:
- "*"
branches:
- main
pull_request:
paths:
- "ansys-grantami-serverapi-openapi/**"
- ".github/workflows/build_and_test_library.yml"
env:
MAIN_PYTHON_VERSION: '3.12'
LIBRARY_NAME: 'ansys-grantami-serverapi-openapi'
jobs:
tests:
name: "Test Python ${{ matrix.python-version }}"
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ '3.10', '3.11', '3.12', '3.13' ]
fail-fast: false
steps:
- name: "Checkout the project"
uses: actions/checkout@v4
- name: "Set up Python ${{ matrix.python-version }}"
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: "Install dependencies"
run: |
python -m pip install --upgrade pip
python -m pip install poetry
poetry install
working-directory: ${{ env.LIBRARY_NAME }}
- name: "Test with pytest"
working-directory: ${{ env.LIBRARY_NAME }}
run: poetry run pytest
- name: "Run mypy"
working-directory: ${{ env.LIBRARY_NAME }}
run: poetry run mypy
build-library:
name: "Build library"
runs-on: ubuntu-latest
needs: tests
steps:
- name: "Checkout the project"
uses: actions/checkout@v4
- name: "Set up Python ${{ matrix.python-version }}"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
- name: "Install requirements"
run: |
python -m pip install build twine
- name: "Create source and wheel artifacts"
working-directory: ${{ env.LIBRARY_NAME }}
run: |
python -m build .
- name: "Validate integrity of artifacts"
working-directory: ${{ env.LIBRARY_NAME }}
run: |
python -m twine check dist/*
- name: "Upload artifacts"
uses: actions/upload-artifact@v4
with:
name: ${{ env.LIBRARY_NAME }}-artifacts
path: ${{ env.LIBRARY_NAME }}/dist/
retention-days: 7
publish:
name: "Publish"
runs-on: ubuntu-latest
needs: [build-library]
if: (github.event_name == 'workflow_dispatch') && (github.ref == 'refs/heads/main') && (inputs.publish-to-private-pypi == 'true')
steps:
- name: "Release to private PyPI"
uses: ansys/actions/release-pypi-private@v8
with:
library-name: ${{ env.LIBRARY_NAME }}
twine-username: "__token__"
twine-token: ${{ secrets.PYANSYS_PYPI_PRIVATE_PAT }}
release:
name: "Release"
runs-on: ubuntu-latest
needs: [build-library]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags')
environment: release
permissions:
id-token: write
contents: write
steps:
- name: "Release to public PyPI"
uses: ansys/actions/release-pypi-public@v8
with:
library-name: ${{ env.LIBRARY_NAME }}
use-trusted-publisher: true
- name: "Release to private PyPI"
uses: ansys/actions/release-pypi-private@v8
with:
library-name: ${{ env.LIBRARY_NAME }}
twine-username: "__token__"
twine-token: ${{ secrets.PYANSYS_PYPI_PRIVATE_PAT }}
- name: "Download distribution artifacts"
uses: actions/download-artifact@v4
with:
name: ${{ env.LIBRARY_NAME }}-artifacts
path: ${{ env.LIBRARY_NAME }}-artifacts
- name: "Release to GitHub"
uses: softprops/action-gh-release@v2
with:
files: ${{ env.LIBRARY_NAME }}-artifacts/*.whl
generate_release_notes: true