--- name: Slugify Value on: push: branches: - v1.x pull_request: permissions: read-all # Disable line length check due to the content of the tests # yamllint disable rule:line-length jobs: os-testing: strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v6 # Test 1 - name: Slugify key only id: slugify-key-only uses: ./ with: key: KEY_ONLY env: KEY_ONLY: "refs/head/$-Key_Only.test--value-%-+" - name: Validate // Slugify key only # Disable SC2193 because the first line of the test is flag by shellcheck # as the comparison can never be equal but the test pass. # Seem a false-positive due to the test context. run: | # shellcheck disable=SC2193 [[ "${{ env.KEY_ONLY }}" == "refs/head/$-Key_Only.test--value-%-+" ]] [[ "${{ env.KEY_ONLY_SLUG }}" == "key_only.test--value" ]] [[ "${{ 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 - name: Slugify key only with prefix uses: ./ with: key: KEY_ONLY_WITH_PREFIX prefix: CI_ env: KEY_ONLY_WITH_PREFIX: ${{ env.KEY_ONLY }} - name: Validate // Slugify key only with prefix run: | [[ "${{ env.CI_KEY_ONLY_WITH_PREFIX }}" == "${{ env.KEY_ONLY }}" ]] [[ "${{ env.CI_KEY_ONLY_WITH_PREFIX_SLUG }}" == "${{ env.KEY_ONLY_SLUG }}" ]] [[ "${{ env.CI_KEY_ONLY_WITH_PREFIX_SLUG_CS }}" == "${{ env.KEY_ONLY_SLUG_CS }}" ]] [[ "${{ env.CI_KEY_ONLY_WITH_PREFIX_SLUG_URL }}" == "${{ env.KEY_ONLY_SLUG_URL }}" ]] [[ "${{ env.CI_KEY_ONLY_WITH_PREFIX_SLUG_URL_CS }}" == "${{ env.KEY_ONLY_SLUG_URL_CS }}" ]] shell: bash # Test 3 - name: Slugify key/value uses: ./ with: key: KEY_VALUE value: "Never gonna give you up Never gonna let you down" - name: Validate // Slugify key/value run: | [[ "${{ env.KEY_VALUE }}" == "Never gonna give you up Never gonna let you down" ]] [[ "${{ env.KEY_VALUE_SLUG }}" == "never-gonna-give-you-up-never-gonna-let-you-down" ]] [[ "${{ env.KEY_VALUE_SLUG_CS }}" == "Never-gonna-give-you-up-Never-gonna-let-you-down" ]] [[ "${{ env.KEY_VALUE_SLUG_URL }}" == "never-gonna-give-you-up-never-gonna-let-you-down" ]] [[ "${{ env.KEY_VALUE_SLUG_URL_CS }}" == "Never-gonna-give-you-up-Never-gonna-let-you-down" ]] shell: bash # Test 4 - name: Slugify with another max length uses: ./ with: key: ANOTHER_MAX_LENGTH value: "Never gonna give you up Never gonna let you down" slug-maxlength: 24 - name: Validate // Slugify with another max length run: | [[ "${{ env.ANOTHER_MAX_LENGTH }}" == "Never gonna give you up Never gonna let you down" ]] [[ "${{ env.ANOTHER_MAX_LENGTH_SLUG }}" == "never-gonna-give-you-up" ]] [[ "${{ env.ANOTHER_MAX_LENGTH_SLUG_CS }}" == "Never-gonna-give-you-up" ]] [[ "${{ env.ANOTHER_MAX_LENGTH_SLUG_URL }}" == "never-gonna-give-you-up" ]] [[ "${{ env.ANOTHER_MAX_LENGTH_SLUG_URL_CS }}" == "Never-gonna-give-you-up" ]] shell: bash # Test 5 - name: Slugify with no limit on max length uses: ./ with: key: NO_MAX_LENGTH value: "Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you" slug-maxlength: "nolimit" - name: Validate // Slugify with no limit on max length run: | [[ "${{ env.NO_MAX_LENGTH }}" == "Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you" ]] [[ "${{ env.NO_MAX_LENGTH_SLUG }}" == "never-gonna-give-you-up-never-gonna-let-you-down-never-gonna-run-around-and-desert-you-never-gonna-make-you-cry-never-gonna-say-goodbye-never-gonna-tell-a-lie-and-hurt-you" ]] [[ "${{ env.NO_MAX_LENGTH_SLUG_CS }}" == "Never-gonna-give-you-up-Never-gonna-let-you-down-Never-gonna-run-around-and-desert-you-Never-gonna-make-you-cry-Never-gonna-say-goodbye-Never-gonna-tell-a-lie-and-hurt-you" ]] [[ "${{ env.NO_MAX_LENGTH_SLUG_URL }}" == "never-gonna-give-you-up-never-gonna-let-you-down-never-gonna-run-around-and-desert-you-never-gonna-make-you-cry-never-gonna-say-goodbye-never-gonna-tell-a-lie-and-hurt-you" ]] [[ "${{ env.NO_MAX_LENGTH_SLUG_URL_CS }}" == "Never-gonna-give-you-up-Never-gonna-let-you-down-Never-gonna-run-around-and-desert-you-Never-gonna-make-you-cry-Never-gonna-say-goodbye-Never-gonna-tell-a-lie-and-hurt-you" ]] shell: bash # Test 6 - name: Slugify with empty max length id: slugify-with-empty-max-length uses: ./ with: key: EMPTY_MAXLENGTH value: some_value slug-maxlength: "" continue-on-error: true - name: Validate // Slugify with empty max length run: | [[ -z "${{ env.EMPTY_MAXLENGTH }}" ]] [[ -z "${{ env.EMPTY_MAXLENGTH_SLUG }}" ]] [[ -z "${{ env.EMPTY_MAXLENGTH_SLUG_CS }}" ]] [[ -z "${{ env.EMPTY_MAXLENGTH_SLUG_URL }}" ]] [[ -z "${{ env.EMPTY_MAXLENGTH_SLUG_URL_CS }}" ]] [[ "${{ steps.slugify-with-empty-max-length.outcome }}" == "failure" ]] [[ "${{ steps.slugify-with-empty-max-length.conclusion }}" == "success" ]] shell: bash # Test 7 - name: Slugify with wrong max length id: slugify-with-wrong-max-length uses: ./ with: key: WRONG_MAXLENGTH value: some_value slug-maxlength: "wrong" continue-on-error: true - name: Validate // Slugify with wrong max length run: | [[ -z "${{ env.WRONG_MAXLENGTH }}" ]] [[ -z "${{ env.WRONG_MAXLENGTH_SLUG }}" ]] [[ -z "${{ env.WRONG_MAXLENGTH_SLUG_CS }}" ]] [[ -z "${{ env.WRONG_MAXLENGTH_SLUG_URL }}" ]] [[ -z "${{ env.WRONG_MAXLENGTH_SLUG_URL_CS }}" ]] [[ "${{ steps.slugify-with-wrong-max-length.outcome }}" == "failure" ]] [[ "${{ 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_WITHOUT_ENV_PUBLICATION publish-env: false env: KEY_WITHOUT_ENV_PUBLICATION: "Never gonna give you up" - name: Validate // Slugify key without env publication run: | [[ -z "${{ env.KEY_WITHOUT_ENV_PUBLICATION }}" ]] [[ -z "${{ env.KEY_WITHOUT_ENV_PUBLICATION_SLUG }}" ]] [[ -z "${{ env.KEY_WITHOUT_ENV_PUBLICATION_SLUG_CS }}" ]] [[ -z "${{ env.KEY_WITHOUT_ENV_PUBLICATION_SLUG_URL }}" ]] [[ -z "${{ env.KEY_WITHOUT_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 permissions: contents: write issues: write id-token: write packages: write concurrency: group: release-${{ github.ref }} needs: - os-testing steps: - name: Checkout uses: actions/checkout@v6 with: persist-credentials: false # Release - name: Release this GitHub Action uses: rlespinasse/release-that@v1 with: github-token: ${{ secrets.GH_TOKEN }}