Release #42
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
tags: | |
- 'v[0-9]+*' | |
workflow_dispatch: | |
env: | |
GH_TOKEN: ${{ github.token }} | |
jobs: | |
# create a release on github | |
create-release: | |
runs-on: ubuntu-latest | |
if: "startsWith(github.ref, 'refs/tags/')" | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Create new release | |
run: | | |
# remove leading 'v' in tag name | |
gh release create -d v${GITHUB_REF_NAME#v} | |
macos-capi: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
target: [x86_64-apple-darwin, aarch64-apple-darwin] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Compile library | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --target=${{ matrix.target }} | |
cargo install cargo-c | |
cd pineappl_capi | |
cargo cinstall --verbose --destdir=prefix --library-type=cdylib --prefix=/ --target=${{ matrix.target }} | |
cd prefix | |
tar czf ../../pineappl_capi-${{ matrix.target }}.tar.gz . | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pineappl_capi-${{ matrix.target }} | |
path: pineappl_capi-${{ matrix.target }}.tar.gz | |
linux-capi: | |
runs-on: ubuntu-latest | |
container: ghcr.io/nnpdf/pineappl-ci:latest | |
strategy: | |
matrix: | |
target: [x86_64-unknown-linux-gnu] | |
steps: | |
# checkout@v4 uses a newer version of Node that's incompatible with our container's GLIBC | |
- uses: actions/checkout@v3 | |
- name: Compile library | |
run: | | |
cd pineappl_capi | |
cargo cinstall --verbose --destdir=prefix --library-type=cdylib --prefix=/ --target=${{ matrix.target }} | |
cd prefix | |
tar czf ../../pineappl_capi-${{ matrix.target }}.tar.gz . | |
# print the glibc version requirement | |
objdump -T lib/libpineappl_capi.so | grep GLIBC | sed 's/.*GLIBC_\([.0-9]*\).*/\1/g' | sort -Vu | tail -1 | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pineappl_capi-${{ matrix.target }} | |
path: pineappl_capi-${{ matrix.target }}.tar.gz | |
# publish a release on github and upload pre-built CAPI | |
publish-release: | |
needs: [macos-capi, linux-capi] | |
runs-on: ubuntu-latest | |
if: "startsWith(github.ref, 'refs/tags/')" | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Create new release | |
run: | | |
# remove leading 'v' in tag name | |
version=${GITHUB_REF_NAME#v} | |
prerelease=$(echo ${version} | perl -pe 's/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/\4/') | |
if [[ ${prerelease} == "" ]]; then | |
# extract the previous version number | |
old_version=$(sed -n 's/^## \[\(.*\)\] - .*/\1/p' CHANGELOG.md | tail +2 | head -n 1) | |
# extract news for the current version from the changelog file, dismissing | |
# empty lines at the start and the end | |
news=$(sed -n "/\\[${version}\\]/, /\\[${old_version}\\]/{ /\\[${old_version}\\]/! p }" \ | |
CHANGELOG.md | sed -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba') | |
gh release edit v${version} -n "${news}" | |
else | |
gh release edit v${version} -n "" --prerelease | |
fi | |
find artifacts -name 'pineappl_capi*' -type f -exec gh release upload v${version} {} + | |
gh release edit v${version} --draft=false | |
publish-crates: | |
runs-on: ubuntu-latest | |
if: "startsWith(github.ref, 'refs/tags/')" | |
container: ghcr.io/nnpdf/pineappl-ci:latest | |
steps: | |
# checkout@v4 uses a newer version of Node that's incompatible with our container's GLIBC | |
- uses: actions/checkout@v3 | |
- name: Publish all crates | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
run: | | |
# this must be at least Rust 1.66 to support waiting for dependencies to on crates.io: | |
# https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-166-2022-12-15 | |
rustup default stable | |
cd pineappl | |
cargo publish | |
cd ../pineappl_applgrid | |
cargo publish | |
cd ../pineappl_fastnlo | |
cargo publish | |
cd ../pineappl_capi | |
cargo publish | |
cd ../pineappl_cli | |
cargo publish | |
linux-wheels: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
target: [x86_64] | |
steps: | |
- uses: actions/checkout@v3 | |
# for Linux the wheels are built in a container, so we don't need the `setup-python` action | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
# `--find-interpreter` is needed to generate wheels for *all* Python versions | |
args: --release --out dist --find-interpreter --manifest-path pineappl_py/Cargo.toml | |
sccache: 'true' | |
manylinux: auto | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
linux-eol-wheels: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
target: [x86_64] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Patch Cargo.toml | |
run: | | |
# - older maturin versions don't support metadata inheritance - overwrite it explicitly | |
# - use '@' separator since 'repository' contains slashes | |
# - downgrade both `numpy` and `pyo3` to the last version that support Python 3.6 | |
sed -i \ | |
-e "s@categories.workspace = true@$(grep '^categories' Cargo.toml)@" \ | |
-e "s@edition.workspace = true@$(grep '^edition' Cargo.toml)@" \ | |
-e "s@keywords.workspace = true@$(grep '^keywords' Cargo.toml)@" \ | |
-e "s@license.workspace = true@$(grep '^license' Cargo.toml)@" \ | |
-e "s@repository.workspace = true@$(grep '^repository' Cargo.toml)@" \ | |
-e "s@rust-version.workspace = true@$(grep '^rust-version' Cargo.toml)@" \ | |
-e "s@version.workspace = true@$(grep '^version' Cargo.toml)@" \ | |
-e "s@^numpy = .*@numpy = \"0.14.1\"@" \ | |
-e "s@^pyo3 = .*@pyo3 = { features = [\"extension-module\"], version = \"0.14.5\" }@" \ | |
pineappl_py/Cargo.toml | |
# the previous command is very fragile, so print the file contents to check it | |
cat pineappl_py/Cargo.toml | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
args: --release -i python3.6 --out dist --no-sdist --manifest-path pineappl_py/Cargo.toml | |
sccache: 'true' | |
manylinux: auto | |
# this is the latest version to support Python 3.6 | |
maturin-version: 0.12.20 | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
windows-wheels: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
target: [x64] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
architecture: ${{ matrix.target }} | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
args: --release --out dist --find-interpreter --manifest-path pineappl_py/Cargo.toml | |
sccache: 'true' | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
macos-wheels: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
target: [aarch64, x86_64] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
args: --release --out dist --find-interpreter --manifest-path pineappl_py/Cargo.toml | |
sccache: 'true' | |
- name: Upload wheels | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
sdist: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build sdist | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist --manifest-path pineappl_py/Cargo.toml | |
- name: Upload sdist | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
release-wheels: | |
name: Release | |
runs-on: ubuntu-latest | |
if: "startsWith(github.ref, 'refs/tags/')" | |
needs: [linux-wheels, windows-wheels, macos-wheels, sdist] | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
- name: Publish to PyPI | |
uses: PyO3/maturin-action@v1 | |
env: | |
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} | |
with: | |
command: upload | |
args: --skip-existing * |