mirror of
https://github.com/rlespinasse/github-slug-action.git
synced 2026-05-18 12:41:46 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbbe21b72b | ||
|
|
88f3ee8f6f | ||
|
|
cd9871b66e | ||
|
|
1fb0eeb01e |
146
.github/workflows/github-slug-action.yml
vendored
146
.github/workflows/github-slug-action.yml
vendored
@@ -7,18 +7,16 @@ jobs:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
concurrency:
|
||||
group: os-testing-${{ github.ref }}-${{ github.event_name }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: Load using v3.x
|
||||
uses: rlespinasse/github-slug-action@v3.x
|
||||
- name: Load using v4.x with prefix
|
||||
uses: ./
|
||||
with:
|
||||
prefix: V4_
|
||||
short-length: 8
|
||||
- name: Validate // Partial variables
|
||||
run: |
|
||||
echo "repository owner : ${{ env.V4_GITHUB_REPOSITORY_OWNER_PART }}"
|
||||
@@ -107,20 +105,154 @@ jobs:
|
||||
[[ "${{ env.GITHUB_REF_NAME_SLUG_CS }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG_CS }}" ]]
|
||||
[[ "${{ env.GITHUB_REF_NAME_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG_URL_CS }}" ]]
|
||||
shell: bash
|
||||
- name: Print // Short SHA variables
|
||||
- name: Validate // Short SHA variables
|
||||
run: |
|
||||
echo "sha : ${{ env.V4_GITHUB_SHA_SHORT }}"
|
||||
echo "pull request sha : ${{ env.V4_GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}"
|
||||
[[ "${{ env.GITHUB_SHA_SHORT }}" == "${{ env.V4_GITHUB_SHA_SHORT }}" ]]
|
||||
[[ "${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" == "${{ env.V4_GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" ]]
|
||||
shell: bash
|
||||
|
||||
os-testing-slug-maxlength:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Test 1
|
||||
- name: Using correct slug max length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "CML_"
|
||||
slug-maxlength: 1
|
||||
- name: Using correct max length // Validate that all slug variables lengths are equals or under the slug-maxlength
|
||||
run: |
|
||||
env | grep "CML_" | grep "_SLUG" | cut -d"=" -f2 | while read -r value; do [ "$(echo "$value" | wc -m)" -le 2 ] ; done
|
||||
shell: bash
|
||||
|
||||
# Test 2
|
||||
- name: Using wrong slug max length
|
||||
id: using-wrong-slug-max-length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "WML_"
|
||||
slug-maxlength: "wrong"
|
||||
continue-on-error: true
|
||||
- name: Using wrong slug max length // Validate that the action end with an error
|
||||
run: |
|
||||
[[ "$(env | grep "WML_" | grep "_SLUG" | wc -l)" -eq 0 ]]
|
||||
[[ "${{ steps.using-wrong-slug-max-length.outcome }}" == "failure" ]]
|
||||
[[ "${{ steps.using-wrong-slug-max-length.conclusion }}" == "success" ]]
|
||||
shell: bash
|
||||
|
||||
# Test 3
|
||||
- name: Using empty slug max length
|
||||
id: using-empty-slug-max-length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "EML_"
|
||||
slug-maxlength: ""
|
||||
continue-on-error: true
|
||||
- name: Using empty slug max length // Validate that the action end with an error
|
||||
run: |
|
||||
[[ "$(env | grep "EML_" | grep "_SLUG" | wc -l)" -eq 0 ]]
|
||||
[[ "${{ steps.using-empty-slug-max-length.outcome }}" == "failure" ]]
|
||||
[[ "${{ steps.using-empty-slug-max-length.conclusion }}" == "success" ]]
|
||||
shell: bash
|
||||
|
||||
# Test 4
|
||||
- name: Using no limit on slug max length
|
||||
id: using-nolimit-slug-max-length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "NLML_"
|
||||
slug-maxlength: "nolimit"
|
||||
- name: Using no limit on slug max length // Validate that the action end with an error
|
||||
run: |
|
||||
[[ "$(env | grep "NLML_" | grep "_SLUG" | wc -l)" -gt 0 ]]
|
||||
[[ "${{ steps.using-nolimit-slug-max-length.outcome }}" == "success" ]]
|
||||
[[ "${{ steps.using-nolimit-slug-max-length.conclusion }}" == "success" ]]
|
||||
shell: bash
|
||||
|
||||
os-testing-short-length:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Test 1
|
||||
- name: Using correct short length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "CSL_"
|
||||
short-length: 4
|
||||
- name: Using correct length // Validate that all short variables lengths are equals to short-length
|
||||
run: |
|
||||
env | grep "CSL_" | grep "_SHORT" | cut -d"=" -f2 | while read -r value; do [ "$(echo "$value" | wc -m)" -le 5 ] ; done
|
||||
shell: bash
|
||||
|
||||
# Test 2
|
||||
- name: Using wrong short length
|
||||
id: using-wrong-short-length
|
||||
uses: ./
|
||||
with:
|
||||
prefix: "WSL_"
|
||||
short-length: "wrong"
|
||||
continue-on-error: true
|
||||
- name: Using wrong short length // Validate that the action end with an error
|
||||
run: |
|
||||
[[ "$(env | grep "WSL_" | grep "_SHORT" | wc -l)" -eq 0 ]]
|
||||
[[ "${{ steps.using-wrong-short-length.outcome }}" == "failure" ]]
|
||||
[[ "${{ steps.using-wrong-short-length.conclusion }}" == "success" ]]
|
||||
shell: bash
|
||||
|
||||
os-testing-without-checkout:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: this-action
|
||||
ref: ${{ github.ref }}
|
||||
- name: Load using v3.x
|
||||
uses: rlespinasse/github-slug-action@v3.x
|
||||
- name: Load using v4.x with prefix
|
||||
uses: ./this-action
|
||||
with:
|
||||
prefix: V4_
|
||||
short-length: 8
|
||||
- name: Validate // Short SHA variables
|
||||
run: |
|
||||
echo "sha : ${{ env.V4_GITHUB_SHA_SHORT }}"
|
||||
echo "pull request sha : ${{ env.V4_GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}"
|
||||
[[ "${{ env.GITHUB_SHA_SHORT }}" == "${{ env.V4_GITHUB_SHA_SHORT }}" ]]
|
||||
[[ "${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" == "${{ env.V4_GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" ]]
|
||||
shell: bash
|
||||
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
concurrency:
|
||||
group: release-${{ github.ref }}-${{ github.event_name }}
|
||||
needs: os-testing
|
||||
needs:
|
||||
- os-testing
|
||||
- os-testing-slug-maxlength
|
||||
- os-testing-short-length
|
||||
- os-testing-without-checkout
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
- name: Release this GitHub Action
|
||||
uses: rlespinasse/release-that@v1
|
||||
with:
|
||||
|
||||
82
README.md
82
README.md
@@ -12,6 +12,7 @@ This GitHub Action will expose the slug/short values of [some GitHub environment
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Overview](#overview)
|
||||
- [Use this action](#use-this-action)
|
||||
- [Migration from previous versions](#migration-from-previous-versions)
|
||||
- [Available Environment variables](#available-environment-variables)
|
||||
- [Enhanced variables](#enhanced-variables)
|
||||
- [Partial variables](#partial-variables)
|
||||
@@ -19,6 +20,7 @@ This GitHub Action will expose the slug/short values of [some GitHub environment
|
||||
- [Slug URL variables](#slug-url-variables)
|
||||
- [Short variables](#short-variables)
|
||||
- [Troubleshooting](#troubleshooting)
|
||||
- [The SHORT variables doesn't have the same lengths as before](#the-short-variables-doesnt-have-the-same-lengths-as-before)
|
||||
- [One of the environment variables doesn't work as intended](#one-of-the-environment-variables-doesnt-work-as-intended)
|
||||
- [An action could not be found at the URI](#an-action-could-not-be-found-at-the-uri)
|
||||
- [Thanks for talking about us](#thanks-for-talking-about-us)
|
||||
@@ -59,19 +61,57 @@ Add this in your workflow
|
||||
uses: rlespinasse/github-slug-action@v4
|
||||
```
|
||||
|
||||
Or with a prefix
|
||||
Others configurations
|
||||
|
||||
- With a prefix
|
||||
|
||||
```yaml
|
||||
- name: Inject slug/short variables
|
||||
uses: rlespinasse/github-slug-action@v4
|
||||
with:
|
||||
prefix: CI_
|
||||
```
|
||||
|
||||
- With another max length for slug values
|
||||
|
||||
```yaml
|
||||
- name: Inject slug/short variables
|
||||
uses: rlespinasse/github-slug-action@v4
|
||||
with:
|
||||
slug-maxlength: 80 # Use 'nolimit' to remove use of a max length (Default to 63)
|
||||
```
|
||||
|
||||
- With another length for short values
|
||||
|
||||
```yaml
|
||||
- name: Inject slug/short variables
|
||||
uses: rlespinasse/github-slug-action@v4
|
||||
with:
|
||||
short-length: 7 # By default it's up to git to decide, use 8 to have the v3.x behavior
|
||||
```
|
||||
|
||||
**Warning**: If you leave it empty, you need to checkout the source first in order to let git decide the size by itself.
|
||||
|
||||
Check for more [examples][examples] (OS usage, URL use, ...)
|
||||
|
||||
**Tip:** Use [Dependabot][dependabot] to maintain your `github-slug-action` version updated in your GitHub workflows.
|
||||
|
||||
### Migration from previous versions
|
||||
|
||||
The short sha length is not the same as previous version.
|
||||
|
||||
- `v4` let git configuration decide of it (but you can override it),
|
||||
- `v3` and before, it's always a length of 8 characters.
|
||||
|
||||
So to reproduce previous behavior, use
|
||||
|
||||
```yaml
|
||||
- name: Inject slug/short variables
|
||||
uses: rlespinasse/github-slug-action@v4
|
||||
with:
|
||||
prefix: CI_
|
||||
short-length: 8 # Same as v3 and before
|
||||
```
|
||||
|
||||
Check for more [examples][examples] (OS usage, URL use, ...)
|
||||
|
||||
**Tip:** Use [Dependabot][dependabot] to maintain your `github-slug-action` version updated in your GitHub workflows.
|
||||
|
||||
## Available Environment variables
|
||||
|
||||
**Note**: If you don't find what you search for, read more about [available `GitHub` variables](docs/github-variables.md), and propose a [new custom variable][custom-variable].
|
||||
@@ -128,6 +168,18 @@ Check for more [examples][examples] (OS usage, URL use, ...)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### The SHORT variables doesn't have the same lengths as before
|
||||
|
||||
Since `v4`, it's git who manage the short variables by using [git rev-parse][git-revparse] behaviour.
|
||||
The length of a short sha depends of the size of our repository and can differ over time.
|
||||
|
||||
To manage that moving length, you can use `short-length` input
|
||||
|
||||
- set `7` to reproduce `small repository` behavior
|
||||
- set `8` to reproduce `v3` behavior
|
||||
|
||||
**Warning**: The minimum length is 4, the default is the effective value of the [core.abbrev][git-core-abbrev] configuration variable.
|
||||
|
||||
### One of the environment variables doesn't work as intended
|
||||
|
||||
[**Note**][naming-conventions]: GitHub reserves the `GITHUB_` environment variable prefix for internal use by GitHub. Setting an environment variable or secret with the `GITHUB_` prefix will result in an error.
|
||||
@@ -161,18 +213,19 @@ jobs:
|
||||
|
||||
### An action could not be found at the URI
|
||||
|
||||
If your workflow fail on the `Set up job` task with this kind of log :
|
||||
If your workflow fail on the `Set up job` task with this kind of log
|
||||
|
||||
```text
|
||||
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'
|
||||
Download action repository 'rlespinasse/github-slug-action@GIT_REFERENCE'
|
||||
##[error]An action could not be found at the URI 'https://api.github.com/repos/rlespinasse/github-slug-action/tarball/GIT_REFERENCE'
|
||||
```
|
||||
|
||||
> The master branch doesn't exists anymore.
|
||||
>
|
||||
> The master branch EOL has been set to **2020-10-25** after a 6-month deprecation period (more information on the [EOL issue][issue-15])
|
||||
If the `GIT_REFERENCE` value is
|
||||
|
||||
Please, use the current branch tag `v4`, branch `v4.x` or a version tag (see [releases pages][releases]) in order to fix your workflow.
|
||||
- `v4.x` or after, the branch don't exists anymore following the [end-of-life for a branch](SECURITY.md#end-of-life-of-a-branch) security process.
|
||||
- `master`, the branch don't exists anymore, read more about it on the corresponding issue ([EOL issue][issue-15])
|
||||
|
||||
Please, use the current major tag `v4` or a version tag (see [releases pages][releases]) in order to fix your workflow.
|
||||
|
||||
## Thanks for talking about us
|
||||
|
||||
@@ -192,6 +245,9 @@ Please, use the current branch tag `v4`, branch `v4.x` or a version tag (see [re
|
||||
[releases]: https://github.com/rlespinasse/github-slug-action/releases
|
||||
[issue-15]: https://github.com/rlespinasse/github-slug-action/issues/15
|
||||
|
||||
[git-revpars]: https://git-scm.com/docs/git-rev-parse#Documentation/git-rev-parse.txt---shortlength
|
||||
[git-core-abbrev]: https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreabbrev
|
||||
|
||||
[github-env-vars]: https://docs.github.com/en/free-pro-team@latest/actions/reference/environment-variables#default-environment-variables
|
||||
[dependabot]: https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/keeping-your-actions-up-to-date-with-github-dependabot
|
||||
[webhooks-and-events]: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads
|
||||
|
||||
47
action.yml
47
action.yml
@@ -9,69 +9,92 @@ inputs:
|
||||
description: "Value to prepend to each generated variable"
|
||||
default: ""
|
||||
required: false
|
||||
slug-maxlength:
|
||||
description: "Max length of the slugified values"
|
||||
default: "63"
|
||||
required: true
|
||||
short-length:
|
||||
description: "Length of the shortify values (git default if empty)"
|
||||
required: false
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
- run: $GITHUB_ACTION_PATH/preflight.sh
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_SLUG_MAXLENGTH: ${{ inputs.slug-maxlength }}
|
||||
INPUT_SHORT_LENGTH: ${{ inputs.short-length }}
|
||||
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_REPOSITORY
|
||||
value: ${{ github.repository }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_REF
|
||||
prefix: ${{ inputs.prefix }}
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_HEAD_REF
|
||||
prefix: ${{ inputs.prefix }}
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_BASE_REF
|
||||
prefix: ${{ inputs.prefix }}
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
|
||||
# Specific values
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_EVENT_REF
|
||||
value: ${{ github.event.ref }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
|
||||
# Calculated values
|
||||
- id: get-github-ref-name
|
||||
run: echo "::set-output name=github-ref-name::$(echo "${{ github.head_ref || github.ref }}" | cut -d/ -f3)"
|
||||
shell: bash
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_REF_NAME
|
||||
value: ${{ steps.get-github-ref-name.outputs.github-ref-name }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
- id: get-github-repository-owner-part
|
||||
run: echo "::set-output name=github-repository-owner-part::$(echo $GITHUB_REPOSITORY | cut -d/ -f1)"
|
||||
shell: bash
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_REPOSITORY_OWNER_PART
|
||||
value: ${{ steps.get-github-repository-owner-part.outputs.github-repository-owner-part }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
- id: get-github-repository-name-part
|
||||
run: echo "::set-output name=github-repository-name-part::$(echo $GITHUB_REPOSITORY | cut -d/ -f2)"
|
||||
shell: bash
|
||||
- uses: rlespinasse/slugify-value@v1.1.0
|
||||
- uses: rlespinasse/slugify-value@v1.2.0
|
||||
with:
|
||||
key: GITHUB_REPOSITORY_NAME_PART
|
||||
value: ${{ steps.get-github-repository-name-part.outputs.github-repository-name-part }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
slug-maxlength: ${{ inputs.slug-maxlength }}
|
||||
|
||||
# Short
|
||||
- uses: rlespinasse/shortify-git-revision@v1.3.0
|
||||
- uses: rlespinasse/shortify-git-revision@v1.4.0
|
||||
with:
|
||||
name: GITHUB_SHA
|
||||
continue-on-error: true
|
||||
short-on-error: true
|
||||
length: ${{ inputs.short-length }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
- uses: rlespinasse/shortify-git-revision@v1.3.0
|
||||
- uses: rlespinasse/shortify-git-revision@v1.4.0
|
||||
with:
|
||||
name: GITHUB_EVENT_PULL_REQUEST_HEAD_SHA
|
||||
revision: ${{ github.event.pull_request.head.sha }}
|
||||
continue-on-error: true
|
||||
short-on-error: true
|
||||
length: ${{ inputs.short-length }}
|
||||
prefix: ${{ inputs.prefix }}
|
||||
|
||||
14
preflight.sh
Executable file
14
preflight.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ -z "${INPUT_SLUG_MAXLENGTH}" ]; then
|
||||
echo "::error ::slug-maxlength cannot be empty"
|
||||
exit 1
|
||||
elif [ "${INPUT_SLUG_MAXLENGTH}" != "nolimit" ] && [ ! "${INPUT_SLUG_MAXLENGTH}" -eq "${INPUT_SLUG_MAXLENGTH}" ] 2>/dev/null; then
|
||||
echo "::error ::slug-maxlength must be a number or equals to 'nolimit'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! "${INPUT_SHORT_LENGTH}" -eq "${INPUT_SHORT_LENGTH}" ] 2>/dev/null; then
|
||||
echo "::error ::short-length must be a number"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user