Merge pull request #3 from wistefan/main #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Keycloak JavaScript CI | |
on: | |
push: | |
branches-ignore: | |
- main | |
- dependabot/** | |
pull_request: | |
workflow_dispatch: | |
concurrency: | |
# Only cancel jobs for PR updates | |
group: js-ci-${{ github.ref }} | |
cancel-in-progress: true | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
conditional: | |
name: Check conditional workflows and jobs | |
runs-on: ubuntu-latest | |
outputs: | |
js-ci: ${{ steps.conditional.outputs.js }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: conditional | |
uses: ./.github/actions/conditional | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
build-keycloak: | |
name: Build Keycloak | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 17 | |
check-latest: true | |
cache: maven | |
- name: Build Keycloak | |
run: | | |
./mvnw clean install --batch-mode --errors -DskipTests -DskipTestsuite -DskipExamples -DskipAccount2 -DskipCommon -Pdistribution | |
mv ./quarkus/dist/target/keycloak-999.0.0-SNAPSHOT.tar.gz ./keycloak-999.0.0-SNAPSHOT.tar.gz | |
- name: Upload Keycloak dist | |
uses: actions/upload-artifact@v3 | |
with: | |
name: keycloak | |
path: keycloak-999.0.0-SNAPSHOT.tar.gz | |
admin-client: | |
name: Admin Client | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: "@keycloak/keycloak-admin-client" | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run lint | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
keycloak-js: | |
name: Keycloak JS | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: keycloak-js | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
keycloak-masthead: | |
name: Keycloak Masthead | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: keycloak-masthead | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run lint | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
ui-shared: | |
name: UI Shared | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: ui-shared | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run lint | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
account-ui: | |
name: Account UI | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: account-ui | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run lint | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
admin-ui: | |
name: Admin UI | |
needs: conditional | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: admin-ui | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run lint | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run test | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run build | |
working-directory: js | |
- run: pnpm --filter ${{ env.WORKSPACE }} run cy:check-types | |
working-directory: js | |
account-ui-e2e: | |
name: Account UI E2E | |
needs: | |
- conditional | |
- build-keycloak | |
if: needs.conditional.outputs.js-ci == 'true' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: account-ui | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- name: Download Keycloak server | |
uses: actions/download-artifact@v3 | |
with: | |
name: keycloak | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 17 | |
- name: Start Keycloak server | |
run: | | |
tar xfvz keycloak-999.0.0-SNAPSHOT.tar.gz | |
keycloak-999.0.0-SNAPSHOT/bin/kc.sh start-dev --features=declarative-user-profile &> ~/server.log & | |
env: | |
KEYCLOAK_ADMIN: admin | |
KEYCLOAK_ADMIN_PASSWORD: admin | |
- name: Install Playwright browsers | |
run: pnpm --filter ${{ env.WORKSPACE }} exec playwright install --with-deps | |
working-directory: js | |
- name: Run Playwright tests | |
run: pnpm --filter ${{ env.WORKSPACE }} run test | |
working-directory: js | |
env: | |
KEYCLOAK_SERVER: http://localhost:8080 | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: account-ui-playwright-report | |
path: js/apps/${{ env.WORKSPACE }}/playwright-report | |
retention-days: 30 | |
- name: Upload server logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: account-ui-server-log | |
path: ~/server.log | |
admin-ui-e2e: | |
name: Admin UI E2E | |
needs: | |
- conditional | |
- build-keycloak | |
if: needs.conditional.outputs.js-ci == 'true' && github.repository == 'keycloak/keycloak' | |
runs-on: ubuntu-latest | |
env: | |
WORKSPACE: admin-ui | |
strategy: | |
matrix: | |
container: [1, 2, 3, 4, 5] | |
browser: [chrome, firefox] | |
exclude: | |
# Only test with Firefox on scheduled runs | |
- browser: ${{ github.event_name != 'workflow_dispatch' && 'firefox' || '' }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Google Chrome | |
if: matrix.browser == 'chrome' | |
uses: browser-actions/setup-chrome@v1 | |
with: | |
chrome-version: stable | |
- name: Install Firefox | |
if: matrix.browser == 'firefox' | |
uses: browser-actions/setup-firefox@v1 | |
with: | |
firefox-version: latest | |
- uses: ./.github/actions/pnpm-setup | |
with: | |
working-directory: js | |
- name: Compile Admin Client | |
run: pnpm --filter @keycloak/keycloak-admin-client run build | |
working-directory: js | |
- name: Download Keycloak server | |
uses: actions/download-artifact@v3 | |
with: | |
name: keycloak | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 17 | |
- name: Start Keycloak server | |
run: | | |
tar xfvz keycloak-999.0.0-SNAPSHOT.tar.gz | |
keycloak-999.0.0-SNAPSHOT/bin/kc.sh start-dev --features=admin-fine-grained-authz,declarative-user-profile &> ~/server.log & | |
env: | |
KEYCLOAK_ADMIN: admin | |
KEYCLOAK_ADMIN_PASSWORD: admin | |
- name: Start LDAP server | |
run: pnpm --filter ${{ env.WORKSPACE }} run cy:ldap-server & | |
working-directory: js | |
- name: Run Cypress | |
uses: cypress-io/github-action@v6 | |
with: | |
install: false | |
record: true | |
parallel: true | |
group: ${{ matrix.browser }} | |
browser: ${{ matrix.browser }} | |
wait-on: http://localhost:8080 | |
working-directory: js/apps/admin-ui | |
env: | |
CYPRESS_BASE_URL: http://localhost:8080/admin/ | |
CYPRESS_KEYCLOAK_SERVER: http://localhost:8080 | |
CYPRESS_RECORD_KEY: b8f1d15e-eab8-4ee7-8e44-c6d7cd8fc0eb | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload server logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: admin-ui-server-log-${{ matrix.container }}-${{ matrix.browser }} | |
path: ~/server.log | |
check: | |
name: Status Check - Keycloak JavaScript CI | |
if: always() | |
needs: | |
- conditional | |
- admin-client | |
- keycloak-js | |
- keycloak-masthead | |
- ui-shared | |
- account-ui | |
- account-ui-e2e | |
- admin-ui | |
- admin-ui-e2e | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/status-check | |
with: | |
jobs: ${{ toJSON(needs) }} |