From fd0b0f59812335633513d05f08264dddcdc909b7 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Wed, 06 May 2020 00:00:30 +0000 Subject: [PATCH] Replace Travis CI build with GitHub actions --- /dev/null | 50 -------- .github/workflows/test.yml | 109 ++++++++++++++++++ .github/workflows/release.yml | 144 ++++++++++++++++++++++++ 3 files changed, 253 insertions(+), 50 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c6bc7a3 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,144 @@ +on: + push: + tags: + - '[0-9]+.*' + +name: Release + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - id: checkout + name: Checkout code + uses: actions/checkout@v2 + + - name: Install Java and Maven + uses: actions/setup-java@v1 + with: + java-version: 8 + + - id: vars + name: Get project variables + run: | + echo -n "::set-output name=keycloakVersion::" + mvn -q help:evaluate -Dexpression=keycloak.version -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=artifactId::" + mvn -q help:evaluate -Dexpression=project.artifactId -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=projectName::" + mvn -q help:evaluate -Dexpression=project.name -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=projectVersion::" + mvn -q help:evaluate -Dexpression=project.version -DforceStdout 2> /dev/null + echo + + - name: Build project + run: | + mvn -B test package + + - name: Upload artifact + uses: actions/upload-artifact@v1 + with: + name: jar + path: target/${{ steps.vars.outputs.artifactId }}-${{ steps.vars.outputs.projectVersion }}.jar + + outputs: + artifact_id: ${{ steps.vars.outputs.artifactId }} + keycloak_version: ${{ steps.vars.outputs.keycloakVersion }} + project_name: ${{ steps.vars.outputs.projectName }} + project_version: ${{ steps.vars.outputs.projectVersion }} + + test: + name: Test + runs-on: ubuntu-latest + needs: build + services: + keycloak: + image: quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }} + env: + KEYCLOAK_USER: admin + KEYCLOAK_PASSWORD: admin + ports: + - 8080:8080 + volumes: + - '${{ github.workspace }}:/workspace' + steps: + - id: checkout + name: Checkout code + uses: actions/checkout@v2 + + - id: download_artifact + name: Download artifact + uses: actions/download-artifact@v1 + with: + name: jar + + - id: deploy + name: Deploy artifact + run: | + CONTAINER="${{ job.services.keycloak.id }}" + NAME="${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar" + FILE="/opt/jboss/keycloak/standalone/deployments/${NAME}" + docker cp "jar/${NAME}" "${CONTAINER}:/tmp/" + docker exec -i "${CONTAINER}" /bin/bash <<EOF + cp "/tmp/${NAME}" "${FILE}" + for i in {1..60}; do + echo -n . + [ -f "${FILE}.deployed" ] && echo && echo "Deployment succeeded!" && exit 0 + [ -f "${FILE}.failed" ] && echo && echo "Deployment failed!" && exit 1 + sleep 1 + done + echo && echo "Deployment timeout!" && exit 1 + EOF + + - id: configure_keycloak + name: Configure Keycloak + run: | + CONTAINER="${{ job.services.keycloak.id }}" + docker exec -i "${CONTAINER}" /bin/bash <<EOF + /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin + /opt/jboss/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ + -s 'redirectUris=["http://localhost/*"]' -s baseUrl=http://localhost -s adminUrl=http://localhost + /opt/jboss/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas + EOF + + - id: run_tests + name: Run tests + run: | + integrationTest/suite.sh + + release: + name: Release + runs-on: ubuntu-latest + needs: [build, test] + steps: + - id: download_artifact + name: Download artifact + uses: actions/download-artifact@v1 + with: + name: jar + + - id: create_release + name: Create release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ needs.build.outputs.project_name }} ${{ needs.build.outputs.project_version }} + draft: false + prerelease: false + + - id: upload_release + name: Upload release artifact + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: jar/${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar + asset_name: ${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar + asset_content_type: application/java-archive diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..eddd6e7 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,109 @@ +on: + pull_request: + +name: Test + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - id: checkout + name: Checkout code + uses: actions/checkout@v2 + + - name: Install Java and Maven + uses: actions/setup-java@v1 + with: + java-version: 8 + + - id: vars + name: Get project variables + run: | + echo -n "::set-output name=keycloakVersion::" + mvn -q help:evaluate -Dexpression=keycloak.version -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=artifactId::" + mvn -q help:evaluate -Dexpression=project.artifactId -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=projectName::" + mvn -q help:evaluate -Dexpression=project.name -DforceStdout 2> /dev/null + echo + echo -n "::set-output name=projectVersion::" + mvn -q help:evaluate -Dexpression=project.version -DforceStdout 2> /dev/null + echo + + - name: Build project + run: | + mvn -B test package + + - name: Upload artifact + uses: actions/upload-artifact@v1 + with: + name: jar + path: target/${{ steps.vars.outputs.artifactId }}-${{ steps.vars.outputs.projectVersion }}.jar + + outputs: + artifact_id: ${{ steps.vars.outputs.artifactId }} + keycloak_version: ${{ steps.vars.outputs.keycloakVersion }} + project_name: ${{ steps.vars.outputs.projectName }} + project_version: ${{ steps.vars.outputs.projectVersion }} + + test: + name: Test + runs-on: ubuntu-latest + needs: build + services: + keycloak: + image: quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }} + env: + KEYCLOAK_USER: admin + KEYCLOAK_PASSWORD: admin + ports: + - 8080:8080 + volumes: + - '${{ github.workspace }}:/workspace' + steps: + - id: checkout + name: Checkout code + uses: actions/checkout@v2 + + - id: download_artifact + name: Download artifact + uses: actions/download-artifact@v1 + with: + name: jar + + - id: deploy + name: Deploy artifact + run: | + CONTAINER="${{ job.services.keycloak.id }}" + NAME="${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar" + FILE="/opt/jboss/keycloak/standalone/deployments/${NAME}" + docker cp "jar/${NAME}" "${CONTAINER}:/tmp/" + docker exec -i "${CONTAINER}" /bin/bash <<EOF + cp "/tmp/${NAME}" "${FILE}" + for i in {1..60}; do + echo -n . + [ -f "${FILE}.deployed" ] && echo && echo "Deployment succeeded!" && exit 0 + [ -f "${FILE}.failed" ] && echo && echo "Deployment failed!" && exit 1 + sleep 1 + done + echo && echo "Deployment timeout!" && exit 1 + EOF + + - id: configure_keycloak + name: Configure Keycloak + run: | + CONTAINER="${{ job.services.keycloak.id }}" + docker exec -i "${CONTAINER}" /bin/bash <<EOF + /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin + /opt/jboss/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true \ + -s 'redirectUris=["http://localhost/*"]' -s baseUrl=http://localhost -s adminUrl=http://localhost + /opt/jboss/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas + EOF + + - id: run_tests + name: Run tests + run: | + integrationTest/suite.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8d758cd..0000000 --- a/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -language: java - -cache: - directories: - - "$HOME/.m2" - -jdk: -- openjdk11 - -sudo: required - -services: - - docker - -env: - - KEYCLOAK_VERSION=7.0.0 - -before_install: - - if [ "$TRAVIS_EVENT_TYPE" != "cron" ]; then docker pull quay.io/keycloak/keycloak:$KEYCLOAK_VERSION; fi - -script: - - if [ "$TRAVIS_EVENT_TYPE" != "cron" ]; then - mvn test package -B && - mkdir target/docker && - cp target/*.jar target/docker/keycloak-protocol-cas.jar && - echo "FROM quay.io/keycloak/keycloak:$KEYCLOAK_VERSION" > target/docker/Dockerfile && - echo "ADD keycloak-protocol-cas.jar /opt/jboss/keycloak/standalone/deployments/" >> target/docker/Dockerfile && - cd target/docker && docker build -t doccrazy/keycloak-cas . && cd ../.. && - docker run -d -p 127.0.0.1:8080:8080 --name keycloak -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin doccrazy/keycloak-cas && sleep 60 && - docker logs keycloak && - docker exec -t keycloak /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin && - docker exec -t keycloak /opt/jboss/keycloak/bin/kcadm.sh create clients -r master -s clientId=test -s protocol=cas -s enabled=true -s publicClient=true -s 'redirectUris=["http://localhost/*"]' -s baseUrl=http://localhost -s adminUrl=http://localhost && - docker exec -t keycloak /opt/jboss/keycloak/bin/kcadm.sh get serverinfo -r master --fields "providers(login-protocol(providers(cas)))" | grep cas && - integrationTest/suite.sh - ; fi - - if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then ./update.sh; fi - -before_deploy: - - "mvn -DskipTests package" - - export RELEASE_JAR=$(ls target/keycloak-protocol-cas-*.jar) - -deploy: - provider: releases - api_key: - secure: BPcU12jQ4qs1xAq+Y+6bax+g1AdLatg5E645ISr/NLaKDuWNZxzpMLPf/w9+ngvV5ap5qTz8neoeEbVCLncaIT8wBqlaZnaSnFvVS1huUnwqbh8DzzC6Fmh8DoREpoGo/LV+He1N76bd/lpu0f8VoEqZDtgNYyPAn3xNif+tng8Xa1yh55PqaxB5XlXrArouKCv4jPf+AqzQUMr40Xgn/aQxra6H8PZiEJnxXtweC+UyMNGs5VZkm6nOUW/cpSBppEl6BxyLzJrM2b2pAXQSb85f2EBAIwN38PipwSdckC/3AIhI5Skrx9fEeiuW/YzsZKl7XTohn45fzirc6EzsGBvLucsIda+qMp6Zf4sd8uM0XgiQ1NJyOxWFVFyg3JP00OmJW4BgumfZTL4lzcDUVhn5DubgqZZM3sqvoz75MUSBYewTo3hLBlqxjVA8qe8S738mlNVcpDjwAuAM7/2UP+hcypnjKttQBFt965+yfxjSs3B+KLRQLp7UTmQ+fTcEr72AenQFoXuVpO0k6ghKYomNLLFOzlLk2JCWtsVirjWzJQTZKP5m23jf4qbfyDM3HDenL+N8l3ZOups9gtGpioxkUGKz2IPHrz7XTwh10OpZi32jOPS2BfFOXUQMNVlZAfbIAwXnbo2DWC0AB2Fz//bJbjF9TnOGTUIODos6joo= - file: "${RELEASE_JAR}" - skip_cleanup: true - on: - tags: true - repo: Doccrazy/keycloak-protocol-cas -- Gitblit v1.9.1