From 333eb096f4b263a50eb4932912e4b3acdabd67fa Mon Sep 17 00:00:00 2001 From: Linlin Sun Date: Mon, 3 Oct 2022 11:33:21 -0700 Subject: [PATCH 1/3] Adds workflows to create ion-java prerelease on GitHub. --- ...ub-prerelease-after-fast-forward-check.yml | 48 +++++++++ .../version-bump-and-fast-forward-check.yml | 101 ++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 .github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml create mode 100644 .github/workflows/version-bump-and-fast-forward-check.yml diff --git a/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml new file mode 100644 index 0000000000..9274c6ed7c --- /dev/null +++ b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml @@ -0,0 +1,48 @@ +name: Create GitHub prerelease after fast-forward check +on: workflow_dispatch + +jobs: + prerelease: + name: prerelease + runs-on: ubuntu-latest + + steps: + - name: Access to the incoming release + uses: actions/checkout@v3 + with: + repository: amzn/ion-java + path: current_release + + - name: Build ion-java + run: | + cd current_release + git submodule init + git submodule update + mvn clean install + + - name: Get the parameters of executable jar + run: | + cd current_release/target + echo "path=$(readlink -f $(ls *.jar))" >> $GITHUB_ENV + echo "file_name=$(ls *.jar)" >> $GITHUB_ENV + echo "version_number=$(echo $(ls *.jar) | cut -d'-' -f3)" >> $GITHUB_ENV + + - name: Create new release + id: create_new_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ env.version_number }} + release_name: v${{ env.version_number }} + prerelease: true + + - name: Upload release asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_new_release.outputs.upload_url }} + asset_path: ${{ env.path }} + asset_name: ${{ env.file_name }} + asset_content_type: application/zip \ No newline at end of file diff --git a/.github/workflows/version-bump-and-fast-forward-check.yml b/.github/workflows/version-bump-and-fast-forward-check.yml new file mode 100644 index 0000000000..07e9ec9833 --- /dev/null +++ b/.github/workflows/version-bump-and-fast-forward-check.yml @@ -0,0 +1,101 @@ +name: Version-bump-and-fast-forward-check +on: [pull_request] + +jobs: + check-version-bump: + name: check-version-bump + runs-on: ubuntu-latest + steps: + - name: Switch to the branch of the pull request + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + path: ion-java-new + + - name: Checkout the current repository master branch + uses: actions/checkout@v3 + with: + repository: amzn/ion-java + ref: master + path: ion-java-current + + - name: Check whether the pull request contains version number bump + run: | + cd /home/runner/work/ion-java/ion-java/ion-java-new + versionNew=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + commitID=$(git rev-parse HEAD) + cd /home/runner/work/ion-java/ion-java/ion-java-current + versionCurrent=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + if [[ $versionNew != $versionCurrent ]]; then echo "version bump check pass"; else exit 1; fi + + comment-when-version-number-check-failed: + needs: check-version-bump + if: ${{ failure() }} + runs-on: ubuntu-latest + name: comment-when-version-number-check-failed + steps: + - name: Create comment + uses: peter-evans/create-or-update-comment@v2 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + This PR doesn't contain version number bump and will not trigger the ion-java GitHub prerelease process. + + fast-forward-check: + needs: check-version-bump + name: fast-forward-check + if: ${{ success() }} + runs-on: ubuntu-latest + steps: + - name: Access to the last release + uses: oprypin/find-latest-tag@v1 + id: check_last_release + with: + repository: amzn/ion-java + releases-only: true + + - name: Checkout the last release + uses: actions/checkout@v3 + with: + repository: amzn/ion-java + ref: ${{ steps.check_last_release.outputs.tag }} + path: last-release + + - name: Get the commit id of the last release + run: | + cd last-release + echo "last_release_commit_id=$(git rev-parse HEAD)" >> $GITHUB_ENV + + - name: Access to the incoming release + uses: actions/checkout@v3 + with: + repository: amzn/ion-java + ref: ${{ github.event.pull_request.head.sha }} + path: ion-java-new + + - name: Get the commit id of the incoming release + run: | + cd ion-java-new + echo "current_release_commit_id=$(git rev-parse HEAD)" >> $GITHUB_ENV + echo $(git rev-parse HEAD) + + - name: Check whether the incoming release is fast-forward compared to the last release + run: | + cd ion-java-new + if git merge-base --is-ancestor ${{env.current_release_commit_id}} ${{env.current_release_commit_id}}; then echo "Trigger github release"; else exit 1; fi + + - name: comment + if: steps.build.outputs.exit_code == 0 + uses: peter-evans/create-or-update-comment@v2 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + This PR passes version bump check and fast-forward check, please double check the version number and merge this PR. After merging this PR, please trigger "Create gitHub prerelease after fast-forward check" workflow manually to create prerelease. + + - name: comment + if: steps.build.outputs.exit_code == 1 + uses: peter-evans/create-or-update-comment@v2 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + This PR is not fast-forward compared to the last release, please check. From 08dcb061e28288ece1a3895166a5fcc2bf376000 Mon Sep 17 00:00:00 2001 From: Linlin Sun Date: Mon, 10 Oct 2022 01:47:15 -0700 Subject: [PATCH 2/3] Updates based on the comments. Using 'mvn clean install -DskipTests' to skip the tests when building ion-java. Update the output of version-number-check. Update the trigger event of prerelease creating workflow and add one step to check the version number. --- ...ub-prerelease-after-fast-forward-check.yml | 36 ++++++++++++++++--- .../version-bump-and-fast-forward-check.yml | 24 ++++--------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml index 9274c6ed7c..8439447043 100644 --- a/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml +++ b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml @@ -1,11 +1,39 @@ name: Create GitHub prerelease after fast-forward check -on: workflow_dispatch +on: + pull_request: + types: + - closed jobs: + check-version-change: + if: github.event.pull_request.merged == true + name: check-version-change + runs-on: ubuntu-latest + outputs: + output1: ${{ steps.check-version-change.outputs.result }} + steps: + - name: Checkout the current repository master branch + uses: actions/checkout@v3 + with: + repository: amzn/ion-java + ref: master + fetch-depth: 2 + path: ion-java-current + + - name: Check whether the pull request contains version number bump + id: check-version-change + run: | + cd ion-java-current + versionNew=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + git reset --hard HEAD^ + versionPrevious=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + if [[ $versionNew != $versionPrevious ]]; then echo "::set-output name=result::pass"; else echo "::set-output name=result::failed"; fi + prerelease: name: prerelease + needs: check-version-change + if: ${{ needs.check-version-change.outputs.output1 == 'pass' }} runs-on: ubuntu-latest - steps: - name: Access to the incoming release uses: actions/checkout@v3 @@ -16,9 +44,7 @@ jobs: - name: Build ion-java run: | cd current_release - git submodule init - git submodule update - mvn clean install + mvn clean install -DskipTests - name: Get the parameters of executable jar run: | diff --git a/.github/workflows/version-bump-and-fast-forward-check.yml b/.github/workflows/version-bump-and-fast-forward-check.yml index 07e9ec9833..2cab1377d4 100644 --- a/.github/workflows/version-bump-and-fast-forward-check.yml +++ b/.github/workflows/version-bump-and-fast-forward-check.yml @@ -5,6 +5,8 @@ jobs: check-version-bump: name: check-version-bump runs-on: ubuntu-latest + outputs: + output1: ${{ steps.check-version-change.outputs.result }} steps: - name: Switch to the branch of the pull request uses: actions/checkout@v3 @@ -20,31 +22,19 @@ jobs: path: ion-java-current - name: Check whether the pull request contains version number bump + id: check-version-change run: | cd /home/runner/work/ion-java/ion-java/ion-java-new versionNew=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) commitID=$(git rev-parse HEAD) cd /home/runner/work/ion-java/ion-java/ion-java-current versionCurrent=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - if [[ $versionNew != $versionCurrent ]]; then echo "version bump check pass"; else exit 1; fi - - comment-when-version-number-check-failed: - needs: check-version-bump - if: ${{ failure() }} - runs-on: ubuntu-latest - name: comment-when-version-number-check-failed - steps: - - name: Create comment - uses: peter-evans/create-or-update-comment@v2 - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - This PR doesn't contain version number bump and will not trigger the ion-java GitHub prerelease process. + if [[ $versionNew != $versionCurrent ]]; then echo "::set-output name=result::pass"; else echo "::set-output name=result::failed"; fi fast-forward-check: needs: check-version-bump name: fast-forward-check - if: ${{ success() }} + if: ${{ needs.check-version-bump.outputs.output1 == 'pass' }} runs-on: ubuntu-latest steps: - name: Access to the last release @@ -82,7 +72,7 @@ jobs: - name: Check whether the incoming release is fast-forward compared to the last release run: | cd ion-java-new - if git merge-base --is-ancestor ${{env.current_release_commit_id}} ${{env.current_release_commit_id}}; then echo "Trigger github release"; else exit 1; fi + if git merge-base --is-ancestor ${{env.last_release_commit_id}} ${{env.current_release_commit_id}}; then echo "Trigger github release"; else exit 1; fi - name: comment if: steps.build.outputs.exit_code == 0 @@ -90,7 +80,7 @@ jobs: with: issue-number: ${{ github.event.pull_request.number }} body: | - This PR passes version bump check and fast-forward check, please double check the version number and merge this PR. After merging this PR, please trigger "Create gitHub prerelease after fast-forward check" workflow manually to create prerelease. + This PR passes version bump check and fast-forward check, please double check the version number and merge this PR. After merging this PR, "Create gitHub prerelease after fast-forward check" workflow will be automatically triggered to create prerelease. - name: comment if: steps.build.outputs.exit_code == 1 From 09a5df8963681e8f696c27768c8fc1892a7a4929 Mon Sep 17 00:00:00 2001 From: Linlin Sun Date: Mon, 17 Oct 2022 23:38:13 -0700 Subject: [PATCH 3/3] Fixes the minor errors Updates the method of getting ion-java version number. Updates the condition expression when creating comment after fast-forward check. --- .../create-gitHub-prerelease-after-fast-forward-check.yml | 2 +- .github/workflows/version-bump-and-fast-forward-check.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml index 8439447043..d28a958a74 100644 --- a/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml +++ b/.github/workflows/create-gitHub-prerelease-after-fast-forward-check.yml @@ -51,7 +51,7 @@ jobs: cd current_release/target echo "path=$(readlink -f $(ls *.jar))" >> $GITHUB_ENV echo "file_name=$(ls *.jar)" >> $GITHUB_ENV - echo "version_number=$(echo $(ls *.jar) | cut -d'-' -f3)" >> $GITHUB_ENV + cd .. && echo "version_number=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV - name: Create new release id: create_new_release diff --git a/.github/workflows/version-bump-and-fast-forward-check.yml b/.github/workflows/version-bump-and-fast-forward-check.yml index 2cab1377d4..d355144565 100644 --- a/.github/workflows/version-bump-and-fast-forward-check.yml +++ b/.github/workflows/version-bump-and-fast-forward-check.yml @@ -75,7 +75,7 @@ jobs: if git merge-base --is-ancestor ${{env.last_release_commit_id}} ${{env.current_release_commit_id}}; then echo "Trigger github release"; else exit 1; fi - name: comment - if: steps.build.outputs.exit_code == 0 + if: ${{ success() }} uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.pull_request.number }} @@ -83,7 +83,7 @@ jobs: This PR passes version bump check and fast-forward check, please double check the version number and merge this PR. After merging this PR, "Create gitHub prerelease after fast-forward check" workflow will be automatically triggered to create prerelease. - name: comment - if: steps.build.outputs.exit_code == 1 + if: ${{ failure() }} uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.pull_request.number }}