From 72a1d16ad780092c2070711d40e18d192037f96a Mon Sep 17 00:00:00 2001 From: kenjis Date: Fri, 15 Sep 2023 16:22:28 +0900 Subject: [PATCH 1/9] docs: add note for feature to replace Config property --- user_guide_src/source/general/configuration.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/user_guide_src/source/general/configuration.rst b/user_guide_src/source/general/configuration.rst index e51ab1e8fa40..4e8c2940d996 100644 --- a/user_guide_src/source/general/configuration.rst +++ b/user_guide_src/source/general/configuration.rst @@ -183,6 +183,10 @@ are considered for merging into the configuration object's properties. .. important:: You cannot add a new property by setting environment variables, nor change a scalar value to an array. See :ref:`env-var-replacements-for-data`. +.. note:: This feature is implemented in the ``CodeIgniter\Config\BaseConfig`` + class. So it will not work with a few files in the **app/Config** folder + that do not extends the class. + If the prefix of a namespaced variable exactly matches the namespace of the configuration class, then the trailing part of the setting (after the dot) is treated as a configuration property. If it matches an existing configuration property, the environment variable's From b63b6253f24f363ff742c3a7497dd2012324feda Mon Sep 17 00:00:00 2001 From: kenjis Date: Fri, 15 Sep 2023 16:24:57 +0900 Subject: [PATCH 2/9] docs: add link to how-to page --- user_guide_src/source/database/configuration.rst | 2 ++ user_guide_src/source/general/configuration.rst | 2 ++ 2 files changed, 4 insertions(+) diff --git a/user_guide_src/source/database/configuration.rst b/user_guide_src/source/database/configuration.rst index b80c10ede526..128e28d9eeef 100644 --- a/user_guide_src/source/database/configuration.rst +++ b/user_guide_src/source/database/configuration.rst @@ -105,6 +105,8 @@ within the class' constructor: .. literalinclude:: configuration/008.php +.. _database-config-with-env-file: + ************************** Configuring with .env File ************************** diff --git a/user_guide_src/source/general/configuration.rst b/user_guide_src/source/general/configuration.rst index 4e8c2940d996..45ecce84108d 100644 --- a/user_guide_src/source/general/configuration.rst +++ b/user_guide_src/source/general/configuration.rst @@ -237,6 +237,8 @@ expect your ``Config\App`` to magically have that property and value at run time When you have the property ``$default = ['encrypt' => false]`` in your ``Config\Database``, you cannot change the ``encrypt`` value to an array even if you put ``database.default.encrypt.ssl_verify = true`` in your **.env**. +If you want to do like that, see +:ref:`Database Configuration `. Treating Environment Variables as Arrays ======================================== From 5073e8b4de1163b29b69eba6af4a7db20420daee Mon Sep 17 00:00:00 2001 From: Paulo Esteves Date: Sat, 16 Sep 2023 12:26:33 +0100 Subject: [PATCH 3/9] refactor: Apply PHPStan rule to RouteCollection::__construct() --- system/Router/RouteCollection.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/Router/RouteCollection.php b/system/Router/RouteCollection.php index 34629920cc1c..afdbe1611dea 100644 --- a/system/Router/RouteCollection.php +++ b/system/Router/RouteCollection.php @@ -302,7 +302,8 @@ public function __construct(FileLocator $locator, Modules $moduleConfig, Routing // Normalize the path string in routeFiles array. foreach ($this->routeFiles as $routeKey => $routesFile) { - $this->routeFiles[$routeKey] = realpath($routesFile) ?: $routesFile; + $realpath = realpath($routesFile); + $this->routeFiles[$routeKey] = ($realpath === false) ? $routesFile : $realpath; } } From 26c4035244377520dee19647f5f1646933206493 Mon Sep 17 00:00:00 2001 From: Paulo Esteves Date: Sat, 16 Sep 2023 12:28:04 +0100 Subject: [PATCH 4/9] refactor: Apply PHPStan rule to RouteCollection::loadRoutesOptions() --- system/Router/RouteCollection.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/system/Router/RouteCollection.php b/system/Router/RouteCollection.php index afdbe1611dea..b99ca145106e 100644 --- a/system/Router/RouteCollection.php +++ b/system/Router/RouteCollection.php @@ -1700,7 +1700,9 @@ public function resetRoutes() */ protected function loadRoutesOptions(?string $verb = null): array { - $verb = $verb ?: $this->getHTTPVerb(); + if (null === $verb || $verb === '') { + $verb = $this->getHTTPVerb(); + } $options = $this->routesOptions[$verb] ?? []; From d736bcff1ad528e5c5cbc34927fb1574e0cfd73c Mon Sep 17 00:00:00 2001 From: Paulo Esteves Date: Sat, 16 Sep 2023 12:45:09 +0100 Subject: [PATCH 5/9] remove exception line from phpstan-baseline for RouteCollection --- phpstan-baseline.php | 5 ----- system/Router/RouteCollection.php | 4 +--- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/phpstan-baseline.php b/phpstan-baseline.php index 106de3723ef0..fc2f43d3005f 100644 --- a/phpstan-baseline.php +++ b/phpstan-baseline.php @@ -2316,11 +2316,6 @@ 'count' => 1, 'path' => __DIR__ . '/system/Router/RouteCollection.php', ]; -$ignoreErrors[] = [ - 'message' => '#^Short ternary operator is not allowed\\. Use null coalesce operator if applicable or consider using long ternary\\.$#', - 'count' => 2, - 'path' => __DIR__ . '/system/Router/RouteCollection.php', -]; $ignoreErrors[] = [ 'message' => '#^Method CodeIgniter\\\\Router\\\\RouteCollectionInterface\\:\\:add\\(\\) has parameter \\$to with no signature specified for Closure\\.$#', 'count' => 1, diff --git a/system/Router/RouteCollection.php b/system/Router/RouteCollection.php index b99ca145106e..8a23264058cb 100644 --- a/system/Router/RouteCollection.php +++ b/system/Router/RouteCollection.php @@ -1700,9 +1700,7 @@ public function resetRoutes() */ protected function loadRoutesOptions(?string $verb = null): array { - if (null === $verb || $verb === '') { - $verb = $this->getHTTPVerb(); - } + $verb ??= $this->getHTTPVerb(); $options = $this->routesOptions[$verb] ?? []; From f188a750dda0c2458592f9e7f7543c58acdfa2b5 Mon Sep 17 00:00:00 2001 From: totoprayogo1916 Date: Tue, 19 Sep 2023 08:13:12 +0700 Subject: [PATCH 6/9] update GA label --- .github/workflows/label-add-conflict.yml | 53 +++++++++++++++++++++ .github/workflows/label-conflict.yml | 33 ------------- .github/workflows/label-remove-conflict.yml | 36 ++++++++++++++ 3 files changed, 89 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/label-add-conflict.yml delete mode 100644 .github/workflows/label-conflict.yml create mode 100644 .github/workflows/label-remove-conflict.yml diff --git a/.github/workflows/label-add-conflict.yml b/.github/workflows/label-add-conflict.yml new file mode 100644 index 000000000000..43c291b4e889 --- /dev/null +++ b/.github/workflows/label-add-conflict.yml @@ -0,0 +1,53 @@ +name: Auto Add Label "stale" & Comment Conflicts + +on: + push: + branches: + - develop + - '4.*' + pull_request: + branches: + - develop + - '4.*' + +jobs: + auto-label-comment-conflict: + + permissions: + contents: read + pull-requests: write + + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get PR List + id: PR-list + run: echo "pr_list=$(gh pr list -L 100 --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: 'Add label "stale" and comment' + env: + PR_LIST: ${{ steps.PR-list.outputs.pr_list }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + IFS=$'\n' # Set Internal Field Separator to newline to handle array elements + + # Iterate through the PRs in PR_LIST + for pr in $(echo "$PR_LIST" | jq -c '.[]'); do + mergeable=$(echo "$pr" | jq -r '.mergeable') + author=$(echo "$pr" | jq -r '.author.login') + labels=$(echo "$pr" | jq -c '.labels[].name' | tr -d '[]"') + url=$(echo "$pr" | jq -r '.url') + + if [ "$mergeable" != "MERGEABLE" ] && [[ ! "$labels" == *"stale"* ]]; then + # Add "stale" label + gh pr edit $url --add-label "stale" + + # Add a comment + gh pr comment $url --body ":wave: Hi, @$author!

