From c25450f77ed02c20d00b76ee3b33ff43838739a2 Mon Sep 17 00:00:00 2001 From: Michael Gasch <15986659+embano1@users.noreply.github.com> Date: Sun, 16 Apr 2023 20:33:30 +0200 Subject: [PATCH] fix: Shell escaping issue Signed-off-by: Michael Gasch <15986659+embano1@users.noreply.github.com> --- .github/workflows/check-wip.yaml | 4 +++- README.md | 20 +++++++++-------- action.yml | 38 +++++++++++++++++++++++++++----- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/.github/workflows/check-wip.yaml b/.github/workflows/check-wip.yaml index 050e037..1601ee5 100644 --- a/.github/workflows/check-wip.yaml +++ b/.github/workflows/check-wip.yaml @@ -9,4 +9,6 @@ jobs: runs-on: ubuntu-latest steps: - name: Check WIP in PR Title - uses: embano1/wip@v1 \ No newline at end of file + uses: embano1/wip@v2 + env: + TITLE: ${{ github.event.pull_request.title }} \ No newline at end of file diff --git a/README.md b/README.md index 3fdfa26..0adb25f 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ work-in-progress ("WIP") patterns using regular expressions in `BASH`. ## Simple with Defaults +Uses `^[[:space:]]*(WIP)+(:)*` regex pattern to match against the PR title. + ```yaml name: Check "WIP" in PR Title @@ -19,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check WIP in PR Title - uses: embano1/wip@v1 + uses: embano1/wip@v2 ``` ## Custom Options @@ -36,22 +38,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Check WIP in PR Title - uses: embano1/wip@v1 + uses: embano1/wip@v2 with: # this is also the default value title: "${{ github.event.pull_request.title }}" - # only matches PRs where title is "WIP" only + # only matches PRs where title is exactly "WIP" regex: "^WIP$" ``` ## Configuration Options -| Input | Type | Required | Default | Description | -|---------|----------|----------|------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `title` | `string` | yes | `${{ github.event.pull_request.title }}` | The title to perform regular expression pattern matching against. Typically a field from the Github [`context`](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) is used. | -| `regex` | `string` | yes | `^[[:space:]]*(WIP)+(:)*` | The regular expression to perform. The default value matches the word `WIP` (optionally followed by `:`) and ignores any whitespace character(s) at the beginning of the text | +| Input | Type | Required | Default | Description | +|---------|----------|----------|------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `title` | `string` | yes | `${{ github.event.pull_request.title }}` | The title to perform regular expression pattern matching against. Typically a field from the Github [`context`](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) is used. | +| `regex` | `string` | yes | `^[[:space:]]*(WIP)+(:)*` | The regular expression to perform. The default value matches the word `WIP` (optionally followed by `:`) and ignores any whitespace character(s) at the beginning of the text. | -⚠️ Currently regular expression pattern matching is **case-insensitive**, i.e. -`wip` would also match. \ No newline at end of file +> **Note** +> Currently regular expression pattern matching is **case-insensitive**, i.e., `wip` would also match. \ No newline at end of file diff --git a/action.yml b/action.yml index 4220682..589bcb1 100644 --- a/action.yml +++ b/action.yml @@ -13,23 +13,51 @@ inputs: required: true # starts with zero or more leading whitespace chars, WIP and zero or more colons default: "^[[:space:]]*(WIP)+(:)*" + debug: + description: "Enable verbose logging" + required: false + default: "false" runs: using: "composite" steps: - shell: bash + env: + TITLE: ${{ inputs.title }} + REGEX: ${{ inputs.regex }} + DEBUG: ${{ inputs.debug }} run: | - set -ex + set -e + if [[ ${DEBUG} == "true" ]]; then + echo "Enabling debug output" + set -x + fi + # TODO (@mgasch): make configurable # case-insensitive shopt -s nocasematch - - if [[ '${{ inputs.title }}' =~ ${{ inputs.regex }} ]]; then + + if [[ -z ${TITLE} ]]; then + echo "::error::title input must be set"; + exit 1 + fi + + if [[ -z ${REGEX} ]]; then + echo "::error::regex input must be set"; + exit 1 + fi + + if [[ ${TITLE} =~ ${REGEX} ]]; then echo "::error::Title marked as work in progress" exit 1 else - echo "::debug::Title not marked as work in progress" + echo "Title not marked as work in progress" fi - + # unset nocasematch option shopt -u nocasematch + + if [[ ${DEBUG} == "true" ]]; then + echo "Disabling debug output" + set +x + fi