name: "[v5] Test and Release" on: [push, pull_request] permissions: read-all jobs: check-v4-compatibility: name: "Check v4 compatibility" strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 - name: Load this action from HEAD uses: ./ - name: Load using v4 uses: rlespinasse/github-slug-action@v4 with: prefix: V4_ - name: Validate // Partial variables run: | [[ "${{ env.GITHUB_REPOSITORY_OWNER_PART }}" == "${{ env.V4_GITHUB_REPOSITORY_OWNER_PART }}" ]] [[ "${{ env.GITHUB_REPOSITORY_NAME_PART }}" == "${{ env.V4_GITHUB_REPOSITORY_NAME_PART }}" ]] shell: bash - name: Validate // Slug variables run: | [[ "${{ env.GITHUB_REPOSITORY_SLUG }}" == "${{ env.V4_GITHUB_REPOSITORY_SLUG }}" ]] [[ "${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG }}" == "${{ env.V4_GITHUB_REPOSITORY_OWNER_PART_SLUG }}" ]] [[ "${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG }}" == "${{ env.V4_GITHUB_REPOSITORY_NAME_PART_SLUG }}" ]] [[ "${{ env.GITHUB_REF_SLUG }}" == "${{ env.V4_GITHUB_REF_SLUG }}" ]] [[ "${{ env.GITHUB_HEAD_REF_SLUG }}" == "${{ env.V4_GITHUB_HEAD_REF_SLUG }}" ]] [[ "${{ env.GITHUB_BASE_REF_SLUG }}" == "${{ env.V4_GITHUB_BASE_REF_SLUG }}" ]] [[ "${{ env.GITHUB_EVENT_REF_SLUG }}" == "${{ env.V4_GITHUB_EVENT_REF_SLUG }}" ]] shell: bash - name: Validate // Slug variables (Case Sensitive) run: | [[ "${{ env.GITHUB_REPOSITORY_SLUG_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_SLUG_CS }}" ]] [[ "${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_OWNER_PART_SLUG_CS }}" ]] [[ "${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_NAME_PART_SLUG_CS }}" ]] [[ "${{ env.GITHUB_REF_SLUG_CS }}" == "${{ env.V4_GITHUB_REF_SLUG_CS }}" ]] [[ "${{ env.GITHUB_HEAD_REF_SLUG_CS }}" == "${{ env.V4_GITHUB_HEAD_REF_SLUG_CS }}" ]] [[ "${{ env.GITHUB_BASE_REF_SLUG_CS }}" == "${{ env.V4_GITHUB_BASE_REF_SLUG_CS }}" ]] [[ "${{ env.GITHUB_EVENT_REF_SLUG_CS }}" == "${{ env.V4_GITHUB_EVENT_REF_SLUG_CS }}" ]] shell: bash - name: Validate // Slug URL variables run: | [[ "${{ env.GITHUB_REPOSITORY_SLUG_URL }}" == "${{ env.V4_GITHUB_REPOSITORY_SLUG_URL }}" ]] [[ "${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_URL }}" == "${{ env.V4_GITHUB_REPOSITORY_OWNER_PART_SLUG_URL }}" ]] [[ "${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}" == "${{ env.V4_GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}" ]] [[ "${{ env.GITHUB_REF_SLUG_URL }}" == "${{ env.V4_GITHUB_REF_SLUG_URL }}" ]] [[ "${{ env.GITHUB_HEAD_REF_SLUG_URL }}" == "${{ env.V4_GITHUB_HEAD_REF_SLUG_URL }}" ]] [[ "${{ env.GITHUB_BASE_REF_SLUG_URL }}" == "${{ env.V4_GITHUB_BASE_REF_SLUG_URL }}" ]] [[ "${{ env.GITHUB_EVENT_REF_SLUG_URL }}" == "${{ env.V4_GITHUB_EVENT_REF_SLUG_URL }}" ]] shell: bash - name: Validate // Slug URL variables (Case Sensitive) run: | [[ "${{ env.GITHUB_REPOSITORY_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_OWNER_PART_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REPOSITORY_NAME_PART_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_REF_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REF_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_HEAD_REF_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_HEAD_REF_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_BASE_REF_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_BASE_REF_SLUG_URL_CS }}" ]] [[ "${{ env.GITHUB_EVENT_REF_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_EVENT_REF_SLUG_URL_CS }}" ]] shell: bash - name: Validate // Ref Point run: | [[ "${{ env.GITHUB_REF_POINT }}" == "${{ env.V4_GITHUB_REF_NAME }}" ]] [[ "${{ env.GITHUB_REF_POINT_SLUG }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG }}" ]] [[ "${{ env.GITHUB_REF_POINT_SLUG_URL }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG_URL }}" ]] [[ "${{ env.GITHUB_REF_POINT_SLUG_CS }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG_CS }}" ]] [[ "${{ env.GITHUB_REF_POINT_SLUG_URL_CS }}" == "${{ env.V4_GITHUB_REF_NAME_SLUG_URL_CS }}" ]] shell: bash - name: Validate // Short SHA variables run: | [[ "${{ 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 check-v4-compatibility-without-checkout: name: "Check v4 compatibility (without checkout)" needs: - check-v4-compatibility strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 with: path: this-action ref: ${{ github.ref }} - name: Load this action from HEAD uses: ./this-action - name: Load using v4 uses: rlespinasse/github-slug-action@v4 with: prefix: V4_ - name: Validate // Short SHA variables run: | [[ "${{ 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 display: name: "Display produced variables" strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 - name: Load this action from HEAD uses: ./ - name: Partial variables run: | echo "repository owner : ${{ env.GITHUB_REPOSITORY_OWNER_PART }}" echo "repository name : ${{ env.GITHUB_REPOSITORY_NAME_PART }}" shell: bash - name: Slug variables run: | echo "repository : ${{ env.GITHUB_REPOSITORY_SLUG }}" echo "repository owner : ${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG }}" echo "repository name : ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG }}" echo "ref : ${{ env.GITHUB_REF_SLUG }}" echo "ref name : ${{ env.GITHUB_REF_NAME_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 }}" shell: bash - name: Slug variables (Case Sensitive) run: | echo "repository : ${{ env.GITHUB_REPOSITORY_SLUG_CS }}" echo "repository owner : ${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_CS }}" echo "repository name : ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_CS }}" echo "ref : ${{ env.GITHUB_REF_SLUG_CS }}" echo "ref name : ${{ env.GITHUB_REF_NAME_SLUG_CS }}" echo "head ref : ${{ env.GITHUB_HEAD_REF_SLUG_CS }}" echo "base ref : ${{ env.GITHUB_BASE_REF_SLUG_CS }}" echo "event ref : ${{ env.GITHUB_EVENT_REF_SLUG_CS }}" shell: bash - name: Slug URL variables run: | echo "repository : ${{ env.GITHUB_REPOSITORY_SLUG_URL }}" echo "repository owner : ${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_URL }}" echo "repository name : ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL }}" echo "ref : ${{ env.GITHUB_REF_SLUG_URL }}" echo "ref name : ${{ env.GITHUB_REF_NAME_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 }}" shell: bash - name: Slug URL variables (Case Sensitive) run: | echo "repository : ${{ env.GITHUB_REPOSITORY_SLUG_URL_CS }}" echo "repository owner : ${{ env.GITHUB_REPOSITORY_OWNER_PART_SLUG_URL_CS }}" echo "repository name : ${{ env.GITHUB_REPOSITORY_NAME_PART_SLUG_URL_CS }}" echo "ref : ${{ env.GITHUB_REF_SLUG_URL_CS }}" echo "ref name : ${{ env.GITHUB_REF_NAME_SLUG_URL_CS }}" echo "head ref : ${{ env.GITHUB_HEAD_REF_SLUG_URL_CS }}" echo "base ref : ${{ env.GITHUB_BASE_REF_SLUG_URL_CS }}" echo "event ref : ${{ env.GITHUB_EVENT_REF_SLUG_URL_CS }}" shell: bash - name: Ref Point run: | echo "raw : ${{ env.GITHUB_REF_POINT }}" echo "slug : ${{ env.GITHUB_REF_POINT_SLUG }}" echo "slug url : ${{ env.GITHUB_REF_POINT_SLUG_URL }}" echo "slug (Case Sensitive) : ${{ env.GITHUB_REF_POINT_SLUG_CS }}" echo "slug url (Case Sensitive) : ${{ env.GITHUB_REF_POINT_SLUG_URL_CS }}" shell: bash - name: Short SHA variables run: | echo "sha : ${{ env.GITHUB_SHA_SHORT }}" echo "pull request sha : ${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" shell: bash display-without-checkout: name: "Display produced variables (without checkout)" needs: - display strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 with: path: this-action ref: ${{ github.ref }} - name: Load this action from HEAD uses: ./this-action - name: Short SHA variables run: | echo "sha : ${{ env.GITHUB_SHA_SHORT }}" echo "pull request sha : ${{ env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA_SHORT }}" shell: bash input-short-length: name: "Input 'short-length'" strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 # 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 [ "${#value}" -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" -c)" -eq 0 ]] [[ "${{ steps.using-wrong-short-length.outcome }}" == "failure" ]] [[ "${{ steps.using-wrong-short-length.conclusion }}" == "success" ]] shell: bash input-short-length-without-checkout: name: "Input 'short-length' (without checkout)" needs: - input-short-length strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 with: path: this-action ref: ${{ github.ref }} # Test 1 - name: Using correct short length uses: ./this-action 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 [ "${#value}" -le 5 ] ; done shell: bash # Test 2 - name: Using empty short length id: using-empty-short-length uses: ./this-action with: prefix: "ESL_" continue-on-error: true - name: Using empty short length // Validate that the action don't end with an error run: | [[ "$(env | grep "ESL_" | grep "_SHORT" -c)" -gt 0 ]] [[ "${{ steps.using-empty-short-length.outcome }}" == "success" ]] [[ "${{ steps.using-empty-short-length.conclusion }}" == "success" ]] shell: bash # Test 3 - name: Using wrong short length id: using-wrong-short-length uses: ./this-action 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" -c)" -eq 0 ]] [[ "${{ steps.using-wrong-short-length.outcome }}" == "failure" ]] [[ "${{ steps.using-wrong-short-length.conclusion }}" == "success" ]] shell: bash input-slug-maxlength: name: "Input 'slug-maxlength'" strategy: fail-fast: false matrix: os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v7 # 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 [ "${#value}" -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" -c)" -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" -c)" -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" -c)" -gt 0 ]] [[ "${{ steps.using-nolimit-slug-max-length.outcome }}" == "success" ]] [[ "${{ steps.using-nolimit-slug-max-length.conclusion }}" == "success" ]] shell: bash release: runs-on: ubuntu-latest permissions: contents: write issues: write id-token: write packages: write concurrency: group: release-${{ github.ref }}-${{ github.event_name }} needs: - display-without-checkout - input-short-length-without-checkout - input-slug-maxlength steps: - name: Checkout uses: actions/checkout@v7 - name: Release this GitHub Action uses: rlespinasse/release-that@v1 with: github-token: ${{ secrets.GH_TOKEN }}