We detected conflicts in your PR against the base branch :speak_no_evil:
You may want to sync :arrows_counterclockwise: your branch with upstream!

Ref: [Syncing Your Branch](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch)" + fi + done diff --git a/.github/workflows/label-conflict.yml b/.github/workflows/label-conflict.yml deleted file mode 100644 index 363cb967d274..000000000000 --- a/.github/workflows/label-conflict.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Auto Comment Conflicts -on: - pull_request: - branches: - - 'develop' - - '4.*' - types: - - labeled - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - auto-comment-conflict: - permissions: - contents: read - pull-requests: write - if: github.event.label.name == 'stale' - runs-on: ubuntu-latest - steps: - - name: Add comment for PR with conflict - uses: peter-evans/create-or-update-comment@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - issue-number: ${{ github.event.pull_request.number }} - body: | - :wave: Hi, @${{ github.event.pull_request.user.login }}! - - We detected conflicts in your PR against the base branch :speak_no_evil: - You may want to sync :arrows_counterclockwise: your branch with upstream! - - Ref: https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch diff --git a/.github/workflows/label-remove-conflict.yml b/.github/workflows/label-remove-conflict.yml new file mode 100644 index 000000000000..d1b6c665322d --- /dev/null +++ b/.github/workflows/label-remove-conflict.yml @@ -0,0 +1,36 @@ +name: Auto Remove "stale" label + +on: + pull_request: + branches: + - develop + - '4.*' + +jobs: + check-conflict: + runs-on: ubuntu-22.04 + permissions: + contents: read + pull-requests: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get PR Detail + id: PR-detail + run: echo "detail=$(gh pr view $PR_URL --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ github.event.pull_request.html_url }} + + - name: 'Remove label "stale"' + env: + PR_DETAIL: ${{ steps.PR-detail.outputs.detail }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ github.event.pull_request.html_url }} + run: | + if [ "$(echo $PR_DETAIL | jq -r '.mergeable')" == "MERGEABLE" ] && \ + [ "$(echo $PR_DETAIL | jq -r '.labels[] | select(.name == "stale")')" != "" ]; then + gh pr edit $PR_URL --remove-label "stale" + fi From 01ba3092dbe5c1b23b1328dd953c467be96d801f Mon Sep 17 00:00:00 2001 From: kenjis Date: Wed, 20 Sep 2023 14:05:47 +0900 Subject: [PATCH 7/9] Revert "GitHub Actions to add/remove label "stale" and comment" --- .github/workflows/label-add-conflict.yml | 53 --------------------- .github/workflows/label-conflict.yml | 33 +++++++++++++ .github/workflows/label-remove-conflict.yml | 36 -------------- 3 files changed, 33 insertions(+), 89 deletions(-) delete mode 100644 .github/workflows/label-add-conflict.yml create mode 100644 .github/workflows/label-conflict.yml delete mode 100644 .github/workflows/label-remove-conflict.yml diff --git a/.github/workflows/label-add-conflict.yml b/.github/workflows/label-add-conflict.yml deleted file mode 100644 index 43c291b4e889..000000000000 --- a/.github/workflows/label-add-conflict.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Auto Add Label "stale" & Comment Conflicts - -on: - push: - branches: - - develop - - '4.*' - pull_request: - branches: - - develop - - '4.*' - -jobs: - auto-label-comment-conflict: - - permissions: - contents: read - pull-requests: write - - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Get PR List - id: PR-list - run: echo "pr_list=$(gh pr list -L 100 --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: 'Add label "stale" and comment' - env: - PR_LIST: ${{ steps.PR-list.outputs.pr_list }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - - IFS=$'\n' # Set Internal Field Separator to newline to handle array elements - - # Iterate through the PRs in PR_LIST - for pr in $(echo "$PR_LIST" | jq -c '.[]'); do - mergeable=$(echo "$pr" | jq -r '.mergeable') - author=$(echo "$pr" | jq -r '.author.login') - labels=$(echo "$pr" | jq -c '.labels[].name' | tr -d '[]"') - url=$(echo "$pr" | jq -r '.url') - - if [ "$mergeable" != "MERGEABLE" ] && [[ ! "$labels" == *"stale"* ]]; then - # Add "stale" label - gh pr edit $url --add-label "stale" - - # Add a comment - gh pr comment $url --body ":wave: Hi, @$author!

