1*62ac904eSgerardniconame: Reusable PHP Test Workflow 2*62ac904eSgerardnico 3*62ac904eSgerardnico# https://docs.github.com/en/actions/using-workflows/reusing-workflows#creating-a-reusable-workflow 4*62ac904eSgerardnicoon: 5*62ac904eSgerardnico # Reusable workflow 6*62ac904eSgerardnico workflow_call: 7*62ac904eSgerardnico # https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#inputs 8*62ac904eSgerardnico inputs: 9*62ac904eSgerardnico versions: 10*62ac904eSgerardnico description: 'Version of the interpreter' 11*62ac904eSgerardnico required: true 12*62ac904eSgerardnico default: "['8.2']" 13*62ac904eSgerardnico type: string 14*62ac904eSgerardnico 15*62ac904eSgerardnicopermissions: # Setting permissions for the token 16*62ac904eSgerardnico contents: read # needed to fetch code 17*62ac904eSgerardnico 18*62ac904eSgerardnico 19*62ac904eSgerardnico# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#defaults 20*62ac904eSgerardnico# Set the default shell for a run 21*62ac904eSgerardnicodefaults: 22*62ac904eSgerardnico run: 23*62ac904eSgerardnico shell: bash 24*62ac904eSgerardnico 25*62ac904eSgerardnico# A list of the jobs that run in the workflow file. 26*62ac904eSgerardnicojobs: 27*62ac904eSgerardnico test: # The identifier of the job 28*62ac904eSgerardnico 29*62ac904eSgerardnico name: Test on php ${{ matrix.php }} # The name of the job 30*62ac904eSgerardnico 31*62ac904eSgerardnico runs-on: ubuntu-latest 32*62ac904eSgerardnico 33*62ac904eSgerardnico strategy: 34*62ac904eSgerardnico # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix 35*62ac904eSgerardnico matrix: 36*62ac904eSgerardnico # 2 jobs will run, one for each include entry 37*62ac904eSgerardnico # because we don't specify any matrix variables 38*62ac904eSgerardnico # All configurations under include will run 39*62ac904eSgerardnico # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-adding-configurations 40*62ac904eSgerardnico php: ${{ github.event.inputs.versions }} 41*62ac904eSgerardnico fail-fast: false 42*62ac904eSgerardnico 43*62ac904eSgerardnico env: 44*62ac904eSgerardnico COMBO_HOME: lib/plugins/combo 45*62ac904eSgerardnico 46*62ac904eSgerardnico steps: 47*62ac904eSgerardnico 48*62ac904eSgerardnico - name: Phpunit 49*62ac904eSgerardnico run: | 50*62ac904eSgerardnico echo "PHPUNIT_VERSION=${{ fromJson(env.PHPUNIT_BY_PHP)[matrix.version] }}" >> $GITHUB_ENV 51*62ac904eSgerardnico env: 52*62ac904eSgerardnico PHPUNIT_BY_PHP: '{"7.4":"8.5.33","8.2":"8.5.33"}' 53*62ac904eSgerardnico 54*62ac904eSgerardnico # https://github.com/marketplace/actions/setup-php-action#matrix-setup 55*62ac904eSgerardnico - name: Setup PHP 56*62ac904eSgerardnico uses: shivammathur/setup-php@v2 57*62ac904eSgerardnico with: 58*62ac904eSgerardnico php-version: ${{ matrix.php }} 59*62ac904eSgerardnico extensions: mbstring, intl, PDO, pdo_sqlite, pdo_mysql, pdo_pgsql, bz2 60*62ac904eSgerardnico ini-values: pcre.jit=0 61*62ac904eSgerardnico tools: phpunit:${{ env.PHPUNIT_VERSION }} 62*62ac904eSgerardnico 63*62ac904eSgerardnico # Php Problem Matchers 64*62ac904eSgerardnico # https://github.com/marketplace/actions/setup-php-action#problem-matchers 65*62ac904eSgerardnico # Problem matchers are json configurations which identify errors and warnings in your logs 66*62ac904eSgerardnico # and surface them prominently in the GitHub Actions UI by highlighting them and creating code annotations. 67*62ac904eSgerardnico - name: Setup problem matchers for PHP 68*62ac904eSgerardnico run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" 69*62ac904eSgerardnico - name: Setup problem matchers for PHPUnit 70*62ac904eSgerardnico run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" 71*62ac904eSgerardnico 72*62ac904eSgerardnico # Cloning Dokuwiki 73*62ac904eSgerardnico - name: Checkout Dokuwiki 74*62ac904eSgerardnico uses: actions/checkout@v3 75*62ac904eSgerardnico with: 76*62ac904eSgerardnico repository: dokuwiki/dokuwiki 77*62ac904eSgerardnico 78*62ac904eSgerardnico # Cloning this repository to the runner 79*62ac904eSgerardnico # https://github.com/actions/checkout 80*62ac904eSgerardnico - name: Checkout Combo 81*62ac904eSgerardnico uses: actions/checkout@v3 82*62ac904eSgerardnico with: 83*62ac904eSgerardnico path: ${{ env.COMBO_HOME }} 84*62ac904eSgerardnico 85*62ac904eSgerardnico 86*62ac904eSgerardnico # Runs command-line programs using the operating system's shell. 87*62ac904eSgerardnico # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun 88*62ac904eSgerardnico - name: Post installation (Download Requirements) 89*62ac904eSgerardnico run: | 90*62ac904eSgerardnico chmod +x ${COMBO_HOME}/.github/bootstrap.sh 91*62ac904eSgerardnico source ${COMBO_HOME}/.github/bootstrap.sh 92*62ac904eSgerardnico # https://docs.github.com/en/actions/security-guides/encrypted-secrets#using-encrypted-secrets-in-a-workflow 93*62ac904eSgerardnico env: 94*62ac904eSgerardnico TOKEN: ${{ secrets.TOKEN }} 95*62ac904eSgerardnico working-directory: . 96*62ac904eSgerardnico shell: bash 97*62ac904eSgerardnico 98*62ac904eSgerardnico # Node 99*62ac904eSgerardnico # https://github.com/actions/setup-node/issues/160#issuecomment-642739512 100*62ac904eSgerardnico # We don't specify the version to get the one that is on the image 101*62ac904eSgerardnico # otherwise you get a time-out as it tries to download it and failed 102*62ac904eSgerardnico - uses: actions/setup-node@v3 103*62ac904eSgerardnico# with: 104*62ac904eSgerardnico# node-version: latest 105*62ac904eSgerardnico 106*62ac904eSgerardnico # Yarn (should happen after combo as we install in combo) 107*62ac904eSgerardnico - name: Yarn install 108*62ac904eSgerardnico run: | 109*62ac904eSgerardnico npm install --global yarn 110*62ac904eSgerardnico cd ${COMBO_HOME} && yarn install 111*62ac904eSgerardnico 112*62ac904eSgerardnico # Get the list of locales 113*62ac904eSgerardnico - name: Installed Locale 114*62ac904eSgerardnico run: locale -a 115*62ac904eSgerardnico 116*62ac904eSgerardnico # No better formatter 117*62ac904eSgerardnico # This one does not work: https://github.com/mheap/phpunit-matcher-action 118*62ac904eSgerardnico # with verbose, you see the configuration file used at the beginning 119*62ac904eSgerardnico - name: Test 120*62ac904eSgerardnico run: | 121*62ac904eSgerardnico phpunit --version 122*62ac904eSgerardnico phpunit --stderr --configuration _test/phpunit.xml --verbose --debug --bootstrap ${COMBO_HOME}/_test/bootstrap.php ${COMBO_HOME}/_test 123