Fix changelog et pyproject #8529
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: OpenFisca France | |
on: | |
push: | |
pull_request: | |
types: [opened, reopened] | |
env: | |
DEFAULT_PYTHON_VERSION: '3.10.6' | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: true | |
matrix: | |
os: ["ubuntu-20.04"] # On peut ajouter "macos-latest" si besoin | |
python-version: ["3.9.9", "3.10.6"] | |
openfisca-dependencies: [minimal, maximal] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-${{ matrix.os }}-${{ matrix.openfisca-dependencies }} | |
restore-keys: | # in case of a cache miss (systematically unless the same commit is built repeatedly), the keys below will be used to restore dependencies from previous builds, and the cache will be stored at the end of the job, making up-to-date dependencies available for all jobs of the workflow; see more at https://docs.github.com/en/actions/advanced-guides/caching-dependencies-to-speed-up-workflows#example-using-the-cache-action | |
build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ matrix.os }} | |
build-${{ env.pythonLocation }}-${{ matrix.os }} | |
- name: Build package | |
run: make build | |
- name: Minimal version | |
if: matrix.openfisca-dependencies == 'minimal' | |
run: | # Installs the OpenFisca dependencies minimal version from pyproject.toml | |
pip install $(python ${GITHUB_WORKSPACE}/.github/get_minimal_version.py) | |
- name: Cache release | |
id: restore-release | |
uses: actions/cache@v4 | |
with: | |
path: dist | |
key: release-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-${{ matrix.os }}-${{ matrix.openfisca-dependencies }} | |
build-and-test-conda: | |
runs-on: windows-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Cache build | |
uses: actions/cache@v4 | |
with: | |
path: ./conda-bld | |
key: build-conda-${{ hashFiles('pyproject.toml') }}-${{ github.sha }} | |
enableCrossOsArchive: true | |
- name: set version | |
run: | | |
python3 .github/pyproject_version.py --replace True | |
- name: Build conda package | |
uses: prefix-dev/[email protected] | |
with: | |
build-args: --channel openfisca --channel conda-forge --output-dir ./conda-bld | |
recipe-path: .conda/recipe.yaml | |
upload-artifact: false | |
- name: Setup conda | |
uses: conda-incubator/setup-miniconda@v3 | |
with: | |
activate-environment: openfisca | |
miniforge-version: latest | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
use-mamba: true | |
channels: conda-forge,defaults | |
- name: Install package | |
shell: pwsh | |
run: mamba install --channel ./conda-bld --channel openfisca openfisca-france | |
- name: Test openfisca-france conda package | |
shell: pwsh | |
run: openfisca test tests/formulas/irpp.yaml | |
lint-files: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
dependencies-version: [maximal] | |
needs: [ build ] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all the tags | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-ubuntu-20.04-${{ matrix.dependencies-version }} | |
- run: make check-syntax-errors | |
- run: make check-style | |
- name: Lint Python files | |
run: "${GITHUB_WORKSPACE}/.github/lint-changed-python-files.sh" | |
- name: Lint YAML tests | |
run: "${GITHUB_WORKSPACE}/.github/lint-changed-yaml-tests.sh" | |
test-python: | |
runs-on: ${{ matrix.os }} | |
needs: [ build ] | |
strategy: | |
fail-fast: true | |
matrix: | |
os: [ "ubuntu-20.04" ] # On peut ajouter "macos-latest" si besoin | |
python-version: ["3.9.9", "3.10.6"] | |
openfisca-dependencies: [minimal, maximal] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-${{ matrix.os }}-${{ matrix.openfisca-dependencies }} | |
- run: | | |
shopt -s globstar | |
openfisca test --country-package openfisca_france tests/**/*.py | |
if: matrix.openfisca-dependencies != 'minimal' || matrix.python-version != '3.9.9' | |
test-path-length: | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Test max path length | |
run: make check-path-length | |
test-yaml: | |
runs-on: ubuntu-20.04 | |
needs: [ build ] | |
strategy: | |
fail-fast: false | |
matrix: | |
# Set N number of parallel jobs to run tests on. Here we use 10 jobs | |
# Remember to update ci_node_index below to 0..N-1 | |
ci_node_total: [ 10 ] | |
ci_node_index: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] | |
openfisca-dependencies: [minimal, maximal] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-ubuntu-20.04-${{ matrix.openfisca-dependencies }} | |
- name: Split YAML tests | |
id: yaml-test | |
env: | |
CI_NODE_TOTAL: ${{ matrix.ci_node_total }} | |
CI_NODE_INDEX: ${{ matrix.ci_node_index }} | |
run: | | |
echo "TEST_FILES_SUBLIST=$(python "${GITHUB_WORKSPACE}/.github/split_tests.py" ${CI_NODE_TOTAL} ${CI_NODE_INDEX})" >> $GITHUB_ENV | |
- name: Run YAML test | |
run: | | |
openfisca test --country-package openfisca_france ${TEST_FILES_SUBLIST} | |
test-api: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
dependencies-version: [maximal] | |
needs: [ build ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-ubuntu-20.04-${{ matrix.dependencies-version }} | |
- name: Test the Web API | |
run: "${GITHUB_WORKSPACE}/.github/test-api.sh" | |
test-on-windows: | |
runs-on: windows-latest | |
if: github.ref == 'refs/heads/master' # Only triggered for the `master` branch | |
needs: [ build-and-test-conda ] | |
steps: | |
# Checkout needed to get github.sha | |
- uses: actions/checkout@v4 | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
activate-environment: openfisca | |
miniforge-version: latest | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
use-mamba: true | |
channels: conda-forge,defaults | |
- name: Restore build | |
uses: actions/cache@v4 | |
with: | |
path: ./conda-bld | |
key: build-conda-${{ hashFiles('pyproject.toml') }}-${{ github.sha }} | |
fail-on-cache-miss: true | |
enableCrossOsArchive: true | |
- name: Test max path length | |
run: "python3 openfisca_france/scripts/check_path_length.py" | |
- name: Install package | |
shell: pwsh | |
run: mamba install --channel ./conda-bld --channel openfisca openfisca-france | |
- name: Test conda package | |
shell: pwsh | |
run: openfisca test tests/formulas/irpp.yaml | |
check-version-and-changelog: | |
runs-on: ubuntu-20.04 | |
needs: [ lint-files, test-python, test-yaml, test-api ] # Last job to run | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all the tags | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Check version number has been properly updated | |
run: "${GITHUB_WORKSPACE}/.github/is-version-number-acceptable.sh" | |
# 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-20.04 | |
if: github.ref == 'refs/heads/master' # Only triggered for the `master` branch | |
needs: [ check-version-and-changelog ] | |
outputs: | |
status: ${{ steps.stop-early.outputs.status }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all the tags | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- id: stop-early | |
run: if "${GITHUB_WORKSPACE}/.github/has-functional-changes.sh" ; then echo "::set-output name=status::success" ; fi | |
deploy: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
dependencies-version: [maximal] | |
needs: [ check-for-functional-changes ] | |
if: needs.check-for-functional-changes.outputs.status == 'success' | |
env: | |
PYPI_USERNAME: __token__ | |
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all the tags | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
- name: Cache build | |
id: restore-build | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: build-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-ubuntu-20.04-${{ matrix.dependencies-version }} | |
- name: Cache release | |
id: restore-release | |
uses: actions/cache@v4 | |
with: | |
path: dist | |
key: release-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-${{ github.sha }}-ubuntu-20.04-${{ matrix.dependencies-version }} | |
- name: Upload a Python package to PyPi | |
run: twine upload dist/* --username $PYPI_USERNAME --password $PYPI_TOKEN | |
- name: Publish a git tag | |
run: "${GITHUB_WORKSPACE}/.github/publish-git-tag.sh" | |
publish-to-conda: | |
runs-on: windows-latest | |
needs: [ deploy, test-on-windows ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Restore build | |
uses: actions/cache@v4 | |
with: | |
path: ./conda-bld | |
key: build-conda-${{ hashFiles('pyproject.toml') }}-${{ github.sha }} | |
fail-on-cache-miss: true | |
enableCrossOsArchive: true | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
activate-environment: openfisca | |
miniforge-version: latest | |
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | |
use-mamba: true | |
channels: conda-forge,defaults | |
- name: Install package | |
shell: pwsh | |
run: mamba install --channel ./conda-bld --channel openfisca openfisca-france | |
- name: Test conda package | |
shell: pwsh | |
run: openfisca test tests/formulas/irpp.yaml | |
- name: Conda upload already built package | |
shell: pwsh | |
run: | | |
conda install --yes anaconda-client | |
anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --user openfisca ./conda-bld\noarch\openfisca-france-* |