Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch from Circle CI to GitHub Action #206

Merged
merged 20 commits into from
Feb 7, 2023
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 0 additions & 141 deletions .circleci/config.yml

This file was deleted.

16 changes: 0 additions & 16 deletions .circleci/has-functional-changes.sh

This file was deleted.

4 changes: 0 additions & 4 deletions .circleci/publish-python-package.sh

This file was deleted.

52 changes: 52 additions & 0 deletions .conda/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Publication vers Anaconda

Ce readme décrit la partie publication vers conda, pour utiliser le paquet conda résultant, voir [le readme principal](https://github.com/openfisca/openfisca-france/tree/publish-to-conda#installez-un-environnement-virtuel-avec-conda).

Pour envoyer un paquet vers conda il faut obligatoirement un fichier `meta.yaml` qui décrit le package.

Nous avons fait le choix d'utiliser le paquet PyPi comme source du paquet Conda, pour s'assurer que l'on publie bien la même chose sur les deux plateformes.

L'upload automatique est fait de la façon suivante par la CI uniquement si l'étape de livraison sur PyPi s'est bien déroulée :
- Installation de Miniconda.
- Récupération par le script `.github/get_pypi_info.py` des informations du package sur PyPi.
- Ecriture de ces informations par ce même script dans le fichier `.conda/meta.yaml`.
- Exécution de `conda build` pour construire et publier le paquet conformément au fichier `.conda/meta.yaml`. Cette étape nécessite la variable de CI ANACONDA_TOKEN.

Pour valider que tout a fonctionné, une étape `test-on-windows` a été ajoutée en fin de CI. Cette étape récupère le paquet conda sur une machine Windows et exécute les tests.

**A noter** : Le paquet OpenFisca-France est aussi publié sur `conda-forge`, pour cela voir [le feedstock](https://github.com/openfisca/openfisca-france-feedstock/tree/master/recipe)

C'est le channel `conda-forge` qui est le channel stable à conseiller aux utilisateurs. Le channel `openfisca` reçoit les derniers paquets de façon automatique.

## Etapes préparatoires pour arriver à cette automatisation

- Création d'un compte sur https://anaconda.org.
- Création d'un token sur https://anaconda.org/openfisca/settings/access avec le droit _Allow write access to the API site_. Attention il expire le 2023/01/13.

- Mis en place du token dans GitHub Action sous le nom de variable ANACONDA_TOKEN.

### Publication manuelle du package

Les étapes suivantes peuvent être réalisées sous Windows pour tester la publication :

_Cela fonctionne aussi sous macOS et Linux, à condition d'adapter les chemins._

- Editer `.conda/meta.yaml` pour vérifier son contenu.
- Installer [MiniConda](https://docs.conda.io/projects/conda/en/latest/user-guide/install/windows.html) si vous n'avez pas déjà [AnaConda](https://www.anaconda.com/products/individual).
- Puis dans le terminal saisissez les instructions suivantes :
- `conda install -c anaconda conda-build anaconda-client` Pour installer les outils indispensable.
- `conda build --croot c:\temp .conda` L'option `--croot ` est nécessaire sous Windows à cause des chemins trop long.
- `conda install -c anaconda anaconda-client` Pour installer l'outil en ligne de commande.
- `anaconda login` Pour vous connecter avec le compte _openfisca_, voir le Keepass OpenFisca.
- `anaconda upload c:\temp\noarch\openfisca-france-<VERSION>-py_0.tar.bz2` pour publier le package.
- Vérifier que tout c'est bien passé sur https://anaconda.org/search?q=openfisca.

## Test avec Docker

Docker peut être utilisé pour valider le bon fonctionnement

```
docker run -i -t continuumio/anaconda3 /bin/bash
conda install -c openfisca -c conda-forge openfisca-france-dev
openfisca test --country-package openfisca_france tests
benjello marked this conversation as resolved.
Show resolved Hide resolved
```
74 changes: 74 additions & 0 deletions .conda/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
###############################################################################
## Fichier de description du package pour Anaconda.org
## Le numéro de version est mis à jour automatiquement par BumpVer
###############################################################################

{% set name = "openfisca-france-data" %}
{% set version = "0.22.0" %}

package:
name: {{ name|lower }}
version: {{ version }}

source:
path: ..

build:
noarch: python
number: 0
script: "{{ PYTHON }} -m pip install . -vv"

requirements:
host:
- python
- pip
run:
- python >=3.7,<4.0
- click >=8.0.0,<9.0.0
- matplotlib >=3.1.1,<4.0.0
- multipledispatch >=0.6.0,<1.0.0
- openFisca-france >=113.0.0
- openFisca-survey-manager >=0.44.2,<1.0.0
- wquantiles >=0.3.0,<1.0.0

test:
imports:
- openfisca_france_data
requires:
- pip
commands:
#- pip check # TODO: openfisca-core 35.7.6 requires pytest, which is not installed. !!!
- pip list

outputs:
- name: openfisca-france-data

- name: openfisca-france-test
build:
noarch: python
requirements:
host:
- python
run:
- autopep8 >=1.4.0,<1.5.0
- flake8 >=3.7.0,<3.8.0
- ipython >=7.5.0,<8.0.0
- mypy >=0.670,<1.0.0
- pytest >=4.3.0,<5.0.0
- pytest-cov >=2.6.0,<3.0.0
- scipy >=1.2.1,<2.0.0
- toolz >=0.9.0,<1.0.0
- bumpver
- {{ pin_subpackage('openfisca-france-data', exact=True) }}

about:
home: https://fr.openfisca.org/
license_family: AGPL
license: AGPL-3.0-only
license_file: LICENSE
summary: "OpenFisca-France-Data module to work with French survey data"
description: |
OpenFisca is a versatile microsimulation free software.
This repository contains the module to work with French survey data.
doc_url: https://fr.openfisca.org/
dev_url: https://github.com/openfisca/openfisca-france-data/
12 changes: 12 additions & 0 deletions .github/has-functional-changes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#! /usr/bin/env bash

IGNORE_DIFF_ON="README.md CONTRIBUTING.md Makefile .gitignore .github/*"

last_tagged_commit=`git describe --tags --abbrev=0 --first-parent` # --first-parent ensures we don't follow tags not published in master through an unlikely intermediary merge commit

if git diff-index --name-only --exit-code $last_tagged_commit -- . `echo " $IGNORE_DIFF_ON" | sed 's/ / :(exclude)/g'` # Check if any file that has not be listed in IGNORE_DIFF_ON has changed since the last tag was published.
then
echo "No functional changes detected."
exit 1
else echo "The functional files above were changed."
fi
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
#! /usr/bin/env bash

if [[ $CIRCLE_BRANCH == master ]]
if [[ ${GITHUB_REF#refs/heads/} == master ]]
then
echo "No need for a version check on master."
exit 0
fi

if ! "$PWD"/.circleci/has-functional-changes.sh
if ! $(dirname "$BASH_SOURCE")/has-functional-changes.sh
then
echo "No need for a version update."
exit 0
fi

current_version=$(python setup.py --version)
current_version=`python setup.py --version`

if git rev-parse --verify --quiet "$current_version"
if git rev-parse --verify --quiet $current_version
then
echo "Version $current_version already exists in commit:"
git --no-pager log -1 "$current_version"
git --no-pager log -1 $current_version
echo
echo "Update the version number in setup.py before merging this branch into master."
echo "Look at the CONTRIBUTING.md file to learn how the version number should be updated."
exit 1
fi

if ! "$PWD"/.circleci/has-functional-changes.sh | grep --quiet CHANGELOG.md
if ! $(dirname "$BASH_SOURCE")/has-functional-changes.sh | grep --quiet CHANGELOG.md
then
echo "CHANGELOG.md has not been modified, while functional changes were made."
echo "Explain what you changed before merging this branch into master."
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#! /usr/bin/env bash

git tag "$(python setup.py --version)"
git tag `python setup.py --version`
git push --tags # update the repository version
Loading