From ef4b801c36263de96f5eb30cdfaee2e8400802ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Ott?= Date: Mon, 9 Sep 2024 12:43:36 +0200 Subject: [PATCH] Cleanup test plans and gather release data --- .github/oxid-esales/metapackage-7.0-full.yaml | 14 +- .github/oxid-esales/metapackage-7.0-slim.yaml | 8 +- .github/oxid-esales/metapackage-7.1-full.yaml | 11 +- .github/oxid-esales/metapackage-7.1-slim.yaml | 8 +- .github/oxid-esales/metapackage-7.2-full.yaml | 8 +- .github/oxid-esales/metapackage-7.2-slim.yaml | 8 +- .github/oxid-esales/metapackage-8.0-full.yaml | 15 +- .github/oxid-esales/metapackage-8.0-slim.yaml | 7 +- .github/workflows/dispatch_metapackage.yaml | 194 ++++++++++++++++++ 9 files changed, 211 insertions(+), 62 deletions(-) diff --git a/.github/oxid-esales/metapackage-7.0-full.yaml b/.github/oxid-esales/metapackage-7.0-full.yaml index 5d205915..078e9dcc 100644 --- a/.github/oxid-esales/metapackage-7.0-full.yaml +++ b/.github/oxid-esales/metapackage-7.0-full.yaml @@ -130,22 +130,18 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg" }} - # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' facts: path: 'vendor/oxid-esales/oxideshop-facts' container: # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests -e SUITE=vendor/oxid-esales/oxideshop-facts/tests {{ $selenium_options }} {{ $module_ids }}' + options: '-e SUITE=vendor/oxid-esales/oxideshop-facts/tests -e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' custom_script: | @@ -163,12 +159,10 @@ runscript: &runscript twig: path: 'vendor/oxid-esales/twig-component' workdir: '~' - custom_script: | - cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ + # custom_script: | + # cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' makaira: path: 'vendor/makaira/oxid-connect-essential' ddoe_wysiwyg: diff --git a/.github/oxid-esales/metapackage-7.0-slim.yaml b/.github/oxid-esales/metapackage-7.0-slim.yaml index 42310598..588dbeac 100644 --- a/.github/oxid-esales/metapackage-7.0-slim.yaml +++ b/.github/oxid-esales/metapackage-7.0-slim.yaml @@ -102,17 +102,13 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg" }} - # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' custom_script: | @@ -122,8 +118,6 @@ runscript: &runscript usercentrics: path: 'vendor/oxid-professional-services/usercentrics' container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' makaira: path: 'vendor/makaira/oxid-connect-essential' ddoe_wysiwyg: diff --git a/.github/oxid-esales/metapackage-7.1-full.yaml b/.github/oxid-esales/metapackage-7.1-full.yaml index 2f28d260..c5fb1f4d 100644 --- a/.github/oxid-esales/metapackage-7.1-full.yaml +++ b/.github/oxid-esales/metapackage-7.1-full.yaml @@ -139,21 +139,18 @@ runscript: &runscript # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg,ddoemedialibrary,eyeable_assist" }} # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $module_ids }} {{ $selenium_options }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $module_ids }} {{ $selenium_options }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $module_ids }} {{ $selenium_options }}' facts: path: 'vendor/oxid-esales/oxideshop-facts' container: # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests -e SUITE=vendor/oxid-esales/oxideshop-facts/tests {{ $selenium_options }} {{ $module_ids }}' + options: '-e SUITE=vendor/oxid-esales/oxideshop-facts/tests -e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' workdir: 'vendor/oxid-esales/gdpr-optin-module' @@ -170,8 +167,8 @@ runscript: &runscript twig: path: 'vendor/oxid-esales/twig-component' workdir: '~' - custom_script: | - cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ + # custom_script: | + # cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ usercentrics: path: 'vendor/oxid-professional-services/usercentrics' container: diff --git a/.github/oxid-esales/metapackage-7.1-slim.yaml b/.github/oxid-esales/metapackage-7.1-slim.yaml index 1a37b945..7d319c12 100644 --- a/.github/oxid-esales/metapackage-7.1-slim.yaml +++ b/.github/oxid-esales/metapackage-7.1-slim.yaml @@ -114,22 +114,16 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg,ddoemedialibrary,eyeable_assist" }} - # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' makaira: path: 'vendor/makaira/oxid-connect-essential' ddoe_wysiwyg: diff --git a/.github/oxid-esales/metapackage-7.2-full.yaml b/.github/oxid-esales/metapackage-7.2-full.yaml index 730ab05d..e164c0a9 100644 --- a/.github/oxid-esales/metapackage-7.2-full.yaml +++ b/.github/oxid-esales/metapackage-7.2-full.yaml @@ -140,17 +140,13 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg,ddoemedialibrary,eyeable_assist" }} - # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' facts: path: 'vendor/oxid-esales/oxideshop-facts' container: @@ -176,8 +172,6 @@ runscript: &runscript cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' makaira: path: 'vendor/makaira/oxid-connect-essential' ddoe_wysiwyg: diff --git a/.github/oxid-esales/metapackage-7.2-slim.yaml b/.github/oxid-esales/metapackage-7.2-slim.yaml index d78af893..da8d4025 100644 --- a/.github/oxid-esales/metapackage-7.2-slim.yaml +++ b/.github/oxid-esales/metapackage-7.2-slim.yaml @@ -112,24 +112,18 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg,ddoemedialibrary,eyeable_assist" }} - # yamllint disable-line rule:line-length - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' workdir: 'vendor/oxid-esales/gdpr-optin-module' usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' makaira: path: 'vendor/makaira/oxid-connect-essential' ddoe_wysiwyg: diff --git a/.github/oxid-esales/metapackage-8.0-full.yaml b/.github/oxid-esales/metapackage-8.0-full.yaml index 00418f2a..9e5e846f 100644 --- a/.github/oxid-esales/metapackage-8.0-full.yaml +++ b/.github/oxid-esales/metapackage-8.0-full.yaml @@ -126,24 +126,19 @@ runscript: &runscript "usercentrics:~/codeception.sh Acceptance" ] container: - # yamllint disable-line rule:line-length # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg" }} - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' facts: path: 'vendor/oxid-esales/oxideshop-facts' container: - # yamllint disable-line rule:line-length - options: '-e SUITE=vendor/oxid-esales/oxideshop-facts/tests -e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' + options: '-e SUITE=vendor/oxid-esales/oxideshop-facts/tests -e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' workdir: 'vendor/oxid-esales/gdpr-optin-module' @@ -160,12 +155,10 @@ runscript: &runscript twig: path: 'vendor/oxid-esales/twig-component' workdir: '~' - custom_script: | - cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ + # custom_script: | + # cp -a .github/oxid-esales/defaults/scripts/*.sh source/vendor/oxid-esales/twig-component/tests/scripts/ usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' sonarcloud: matrix: diff --git a/.github/oxid-esales/metapackage-8.0-slim.yaml b/.github/oxid-esales/metapackage-8.0-slim.yaml index 6c6aa9d1..74e41c56 100644 --- a/.github/oxid-esales/metapackage-8.0-slim.yaml +++ b/.github/oxid-esales/metapackage-8.0-slim.yaml @@ -118,23 +118,18 @@ runscript: &runscript container: # {{ $selenium_options := "-e SELENIUM_SERVER_HOST=selenium -e BROWSER_NAME=chrome" }} # {{ $module_ids := "-e MODULE_IDS=oegdproptin,oxps_usercentrics,makaira_oxid-connect-essential,ddoewysiwyg" }} - options: '-e THEME_ID=apex -e ESHOP_BOOTSTRAP_PATH=vendor/oxid-esales/oxideshop-ce/source/bootstrap.php {{ $selenium_options }} {{ $module_ids }}' + options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' composer: early: skip workdir: '' shop: path: 'vendor/oxid-esales/oxideshop-ce' workdir: 'vendor/oxid-esales/oxideshop-ce' - container: - # yamllint disable-line rule:line-length - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex -e TEST_SUITE=/var/www/vendor/oxid-esales/oxideshop-ce/tests {{ $selenium_options }} {{ $module_ids }}' gdpr: path: 'vendor/oxid-esales/gdpr-optin-module' workdir: 'vendor/oxid-esales/gdpr-optin-module' usercentrics: path: 'vendor/oxid-professional-services/usercentrics' - container: - options: '-e XDEBUG_MODE=coverage -e THEME_ID=apex {{ $selenium_options }} {{ $module_ids }}' sonarcloud: matrix: diff --git a/.github/workflows/dispatch_metapackage.yaml b/.github/workflows/dispatch_metapackage.yaml index 15370cb2..1b805e5f 100644 --- a/.github/workflows/dispatch_metapackage.yaml +++ b/.github/workflows/dispatch_metapackage.yaml @@ -130,3 +130,197 @@ jobs: enterprise_github_token: ${{ secrets.enterprise_github_token }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + + gather_data: + needs: ['build_testplan', 'stable', 'dev'] + runs-on: ${{ fromJson(inputs.runs_on) }} + outputs: + mysql: ${{ steps.mysql.outputs.result }} + php: ${{ steps.php.outputs.result }} + steps: + - name: 'Checkout testplan defaults' + uses: actions/checkout@v4 + with: + repository: 'OXID-eSales/github-actions' + ref: 'v4' + path: 'defaults' + sparse-checkout: '.github/oxid-esales' + + - name: 'Checkout testplans' + uses: actions/checkout@v4 + with: + sparse-checkout: | + '.github/oxid-esales' + composer.json + path: workflow + + - name: 'Consolidate plans' + id: consolidate_plans + run: | + mkdir -p '.github/oxid-esales/defaults' + if [ -d workflow/.github/oxid-esales ]; then + mv workflow/.github/oxid-esales/* '.github/oxid-esales/' + /bin/rm -r 'workflow/.github/oxid-esales' + fi + if [ -f workflow/composer.json ]; then + mv workflow/composer.json '.github/oxid-esales/' + fi + mv defaults/.github/oxid-esales/* '.github/oxid-esales/defaults/' + # ToDo: The next line can be removed in v5 when the transition to yaml is finished + cp '.github/oxid-esales/_custom.yaml' '.github/oxid-esales/_custom.yml' + if [ '${{ github.event_name }}' == 'pull_request' ]; then + REF=$(echo '${{ github.ref_name }}'|sed -e 's|/refs/heads/||') + # This is the git ref name + sed -e "s|safe_ref_name:.*|safe_ref_name: ${REF}|" -i.backup '.github/oxid-esales/defaults/defaults_light.yaml' + # This is the same for composer but with an added dev- prefix + sed -e "s|ref_name: dev-.*|ref_name: dev-${REF}|" -i.backup '.github/oxid-esales/defaults/defaults_light.yaml' + fi + + TESTPLAN=$(echo "${{ needs.build_testplan.outputs.testplan }}"|sed -e 's|~|.github/oxid-esales|g') + # ToDo: Remove the ,.github/oxid-esales/defaults/_rename.yaml when releasing v5 + DEFAULTS=".github/oxid-esales/defaults/defaults_light.yaml" + echo "testplan=${DEFAULTS},${TESTPLAN},.github/oxid-esales/defaults/_rename.yaml" >>"${GITHUB_OUTPUT}" + + - name: 'Load Testplan' + id: ltp + uses: 'joernott/load_testplan@v1' + with: + files: '${{ steps.consolidate_plans.outputs.testplan }}' + set_output: true + set_env: true + set_print: true + loglevel: info + logfile: load_testplan_init.log + yaml: generated_testplan.yaml + + - name: Get First MySQL + uses: actions/github-script@v7 + id: mysql + with: + script: | + m = JSON.parse('${{ steps.ltp.outputs.install_matrix_mysql}}'); + if (typeof m === 'string' || m instanceof String) + return m; + if (m.constructor !== Array) + core.setFailed('Could not get mysql matrix'); + return m[0]; + result-encoding: string + + - name: Get PHP array + uses: actions/github-script@v7 + id: php + with: + script: | + p = JSON.parse('${{ steps.ltp.outputs.install_matrix_php}}'); + if (typeof p === 'string' || p instanceof String) + return [p]; + if (p.constructor !== Array) + core.setFailed('Could not get php matrix'); + return p; + + consolidate: + needs: 'gather_data' + runs-on: ${{ fromJson(inputs.runs_on) }} + strategy: + matrix: + php: ${{ fromJSON(needs.gather_data.outputs.php) }} + branch: ['b-7.0', 'b-7.1', 'b-7.2', 'b-8.0'] + steps: + - name: 'Download artifacts' + uses: actions/download-artifact@v4 + with: + pattern: 'install-*.${{matrix.branch}}.x-PHP${{matrix.php}}-MYSQL${{needs.gather_data.outputs.mysql}}' + path: data + + - name: 'Rename files' + run: | + mv data/source/composer.lock ${{matrix.branch}}-{{matrix.php}}-composer.lock + mv data/source/composer.json.bak ${{matrix.branch}}-{{matrix.php}}-composer.json + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: 'composer-${{matrix.branch}}-{{matrix.php}}' + path: ${{matrix.branch}}-{{matrix.php}}-composer.* + retention-days: 4 + overwrite: true + + process_data: + needs: ['gather_data', 'consolidate'] + runs-on: ${{ fromJson(inputs.runs_on) }} + steps: + - name: 'Download artifacts' + uses: actions/download-artifact@v4 + with: + pattern: '*-composer.*' + path: files + + - name: Process files + uses: actions/github-script@v7 + id: mysql + with: + script: | + var fs = require('fs'); + var branches = ['b-7.1']; + var php_versions = JSON.parse('["8.1","8.2"]'); + if (php_versions.constructor !== Array) + console.log(`Could not get PHP matrix from ${php_versions}`); + core.setFailed(`Could not get PHP matrix from ${php_versions}`); + for (var b = 0; b < branches.length; b++) { + var branch = branches[b]; + composer_file=`./${branch}-${php_versions[0]}-composer.json`; + console.log(`Load ${composer_file}`); + var composer_json = JSON.parse(fs.readFileSync(composer_file, 'utf8')); + var all = {}; + var require = {}; + for (r in composer_json["require"]) { + require[r]='' + console.log(`Add ${r} to mandatory list`); + } + + for (var p = 0; p < php_versions.length; p++) { + lock_file=`./${branch}-${php_versions[p]}-composer.lock` + console.log(`Load ${lock_file}`); + var composer_lock = JSON.parse(fs.readFileSync(lock_file, 'utf8')); + for (l = 0; l < composer_lock.packages.length; l++) { + package=composer_lock.packages[l].name + version=composer_lock.packages[l].version + console.log(`Process ${package}:${version} from composer.lock ...`); + if (! (package in all)) { + all[package]=version + console.log("... added to all"); + } else { + a=all[package]; + i=a.indexOf(version); + console.log(`... already exists with value ${a} (${i})`); + if (a.indexOf(version) === -1) { + all[package] = `${all[package]} || ${version}`; + console.log("... extended previous definition in all"); + } + } + if (package in require) { + if (require[package] == '') { + console.log("... set value in mandatory list"); + require[package] = version; + } else { + if (require[package].indexOf(version) === -1) { + require[package] = `${require[package]} || ${version}`; + console.log("... extended previous definition in mandatory list"); + } + } + } else { + console.log("... ignore for mandatory list"); + } + } + } + core.summary.addSeparator() + core.summary.addHeading(`Pinned versions for ${branch}`, '1') + core.summary.addCodeBlock(JSON.stringify(all), 'json') + console.log(`Mandatory list for ${branch}`); + console.log("========================"); + console.log(require); + console.log("========================"); + console.log(`Full list for ${branch}`); + console.log("========================"); + console.log(all); + }