From 4784024c00c371492d63a9b63f5087c2c7c2276d Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Sun, 10 May 2020 22:40:36 +0000 Subject: [PATCH] Use GitHub Actions to automatically create PR on Keycloak release --- /dev/null | 51 ----------------- .github/workflows/update-deps.yml | 101 +++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 51 deletions(-) diff --git a/.github/workflows/update-deps.yml b/.github/workflows/update-deps.yml new file mode 100644 index 0000000..704a7ae --- /dev/null +++ b/.github/workflows/update-deps.yml @@ -0,0 +1,101 @@ +on: + schedule: + - cron: '41 8 * * *' + +name: Update dependencies + +jobs: + update: + name: Update dependencies + runs-on: ubuntu-latest + steps: + - id: checkout + name: Checkout code + uses: actions/checkout@v2 + + - id: java + name: Install Java and Maven + uses: actions/setup-java@v1 + with: + java-version: 8 + + - id: update_keycloak + name: Update Keycloak + run: | + mvn -B versions:update-property -Dproperty=keycloak.version + + - id: vars + name: Get project variables + run: | + echo -n "::set-output name=versionUpdated::" + [ -f pom.xml.versionsBackup ] && echo 1 || echo 0 + echo -n "::set-output name=keycloakVersion::" + mvn -q help:evaluate -Dexpression=keycloak.version -DforceStdout 2> /dev/null | grep -E '^[0-9a-zA-Z.-]+$' + + - id: check_branch + name: Check if branch exists + run: | + echo -n "::set-output name=commit::" + if [ '${{ steps.vars.outputs.versionUpdated }}' == '1' ]; then + git ls-remote origin 'feature/keycloak-update-${{ steps.vars.outputs.keycloakVersion }}' + else + git rev-parse HEAD + fi + + - id: reset_repo + name: Reset repository + if: steps.check_branch.outputs.commit == '' + run: | + git reset --hard + + - id: update_deps + name: Update dependencies + if: steps.check_branch.outputs.commit == '' + run: | + mvn versions:set -DnewVersion='${{ steps.vars.outputs.keycloakVersion }}' + mvn versions:compare-dependencies \ + -DremotePom='org.keycloak:keycloak-parent:${{ steps.vars.outputs.keycloakVersion }}' \ + -DupdateDependencies=true -DupdatePropertyVersions=true + mvn versions:use-latest-versions -DallowMajorUpdates=false + + - id: create_commit + name: Create commit + if: steps.check_branch.outputs.commit == '' + run: | + git add pom.xml + git config user.name 'github-actions' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git commit -m 'Update to Keycloak ${{ steps.vars.outputs.keycloakVersion }}' + + - id: create_branch + name: Create branch + if: steps.check_branch.outputs.commit == '' + run: | + git push origin 'HEAD:feature/keycloak-update-${{ steps.vars.outputs.keycloakVersion }}' + + - id: set_token + name: Set access token + if: steps.check_branch.outputs.commit == '' + run: | + echo -n "::set-env name=GH_TOKEN::" + if [ '${{ secrets.GH_TOKEN }}' != '' ]; then + echo '${{ secrets.GH_TOKEN }}' + else + echo '${{ secrets.GITHUB_TOKEN }}' + fi + + - id: create_pull_request_default_token + name: Create pull request + if: steps.check_branch.outputs.commit == '' + uses: actions/github-script@0.9.0 + with: + github-token: ${{ env.GH_TOKEN }} + script: | + github.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + head: 'feature/keycloak-update-${{ steps.vars.outputs.keycloakVersion }}', + base: 'master', + title: 'Update to Keycloak ${{ steps.vars.outputs.keycloakVersion }}', + body: 'Automatic dependency bump due to release of Keycloak ${{ steps.vars.outputs.keycloakVersion }}' + }) diff --git a/update.sh b/update.sh deleted file mode 100755 index 29da39d..0000000 --- a/update.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -set -e - -function docker_tag_exists() { - REGISTRY_URL="https://quay.io/v2/$1/manifests/$2" - curl -fsSLI "$REGISTRY_URL" > /dev/null -} - -setup_git() { - git config --global user.email "updater@travis-ci.org" - git config --global user.name "Updater Bot" - git remote add origin-auth https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git > /dev/null 2>&1 -} - -pull_request() { - curl -fsSL -H "Authorization: token ${GH_TOKEN}" -X POST -d "{\"head\":\"$1\",\"base\":\"master\",\"title\":\"$2\",\"body\":\"$3\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/pulls" -} - - -KEYCLOAK_VERSION=$(mvn versions:display-property-updates -DincludeProperties=keycloak.version | grep "keycloak.version" | sed -nr "s/.*->\s*([0-9]+\.[0-9]+\.[0-9])$/\1/p") -if [ -z "$KEYCLOAK_VERSION" ]; then - echo "No Keycloak update found." - exit -fi -echo "Keycloak version $KEYCLOAK_VERSION available; updating..." - -BRANCH=feature/keycloak-update-$KEYCLOAK_VERSION -if git ls-remote -q --exit-code origin $BRANCH; then - echo "Branch $BRANCH already exists." - exit -fi - -if ! docker_tag_exists keycloak/keycloak $KEYCLOAK_VERSION; then - echo "Docker image for Keycloak $KEYCLOAK_VERSION not found, not updating." - exit -fi -echo "Found updated docker image, proceeding" - -mvn versions:set -DnewVersion=$KEYCLOAK_VERSION -DgenerateBackupPoms=false -sed -i "s/KEYCLOAK_VERSION=.*/KEYCLOAK_VERSION=$KEYCLOAK_VERSION/" .travis.yml - -setup_git -git checkout -b $BRANCH -git add pom.xml .travis.yml -git commit -m "Update to Keycloak $KEYCLOAK_VERSION" -git push --quiet --set-upstream origin-auth $BRANCH - -PR_TITLE="Update to Keycloak $KEYCLOAK_VERSION" -PR_BODY="Updates Keycloak dependency, CI test image and project version for Keycloak release $KEYCLOAK_VERSION\\n\\n*(automated pull request after upstream release)*" -pull_request $BRANCH "$PR_TITLE" "$PR_BODY" -echo "Created pull request '$PR_TITLE'" -- Gitblit v1.9.1