2017-10-04 1 views
0

Étant donné une matrice assez hétérogène qui ressemble à ceci:Puis-je multiplier les options dans matrix.include [] avec l'option env?

matrix: 
    include: 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=android ARCH=arm64-v8a 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=linux ARCH=aarch64 
    - os: osx 
    compiler: clang 
    env: PLATFORM=darwin ARCH=x86_64 TEST=unit 
    - os: osx 
    compiler: clang 
    env: PLATFORM=ios ARCH=arm64 

Cela se traduirait par quatre builds. Je voudrais le multiplier par deux avec une variable d'environnement supplémentaire TYPE=Debug/Release. Quelle est la meilleure façon d'obtenir cet effet? Considérons que j'ai seulement montré quatre configurations mais le nombre réel de configurations est 15. J'espère que je n'aurai pas à tout dupliquer deux fois.

J'ai essayé ce qui suit, mais il ne fait qu'ajouter deux autres constructions, il ne se combine pas avec la matrice:

env: 
    matrix: 
     - TYPE=Debug 
     - TYE=Release 

Même avec ceci:

env: 
    - TYPE=Debug 
    - TYE=Release 

Répondre

1

Je crains que vous ne pouvez pas .

Il n'y a pas d'expansion de matrice que vous pourriez attendre au niveau supérieur ne se produit pas dans matrix.include.

La clé env ne forme qu'un seul axe de la matrice de construction et il n'est pas possible d'utiliser des valeurs env différentes pour construire une matrice de construction.

La seule façon d'obtenir ce que vous avez besoin est d'ajouter quatre emplois:

matrix: 
    include: 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=android ARCH=arm64-v8a TYPE=Debug 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=linux ARCH=aarch64 TYPE=Debug 
    - os: osx 
    compiler: clang 
    env: PLATFORM=darwin ARCH=x86_64 TEST=unit TYPE=Debug 
    - os: osx 
    compiler: clang 
    env: PLATFORM=ios ARCH=arm64 TYPE=Debug 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=android ARCH=arm64-v8a TYPE=Release 
    - os: linux 
    compiler: gcc 
    env: PLATFORM=linux ARCH=aarch64 TYPE=Release 
    - os: osx 
    compiler: clang 
    env: PLATFORM=darwin ARCH=x86_64 TEST=unit TYPE=Release 
    - os: osx 
    compiler: clang 
    env: PLATFORM=ios ARCH=arm64 TYPE=Release 

(Soit dit en passant, où obtenez-vous le numéro 15?)

+0

Ce que je voulais dire dans mon fichier '.travis.yml', il y a littéralement 15 configurations et que je voudrais éviter de les doubler juste pour le plaisir de' Debug/Release 'dimensions. J'ai seulement montré 4 pour démontrer que chacun était assez unique que je pense que je ne peux pas "factoriser" quelque chose hors d'eux et que, AFAIK, je suis un peu coincé les épelant dehors. Par conséquent, j'espérais que je pourrais éviter de les épeler plus loin et finir avec 30 configurations. On dirait que je n'ai pas le choix, cependant. Merci. – screwnut

+0

Mais voici une question connexe: ne pourrais-je pas faire quelque chose comme 'env: PLATFORM = ... ARCH = ... TYPES = Debug, Release' et dans mon script:' boucle sur les valeurs dans 'TYPES'? – screwnut

+0

Le problème n'est pas différent si vous avez 2 ou 15 valeurs que vous voulez pour une variable d'environnement particulière. Il n'y a pas d'expansion de matrice, et vous devrez tous les écrire. Les outils comme ce que @renemilk a montré peuvent soulager votre douleur, mais il est toujours présent. – banzaiman

0

J'utilise généralement un petit script python avec (jinja) template inclus pour générer ma config travis.

#!/usr/bin/env python3 

tpl = ''' 
script: 
    - some_stuff.bash 

matrix: 
    include: 
{%- for letter, number in vars %} 
    - env: TESTS={{number}} CONFIG={{letter}} 
{%- endfor %} 

''' 

import os 
import jinja2 
from itertools import product 

tpl = jinja2.Template(tpl) 
ymlfn = os.path.join(os.path.dirname(__file__), '.travis.yml') 
with open(ymlfn, 'wt') as yml: 
    yml.write(tpl.render(vars=product(['a', 'b'], range(5)))) 

extend example