xref: /plugin/combo/.github/workflows/php-test-reusable.yml (revision 62ac904eb0d0a6b3aa750c695ebae9736313aebc)
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