Skip to content

ci: add matrix & fix conda (#1257) #2

ci: add matrix & fix conda (#1257)

ci: add matrix & fix conda (#1257) #2

Workflow file for this run

name: OpenFisca-Core / Deploy package to PyPi & Conda
on:
push:
branches: [master]
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
setup-pip:
strategy:
fail-fast: true
matrix:
os: [ubuntu-22.04, windows-2019]
numpy: [1.26.4, 1.24.2]
# Patch version must be specified to avoid any cache confusion, since
# the cache key depends on the full Python version. If left unspecified,
# different patch versions could be allocated between jobs, and any
# such difference would lead to a cache not found error.
python: [3.11.9, 3.9.13]
include:
- os: ubuntu-22.04
activate_command: source venv/bin/activate
- os: windows-2019
activate_command: .\venv\Scripts\activate
uses: ./.github/workflows/_before-pip.yaml
with:
os: ${{ matrix.os }}
numpy: ${{ matrix.numpy }}
python: ${{ matrix.python }}
activate_command: ${{ matrix.activate_command }}
setup-conda:
uses: ./.github/workflows/_before-conda.yaml
with:
os: ubuntu-22.04
numpy: 1.26.4
python: 3.10.6
test-pip:
needs: [setup-pip]
strategy:
fail-fast: true
matrix:
os: [ubuntu-22.04, windows-2019]
numpy: [1.26.4, 1.24.2]
python: [3.11.9, 3.9.13]
include:
- os: ubuntu-22.04
activate_command: source venv/bin/activate
- os: windows-2019
activate_command: .\venv\Scripts\activate
uses: ./.github/workflows/_test-pip.yaml
with:
os: ${{ matrix.os }}
numpy: ${{ matrix.numpy }}
python: ${{ matrix.python }}
activate_command: ${{ matrix.activate_command }}
test-conda:
uses: ./.github/workflows/_test-conda.yaml
needs: [setup-conda]
with:
os: ubuntu-22.04
numpy: 1.26.4
python: 3.10.6
lint-pip:
needs: [setup-pip]
strategy:
fail-fast: true
matrix:
numpy: [1.24.2]
python: [3.11.9, 3.9.13]
uses: ./.github/workflows/_lint-pip.yaml
with:
os: ubuntu-22.04
numpy: ${{ matrix.numpy }}
python: ${{ matrix.python }}
activate_command: source venv/bin/activate
check-version:
needs: [test-pip, test-conda, lint-pip]
uses: ./.github/workflows/_version.yaml
with:
os: ubuntu-22.04
python: 3.9.13
# GitHub Actions does not have a halt job option, to stop from deploying if
# no functional changes were found. We build a separate job to substitute the
# halt option. The `deploy` job is dependent on the output of the
# `check-for-functional-changes`job.
check-for-functional-changes:
runs-on: ubuntu-22.04
# Last job to run
needs: [check-version]
outputs:
status: ${{ steps.stop-early.outputs.status }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.9.13
- id: stop-early
# The `check-for-functional-changes` job should always succeed regardless
# of the `has-functional-changes` script's exit code. Consequently, we do
# not use that exit code to trigger deploy, but rather a dedicated output
# variable `status`, to avoid a job failure if the exit code is different
# from 0. Conversely, if the job fails the entire workflow would be
# marked as `failed` which is disturbing for contributors.
run: if "${GITHUB_WORKSPACE}/.github/has-functional-changes.sh" ; then echo
"::set-output name=status::success" ; fi
publish-to-pypi:
runs-on: ubuntu-22.04
needs: [check-for-functional-changes]
if: needs.check-for-functional-changes.outputs.status == 'success'
env:
PYPI_USERNAME: __token__
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN_OPENFISCA_BOT }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.9.13
- name: Cache deps
uses: actions/cache@v4
with:
path: venv
key: pip-deps-ubuntu-22.04-np1.24.2-py3.9.13-${{ hashFiles('setup.py') }}
- name: Cache build
uses: actions/cache@v4
with:
path: venv/**/[oO]pen[fF]isca*
key: pip-build-ubuntu-22.04-np1.24.2-py3.9.13-${{ hashFiles('setup.py') }}-${{ github.sha }}
- name: Cache release
uses: actions/cache@v4
with:
path: dist
key: pip-release-ubuntu-22.04-np1.24.2-py3.9.13-${{ hashFiles('setup.py') }}-${{ github.sha }}
- name: Upload package to PyPi
run: |
source venv/bin/activate
make publish
- name: Update doc
run: |
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.OPENFISCADOC_BOT_ACCESS_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/openfisca/openfisca-doc/actions/workflows/deploy.yaml/dispatches \
-d '{"ref":"main"}'
publish-to-conda:
runs-on: ubuntu-22.04
needs: [publish-to-pypi]
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache conda env
uses: actions/cache@v4
with:
path: |
/usr/share/miniconda/envs/openfisca
~/.conda/envs/openfisca
.env.yaml
key: conda-env-ubuntu-22.04-np1.26.4-py3.10.6-${{ hashFiles('setup.py') }}
- name: Cache conda deps
uses: actions/cache@v4
with:
path: ~/conda_pkgs_dir
key: conda-deps-ubuntu-22.04-np1.26.4-py3.10.6-${{ hashFiles('setup.py') }}
- name: Cache release
uses: actions/cache@v4
with:
path: ~/conda-rel
key: conda-release-ubuntu-22.04-np1.26.4-py3.10.6-${{ hashFiles('setup.py') }}-${{ github.sha }}
- name: Update conda & dependencies
uses: conda-incubator/setup-miniconda@v3
with:
activate-environment: openfisca
environment-file: .env.yaml
miniforge-version: latest
use-mamba: true
- name: Publish to conda
shell: bash -l {0}
run: |
anaconda upload ~/conda-rel/noarch/openfisca-core-* \
--token ${{ secrets.ANACONDA_TOKEN }}
--user openfisca
--force
test-on-windows:
runs-on: windows-2019
needs: [publish-to-conda]
defaults:
run:
shell: bash -l {0}
steps:
- uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
# See GHA Windows
# https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
python-version: 3.10.6
channels: conda-forge
activate-environment: true
- name: Checkout
uses: actions/checkout@v4
- name: Install with conda
shell: bash -l {0}
run: conda install -c openfisca openfisca-core
- name: Test openfisca
shell: bash -l {0}
run: openfisca --help