Create tag version #9749
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |