From 38f26c34456c487305b52d1380f5801bbe6274b0 Mon Sep 17 00:00:00 2001 From: Romain Lespinasse Date: Sat, 16 Apr 2022 20:53:52 +0200 Subject: [PATCH] feat: expose slug values as outputs --- .github/workflows/slugify-value.yaml | 29 +++++++++++++++++++++++++++ README.md | 8 +++++++- action.yml | 30 ++++++++++++++++++++++++---- slugify.sh | 27 ++++++++++++++++++------- 4 files changed, 82 insertions(+), 12 deletions(-) diff --git a/.github/workflows/slugify-value.yaml b/.github/workflows/slugify-value.yaml index a42dee9..d68f8c3 100644 --- a/.github/workflows/slugify-value.yaml +++ b/.github/workflows/slugify-value.yaml @@ -17,6 +17,7 @@ jobs: # Test 1 - name: Slugify key only + id: slugify-key-only uses: ./ with: key: KEY_ONLY @@ -29,6 +30,11 @@ jobs: [[ "${{ env.KEY_ONLY_SLUG_CS }}" == "Key_Only.test--value" ]] [[ "${{ env.KEY_ONLY_SLUG_URL }}" == "key-only-test--value" ]] [[ "${{ env.KEY_ONLY_SLUG_URL_CS }}" == "Key-Only-test--value" ]] + [[ "${{ env.KEY_ONLY }}" == "${{ steps.slugify-key-only.outputs.value }}" ]] + [[ "${{ env.KEY_ONLY_SLUG }}" == "${{ steps.slugify-key-only.outputs.slug }}" ]] + [[ "${{ env.KEY_ONLY_SLUG_CS }}" == "${{ steps.slugify-key-only.outputs.slug-cs }}" ]] + [[ "${{ env.KEY_ONLY_SLUG_URL }}" == "${{ steps.slugify-key-only.outputs.slug-url }}" ]] + [[ "${{ env.KEY_ONLY_SLUG_URL_CS }}" == "${{ steps.slugify-key-only.outputs.slug-url-cs }}" ]] shell: bash # Test 2 @@ -135,6 +141,29 @@ jobs: [[ "${{ steps.slugify-with-wrong-max-length.conclusion }}" == "success" ]] shell: bash + # Test 8 + - name: Slugify key without env publication + id: slugify-key-without-env-publication + uses: ./ + with: + key: KEY_WITHTOUT_ENV_PUBLICATION + publish-env: false + env: + KEY_WITHTOUT_ENV_PUBLICATION: "Never gonna give you up" + - name: Validate // Slugify key without env publication + run: | + [[ -z "${{ env.KEY_WITHTOUT_ENV_PUBLICATION }}" ]] + [[ -z "${{ env.KEY_WITHTOUT_ENV_PUBLICATION_SLUG }}" ]] + [[ -z "${{ env.KEY_WITHTOUT_ENV_PUBLICATION_SLUG_CS }}" ]] + [[ -z "${{ env.KEY_WITHTOUT_ENV_PUBLICATION_SLUG_URL }}" ]] + [[ -z "${{ env.KEY_WITHTOUT_ENV_PUBLICATION_SLUG_URL_CS }}" ]] + [[ "${{ steps.slugify-key-without-env-publication.outputs.value }}" == "Never gonna give you up" ]] + [[ "${{ steps.slugify-key-without-env-publication.outputs.slug }}" == "never-gonna-give-you-up" ]] + [[ "${{ steps.slugify-key-without-env-publication.outputs.slug-cs }}" == "Never-gonna-give-you-up" ]] + [[ "${{ steps.slugify-key-without-env-publication.outputs.slug-url }}" == "never-gonna-give-you-up" ]] + [[ "${{ steps.slugify-key-without-env-publication.outputs.slug-url-cs }}" == "Never-gonna-give-you-up" ]] + shell: bash + release: runs-on: ubuntu-latest concurrency: diff --git a/README.md b/README.md index 6f4906f..e0acafe 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,12 @@ This input is _Optional_. ### `slug-maxlength` -The value is a number or `nolimit` to reflect the length of the slug outputs +The value is a number or `nolimit` to reflect the length of the slug outputs. This input is _Optional_. The default value is `63`. + +### `publish-env` + +In addition of the action output, the slug values are publish as environment variables. + +This input is _Optional_. The default value is `true`. diff --git a/action.yml b/action.yml index dec6bc8..10fe2d6 100644 --- a/action.yml +++ b/action.yml @@ -1,6 +1,9 @@ name: "Slugify Value" description: "Github Action to slugify a value" author: "Romain Lespinasse" +branding: + icon: "crop" + color: "gray-dark" inputs: key: description: "Environment variable that will hold the value and serve as prefix to slugified value" @@ -16,16 +19,35 @@ inputs: description: "Max length of the slugified values" default: "63" required: true -branding: - icon: "crop" - color: "gray-dark" + publish-env: + description: "Publish slugs as environment variables" + default: "true" + required: true +outputs: + value: + description: "Value" + value: ${{ steps.slugify.outputs.value }} + slug: + description: "Value slug" + value: ${{ steps.slugify.outputs.slug }} + slug-cs: + description: "Value Slug (Case-sensitive)" + value: ${{ steps.slugify.outputs.slug-cs }} + slug-url: + description: "Value Slug URL" + value: ${{ steps.slugify.outputs.slug-url }} + slug-url-cs: + description: "Value Slug URL (Case-sensitive)" + value: ${{ steps.slugify.outputs.slug-url-cs }} runs: using: "composite" steps: - - run: $GITHUB_ACTION_PATH/slugify.sh + - id: slugify + run: $GITHUB_ACTION_PATH/slugify.sh shell: bash env: INPUT_KEY: ${{ inputs.key }} INPUT_VALUE: ${{ inputs.value }} INPUT_PREFIX: ${{ inputs.prefix }} INPUT_SLUG_MAXLENGTH: ${{ inputs.slug-maxlength }} + INPUT_PUBLISH_ENV: ${{ inputs.publish-env }} diff --git a/slugify.sh b/slugify.sh index 988d307..d273694 100755 --- a/slugify.sh +++ b/slugify.sh @@ -53,10 +53,23 @@ reduce() { fi } -{ - echo "${PREFIX}${KEY}=${CS_VALUE}" - echo "${PREFIX}${KEY}_SLUG=$(slug "$VALUE")" - echo "${PREFIX}${KEY}_SLUG_CS=$(slug "$CS_VALUE")" - echo "${PREFIX}${KEY}_SLUG_URL=$(slug_url "$VALUE")" - echo "${PREFIX}${KEY}_SLUG_URL_CS=$(slug_url "$CS_VALUE")" -} >>"$GITHUB_ENV" +SLUG_VALUE=$(slug "$VALUE") +SLUG_CS_VALUE=$(slug "$CS_VALUE") +SLUG_URL_VALUE=$(slug_url "$VALUE") +SLUG_URL_CS_VALUE=$(slug_url "$CS_VALUE") + +echo "::set-output name=value::${CS_VALUE}" +echo "::set-output name=slug::${SLUG_VALUE}" +echo "::set-output name=slug-cs::${SLUG_CS_VALUE}" +echo "::set-output name=slug-url::${SLUG_URL_VALUE}" +echo "::set-output name=slug-url-cs::${SLUG_URL_CS_VALUE}" + +if [ "${INPUT_PUBLISH_ENV}" == "true" ]; then + { + echo "${PREFIX}${KEY}=${CS_VALUE}" + echo "${PREFIX}${KEY}_SLUG=${SLUG_VALUE}" + echo "${PREFIX}${KEY}_SLUG_CS=${SLUG_CS_VALUE}" + echo "${PREFIX}${KEY}_SLUG_URL=${SLUG_URL_VALUE}" + echo "${PREFIX}${KEY}_SLUG_URL_CS=${SLUG_URL_CS_VALUE}" + } >>"$GITHUB_ENV" +fi