Compare commits

..

27 Commits
1.1.0 ... 2.1.1

Author SHA1 Message Date
semantic-release-bot
72cfc4cb1f chore(release): 2.1.1 [skip ci]
## [2.1.1](http://github.com/rlespinasse/github-slug-action/compare/2.1.0...2.1.1) (2020-10-07)

### Bug Fixes

* remove set-env due to CVE fix ([d678898](d678898ce5))
2020-10-07 20:54:07 +00:00
rlespinasse
d678898ce5 fix: remove set-env due to CVE fix 2020-10-07 22:53:24 +02:00
Romain Lespinasse
f527ed6e85 docs: add reference to the v3.x branch 2020-09-26 09:12:06 +02:00
dependabot[bot]
6efa53ebca build(deps): bump node-fetch from 2.6.0 to 2.6.1
Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1.
- [Release notes](https://github.com/bitinn/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-12 17:41:09 +02:00
Romain Lespinasse
c0eae81222 style: use markdown syntax on link with image 2020-08-28 15:21:44 +02:00
Antoine Méausoone
7e9b2916a8 docs: add badge with number of public users 2020-08-26 19:20:17 +02:00
Romain Lespinasse
c34e0866d5 docs: improve troubleshooting section 2020-08-25 12:38:58 +02:00
rlespinasse
9ed3b31f8a ci: update release dependencies 2020-08-16 21:06:07 +02:00
semantic-release-bot
1172ed1802 chore(release): 2.1.0 [skip ci]
# [2.1.0](http://github.com/rlespinasse/github-slug-action/compare/2.0.0...2.1.0) (2020-07-28)

### Features

* expose slug variables for github.event.ref ([5a334a8](5a334a8573))
2020-07-28 16:50:05 +00:00
rlespinasse
5a334a8573 feat: expose slug variables for github.event.ref 2020-07-28 18:49:15 +02:00
Romain Lespinasse
4268cc0475 docs: add funding file 2020-07-20 20:26:41 +02:00
Romain Lespinasse
9225a8adaf docs: add troubleshooting section 2020-07-17 22:31:08 +02:00
rlespinasse
498f51bdf6 chore: update package json for security reason 2020-07-15 23:35:55 +02:00
rlespinasse
7c65a057e0 ci: improve release process 2020-05-01 17:18:08 +02:00
rlespinasse
e5b7d5b5fc docs: fix typo 2020-04-26 02:25:09 +02:00
rlespinasse
ca9a67fa1f feat(slug): expose GITHUB_REPOSITORY slugs 2020-04-26 02:12:41 +02:00
rlespinasse
e95fe45d8b feat(slug): keep period in slug variable
BREAKING CHANGE: The previous slug function is rename slug_url
to be able to still use itin the subdomain of an url.

Co-authored-by: Marc Schiller <m4rc.schiller@gmail.com>
2020-04-26 02:12:28 +02:00
rlespinasse
250b75dc58 ci: introduce version 2.x serie 2020-04-25 23:17:37 +02:00
rlespinasse
8799f16714 docs(security): add vulenerability report guide 2020-04-25 22:23:43 +02:00
rlespinasse
f55abd0ed8 docs: improve usage guide 2020-04-25 22:04:15 +02:00
rlespinasse
78b4cbe021 style: add editorconfig file 2020-04-25 22:04:15 +02:00
rlespinasse
74fe20250f ci: move to branch-based releases 2020-04-25 19:56:36 +02:00
rlespinasse
30ff8f2cb0 build: fix dependencies vulnerabilities 2020-04-25 19:43:46 +02:00
Slava Semushin
73f6003cd2 style: fix typos 2019-12-16 17:18:57 +01:00
dependabot[bot]
fd2f7856b9 build(deps): bump npm from 6.13.0 to 6.13.4
Bumps [npm](https://github.com/npm/cli) from 6.13.0 to 6.13.4.
- [Release notes](https://github.com/npm/cli/releases)
- [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md)
- [Commits](https://github.com/npm/cli/compare/v6.13.0...v6.13.4)

Signed-off-by: dependabot[bot] <support@github.com>
2019-12-13 22:32:17 +01:00
Antoine Meausoone
0e25ff1b4e ci(pr): build on pull_request 2019-12-11 13:23:09 +01:00
Antoine Méausoone
97aa7af437 test(docker): fix bats docker image 2019-12-11 13:23:09 +01:00
19 changed files with 1586 additions and 1350 deletions

11
.editorconfig Normal file
View File

@@ -0,0 +1,11 @@
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

3
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,3 @@
# These are supported funding model platforms
github: rlespinasse

View File

@@ -1,5 +0,0 @@
FROM dduportal/bats:latest
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -1,3 +0,0 @@
#!/usr/bin/env sh
/sbin/bats ./tests

View File

@@ -1,16 +1,23 @@
name: ci
on: push
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: ./.github/actions/bats
- uses: cycjimmy/semantic-release-action@v2
if: github.ref == 'refs/heads/master'
- uses: docker://ffurrer/bats:latest
with:
args: "--recursive ."
- uses: cycjimmy/semantic-release-action@v2
with:
semantic_version: 17.0.7
branches: |
[
'v1.1.x',
'v2.x'
]
extra_plugins: |
@semantic-release/git
@semantic-release/changelog
@semantic-release/changelog@5.0.1
@semantic-release/git@9.0.0
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}

View File

@@ -1,13 +1,13 @@
# [1.1.0](http://github.com/rlespinasse/github-slug-action/compare/1.0.2...1.1.0) (2019-11-11)
### Features
* **short_sha:** add a shortened sha commit id ([d77acd4](http://github.com/rlespinasse/github-slug-action/commit/d77acd4f478b6971e0f7b2c9d1d4e721032bc5ab))
## [1.0.2](http://github.com/rlespinasse/github-slug-action/compare/1.0.1...1.0.2) (2019-11-06)
## [2.1.1](http://github.com/rlespinasse/github-slug-action/compare/2.1.0...2.1.1) (2020-10-07)
### Bug Fixes
* manage branch with slash properly ([c35fd20](http://github.com/rlespinasse/github-slug-action/commit/c35fd2094f6f0cb6c4858cf6db020eedd535671d))
* remove set-env due to CVE fix ([d678898](http://github.com/rlespinasse/github-slug-action/commit/d678898ce55139d0005c35618747506fbeb2d1ed))
# [2.1.0](http://github.com/rlespinasse/github-slug-action/compare/2.0.0...2.1.0) (2020-07-28)
### Features
* expose slug variables for github.event.ref ([5a334a8](http://github.com/rlespinasse/github-slug-action/commit/5a334a8573fc27451af5b2a6ee175d8e11579e10))

View File

@@ -1,8 +1,4 @@
# Container image that runs your code
FROM alpine:3.10
# Copies your code file from your action repository to the filesystem path `/` of the container
RUN apk add --no-cache jq
COPY entrypoint.sh /entrypoint.sh
# Code file to execute when the docker container starts up (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2019 Romain Lespinasse
Copyright (c) 2019-2020 Romain Lespinasse
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.

162
README.md
View File

@@ -1,37 +1,153 @@
# GitHub Slug action
[![Actions Status][1]][2]
[![Public workflows that use this action.][8]][9]
This action slug and expose some github variables.
`Slug` a variable will
- put the variable content in lower case,
- replace any caracter by `-` except `0-9` and `a-z`,
- remove leading and trailing `-` caracter,
- limit the string size to 63 caracters.
- put the variable content in lower case
- replace any character by `-` except `0-9`, `a-z`, and `.`
- remove leading and trailing `-` character
- limit the string size to 63 characters
Others `Slug`-ish commands are available:
- `Short SHA` a variable will limit the string size to 8 caracters.
## Environment Variables
- `Slug URL` a variable will be like the `slug` variable but the `.` character will also be replaced by `-`
- `Short SHA` a variable will limit the string size to 8 characters
| GitHub environment variable | Slug variable |
| - | - |
| GITHUB_REF | GITHUB_REF_SLUG |
| GITHUB_HEAD_REF | GITHUB_HEAD_REF_SLUG |
| GITHUB_BASE_REF | GITHUB_BASE_REF_SLUG |
| GitHub environment variable | Short variable |
| - | - |
| GITHUB_SHA | GITHUB_SHA_SHORT |
## Example usage
## Exposed environment variables
```yaml
- uses: rlespinasse/github-slug-action@master
- name: Print slug variables
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v2.x
- name: Print slug/short variables
run: |
echo ${{ env.GITHUB_REF_SLUG }}
echo ${{ env.GITHUB_HEAD_REF_SLUG }}
echo ${{ env.GITHUB_BASE_REF_SLUG }}
echo ${{ env.GITHUB_SHA_SHORT }}
echo "Slug variables"
echo " ref : ${{ env.GITHUB_REF_SLUG }}"
echo " head ref : ${{ env.GITHUB_HEAD_REF_SLUG }}"
echo " base ref : ${{ env.GITHUB_BASE_REF_SLUG }}"
echo " event ref : ${{ env.GITHUB_EVENT_REF_SLUG }}"
echo " repository : ${{ env.GITHUB_REPOSITORY_SLUG }}"
echo "Slug URL variables"
echo " ref : ${{ env.GITHUB_REF_SLUG_URL }}"
echo " head ref : ${{ env.GITHUB_HEAD_REF_SLUG_URL }}"
echo " base ref : ${{ env.GITHUB_BASE_REF_SLUG_URL }}"
echo " event ref : ${{ env.GITHUB_EVENT_REF_SLUG_URL }}"
echo " repository : ${{ env.GITHUB_REPOSITORY_SLUG_URL }}"
echo "Short SHA variables"
echo " sha : ${{ env.GITHUB_SHA_SHORT }}"
```
Read [default environment variables][3] page for more information.
### GITHUB_REF_SLUG / GITHUB_REF_SLUG_URL
Slug the environment variable **GITHUB_REF**
The branch or tag ref that triggered the workflow.
_If neither a branch or tag is available for the event type, the variable will not exist._
| GITHUB_REF | GITHUB_REF_SLUG | GITHUB_REF_SLUG_URL |
| ------------------------------ | ------------------- | ------------------- |
| refs/heads/master | master | master |
| refs/heads/feat/new_feature | feat-new-feature | feat-new-feature |
| refs/tags/v1.0.0 | v1.0.0 | v1-0-0 |
| refs/tags/product@1.0.0-rc.2 | product-1.0.0-rc.2 | product-1-0-0-rc-2 |
| refs/heads/New_Awesome_Product | new-awesome-product | new-awesome-product |
> **NOTE :**
> GITHUB_REF_SLUG_URL is design to be used as subdomain in an URL.
_Additional variables (only set for forked repositories) :_
- `GITHUB_HEAD_REF_SLUG`/`GITHUB_HEAD_REF_SLUG_URL`, The branch of the head repository **GITHUB_HEAD_REF**
- `GITHUB_BASE_REF_SLUG`/`GITHUB_BASE_REF_SLUG_URL`, The branch of the base repository **GITHUB_BASE_REF**
_Additional variables (only set for [create][4], and [delete][5] webhook events with `ref` data) :_
- `GITHUB_EVENT_REF_SLUG`/`GITHUB_EVENT_REF_SLUG_URL`, The git reference resource associated to the webhook.
### GITHUB_REPOSITORY_SLUG / GITHUB_REPOSITORY_SLUG_URL
Slug the environment variable **GITHUB_REPOSITORY**
The owner and repository name.
| GITHUB_REPOSITORY | GITHUB_REPOSITORY_SLUG | GITHUB_REPOSITORY_SLUG_URL |
| -------------------------- | -------------------------- | -------------------------- |
| octocat/Hello-World | octocat-hello-world | octocat-hello-world |
| rlespinasse/Hello-World.go | rlespinasse-hello-world.go | rlespinasse-hello-world-go |
> **NOTE :**
> GITHUB_REPOSITORY_SLUG_URL is design to be used as subdomain in an URL.
### GITHUB_SHA_SHORT
Short the environment variable **GITHUB_SHA**
The commit SHA that triggered the workflow
| GITHUB_SHA | GITHUB_SHA_SHORT |
| ---------------------------------------- | ---------------- |
| ffac537e6cbbf934b08745a378932722df287a53 | ffac537e |
### Use slug variable in an URL
In an URL, use `<GITHUB_VARIABLE>_SLUG_URL` instead of **<GITHUB_VARIABLE>\_SLUG** as subdomain to be compliant.
> **NOTE :**
> <GITHUB*VARIABLE>\_SLUG can be used in an URL only as part of the \_resource path*.
```yaml
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v2.x
- name: Deploy dummy application using slug in the 'subdomain' part
run: |
./deploy-application.sh --url "https://${{ env.<GITHUB_VARIABLE>_SLUG_URL }}.staging.app.mycompagny.com"
- name: Deploy dummy application using slug in the 'resource path' part
run: |
./deploy-application.sh --url "https://staging.app.mycompagny.com/${{ env.<GITHUB_VARIABLE>_SLUG }}"
```
## Troubleshooting
### Missing master branch
If your workflow fail on the `Set up job` task with this kind of log :
```
Download action repository 'rlespinasse/github-slug-action@master'
##[error]An action could not be found at the URI 'https://api.github.com/repos/rlespinasse/github-slug-action/tarball/master'
```
Use the current branch `v2.x` or a version tag (see [releases pages][6]).
The master branch EOL is set on **2020-10-25** after a 6-month deprecation period (more information on the [EOL issue][7])
### Can't run on Windows or Macos
When using this action on Windows or Macos workflows, A `##[error]Container action is only supported on Linux` error can be see in your workflow logs.
Currently, this action don't support a system other than Linux due to Github Action Limitation on `Container`-based action.
On the `v3.x` branch, this GitHub action have been rewrite to be able to run on Windows or Macos workflow.
```yaml
- name: Inject slug/short variables
uses: rlespinasse/github-slug-action@v3.x
```
[1]: https://github.com/rlespinasse/github-slug-action/workflows/Build/badge.svg
[2]: https://github.com/rlespinasse/github-slug-action/actions
[3]: https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables
[4]: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#create
[5]: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#delete
[6]: https://github.com/rlespinasse/github-slug-action/releases
[7]: https://github.com/rlespinasse/github-slug-action/issues/15
[8]: https://img.shields.io/endpoint?url=https%3A%2F%2Fapi-git-master.endbug.vercel.app%2Fapi%2Fgithub-actions%2Fused-by%3Faction%3Drlespinasse%2Fgithub-slug-action%26badge%3Dtrue
[9]: https://github.com/search?o=desc&q=rlespinasse%2Frlespinasse/github-slug-action+path%3A.github%2Fworkflows+language%3AYAML&s=&type=Code

23
SECURITY.md Normal file
View File

@@ -0,0 +1,23 @@
# Security Policy
## Supported Versions and Branches
| Version | Branch | Supported |
|---------|--------|--------------------|
| 2.x | v2.x | :white_check_mark: |
| 1.1.x | v1.1.x | :white_check_mark: |
| < 1.0.x | master | :x: |
A GitHub repository can used one of the available branches as action inside its workflows.
## Reporting a Vulnerability
You can report a Vulnerability by [my email](mailto:romain.lespinasse@gmail.com).
_Vulnerability stages :_
- Reported,
- Confirmed (or declined),
- Fixed on maintained version series.
After a vulnerability fix, an GitHub issue will be created as document this vulnerability.

View File

@@ -1,9 +1,9 @@
# action.yml
name: 'GitHub Slug'
description: 'Action to slug and expose some github variables'
name: "GitHub Slug"
description: "Action to slug and expose some github variables"
runs:
using: 'docker'
image: 'Dockerfile'
using: "docker"
image: "Dockerfile"
branding:
icon: 'crop'
color: 'orange'
icon: "crop"
color: "orange"

View File

@@ -1,18 +1,54 @@
#!/bin/sh -l
slug() {
echo "$1" |
tr "[:upper:]" "[:lower:]" |
sed -r 's/[~\^]+//g;s/[^a-zA-Z0-9.]+/-/g;s/^-+\|-+$//g;s/^-*//;s/-*$//' |
cut -c1-63
}
slug_url() {
echo "$1" |
tr "[:upper:]" "[:lower:]" |
sed -r 's/[~\^]+//g;s/[^a-zA-Z0-9]+/-/g;s/^-+\|-+$//g;s/^-*//;s/-*$//' |
cut -c1-63
}
slug_ref() {
echo "$1" \
| tr "[:upper:]" "[:lower:]" \
| sed -r 's#refs/[^\/]*/##;s/[~\^]+//g;s/[^a-zA-Z0-9]+/-/g;s/^-+\|-+$//g;s/^-*//;s/-*$//' \
| cut -c1-63
echo "$1" |
tr "[:upper:]" "[:lower:]" |
sed -r 's#refs/[^\/]*/##;s/[~\^]+//g;s/[^a-zA-Z0-9.]+/-/g;s/^-+\|-+$//g;s/^-*//;s/-*$//' |
cut -c1-63
}
short_sha(){
echo "$1" \
| cut -c1-8
slug_url_ref() {
echo "$1" |
tr "[:upper:]" "[:lower:]" |
sed -r 's#refs/[^\/]*/##;s/[~\^]+//g;s/[^a-zA-Z0-9]+/-/g;s/^-+\|-+$//g;s/^-*//;s/-*$//' |
cut -c1-63
}
echo ::set-env name=GITHUB_REF_SLUG::"$(slug_ref "$GITHUB_REF")"
echo ::set-env name=GITHUB_HEAD_REF_SLUG::"$(slug_ref "$GITHUB_HEAD_REF")"
echo ::set-env name=GITHUB_BASE_REF_SLUG::"$(slug_ref "$GITHUB_BASE_REF")"
echo ::set-env name=GITHUB_SHA_SHORT::"$(short_sha "$GITHUB_SHA")"
short_sha() {
echo "$1" |
cut -c1-8
}
get_event_keyvalue() {
if [ -f "$GITHUB_EVENT_PATH" ]; then
jq -r ".$1" "$GITHUB_EVENT_PATH" | grep -v "null"
fi
}
{
echo "GITHUB_REPOSITORY_SLUG=$(slug "$GITHUB_REPOSITORY")"
echo "GITHUB_REPOSITORY_SLUG_URL=$(slug_url "$GITHUB_REPOSITORY")"
echo "GITHUB_REF_SLUG=$(slug_ref "$GITHUB_REF")"
echo "GITHUB_HEAD_REF_SLUG=$(slug_ref "$GITHUB_HEAD_REF")"
echo "GITHUB_BASE_REF_SLUG=$(slug_ref "$GITHUB_BASE_REF")"
echo "GITHUB_EVENT_REF_SLUG=$(slug_ref "$(get_event_keyvalue "ref")")"
echo "GITHUB_REF_SLUG_URL=$(slug_url_ref "$GITHUB_REF")"
echo "GITHUB_HEAD_REF_SLUG_URL=$(slug_url_ref "$GITHUB_HEAD_REF")"
echo "GITHUB_BASE_REF_SLUG_URL=$(slug_url_ref "$GITHUB_BASE_REF")"
echo "GITHUB_EVENT_REF_SLUG_URL=$(slug_url_ref "$(get_event_keyvalue "ref")")"
echo "GITHUB_SHA_SHORT=$(short_sha "$GITHUB_SHA")"
} >>"$GITHUB_ENV"

2403
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,9 @@
{
"name": "github-slug-action",
"version": "1.0.1",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"test": "docker run -w /workdir -v $(pwd):/workdir dduportal/bats:latest ./tests",
"test": "docker run -w /workdir -v $(pwd):/workdir ffurrer/bats:latest --recursive .",
"release": "semantic-release"
},
"repository": {
@@ -11,9 +11,9 @@
"url": "http://github.com/rlespinasse/github-slug-action.git"
},
"devDependencies": {
"@semantic-release/changelog": "^3.0.5",
"@semantic-release/git": "^7.0.18",
"semantic-release": "^15.13.30"
"@semantic-release/changelog": "5.0.1",
"@semantic-release/git": "9.0.0",
"semantic-release": "17.0.7"
},
"release": {
"tagFormat": "${version}",
@@ -23,6 +23,10 @@
"@semantic-release/changelog",
"@semantic-release/git",
"@semantic-release/github"
],
"branches": [
"v1.1.x",
"v2.x"
]
}
}

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bats
@test "Short long hash" {
@test "short_sha: long hash" {
test_short_sha \
"a35a1a486a260cfd99c5b6f8c6034a2929ba9b3f" \
"a35a1a48"
@@ -16,4 +16,4 @@ test_short_sha(){
actual="$(short_sha ${given})"
echo "expected : [${expected}], actual : [${actual}]"
[ "${actual}" == "${expected}" ]
}
}

49
tests/slug.bats Normal file
View File

@@ -0,0 +1,49 @@
#!/usr/bin/env bats
@test "slug: a word" {
test_slug \
"word" \
"word"
}
@test "slug: a string" {
test_slug \
"basic-string" \
"basic-string"
}
@test "slug: a string in camel case" {
test_slug \
"camelCase" \
"camelcase"
}
@test "slug: a path" {
test_slug \
"path/to/something" \
"path-to-something"
}
@test "slug: a number" {
test_slug \
"4.2" \
"4.2"
}
@test "slug: a very long string" {
test_slug \
"an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters" \
"an-awesome-feature-very-very-very-very-very-very-very-long-more"
}
# Load sluf_ref function
source entrypoint.sh > /dev/null 2>&1
test_slug() {
given="${1}"
expected="${2}"
actual="$(slug \"${given}\")"
echo "expected : [${expected}], actual : [${actual}]"
[ "${actual}" == "${expected}" ]
}

View File

@@ -1,43 +1,43 @@
#!/usr/bin/env bats
@test "Slug master branch" {
test_sluf_ref \
@test "slug_ref:: master branch" {
test_slug_ref \
"refs/heads/master" \
"master"
}
@test "Slug a feature branch" {
test_sluf_ref \
@test "slug_ref: a feature branch" {
test_slug_ref \
"refs/heads/feat/new_feature" \
"feat-new-feature"
}
@test "Slug a fix branch" {
test_sluf_ref \
@test "slug_ref: a fix branch" {
test_slug_ref \
"refs/heads/fix/issue_number" \
"fix-issue-number"
}
@test "Slug a simple tag" {
test_sluf_ref \
@test "slug_ref: a simple tag" {
test_slug_ref \
"refs/tags/v1.0.0" \
"v1-0-0"
"v1.0.0"
}
@test "Slug a complex tag" {
test_sluf_ref \
@test "slug_ref: a complex tag" {
test_slug_ref \
"refs/tags/product@1.0.0-rc.2" \
"product-1-0-0-rc-2"
"product-1.0.0-rc.2"
}
@test "Slug a reference with upper case letters" {
test_sluf_ref \
@test "slug_ref: a reference with upper case letters" {
test_slug_ref \
"refs/heads/New_Awesome_Product" \
"new-awesome-product"
}
@test "Slug a very long name" {
test_sluf_ref \
@test "slug_ref: a very long name" {
test_slug_ref \
"refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters" \
"an-awesome-feature-very-very-very-very-very-very-very-long-more"
}
@@ -45,11 +45,11 @@
# Load sluf_ref function
source entrypoint.sh > /dev/null 2>&1
test_sluf_ref() {
test_slug_ref() {
given="${1}"
expected="${2}"
actual="$(slug_ref \"${given}\")"
echo "expected : [${expected}], actual : [${actual}]"
[ "${actual}" == "${expected}" ]
}
}

49
tests/slug_url.bats Normal file
View File

@@ -0,0 +1,49 @@
#!/usr/bin/env bats
@test "slug_url: a word" {
test_slug_url \
"word" \
"word"
}
@test "slug_url: a string" {
test_slug_url \
"basic-string" \
"basic-string"
}
@test "slug_url: a string in camel case" {
test_slug_url \
"camelCase" \
"camelcase"
}
@test "slug_url: a path" {
test_slug_url \
"path/to/something" \
"path-to-something"
}
@test "slug_url: a number" {
test_slug_url \
"4.2" \
"4-2"
}
@test "slug_url: a very long string" {
test_slug_url \
"an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters" \
"an-awesome-feature-very-very-very-very-very-very-very-long-more"
}
# Load sluf_ref function
source entrypoint.sh > /dev/null 2>&1
test_slug_url() {
given="${1}"
expected="${2}"
actual="$(slug_url \"${given}\")"
echo "expected : [${expected}], actual : [${actual}]"
[ "${actual}" == "${expected}" ]
}

55
tests/slug_url_ref.bats Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env bats
@test "slug_url_ref: master branch" {
test_slug_url_ref \
"refs/heads/master" \
"master"
}
@test "slug_url_ref: a feature branch" {
test_slug_url_ref \
"refs/heads/feat/new_feature" \
"feat-new-feature"
}
@test "slug_url_ref: a fix branch" {
test_slug_url_ref \
"refs/heads/fix/issue_number" \
"fix-issue-number"
}
@test "slug_url_ref: a simple tag" {
test_slug_url_ref \
"refs/tags/v1.0.0" \
"v1-0-0"
}
@test "slug_url_ref: a complex tag" {
test_slug_url_ref \
"refs/tags/product@1.0.0-rc.2" \
"product-1-0-0-rc-2"
}
@test "slug_url_ref: a reference with upper case letters" {
test_slug_url_ref \
"refs/heads/New_Awesome_Product" \
"new-awesome-product"
}
@test "slug_url_ref: a very long name" {
test_slug_url_ref \
"refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters" \
"an-awesome-feature-very-very-very-very-very-very-very-long-more"
}
# Load sluf_ref function
source entrypoint.sh > /dev/null 2>&1
test_slug_url_ref() {
given="${1}"
expected="${2}"
actual="$(slug_url_ref \"${given}\")"
echo "expected : [${expected}], actual : [${actual}]"
[ "${actual}" == "${expected}" ]
}