diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2022-04-06 15:35:09 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-06 15:35:09 +0200 |
| commit | 0d4f19003324e196fffae3f252786e30197dfa4c (patch) | |
| tree | 08ba4eb3b0e067ae933c636ca3967c45058fd69f /opendc-web/opendc-web-ui/build.gradle.kts | |
| parent | af87540d49d58c465f0847c016814d58cfeb44fc (diff) | |
| parent | 9f0b7ddd0d62e4dc43a69ea8fafd06be1a663f9f (diff) | |
merge: Integrate UI into Quarkus web application (#69)
This pull request adds a Quarkus extension that integrates with the existing Quarkus web application to provide access to the OpenDC web UI. The benefit of this approach is that in this way, OpenDC can be distributed as a single JVM application to the user, which can host its own web UI directly.
Furthermore, this pull request also adds support for unauthenticated access to the API when accessing in dev mode, so that users do not have to setup Auth0 in order to use OpenDC locally.
## Implementation Notes :hammer_and_pick:
* Do not use next/image
* Migrate to next-global-css
* Update PatternFly to latest version
* Add Gradle integration with Next.js project
* Build web UI via Gradle
* Support building WebJar for OpenDC web UI
* Add extension for serving OpenDC web UI
* Include web UI in development mode
* Add workaround for Quarkus Gradle build issues
* Add support for unauthenticated user access
## External Dependencies :four_leaf_clover:
* [node-gradle](https://github.com/node-gradle/gradle-node-plugin)
Diffstat (limited to 'opendc-web/opendc-web-ui/build.gradle.kts')
| -rw-r--r-- | opendc-web/opendc-web-ui/build.gradle.kts | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/opendc-web/opendc-web-ui/build.gradle.kts b/opendc-web/opendc-web-ui/build.gradle.kts index 7edfd134..9e0d4ff0 100644 --- a/opendc-web/opendc-web-ui/build.gradle.kts +++ b/opendc-web/opendc-web-ui/build.gradle.kts @@ -19,3 +19,94 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ + +import com.github.gradle.node.yarn.task.YarnTask + +description = "Web interface for OpenDC" + +plugins { + `java-library-conventions` + id("com.github.node-gradle.node") +} + +sourceSets { + main { + java.srcDir("src") + } + test { + java.srcDir("test") + } +} + +val lintTask = tasks.register<YarnTask>("lintNext") { + args.set(listOf("lint")) + dependsOn(tasks.yarn) + inputs.dir("src") + inputs.files("package.json", "next.config.js", ".eslintrc") + outputs.upToDateWhen { true } +} + +tasks.register<YarnTask>("dev") { + args.set(listOf("dev")) + dependsOn(tasks.yarn) + inputs.dir(project.fileTree("src")) + inputs.dir("node_modules") + inputs.files("package.json", "next.config.js") + outputs.upToDateWhen { true } +} + +val buildTask = tasks.register<YarnTask>("buildNext") { + args.set(listOf("build")) + + val env = listOf( + "NEXT_BASE_PATH", + "NEXT_PUBLIC_API_BASE_URL", + "NEXT_PUBLIC_SENTRY_DSN", + "NEXT_PUBLIC_AUTH0_DOMAIN", + "NEXT_PUBLIC_AUTH0_CLIENT_ID", + "NEXT_PUBLIC_AUTH0_AUDIENCE", + ) + for (envvar in env) { + environment.put(envvar, "%%${envvar}%%") + } + + dependsOn(tasks.yarn) + inputs.dir(project.fileTree("src")) + inputs.dir("node_modules") + inputs.files("package.json", "next.config.js") + outputs.dir(layout.buildDirectory.dir("next")) +} + +tasks.register<YarnTask>("start") { + args.set(listOf("start")) + dependsOn(buildTask) + inputs.dir(project.fileTree("src")) + inputs.dir("node_modules") + inputs.files("package.json", "next.config.js") + outputs.upToDateWhen { true } +} + +tasks.processResources { + dependsOn(buildTask) + inputs.dir(project.fileTree("public")) + + from(layout.buildDirectory.dir("next")) { + include("routes-manifest.json") + into("META-INF/resources/${project.name}") + } + + from(layout.buildDirectory.dir("next/static")) { + into("META-INF/resources/${project.name}/static/_next/static") + } + + from(layout.buildDirectory.dir("next/server/pages")) { + include("**/*.html") + into("META-INF/resources/${project.name}/pages") + } + + from(project.fileTree("public")) { + into("META-INF/resources/${project.name}/static") + } + + mkdir("${project.buildDir}/classes/java/main") +} |
