Skip to content

Create tag version #9751

Create tag version

Create tag version #9751

name: Create tag version
on:
schedule:
- cron: '45 */6 * * *'
workflow_dispatch:
jobs:
create_version_number:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
release: ${{ steps.v_bump.outputs.release }} # boolean
hotio_version: ${{ steps.t_hotio.outputs.tag }}
intermediate: ${{ steps.v_bump.outputs.intermediate }}
intermediate_number: ${{ steps.v_release.outputs.intermediate }}
intermediate_version: ${{ steps.v_release.outputs.tag }}
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get Current Tag
id: t_latest
uses: WyriHaximus/github-action-get-previous-tag@v1
- name: Get Current hotio/plex Version
id: t_hotio
run: |
EXT_RELEASE=$(curl -s "https://raw.githubusercontent.com/hotio/plex/master/tags.json" | jq -r '. | .release.tags[1]')
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "::error ::Invalid hotio Release"
exit 1
fi
echo "tag=${EXT_RELEASE}" >> $GITHUB_OUTPUT
- name: Is Current Release Intermediate
id: t_intermediate
run: |
version=${{ steps.t_latest.outputs.tag }}
version="${version: -2}" # get last two characters
if [ "${version::1}" == "-" ]; then
if [ "${version: -1}" == "9" ]; then # reject if 9 intermediate releases, not supported
echo "::error ::WOW, you have created 9 intermediate releases! Take it slow or create a release manually."
exit 1
fi
echo "is_intermediate=true" >> $GITHUB_OUTPUT
echo "version=${version: -1}" >> $GITHUB_OUTPUT
fi
- name: Get Version Without Intermediate
id: v_plex
run: |
version=${{ steps.t_latest.outputs.tag }}
if [ "${{ steps.t_intermediate.outputs.is_intermediate }}" == "true" ]; then
echo "version=${version::-2}" >> $GITHUB_OUTPUT # latest tag without the last two characters
else
echo "version=${version}" >> $GITHUB_OUTPUT # not a intermediate version
fi
- name: Check Version Bump
id: v_bump
run: |
echo "\"${{ steps.t_latest.outputs.tag }}\" - \"${{ steps.t_hotio.outputs.tag }}\""
if [[ "${{ github.event_name }}" == "workflow_dispatch" && "${{ steps.v_plex.outputs.version }}" == "${{ steps.t_hotio.outputs.tag }}" ]]; then
echo "::warning ::Creating Intermediate Tag Release By Manual Trigger"
echo "intermediate=true" >> $GITHUB_OUTPUT
echo "release=true" >> $GITHUB_OUTPUT
elif [ "${{ steps.v_plex.outputs.version }}" != "${{ steps.t_hotio.outputs.tag }}" ]; then
echo "::notice ::Creating Tag With New hotio/plex Release"
echo "release=true" >> $GITHUB_OUTPUT
echo "intermediate=false" >> $GITHUB_OUTPUT
else
echo "::notice ::Not Updating Because There Is No New hotio/plex Release"
echo "release=false" >> $GITHUB_OUTPUT
echo "intermediate=false" >> $GITHUB_OUTPUT
fi
- name: Generate Intermediate Version
if: steps.v_bump.outputs.intermediate == 'true'
id: v_release
run: |
if [ "${{ steps.t_intermediate.outputs.is_intermediate }}" == "true" ]; then # this is already is a intermediate version, bump it
version_intermediate=${{ steps.t_intermediate.outputs.version }}
intermediate=$(( ${version_intermediate: -1} + 1 )) # get the last character, which should be a number, and add 1
else # create intermediate version
intermediate=1
fi
echo "intermediate=${intermediate}" >> $GITHUB_OUTPUT # output intermediate version number
echo "tag=${{ steps.t_hotio.outputs.tag }}-${intermediate}" >> $GITHUB_OUTPUT # output the intermediate version
print_outputs:
runs-on: ubuntu-latest
needs: create_version_number
steps:
- name: Print Outputs
run: |
echo "RELEASE: ${{ needs.create_version_number.outputs.release }}"
echo "HOTIO_VERSION: ${{ needs.create_version_number.outputs.hotio_version }}"
echo "INTERMEDIATE: ${{ needs.create_version_number.outputs.intermediate }}"
echo "INTERMEDIATE_NUMBER: ${{ needs.create_version_number.outputs.intermediate_number }}"
echo "INTERMEDIATE_VERSION: ${{ needs.create_version_number.outputs.intermediate_version }}"
update_tags:
runs-on: ubuntu-latest
needs: create_version_number
if: needs.create_version_number.outputs.release == 'true' && needs.create_version_number.outputs.intermediate != 'true' && github.ref_name == 'master'
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get short sha
id: sha
run: echo "short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- name: Update tags.json
env:
SHA_SHORT: ${{ steps.sha.outputs.short }}
VERSION: ${{ needs.create_version_number.outputs.hotio_version }}
shell: bash
run: |
if [[ -f ./tags.json ]]; then
json=$(cat ./tags.json)
jq '(.version) |= "'"${VERSION//\~/-}"'"' <<< "${json}" > ./tags.json
json=$(cat ./tags.json)
jq '(.lastUpdated) |= "'"$(date -u +'%FT%T.%3NZ')"'"' <<< "${json}" > ./tags.json
json=$(cat ./tags.json)
jq '(.commit) |= "'"${SHA_SHORT}"'"' <<< "${json}" > ./tags.json
fi
- name: Commit tags.json
uses: EndBug/[email protected]
with:
message: "update tags.json | ${{ needs.create_version_number.outputs.hotio_version }}"
create_release:
runs-on: ubuntu-latest
needs: [ update_tags, create_version_number ]
if: needs.create_version_number.outputs.release == 'true' && github.ref_name == 'master'
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Generate Release Body
id: body
run: |
if [ "${{ needs.create_version_number.outputs.intermediate }}" == "true" ]; then
echo "message=Manual update to intermediate version ${{ needs.create_version_number.outputs.intermediate_number }}. A intermediate update only includes changes made in this repository, meaning this is not a new Plex update." >> $GITHUB_OUTPUT
else
echo "message=Automatic version bump to ${{ needs.create_version_number.outputs.hotio_version }}" >> $GITHUB_OUTPUT
fi
- name: Create Release
uses: softprops/[email protected]
with:
tag_name: ${{ needs.create_version_number.outputs.intermediate_version || needs.create_version_number.outputs.hotio_version }}
name: ${{ needs.create_version_number.outputs.intermediate_version || needs.create_version_number.outputs.hotio_version }}
body: "${{ steps.body.outputs.message }}"
draft: false
prerelease: false
token: ${{ secrets.REPO_TOKEN }}