Skip to content

Commit

Permalink
Feature/pi 748 split build process (#51)
Browse files Browse the repository at this point in the history
* prepare split for possible portal

* update environments

* fix frontend build

* add missing nginx config

* ignore cors for now

* update readme
  • Loading branch information
M-Busk authored Jan 10, 2025
1 parent ff06216 commit 05b6878
Show file tree
Hide file tree
Showing 19 changed files with 312 additions and 155 deletions.
99 changes: 81 additions & 18 deletions .github/workflows/continious_integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ on:
# - reopened
# - review_requested
push:
branches: [ "develop", "main" ]
branches: [ "develop", "main", "feature/PI-748_split_build_process" ]
workflow_dispatch:
env:
REGISTRY: ghcr.io
REGISTRY_NAMESPACE: possible-x
K8S_NAMESPACE: ${{ github.ref == 'refs/heads/main' && 'mvd-001-demo' || 'edc-dev' }}
jobs:
build-and-push-image:
build-and-push-backend:
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -22,13 +22,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set current date as env variable
run: echo "VERSION_DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

- name: Set current short hash as env variable
run: echo "VERSION_NO=$(git rev-parse --short HEAD)" >> $GITHUB_ENV

- name: Log in to the Container registry
uses: docker/login-action@v2
with:
Expand All @@ -41,33 +41,96 @@ jobs:
with:
buildkitd-flags: --debug

- name: Docker meta
id: meta
- name: Docker "backend" meta
id: backend-meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/edc-portal
images: ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/backend
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main'}}
type=raw,value=latest-${{github.ref_name }},enable=${{ github.ref != 'refs/heads/main'}}
${{ github.sha }}
- name: Build and push
id: build_and_push
- name: Build and push "backend"
id: build_and_push_backend
uses: docker/build-push-action@v6
with:
context: .
file: ./backend/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
tags: ${{ steps.backend-meta.outputs.tags }}
labels: ${{ steps.backend-meta.outputs.labels }}
build-args: |
VERSION_NO=${{ env.VERSION_NO }}
VERSION_DATE=${{ env.VERSION_DATE }}
- name: 'Auto-deploy to dev'
if: github.ref == 'refs/heads/develop'
uses: actions-hub/[email protected]
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
build-and-push-frontend:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v3


- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
buildkitd-flags: --debug

- name: Docker "frontend" meta
id: frontend-meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/frontend
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main'}}
type=raw,value=latest-${{github.ref_name }},enable=${{ github.ref != 'refs/heads/main'}}
${{ github.sha }}
- name: Build and push "frontend"
id: build_and_push_frontend
uses: docker/build-push-action@v6
with:
args: "set image deployment/possible-x-portal -n ${{ env.K8S_NAMESPACE }} possible-x-portal=${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/edc-portal:${{ github.sha }}"
context: ./frontend/
file: ./frontend/Dockerfile
push: true
tags: ${{ steps.frontend-meta.outputs.tags }}
labels: ${{ steps.frontend-meta.outputs.labels }}
build-args: |
ACTIVEPROFILE="remote"
deploy-portal-to-dev:
runs-on: 'ubuntu-latest'
needs: [ build-and-push-backend,build-and-push-frontend ]
steps:
#- name: Checkout repository
# uses: actions/checkout@v3

#- name: "Update Deployment Image Tag" # [3]
# working-directory: "./deployment/kustomize/overlays/"
# run: |
# kustomize edit set image "frontend-image=*:${{ github.sha }}" "backend-image=*:${{ github.sha }}"

#- name: 'install Portal to DEV'
# uses: actions-hub/[email protected]
# env:
# KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
# with:
# args: "apply -k ./deployment/kustomize/overlays/"

#- name: 'Auto-deploy to dev'
# if: github.ref == 'refs/heads/develop'
# uses: actions-hub/[email protected]
# env:
# KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
# with:
# args: "set image deployment/possible-x-portal -n ${{ env.K8S_NAMESPACE }} possible-x-portal=${{ env.REGISTRY }}/${{ env.REGISTRY_NAMESPACE }}/edc-portal:${{ github.sha }}"
86 changes: 74 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
The POSSIBLE-X Portal is the centralized landing page for interacting with the POSSIBLE-X Dataspace.

It consists of three different parts:

* The main page which is the landing page and links to other pages.
* The registration page for registering new participants.
* An administrative page to manage registration requests.
Expand All @@ -18,6 +19,7 @@ The repository is structured as a Gradle multi-project build.
(...)
├── libs.versions.toml # configuration file of version catalog for dependencies
├── settings.gradle.kts # root project settings
├── build.gradle.kts # root build file
├── buildSrc/ # shared build configuration
├── frontend/ # Angular frontend code for the GUI
│ └── build.gradle.kts # build file for the Angular frontend
Expand All @@ -40,42 +42,102 @@ Afterwards they can be found at
frontend/src/app/services/mgnt/api/backend.ts
```

## Build
## Build Backend

If you only want to build the project, you can run
If you only want to build the backend, you can run

```
./gradlew build
./gradlew buildBackend
```

after which the built jar can be found at `backend/build/libs/backend-x.y.z.jar`

## Run Portal Backend (currently including frontend)
## Run Backend

Through gradle:

```
./gradlew bootRun
./gradlew startBackend
```

Running a specific configuration:

E.g. for local portal:

```
./gradlew startBackend -PactiveProfile=local
```

Alternatively running the jar directly (if built previously):

```
java -jar backend/build/libs/backend-x.y.z.jar
java -jar backend/build/libs/backend-x.y.z.jar --spring.profiles.active=-local
```

Once the service is running, you can access it at e.g. http://localhost:8088/ (depending on the used configuration).
Once the service is running, you can access it at http://localhost:8088/.

The OpenAPI documentation can be found at http://localhost:8088/swagger-ui.html .

## Run Portal Frontend
## Build Frontend

If you only want to build the frontend, you can run

```
./gradlew buildFrontend
```

after which the built frontend can be found at `frontend/build/resources/`.

## Run Frontend

Through gradle:

```
./gradlew startFrontend
```

Running a specific configuration:

E.g. for local portal:

Consumer (local testing):
```
./gradlew startFrontend -PactiveProfile=local
```

Alternatively running with npm directly:

```
npm --prefix frontend/ run ng -- serve --configuration local --port 4208
```

Once the service is running, you can access it at http://localhost:4208/.

## Run Full Application (Frontend and Backend)

In addition to running the frontend and backend individually, there is also a gradle task for running both in parallel.
Note that when the app is started through this task, the IntelliJ debugger will not be able to attach to the backend and
hence won't stop at breakpoints.
Through gradle:

```
cd frontend/
npm start
./gradlew startFull
```

Once the service is running, you can access it at e.g. http://localhost:4300/ (depending on the used configuration).
Running a specific configuration:

E.g. for local portal:

```
./gradlew startFull -PactiveProfile=local
```

## Killing orphaned processes

If for any reason the application is not shut down properly, the following command can be used to kill a service that is
running on the specified port:

```
sudo fuser -k 8088/tcp
```

where 8088 can be replaced with any other port.
12 changes: 3 additions & 9 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
FROM gradle:8.9.0-jdk17 AS build
COPY --chown=gradle:gradle . /home/gradle/src

RUN apt-get update && \
apt-get -y upgrade && \
apt-get install -yq curl libgconf-2-4 gnupg wget
RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb stable main' >> /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get install -y --no-install-recommends google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst
WORKDIR /home/gradle/src
RUN gradle build -PnpmEnv=dev --no-daemon
RUN gradle buildBackend --no-daemon

FROM openjdk:17-jdk-slim

EXPOSE 8088
EXPOSE 8080

RUN mkdir /app

COPY --from=build /home/gradle/src/backend/build/libs/*.jar /app/backend.jar

ARG VERSION_NO="unknown"
ENV VERSION_NO=$VERSION_NO
ARG VERSION_DATE="unknown"
Expand Down
5 changes: 3 additions & 2 deletions backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ from the central DAPS server for the new dataspace participant.
If you only want to build the project, you can go to the root of the repository and run

```
./gradlew build
./gradlew buildBackend
```

after which the built jar can be found at `backend/build/libs/backend-x.y.z.jar`.
Expand All @@ -20,6 +20,7 @@ after which the built jar can be found at `backend/build/libs/backend-x.y.z.jar`

The following environment variables can be set as needed.
Replace the right hand side with the actual values.

```
export SDCREATIONWIZARDAPI_BASEURL="SD Creation Wizard API base URL"
export DAPSSERVER_BASEURL="DAPS Server base URL"
Expand All @@ -31,7 +32,7 @@ export SPRING_DATASOURCE_PASSWORD="Datasource Password"
Through gradle:

```
./gradlew bootRun
./gradlew startBackend
```

Alternatively running the jar directly (if built previously):
Expand Down
35 changes: 14 additions & 21 deletions backend/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -70,31 +70,24 @@ tasks.getByName<Jar>("jar") {
enabled = false
}

tasks.register<Copy>("copyWebApp") {
outputs.upToDateWhen { false }
description = "Copies the GUI into the resources of the Spring project."
group = "Application"
from("$rootDir/frontend/build/resources")
into(layout.buildDirectory.dir("resources/main/static/."))
tasks.register("buildBackend") {
dependsOn(":backend:build")
description = "Builds the backend application."
group = "build"
}

tasks.named("compileJava") {
if (!project.hasProperty("backendOnly")) { // skip frontend if user wants only backend
println("Hint: You can skip frontend build with '-PbackendOnly'")
dependsOn(":frontend:npmTestConditional")
}
else {
println("skipping frontend")
}
}

tasks.named("processResources") {
if (!project.hasProperty("backendOnly")) { // skip frontend if user wants only backend
dependsOn("copyWebApp")
}
else {
println("skipping frontend")
tasks.register<JavaExec>("startBackend") {
dependsOn("bootJar")
description = "Runs the backend application."
group = "application"
mainClass.set("eu.possiblex.portal.PortalApplication")
classpath = sourceSets["main"].runtimeClasspath
val activeProfile = project.findProperty("activeProfile")?.toString()
if (activeProfile != null) {
systemProperty("spring.profiles.active", activeProfile)
}

}

tasks {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import eu.possiblex.portal.application.entity.VersionTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin("*") // TODO replace this with proper CORS configuration
@Slf4j
public class CommonPortalRestApiImpl implements CommonPortalRestApi {

Expand All @@ -17,6 +19,7 @@ public class CommonPortalRestApiImpl implements CommonPortalRestApi {

@Override
public VersionTO getVersion() {

return new VersionTO(version, versionDate);
}
}
Loading

0 comments on commit 05b6878

Please sign in to comment.