Skip to content

Commit

Permalink
Move Admin UI into a monorepo structure (#3186)
Browse files Browse the repository at this point in the history
  • Loading branch information
jonkoops authored Aug 25, 2022
1 parent 8c9917d commit c6ab6a1
Show file tree
Hide file tree
Showing 1,046 changed files with 15,393 additions and 15,077 deletions.
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module.exports = {
root: true,
ignorePatterns: ["node_modules", "dist", "keycloak-theme", "server"],
parserOptions: {
tsconfigRootDir: __dirname,
project: "./tsconfig.eslint.json",
extraFileExtensions: [".mjs"],
},
Expand Down
10 changes: 1 addition & 9 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,11 @@ jobs:
check-latest: true
cache: npm

- name: Cache Node modules
id: cache-node-modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

- name: Run build task
run: npm run build
run: npm run build --workspace=admin-ui

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
33 changes: 2 additions & 31 deletions .github/workflows/cypress.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,7 @@ jobs:
check-latest: true
cache: npm

- name: Cache Node modules
id: cache-node-modules
uses: actions/cache@v3
with:
path: |
~/.cache/Cypress
node_modules
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

- name: Restore Keycloak server
Expand All @@ -99,7 +89,7 @@ jobs:

- name: Start Keycloak Server
working-directory: ${{ needs.setup.outputs.server-path }}/bin
run: ./kc.sh start-dev --features=admin2,admin-fine-grained-authz,declarative-user-profile &> ~/server.log &
run: ./kc.sh start-dev --features=admin2,admin-fine-grained-authz,declarative-user-profile &
env:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
Expand All @@ -112,28 +102,9 @@ jobs:
parallel: true
browser: chrome
wait-on: http://localhost:8080
working-directory: 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: Add Cypress videos artifacts
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-videos
path: assets/videos

- name: Add Cypress screenshots artifacts
uses: actions/upload-artifact@v3
if: failure()
with:
name: cypress-screenshots
path: assets/screenshots

- name: Upload server logs
uses: actions/upload-artifact@v3
with:
name: server-log
path: ~/server.log
10 changes: 1 addition & 9 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,7 @@ jobs:
check-latest: true
cache: npm

- name: Cache Node modules
id: cache-node-modules
uses: actions/cache@v3
with:
path: node_modules
key: ${{ runner.os }}-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

- name: Cache setup
Expand Down Expand Up @@ -56,4 +48,4 @@ jobs:
node-version: ${{ env.NODE_VERSION }}

- name: Run ${{ matrix.command }} task
run: npm run ${{ matrix.command }}
run: npm run ${{ matrix.command }} --workspace=admin-ui
2 changes: 0 additions & 2 deletions MAINTAINERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,5 @@

- [Stan Silvert](https://github.com/ssilvert) (project lead)
- [Erik Jan de Wit](https://github.com/edewit)
- [Mark Franceschelli](https://github.com/mfrances17)
- [Jenny Montrose](https://github.com/jenny-s51)
- [Agnieszka Gancarczyk](https://github.com/agagancarczyk)
- [Jon Koops](https://github.com/jonkoops)
98 changes: 2 additions & 96 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,100 +1,6 @@
# Keycloak Admin UI
# Keycloak UI

This project is the next generation of the Keycloak Administration UI. It is written with React and [PatternFly 4](https://www.patternfly.org/v4/).

## Development

### Prerequisites

Make sure that you have Node.js version 18 (or later) installed on your system. If you do not have Node.js installed we recommend using [Node Version Manager](https://github.com/nvm-sh/nvm) to install it.

You can find out which version of Node.js you are using by running the following command:

```bash
node --version
```

In order to run the Keycloak server you will also have to install the Java Development Kit (JDK). We recommend that you use the same version of the JDK as [required by the Keycloak server](https://github.com/keycloak/keycloak/blob/main/docs/building.md#building-from-source).

### Running the Keycloak server

First, ensure that all dependencies are installed locally using NPM by running:

```bash
npm install
```

After the dependencies are installed we can start the Keycloak server by running the following command:

```bash
npm run server:start
```

This will download the [Nightly version](https://github.com/keycloak/keycloak/releases/tag/nightly) of the Keycloak server and run it locally on port `8180`. If a previously downloaded version was found in the `server/` directory then that one will be used instead. If you want to download the latest Nightly version you can remove the server directory before running the command to start the server.

In order for the development version of the Admin UI to work you will have to import a custom client to the Keycloak server. This is only required during development as the development server for the Admin UI runs on a different port (more on that later).

Wait for the Keycloak server to be up and running and run the following command in a new terminal:

```bash
npm run server:import-client
```

You'll only have to run this command once, unless you remove the server directory or Keycloak server data.

### Running the development server

Now that the Keycloak sever is running it's time to run the development server for the Admin UI. This server is used to build the Admin UI in a manner that it can be iterated on quickly in a browser, using features such as [Hot Module Replacement (HMR)](https://vitejs.dev/guide/features.html#hot-module-replacement) and [Fast Refresh](https://www.npmjs.com/package/react-refresh).

To start the development server run the following command:

```bash
npm run dev
```

Once the process of optimization is done your browser will automatically open your local host on port `8080`. From here you will be redirected to the Keycloak server to authenticate, which you can do with the default username and password (`admin`).

You can now start making changes to the source code, and they will be reflected in your browser.

## Building as a Keycloak theme

If you want to build the application using Maven and produce a JAR that can be installed directly into Keycloak, check out the [Keycloak theme documentation](./keycloak-theme/README.md).

## Linting

Every time you create a commit it should be automatically linted and formatted for you. It is also possible to trigger the linting manually:

```bash
npm run lint
```
## Integration testing with Cypress

This repository contains integration tests developed with the [Cypress framework](https://www.cypress.io/).

### Prerequisites

Ensure the Keycloak and development server are running as [outlined previously](#running-the-keycloak-server) in this document.

### Running the tests

You can run the tests using the interactive graphical user interface using the following command:

```bash
npm run cy:open
```

Alternatively the tests can also run headless as follows:

```
npm run cy:run
```

For more information about the Cypress command-line interface consult [the documentation](https://docs.cypress.io/guides/guides/command-line).

### Project Structure

You can find information about the project structure in the [official Cypress documentation](https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests#Folder-structure).
Read more about [how to write tests](./cypress/WRITING_TESTS.md)
This repository contains the UIs and related libraries of the Keycloak project.

## Data processing

Expand Down
Empty file added apps/account-ui/.gitkeep
Empty file.
File renamed without changes.
98 changes: 98 additions & 0 deletions apps/admin-ui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# Keycloak Admin UI

This project is the next generation of the Keycloak Administration UI. It is written with React and [PatternFly 4](https://www.patternfly.org/v4/).

## Development

### Prerequisites

Make sure that you have Node.js version 18 (or later) installed on your system. If you do not have Node.js installed we recommend using [Node Version Manager](https://github.com/nvm-sh/nvm) to install it.

You can find out which version of Node.js you are using by running the following command:

```bash
node --version
```

In order to run the Keycloak server you will also have to install the Java Development Kit (JDK). We recommend that you use the same version of the JDK as [required by the Keycloak server](https://github.com/keycloak/keycloak/blob/main/docs/building.md#building-from-source).

### Running the Keycloak server

First, ensure that all dependencies are installed locally using NPM by running:

```bash
npm install
```

After the dependencies are installed we can start the Keycloak server by running the following command:

```bash
npm run server:start
```

This will download the [Nightly version](https://github.com/keycloak/keycloak/releases/tag/nightly) of the Keycloak server and run it locally on port `8180`. If a previously downloaded version was found in the `server/` directory then that one will be used instead. If you want to download the latest Nightly version you can remove the server directory before running the command to start the server.

In order for the development version of the Admin UI to work you will have to import a custom client to the Keycloak server. This is only required during development as the development server for the Admin UI runs on a different port (more on that later).

Wait for the Keycloak server to be up and running and run the following command in a new terminal:

```bash
npm run server:import-client
```

You'll only have to run this command once, unless you remove the server directory or Keycloak server data.

### Running the development server

Now that the Keycloak sever is running it's time to run the development server for the Admin UI. This server is used to build the Admin UI in a manner that it can be iterated on quickly in a browser, using features such as [Hot Module Replacement (HMR)](https://vitejs.dev/guide/features.html#hot-module-replacement) and [Fast Refresh](https://www.npmjs.com/package/react-refresh).

To start the development server run the following command:

```bash
npm run dev
```

Once the process of optimization is done your browser will automatically open your local host on port `8080`. From here you will be redirected to the Keycloak server to authenticate, which you can do with the default username and password (`admin`).

You can now start making changes to the source code, and they will be reflected in your browser.

## Building as a Keycloak theme

If you want to build the application using Maven and produce a JAR that can be installed directly into Keycloak, check out the [Keycloak theme documentation](./keycloak-theme/README.md).

## Linting

Every time you create a commit it should be automatically linted and formatted for you. It is also possible to trigger the linting manually:

```bash
npm run lint
```
## Integration testing with Cypress

This repository contains integration tests developed with the [Cypress framework](https://www.cypress.io/).

### Prerequisites

Ensure the Keycloak and development server are running as [outlined previously](#running-the-keycloak-server) in this document.

### Running the tests

You can run the tests using the interactive graphical user interface using the following command:

```bash
npm run cy:open
```

Alternatively the tests can also run headless as follows:

```
npm run cy:run
```

For more information about the Cypress command-line interface consult [the documentation](https://docs.cypress.io/guides/guides/command-line).

### Project Structure

You can find information about the project structure in the [official Cypress documentation](https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests#Folder-structure).
Read more about [how to write tests](./cypress/WRITING_TESTS.md)

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import { keycloakBefore } from "../support/util/keycloak_hooks";
import UserGroupsPage from "../support/pages/admin_console/manage/users/UserGroupsPage";
import adminClient from "../support/util/AdminClient";
import CredentialsPage from "../support/pages/admin_console/manage/users/CredentialsPage";
import UsersPage from "cypress/support/pages/admin_console/manage/users/UsersPage";
import IdentityProviderLinksTab from "cypress/support/pages/admin_console/manage/users/user_details/tabs/IdentityProviderLinksTab";
import UsersPage from "../support/pages/admin_console/manage/users/UsersPage";
import IdentityProviderLinksTab from "../support/pages/admin_console/manage/users/user_details/tabs/IdentityProviderLinksTab";

let groupName = "group";
let groupsList: string[] = [];
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Masthead from "cypress/support/pages/admin_console/Masthead";
import ModalUtils from "cypress/support/util/ModalUtils";
import ModalUtils from "../../../../../../util/ModalUtils";
import Masthead from "../../../../Masthead";

const modalUtils = new ModalUtils();
const masthead = new Masthead();
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit c6ab6a1

Please sign in to comment.