forked from aiidateam/aiida-core
141 lines (120 loc) · 4.28 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
# Automate deployment to PyPI when creating a release tag vX.Y.Z
# will only be published to PyPI if the git tag matches the release version
# and the pre-commit and tests pass
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"
jobs:
check-release-tag:
# Only run this job on the main repository and not on forks
if: github.repository == 'aiidateam/aiida-core'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.8'
- run: python .github/workflows/check_release_tag.py $GITHUB_REF
pre-commit:
needs: [check-release-tag]
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install system dependencies
# note libkrb5-dev is required as a dependency for the gssapi pip install
run: |
sudo apt update
sudo apt install libkrb5-dev ruby ruby-dev
- name: Install python dependencies
run: |
pip install --upgrade pip
pip install -r requirements/requirements-py-3.8.txt
pip install -e .[pre-commit]
pip freeze
- name: Run pre-commit
run: pre-commit run --all-files || ( git status --short ; git diff ; exit 1 )
tests:
needs: [check-release-tag]
runs-on: ubuntu-latest
timeout-minutes: 30
services:
postgres:
image: postgres:10
env:
POSTGRES_DB: test_aiida
POSTGRES_PASSWORD: ''
POSTGRES_HOST_AUTH_METHOD: trust
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
rabbitmq:
image: rabbitmq:latest
ports:
- 5672:5672
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install system dependencies
run: |
sudo apt update
sudo apt install postgresql graphviz
- name: Upgrade pip
run: |
pip install --upgrade pip
pip --version
- name: Build pymatgen with compatible numpy
run: |
# This step is necessary because certain versions of `pymatgen` will not specify an explicit version of
# `numpy` in its build requirements, and so the latest version will be used. This causes problems,
# however, because this means that the compiled version of `pymatgen` can only be used with that version
# of `numpy` or higher, since `numpy` only guarantees forward compatibility of the ABI. If we want to
# run with an older version of `numpy`, we need to ensure that `pymatgen` is built with that same
# version. This we can accomplish by installing the desired version of `numpy` manually and then calling
# the install command for `pymatgen` with the `--no-build-isolation` flag. This flag will ensure that
# build dependencies are ignored and won't be installed (preventing the most recent version of `numpy`
# to be installed) and the build relies on those requirements already being present in the environment.
# We also need to install `wheel` because otherwise the `pymatgen` build will fail because `bdist_wheel`
# will not be available.
pip install numpy==1.21.4 wheel
pip install pymatgen==2022.0.16 --no-cache-dir --no-build-isolation
- name: Install aiida-core
run: |
pip install -r requirements/requirements-py-3.8.txt
pip install --no-deps -e .
- name: Run sub-set of test suite
run: pytest -sv -k 'requires_rmq'
publish:
name: Publish to PyPI
needs: [check-release-tag, pre-commit, tests]
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: install flit
run: |
pip install flit~=3.4
- name: Build and publish
run: |
flit publish
env:
FLIT_USERNAME: __token__
FLIT_PASSWORD: ${{ secrets.PYPI_KEY }}