From 11a251454ee9a10ebdda1d4f4472e690a982e6d1 Mon Sep 17 00:00:00 2001 From: Charles Ewert Date: Tue, 13 Feb 2024 11:34:48 -0500 Subject: [PATCH] Create manual workflow to auto create a PR to bump version --- .github/workflows/bump-version.yml | 235 +++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 .github/workflows/bump-version.yml diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml new file mode 100644 index 000000000..2b32466d0 --- /dev/null +++ b/.github/workflows/bump-version.yml @@ -0,0 +1,235 @@ +name: "Create PR to bump version" + +on: + workflow_dispatch: + inputs: + targetBranch: + description: 'Target Branch' + required: true + type: choice + options: + - bugfix + - master + versionType: + description: 'What Version to Bump' + required: true + type: choice + options: + - build + - minor + - major + +jobs: + build: + if: ${{ github.event.inputs.versionType == 'build' }} + runs-on: ubuntu-latest + steps: + # Setup + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - name: Install required packages + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: jq + - name: Save targetBranch to env + if: github.event.inputs.targetBranch != 'bugfix' + run: echo "targetBranch=${{ github.event.inputs.targetBranch }}" >> $GITHUB_ENV + # Save old version + - name: Find and save old major_version from manifest + run: awk 'BEGIN { FS="=" } /^major_version/ { print "oldMajor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old minor_version from manifest + run: awk 'BEGIN { FS="=" } /^minor_version/ { print "oldMinor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old build_version from manifest + run: awk 'BEGIN { FS="=" } /^build_version/ { print "oldBuild="$2; }' manifest >> $GITHUB_ENV + # Bugfix branch + - name: Save bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "bugfixBranch=${{ env.oldMajor }}.${{ env.oldMinor }}.z" >> $GITHUB_ENV + - name: Update targetBranch with actual bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "targetBranch=${{ env.bugfixBranch }}" >> $GITHUB_ENV + - name: Checkout bugfix branch + if: github.event.inputs.targetBranch == 'bugfix' + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: ${{ env.targetBranch }} + # Save old version again if needed + - name: Find and save old major_version from manifest + if: github.event.inputs.targetBranch == 'bugfix' + run: awk 'BEGIN { FS="=" } /^major_version/ { print "oldMajor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old minor_version from manifest + if: github.event.inputs.targetBranch == 'bugfix' + run: awk 'BEGIN { FS="=" } /^minor_version/ { print "oldMinor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old build_version from manifest + if: github.event.inputs.targetBranch == 'bugfix' + run: awk 'BEGIN { FS="=" } /^build_version/ { print "oldBuild="$2; }' manifest >> $GITHUB_ENV + # Calculate new version + - name: Calculate new build_version + run: echo "newBuild=$((${{ env.oldBuild }} + 1))" >> $GITHUB_ENV + - name: Save new version to env var + run: echo "newVersion=${{ env.oldMajor }}.${{ env.oldMinor }}.${{ env.newBuild }}" >> $GITHUB_ENV + - name: Save a copy of newVersion without periods to env var + run: echo "newVersionSlug=${{ env.newVersion }}" | sed -e 's/\.//g' >> $GITHUB_ENV + # Update files with new versions + - name: Update manifest build_version + run: sed -i "s/build_version=.*/build_version=${{ env.newBuild }}/g" manifest + - name: Update package-lock.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package-lock.json version 2 + run: echo "$( jq '.packages."".version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package.json )" > package.json + - name: Update Makefile version + run: sed -i "s/VERSION := .*/VERSION := ${{ env.newVersion }}/g" Makefile + # Create PR + - name: Save new branch name to env + run: echo "newBranch=bump-${{ github.event.inputs.targetBranch }}-to-${{ env.newVersionSlug }}" >> $GITHUB_ENV + - name: Create PR with new version + env: + GH_TOKEN: ${{ github.token }} + run: |- + git config user.name "jellyfin-bot" + git config user.email "team@jellyfin.org" + git checkout -b "${{ env.newBranch }}" + git add . + git commit -m "Bump ${{ github.event.inputs.versionType }} version" + git push --set-upstream origin "${{ env.newBranch }}" + gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }} + minor: + if: ${{ github.event.inputs.versionType == 'minor' }} + runs-on: ubuntu-latest + steps: + # Setup + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - name: Install jq to update json + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: jq + - name: Save targetBranch to env + if: github.event.inputs.targetBranch != 'bugfix' + run: echo "targetBranch=${{ github.event.inputs.targetBranch }}" >> $GITHUB_ENV + # Save old version + - name: Find and save old major_version from manifest + run: awk 'BEGIN { FS="=" } /^major_version/ { print "oldMajor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old minor_version from manifest + run: awk 'BEGIN { FS="=" } /^minor_version/ { print "oldMinor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old build_version from manifest + run: awk 'BEGIN { FS="=" } /^build_version/ { print "oldBuild="$2; }' manifest >> $GITHUB_ENV + # Bugfix branch + - name: Save bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "bugfixBranch=${{ env.oldMajor }}.${{ env.oldMinor }}.z" >> $GITHUB_ENV + - name: Update targetBranch with actual bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "targetBranch=${{ env.bugfixBranch }}" >> $GITHUB_ENV + - name: Checkout bugfix branch + if: github.event.inputs.targetBranch == 'bugfix' + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: ${{ env.targetBranch }} + # Calculate new version + - name: Calculate new build_version + run: echo "newMinor=$((${{ env.oldMinor }} + 1))" >> $GITHUB_ENV + - name: Save new version to env var + run: echo "newVersion=${{ env.oldMajor }}.${{ env.newMinor }}.0" >> $GITHUB_ENV + - name: Save a copy of newVersion without periods to env var + run: echo "newVersionSlug=${{ env.newVersion }}" | sed -e 's/\.//g' >> $GITHUB_ENV + # Update files with new versions + - name: Update manifest minor_version + run: sed -i "s/minor_version=.*/minor_version=${{ env.newMinor }}/g" manifest + - name: Update manifest build_version + run: sed -i "s/build_version=.*/build_version=0/g" manifest + - name: Update package-lock.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package-lock.json version 2 + run: echo "$( jq '.packages."".version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package.json )" > package.json + - name: Update Makefile version + run: sed -i "s/VERSION := .*/VERSION := ${{ env.newVersion }}/g" Makefile + # Create PR + - name: Save new branch name to env + run: echo "newBranch=bump-${{ github.event.inputs.targetBranch }}-to-${{ env.newVersionSlug }}" >> $GITHUB_ENV + - name: Create PR with new version + env: + GH_TOKEN: ${{ github.token }} + run: |- + git config user.name "jellyfin-bot" + git config user.email "team@jellyfin.org" + git checkout -b "${{ env.newBranch }}" + git add . + git commit -m "Bump ${{ github.event.inputs.versionType }} version" + git push --set-upstream origin "${{ env.newBranch }}" + gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }} + + major: + if: ${{ github.event.inputs.versionType == 'major' }} + runs-on: ubuntu-latest + steps: + # Setup + - name: Checkout code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + - name: Install jq to update json + uses: awalsh128/cache-apt-pkgs-action@latest + with: + packages: jq + - name: Save targetBranch to env + if: github.event.inputs.targetBranch != 'bugfix' + run: echo "targetBranch=${{ github.event.inputs.targetBranch }}" >> $GITHUB_ENV + # Save old version + - name: Find and save old major_version from manifest + run: awk 'BEGIN { FS="=" } /^major_version/ { print "oldMajor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old minor_version from manifest + run: awk 'BEGIN { FS="=" } /^minor_version/ { print "oldMinor="$2; }' manifest >> $GITHUB_ENV + - name: Find and save old build_version from manifest + run: awk 'BEGIN { FS="=" } /^build_version/ { print "oldBuild="$2; }' manifest >> $GITHUB_ENV + # Bugfix branch + - name: Save bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "bugfixBranch=${{ env.oldMajor }}.${{ env.oldMinor }}.z" >> $GITHUB_ENV + - name: Update targetBranch with actual bugfix branch name + if: github.event.inputs.targetBranch == 'bugfix' + run: echo "targetBranch=${{ env.bugfixBranch }}" >> $GITHUB_ENV + - name: Checkout bugfix branch + if: github.event.inputs.targetBranch == 'bugfix' + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: ${{ env.targetBranch }} + # Calculate new version + - name: Calculate new build_version + run: echo "newMajor=$((${{ env.oldMajor }} + 1))" >> $GITHUB_ENV + - name: Save new version to env var + run: echo "newVersion=${{ env.newMajor }}.0.0" >> $GITHUB_ENV + - name: Save a copy of newVersion without periods to env var + run: echo "newVersionSlug=${{ env.newVersion }}" | sed -e 's/\.//g' >> $GITHUB_ENV + # Update files with new versions + - name: Update manifest major_version + run: sed -i "s/major_version=.*/major_version=${{ env.newMajor }}/g" manifest + - name: Update manifest minor_version + run: sed -i "s/minor_version=.*/minor_version=0/g" manifest + - name: Update manifest build_version + run: sed -i "s/build_version=.*/build_version=0/g" manifest + - name: Update package-lock.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package-lock.json version 2 + run: echo "$( jq '.packages."".version = "'"${{ env.newVersion }}"'"' package-lock.json )" > package-lock.json + - name: Update package.json version + run: echo "$( jq '.version = "'"${{ env.newVersion }}"'"' package.json )" > package.json + - name: Update Makefile version + run: sed -i "s/VERSION := .*/VERSION := ${{ env.newVersion }}/g" Makefile + # Create PR + - name: Save new branch name to env + run: echo "newBranch=bump-${{ github.event.inputs.targetBranch }}-to-${{ env.newVersionSlug }}" >> $GITHUB_ENV + - name: Create PR with new version + env: + GH_TOKEN: ${{ github.token }} + run: |- + git config user.name "jellyfin-bot" + git config user.email "team@jellyfin.org" + git checkout -b "${{ env.newBranch }}" + git add . + git commit -m "Bump ${{ github.event.inputs.versionType }} version" + git push --set-upstream origin "${{ env.newBranch }}" + gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }} + \ No newline at end of file