【问题标题】:sensiolabs insight unable to parse travis.ymlsensiolabs 洞察力无法解析 travis.yml
【发布时间】:2016-12-27 18:18:10
【问题描述】:

.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 上的 shell 工作正常

但是 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 ;").

我该如何解决这个问题?

【问题讨论】:

    标签: php yaml travis-ci


    【解决方案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
    

    最后一个版本和折叠样式通过比 PHP 使用的更完整的 YAML 解析器加载与您的 YAML 源代码完全相同的内容。文字样式会加载不同的内容,但如果您的应用程序以相同的方式处理这些标量字符串中的换行符和空格,这可能仍然有效。

    【讨论】:

      【解决方案2】:

      找到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
      

      【讨论】:

      • 通过引入换行符来改变标量,这可能不会影响程序的结果,但你应该指出这一点。
      • 没有意识到这是自我回答的,我猜文字样式标量适用于 Travis Sensiolabs。
      • ~@Anthon 谢谢你的详细解答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多