14 Commits
v1.3.2 ... v1.x

Author SHA1 Message Date
dependabot[bot]
e4212caf3f build(deps): bump actions/checkout from 5 to 6 in the dependencies group (#40)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Romain Lespinasse <romain.lespinasse@gmail.com>
2025-11-30 23:33:49 +01:00
dependabot[bot]
d6e3cb1498 build(deps): bump the dependencies group across 1 directory with 2 updates (#39) 2025-08-13 20:23:51 +02:00
Romain Lespinasse
a6cb4bed66 build: use codeowners file (#37) 2025-06-07 22:34:41 +02:00
Romain Lespinasse
93d9285b74 ci(linter): use super-linter/super-linter (#36) 2025-04-12 15:18:43 +02:00
Romain Lespinasse
377ba97cc7 docs: update code of conduct (#35) 2025-03-11 20:46:05 +01:00
dependabot[bot]
341a4b67d7 build(deps): bump github/super-linter from 5 to 7 in the dependencies group across 1 directory (#34)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Romain Lespinasse <romain.lespinasse@gmail.com>
2024-10-27 00:52:57 +02:00
Romain Lespinasse
45c76a9806 docs: improve community pages (#33) 2024-10-26 22:35:27 +02:00
Valeri
ee83cf0807 docs(readme): fix example with missing publish-env set to false (#31)
Signed-off-by: Valeri <v19930312@gmail.com>
2024-04-06 22:09:49 +02:00
Romain Lespinasse
d1b958d592 ci(build): use personal token (#30)
Signed-off-by: Romain Lespinasse <romain.lespinasse@gmail.com>
2024-01-24 14:49:08 +01:00
dependabot[bot]
332172c7f4 build(deps): bump the dependencies group with 1 update (#29)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Romain Lespinasse <romain.lespinasse@gmail.com>
2023-12-25 22:31:30 +01:00
Romain Lespinasse
dbd1cbdf50 build(dependabot): enable github-actions updates (#28)
Signed-off-by: Romain Lespinasse <romain.lespinasse@gmail.com>
2023-12-25 21:43:28 +01:00
Romain Lespinasse
cbec62b21f ci(linter): setup super linter workflow 2023-06-11 11:32:30 +02:00
Romain Lespinasse
a4879db1eb feat: support GHES step output management 2022-10-31 19:44:04 +01:00
Vin
1d53af49fb fix: use environment file to manage outputs 2022-10-15 21:27:02 +02:00
11 changed files with 221 additions and 46 deletions

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @rlespinasse

23
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,23 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
groups:
dependencies:
patterns:
- '*'
labels: []

30
.github/workflows/linter.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
---
name: Lint Code Base
on: pull_request
permissions: read-all
jobs:
build:
name: Lint Code Base
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
statuses: write
steps:
- name: Checkout Code
uses: actions/checkout@v6
with:
# Full git history is needed to get a proper
# list of changed files within `super-linter`
fetch-depth: 0
- name: Lint Code Base
uses: super-linter/super-linter@v8
env:
VALIDATE_ALL_CODEBASE: false
VALIDATE_GITHUB_ACTIONS_ZIZMOR: false
VALIDATE_YAML_PRETTIER: false
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,9 +1,15 @@
---
name: Slugify Value name: Slugify Value
on: on:
push: push:
branches: branches:
- v1.x - v1.x
pull_request: pull_request:
permissions: read-all
# Disable line length check due to the content of the tests
# yamllint disable rule:line-length
jobs: jobs:
os-testing: os-testing:
strategy: strategy:
@@ -13,7 +19,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v6
# Test 1 # Test 1
- name: Slugify key only - name: Slugify key only
@@ -24,7 +30,11 @@ jobs:
env: env:
KEY_ONLY: "refs/head/$-Key_Only.test--value-%-+" KEY_ONLY: "refs/head/$-Key_Only.test--value-%-+"
- name: Validate // Slugify key only - 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: | run: |
# shellcheck disable=SC2193
[[ "${{ env.KEY_ONLY }}" == "refs/head/$-Key_Only.test--value-%-+" ]] [[ "${{ env.KEY_ONLY }}" == "refs/head/$-Key_Only.test--value-%-+" ]]
[[ "${{ env.KEY_ONLY_SLUG }}" == "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_CS }}" == "Key_Only.test--value" ]]
@@ -166,14 +176,23 @@ jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
contents: write
issues: write
id-token: write
packages: write
concurrency: concurrency:
group: release-${{ github.ref }} group: release-${{ github.ref }}
needs: needs:
- os-testing - os-testing
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v6
with:
persist-credentials: false
# Release # Release
- name: Release this GitHub Action - name: Release this GitHub Action
uses: rlespinasse/release-that@v1 uses: rlespinasse/release-that@v1
with:
github-token: ${{ secrets.GH_TOKEN }}

View File

@@ -6,8 +6,8 @@ We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status, identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity nationality, personal appearance, race, caste, color, religion, or sexual
and orientation. identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community. diverse, inclusive, and healthy community.
@@ -22,17 +22,17 @@ community include:
* Giving and gracefully accepting constructive feedback * Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, * Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience and learning from the experience
* Focusing on what is best not just for us as individuals, but for the * Focusing on what is best not just for us as individuals, but for the overall
overall community community
Examples of unacceptable behavior include: Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or * The use of sexualized language or imagery, and sexual attention or advances of
advances of any kind any kind
* Trolling, insulting or derogatory comments, and personal or political attacks * Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment * Public or private harassment
* Publishing others' private information, such as a physical or email * Publishing others' private information, such as a physical or email address,
address, without their explicit permission without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a * Other conduct which could reasonably be considered inappropriate in a
professional setting professional setting
@@ -52,7 +52,7 @@ decisions when appropriate.
This Code of Conduct applies within all community spaces, and also applies when This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces. an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address, Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed posting via an official social media account, or acting as an appointed
representative at an online or offline event. representative at an online or offline event.
@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
romain.lespinasse@gmail.com. <romain.lespinasse@gmail.com>.
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the
@@ -82,15 +82,15 @@ behavior was inappropriate. A public apology may be requested.
### 2. Warning ### 2. Warning
**Community Impact**: A violation through a single incident or series **Community Impact**: A violation through a single incident or series of
of actions. actions.
**Consequence**: A warning with consequences for continued behavior. No **Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or like social media. Violating these terms may lead to a temporary or permanent
permanent ban. ban.
### 3. Temporary Ban ### 3. Temporary Ban
@@ -106,23 +106,27 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban ### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community **Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals. individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within **Consequence**: A permanent ban from any sort of public interaction within the
the community. community.
## Attribution ## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at version 2.1, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by [Mozilla's code of conduct Community Impact Guidelines were inspired by
enforcement ladder](https://github.com/mozilla/diversity). [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
https://www.contributor-covenant.org/translations. [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

33
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,33 @@
# How to contribute to Slugify Value
## Did you find a bug
* **Do not open up a GitHub issue if the bug is a security vulnerability**, and instead to refer to our [security policy][1].
* **Ensure the bug was not already reported** by searching on GitHub under [Issues][2].
* If you're unable to find an open issue addressing the problem, [open a 'Bug' issue][4].
Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
## Did you write a patch that fixes a bug
* Open a new GitHub pull request with the patch.
* Ensure the PR description clearly describes the problem and solution.
Include the relevant issue number if applicable.
## Do you intend to add a new feature or change an existing one
* Suggest your change by [opening a 'Feature request' issue][5]
## Do you have questions about the source code
* [open an issue][3] with your question.
Thanks!
[1]: https://github.com/rlespinasse/slugify-value/security/policy
[2]: https://github.com/rlespinasse/slugify-value/issues
[3]: https://github.com/rlespinasse/slugify-value/issues/new
[4]: https://github.com/rlespinasse/slugify-value/issues/new?assignees=&labels=bug&template=bug_report.md&title=
[5]: https://github.com/rlespinasse/slugify-value/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=

View File

@@ -1,24 +1,25 @@
# Slugify # Slugify
> Github Action to slugify a value > [!NOTE]
> A GitHub Action that transforms input strings into URL-friendly slugs
Produce some `slug`-ed environment variables based on the input one. This action creates standardized slug versions of your input variables, offering multiple formatting options:
## Output Formats
- `<env name>_SLUG` - `<env name>_SLUG`
- Converts text to lowercase
- put the variable content in lower case - Replaces special characters with **-** (except **0-9**, **a-z**, **.**, and **_**)
- replace any character by `-` except `0-9`, `a-z`, `.`, and `_` - Removes leading and trailing **-$*
- remove leading `-` character - Limits string length to **63** characters
- limit the string size to 63 characters
- remove trailing `-` character
- `<env name>_SLUG_CS` - `<env name>_SLUG_CS`
- Same as `_SLUG` but preserves original case sensitivity
- `<env name>_SLUG_URL` and `<env name>_SLUG_URL_CS`
- Same as their respective base versions (`_SLUG` or `_SLUG_CS`)
- Additionally replaces **.** and **_** with **-**
- Perfect for URL-safe strings
- like `<env name>_SLUG` but the content is not put in lower case Each output variable maintains consistent formatting rules while serving different use cases, from basic slugification to URL-ready strings.
- `<env name>_SLUG_URL` (or `<env name>_SLUG_URL_CS`)
- like `<env name>_SLUG` (or `<env name>_SLUG_CS`) with the `.`, and `_` characters also replaced by `-`
## Usage ## Usage
@@ -100,6 +101,7 @@ Produce some `slug`-ed environment variables based on the input one.
with: with:
key: KEY_NAME key: KEY_NAME
value: value_to_slugify value: value_to_slugify
publish-env: false
``` ```
Will **not** make available Will **not** make available

22
SECURITY.md Normal file
View File

@@ -0,0 +1,22 @@
# Security Policy
## Supported Versions and Branches
| Version | Supported | End of Support | Branch | Specific Tags |
| ------- | ------------------ | -------------- | ------ | ------------- |
| 1.x | :white_check_mark: | | v1.x | v1 |
A GitHub repository can use one of the available branches as an action inside its workflows.
### End of Life of a branch
Since `2024-10-26`, when a new major version is released,
- The previous one will continue to receive security patches for 3 months,
- After the 3 months, the branch is deleted, and only the tags remain.
## Reporting a Vulnerability
In this project, you can report a Vulnerability by creating a [draft security advisory](https://github.com/rlespinasse/slugify-value/security/advisories).
If the vulnerability is confirmed, a fix will be produced and the advisory will be published.

View File

@@ -57,11 +57,21 @@ SLUG_CS_VALUE=$(slug "$CS_VALUE")
SLUG_URL_VALUE=$(slug_url "$VALUE") SLUG_URL_VALUE=$(slug_url "$VALUE")
SLUG_URL_CS_VALUE=$(slug_url "$CS_VALUE") SLUG_URL_CS_VALUE=$(slug_url "$CS_VALUE")
echo "::set-output name=value::${CS_VALUE}" if [ -f "$GITHUB_OUTPUT" ]; then
echo "::set-output name=slug::${SLUG_VALUE}" {
echo "::set-output name=slug-cs::${SLUG_CS_VALUE}" echo "value=${CS_VALUE}"
echo "::set-output name=slug-url::${SLUG_URL_VALUE}" echo "slug=${SLUG_VALUE}"
echo "::set-output name=slug-url-cs::${SLUG_URL_CS_VALUE}" echo "slug-cs=${SLUG_CS_VALUE}"
echo "slug-url=${SLUG_URL_VALUE}"
echo "slug-url-cs=${SLUG_URL_CS_VALUE}"
} >> "$GITHUB_OUTPUT"
else
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}"
fi
if [ "${INPUT_PUBLISH_ENV}" == "true" ]; then if [ "${INPUT_PUBLISH_ENV}" == "true" ]; then
{ {