on: push: tags: - '[0-9]+.*' name: Release jobs: build: name: Build runs-on: ubuntu-latest steps: - id: checkout name: Checkout code uses: actions/checkout@v3 - id: java name: Install Java and Maven uses: actions/setup-java@v3 with: distribution: zulu java-version: 11 - id: vars name: Get project variables run: | echo -n "keycloakVersion=" >> $GITHUB_OUTPUT mvn -q help:evaluate -Dexpression=keycloak.version -DforceStdout 2> /dev/null | grep -E '^[0-9a-zA-Z.-]+$' >> $GITHUB_OUTPUT echo -n "artifactId=" >> $GITHUB_OUTPUT mvn -q help:evaluate -Dexpression=project.artifactId -DforceStdout 2> /dev/null | grep -E '^[0-9a-zA-Z.-]+$' >> $GITHUB_OUTPUT echo -n "projectName=" >> $GITHUB_OUTPUT mvn -q help:evaluate -Dexpression=project.name -DforceStdout 2> /dev/null | grep -E '^[0-9a-zA-Z :,.-]+$' >> $GITHUB_OUTPUT echo -n "projectVersion=" >> $GITHUB_OUTPUT mvn -q help:evaluate -Dexpression=project.version -DforceStdout 2> /dev/null | grep -E '^[0-9a-zA-Z.-]+$' >> $GITHUB_OUTPUT - name: Build project run: | mvn -B test package - name: Upload artifact uses: actions/upload-artifact@v3 with: name: jar path: target/${{ steps.vars.outputs.artifactId }}-${{ steps.vars.outputs.projectVersion }}.jar if-no-files-found: error 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 steps: - id: checkout name: Checkout code uses: actions/checkout@v2 - id: download_artifact name: Download artifact uses: actions/download-artifact@v3 with: name: jar - id: create_container name: Create Keycloak container run: | docker run -i -t -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 --name keycloak "quay.io/keycloak/keycloak:${{ needs.build.outputs.keycloak_version }}" start-dev - id: deploy name: Deploy artifact run: | CONTAINER="keycloak" NAME="${{ needs.build.outputs.artifact_id }}-${{ needs.build.outputs.project_version }}.jar" FILE="/opt/keycloak/providers/${NAME}" docker cp "${NAME}" "${CONTAINER}:${FILE}" docker restart "${CONTAINER}" for i in {1..60}; do if curl --silent --max-time 1 -o /dev/null http://localhost:8080; then echo && echo "Deployment succeeded!" && exit 0 else sleep 1 echo -n "." fi done echo && echo "Deployment timeout!" && exit 1 - id: configure_keycloak name: Configure Keycloak run: | CONTAINER="keycloak" docker exec -i "${CONTAINER}" /bin/bash <