We detected conflicts in your PR against the base branch :speak_no_evil:
You may want to sync :arrows_counterclockwise: your branch with upstream!

Ref: [Syncing Your Branch](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch)" - fi - done diff --git a/.github/workflows/label-conflict.yml b/.github/workflows/label-conflict.yml new file mode 100644 index 000000000000..363cb967d274 --- /dev/null +++ b/.github/workflows/label-conflict.yml @@ -0,0 +1,33 @@ +name: Auto Comment Conflicts +on: + pull_request: + branches: + - 'develop' + - '4.*' + types: + - labeled + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + auto-comment-conflict: + permissions: + contents: read + pull-requests: write + if: github.event.label.name == 'stale' + runs-on: ubuntu-latest + steps: + - name: Add comment for PR with conflict + uses: peter-evans/create-or-update-comment@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + issue-number: ${{ github.event.pull_request.number }} + body: | + :wave: Hi, @${{ github.event.pull_request.user.login }}! + + We detected conflicts in your PR against the base branch :speak_no_evil: + You may want to sync :arrows_counterclockwise: your branch with upstream! + + Ref: https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch diff --git a/.github/workflows/label-remove-conflict.yml b/.github/workflows/label-remove-conflict.yml deleted file mode 100644 index d1b6c665322d..000000000000 --- a/.github/workflows/label-remove-conflict.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Auto Remove "stale" label - -on: - pull_request: - branches: - - develop - - '4.*' - -jobs: - check-conflict: - runs-on: ubuntu-22.04 - permissions: - contents: read - pull-requests: write - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Get PR Detail - id: PR-detail - run: echo "detail=$(gh pr view $PR_URL --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PR_URL: ${{ github.event.pull_request.html_url }} - - - name: 'Remove label "stale"' - env: - PR_DETAIL: ${{ steps.PR-detail.outputs.detail }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PR_URL: ${{ github.event.pull_request.html_url }} - run: | - if [ "$(echo $PR_DETAIL | jq -r '.mergeable')" == "MERGEABLE" ] && \ - [ "$(echo $PR_DETAIL | jq -r '.labels[] | select(.name == "stale")')" != "" ]; then - gh pr edit $PR_URL --remove-label "stale" - fi From 4ee20ad02f316efab869361bf3fec818bc5565f4 Mon Sep 17 00:00:00 2001 From: kenjis Date: Thu, 21 Sep 2023 06:13:06 +0900 Subject: [PATCH 8/9] chore: add hack to autoload.psr-4 --- .github/workflows/reusable-coveralls.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-coveralls.yml b/.github/workflows/reusable-coveralls.yml index f545d79bb5ec..a5dfc83996cb 100644 --- a/.github/workflows/reusable-coveralls.yml +++ b/.github/workflows/reusable-coveralls.yml @@ -57,7 +57,10 @@ jobs: run: composer update --ansi - name: Merge coverage files - run: vendor/bin/phpcov merge --clover build/logs/clover.xml build/cov + run: | + jq '.autoload."psr-4" += {"Config\\": "app/Config/"}' composer.json > temp.json && mv temp.json composer.json + composer dump-autoload + vendor/bin/phpcov merge --clover build/logs/clover.xml build/cov - name: Upload coverage to Coveralls run: vendor/bin/php-coveralls --verbose --exclude-no-stmt --ansi From 34f1bfdaf3753c5bc2969bfe0ee9b96fb546925d Mon Sep 17 00:00:00 2001 From: totoprayogo1916 Date: Thu, 21 Sep 2023 08:43:06 +0700 Subject: [PATCH 9/9] add or remove 'stale' label --- .github/workflows/label-add-conflict.yml | 54 +++++++++++++++++++++ .github/workflows/label-conflict.yml | 33 ------------- .github/workflows/label-remove-conflict.yml | 39 +++++++++++++++ 3 files changed, 93 insertions(+), 33 deletions(-) create mode 100644 .github/workflows/label-add-conflict.yml delete mode 100644 .github/workflows/label-conflict.yml create mode 100644 .github/workflows/label-remove-conflict.yml diff --git a/.github/workflows/label-add-conflict.yml b/.github/workflows/label-add-conflict.yml new file mode 100644 index 000000000000..9cd02ca1e658 --- /dev/null +++ b/.github/workflows/label-add-conflict.yml @@ -0,0 +1,54 @@ +name: Auto Add Label "stale" & Comment Conflicts + +on: + push: + branches: + - develop + - '4.*' + pull_request: + branches: + - develop + - '4.*' + +jobs: + auto-label-comment-conflict: + + permissions: + contents: read + pull-requests: write + + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get PR List + id: PR-list + run: echo "pr_list=$(gh pr list -L 100 --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: 'Add label "stale" and comment' + env: + PR_LIST: ${{ steps.PR-list.outputs.pr_list }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + + IFS=$'\n' # Set Internal Field Separator to newline to handle array elements + + # Iterate through the PRs in PR_LIST + for pr in $(echo "$PR_LIST" | jq -c '.[]'); do + mergeable=$(echo "$pr" | jq -r '.mergeable') + author=$(echo "$pr" | jq -r '.author.login') + labels=$(echo "$pr" | jq -c '.labels[].name' | tr -d '[]"') + url=$(echo "$pr" | jq -r '.url') + + # CONFLICTING and no 'stale' label + if [ "$mergeable" == "CONFLICTING" ] && [[ ! "$labels" == *"stale"* ]]; then + # Add "stale" label + gh pr edit $url --add-label "stale" + + # Add a comment + gh pr comment $url --body ":wave: Hi, @$author!

We detected conflicts in your PR against the base branch :speak_no_evil:
You may want to sync :arrows_counterclockwise: your branch with upstream!

Ref: [Syncing Your Branch](https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch)" + fi + done diff --git a/.github/workflows/label-conflict.yml b/.github/workflows/label-conflict.yml deleted file mode 100644 index 363cb967d274..000000000000 --- a/.github/workflows/label-conflict.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Auto Comment Conflicts -on: - pull_request: - branches: - - 'develop' - - '4.*' - types: - - labeled - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - auto-comment-conflict: - permissions: - contents: read - pull-requests: write - if: github.event.label.name == 'stale' - runs-on: ubuntu-latest - steps: - - name: Add comment for PR with conflict - uses: peter-evans/create-or-update-comment@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - issue-number: ${{ github.event.pull_request.number }} - body: | - :wave: Hi, @${{ github.event.pull_request.user.login }}! - - We detected conflicts in your PR against the base branch :speak_no_evil: - You may want to sync :arrows_counterclockwise: your branch with upstream! - - Ref: https://github.com/codeigniter4/CodeIgniter4/blob/develop/contributing/workflow.md#pushing-your-branch diff --git a/.github/workflows/label-remove-conflict.yml b/.github/workflows/label-remove-conflict.yml new file mode 100644 index 000000000000..3d40b537ae59 --- /dev/null +++ b/.github/workflows/label-remove-conflict.yml @@ -0,0 +1,39 @@ +name: Auto Remove "stale" label + +on: + pull_request: + branches: + - develop + - '4.*' + +jobs: + check-conflict: + runs-on: ubuntu-22.04 + permissions: + contents: read + pull-requests: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get PR Detail + id: PR-detail + run: echo "detail=$(gh pr view $PR_URL --json mergeable,url,labels,author)" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ github.event.pull_request.html_url }} + + - name: 'Remove label "stale"' + env: + PR_DETAIL: ${{ steps.PR-detail.outputs.detail }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_URL: ${{ github.event.pull_request.html_url }} + run: | + + # MERGEABLE with 'stale' label + if [ "$(echo $PR_DETAIL | jq -r '.mergeable')" == "MERGEABLE" ] && \ + [ "$(echo $PR_DETAIL | jq -r '.labels[] | select(.name == "stale")')" != "" ]; then + # remove 'stale' label + gh pr edit $PR_URL --remove-label "stale" + fi