diff --git a/.github/workflows/bump_version.yml b/.github/workflows/bump_version.yml index f73020cf9..05c9afce0 100644 --- a/.github/workflows/bump_version.yml +++ b/.github/workflows/bump_version.yml @@ -1,16 +1,13 @@ -name: Bump version on PR merge +name: Bump version on PR on: - pull_request: - branches: - - main - types: closed + pull_request_target: + types: [opened, synchronize, reopened] permissions: contents: write jobs: update_version: - if: github.event.pull_request.merged == true runs-on: macos-latest steps: - name: checkout @@ -18,14 +15,41 @@ jobs: with: # Fetch full depth, otherwise the last step overwrites the last commit's parent, essentially removing the graph. fetch-depth: 0 - + token: ${{ secrets.BOT_PAT }} + ref: ${{ github.head_ref }} + - name: Run bump_version_gh_action.sh + id: bump-version run: | - bash ./bump_version_gh_action.sh - - name: Amend the last commit + set +e + ./bump_version_gh_action.sh + echo "bump_version_ret=$?" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + + - name: Import bot's GPG key for signing commits + id: import-gpg + uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.BOT_GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.BOT_GPG_PASSPHRASE }} + #git_config_global: true + git_user_signingkey: true + git_commit_gpgsign: true + + - name: Sign commit and push changes run: | - git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com" - git config --global user.name "${GITHUB_ACTOR}" - git commit -a --amend --no-edit - git push --force-with-lease - echo "Complete" + if [[ "${{ steps.bump-version.outputs.bump_version_ret }}" == "0" ]]; then + git config --global user.email ${{ steps.import-gpg.outputs.name }} + git config --global user.name ${{ steps.import-gpg.outputs.email }} + + git commit -S -m "Bump version" build.gradle.kts + git push + fi + env: + # GITHUB_TOKEN: ${{ secrets.BOT_PAT }} + GIT_AUTHOR_NAME: ${{ steps.import-gpg.outputs.name }} + GIT_AUTHOR_EMAIL: ${{ steps.import-gpg.outputs.email }} + GIT_COMMITTER_NAME: ${{ steps.import-gpg.outputs.name }} + GIT_COMMITTER_EMAIL: ${{ steps.import-gpg.outputs.email }} + diff --git a/bump_version_gh_action.sh b/bump_version_gh_action.sh index 069819e32..d8b8e8439 100755 --- a/bump_version_gh_action.sh +++ b/bump_version_gh_action.sh @@ -1,14 +1,68 @@ #!/bin/sh +vercomp () { + if [[ $1 == $2 ]] + then + return 0 + fi + local IFS=. + local i ver1=($1) ver2=($2) + # fill empty fields in ver1 with zeros + for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)) + do + ver1[i]=0 + done + for ((i=0; i<${#ver1[@]}; i++)) + do + if [[ -z ${ver2[i]} ]] + then + # fill empty fields in ver2 with zeros + ver2[i]=0 + fi + if ((10#${ver1[i]} > 10#${ver2[i]})) + then + return 1 + fi + if ((10#${ver1[i]} < 10#${ver2[i]})) + then + return 2 + fi + done + return 0 +} + +# Defining a temporary directory for cloning +TMP_DIR=$(mktemp -d) + +curl https://raw.githubusercontent.com/dydxprotocol/v4-abacus/main/build.gradle.kts > $TMP_DIR/build.gradle.kts + # search for the first line that starts with "version" in build.gradle.kts # get the value in the quotes VERSION=$(grep "^version = " build.gradle.kts | sed -n 's/version = "\(.*\)"/\1/p') +REPO_VERSION=$(grep "^version = " $TMP_DIR/build.gradle.kts | sed -n 's/version = "\(.*\)"/\1/p') + +# call the version comparison function + +vercomp $REPO_VERSION $VERSION + case $? in + 0) SHOULD_BUMP=true ;; + 1) SHOULD_BUMP=true ;; + 2) SHOULD_BUMP=false ;; + esac + +if [ $SHOULD_BUMP == false ]; then + echo "Repo version < PR version... No need to bump." + exit -1 +fi + # increment the version number -NEW_VERSION=$(echo $VERSION | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g') +NEW_VERSION=$(echo $REPO_VERSION | awk -F. '{$NF = $NF + 1;} 1' | sed 's/ /./g') #if NEW_VERSION is not empty, replace the version in build.gradle.kts if [ -n "$NEW_VERSION" ]; then sed -i '' "s/version = \"$VERSION\"/version = \"$NEW_VERSION\"/" build.gradle.kts echo "Version bumped to $NEW_VERSION" fi + +exit 0