2016-12-27 50 views
1

.travis.yml是:sensiolabs洞察力無法解析travis.yml

sudo: false 

language: php 

php: 
    - 5.6 
    - 7.0 
    - 7.1 
    - hhvm 

matrix: 
    allow_failures: 
    - php: 7.1 

before_script: 
    - composer install --no-suggest ; 

script: 
    - if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/phpunit --coverage-clover clover.xml ; 
     vendor/bin/phpcs ; 
    else 
     vendor/bin/phpunit ; 
    fi 

after_script: 
    - if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/coveralls --coverage_clover=clover.xml -v ; 
    fi 

https://lint.travis-ci.org/沒有發現錯誤,外殼上travis-ci.org做工精細

https://insight.sensiolabs.com標記嚴重錯誤YAML files should not contain syntax error有:

Unable to parse at line 20 (near " vendor/bin/phpunit --coverage-clover clover.xml ;"). 

我該如何解決這個問題?

回答

1

的PHP YAML解析器documented解析YAML的子集的配置文件。

它只支持處理配置文件所需的功能。

一個東西,更難以得到的權利,什麼被留下是處理多行標串,文檔甚至指出,更容易實現引述消息多行(即標量字符串)不受支持。

Codebeautify,聲稱是最好的在線YAML驗證程序,無法處理這個正確的YAML文檔,但也有同樣的錯誤,所以它們似乎也在使用PHP YAML解析器。

如果你被卡住PHP,那麼你可以做三件事情,更具可讀性是如下使用literal style scalars(注意順序的元素指示器-|):

sudo: false 

language: php 

php: 
    - 5.6 
    - 7.0 
    - 7.1 
    - hhvm 

matrix: 
    allow_failures: 
    - php: 7.1 

before_script: 
    - composer install --no-suggest ; 

script: 
    - | 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/phpunit --coverage-clover clover.xml ; 
     vendor/bin/phpcs ; 
    else 
     vendor/bin/phpunit ; 
    fi 

after_script: 
    - | 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/coveralls --coverage_clover=clover.xml -v ; 
    fi 

然而,這改變了弦因爲換行符被保留。

與此相似的是folded style scalar string,如果不是縮進行,它會在YAML加載時刪除換行符。因此,如果上述方法不工作,你可以這樣做:

sudo: false 

language: php 

php: 
    - 5.6 
    - 7.0 
    - 7.1 
    - hhvm 

matrix: 
    allow_failures: 
    - php: 7.1 

before_script: 
    - composer install --no-suggest ; 

script: 
    - >- 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
    vendor/bin/phpunit --coverage-clover clover.xml ; 
    vendor/bin/phpcs ; 
    else 
    vendor/bin/phpunit ; 
    fi 

after_script: 
    - >- 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
    vendor/bin/coveralls --coverage_clover=clover.xml -v ; 
    fi 

,最終的選擇是標串改寫爲一條線:

sudo: false 

language: php 

php: 
    - 5.6 
    - 7.0 
    - 7.1 
    - hhvm 

matrix: 
    allow_failures: 
    - php: 7.1 

before_script: 
    - composer install --no-suggest ; 

script: 
    - if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then vendor/bin/phpunit --coverage-clover clover.xml ; vendor/bin/phpcs ; else vendor/bin/phpunit ; fi 

after_script: 
    - if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then vendor/bin/coveralls --coverage_clover=clover.xml -v ; fi 

這最後的版本和摺疊式的負載完全與您的YAML源代碼相比,您可以使用比PHP使用的更完整的YAML分析器。字面樣式加載了不同的東西,但如果您的應用程序以相同的方式處理這些標量字符串中的換行符和空格,則這種方式仍然可行。

0

實測值answerone more:使用literal scalar

sudo: false 

language: php 

php: 
    - 5.6 
    - 7.0 
    - 7.1 
    - hhvm 

matrix: 
    allow_failures: 
    - php: 7.1 

before_script: 
    - composer install --no-suggest ; 

script: 
    - | 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/phpunit --coverage-clover clover.xml ; 
     vendor/bin/phpcs ; 
    else 
     vendor/bin/phpunit ; 
    fi 

after_script: 
    - | 
    if [ "$TRAVIS_PHP_VERSION" == "7.0" ] ; then 
     vendor/bin/coveralls --coverage_clover=clover.xml -v ; 
    fi 
+0

通過引入換行符來改變標量,這可能不會影響程序中的結果,但您應該已經指出了這一點。 – Anthon

+0

沒有意識到這是自我回答,我猜字體樣式標量爲特拉維斯**和** Sensiolabs工作。 – Anthon

+0

〜@安森謝謝你的詳細解答! – 1f7