Skip to content

Commit

Permalink
prepare split for possible portal
Browse files Browse the repository at this point in the history
  • Loading branch information
M-Busk committed Jan 10, 2025
1 parent ff06216 commit e4e0c2e
Show file tree
Hide file tree
Showing 7 changed files with 166 additions and 97 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 }}"
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
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

This file was deleted.

11 changes: 11 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
tasks.register<Exec>("startFull") {
description = "Runs the full application (frontend + backend)."
group = "application"

val activeProfile = project.findProperty("activeProfile")?.toString()

print("activeProfile: $activeProfile")

dependsOn(":frontend:startFrontend")
dependsOn(":backend:startBackend")
}
20 changes: 20 additions & 0 deletions frontend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM gradle:8.9.0-jdk17 AS build
ARG ACTIVEPROFILE

# install chrome headless
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
COPY --chown=gradle:gradle . .
RUN gradle buildFrontend --no-daemon -DactiveProfile=${ACTIVEPROFILE}

FROM nginx:stable-alpine
COPY --from=build /home/gradle/src/build/resources /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 8080
48 changes: 37 additions & 11 deletions frontend/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,57 @@ node {
}

tasks {
val npmInstalll by registering(NpmTask::class) {
outputs.upToDateWhen { false }
args.set(listOf("clean-install"))

val testFrontend by registering(NpmTask::class) {
args.set(listOf("run", "test", "--", "--no-watch", "--no-progress", "--browsers=ChromeHeadlessNoSandbox"))
}

val npmBuild by registering(NpmTask::class) {
outputs.upToDateWhen { false }
dependsOn(npmInstalll)
args.set(listOf("run", "build", "--", "--configuration", project.findProperty("npmEnv") as String? ?: "local"))
val buildFrontend by registering(NpmTask::class) {
dependsOn(npmInstall)
dependsOn(testFrontend)
val activeProfile = project.findProperty("activeProfile")?.toString()
args.set(listOf("run", "build", "--", "--configuration", activeProfile ?: "remote"))
}

val setNpmShell by registering(NpmTask::class) {
args.set(listOf("config", "set", "script-shell", "/bin/bash"))
}

val startFrontend by registering(NpmTask::class) {
dependsOn(setNpmShell)
dependsOn(npmInstall)

val activeProfile = project.findProperty("activeProfile")?.toString()


var port = project.findProperty("frontendPort")?.toString()
if (port == null) {

val yaml = Yaml()
val yamlFileName = if (activeProfile != null) "application-$activeProfile.yml" else "application.yml"
val applicationYaml = file("$rootDir/backend/src/main/resources/$yamlFileName")
val config = yaml.load<Map<String, Any>>(applicationYaml.inputStream())

val backendPort = (config["server"] as? Map<*, *>)?.get("port") ?: "8080"
port = "420" + backendPort.toString().last()
}

args.set(listOf("start", "--", "--port", port, "--configuration", activeProfile ?: "remote"))
}

val npmFeTest by registering(NpmTask::class) {
outputs.upToDateWhen { false }
dependsOn(npmBuild)
dependsOn(npmInstall)
args.set(listOf("run", "test", "--", "--no-watch", "--no-progress", "--browsers=ChromeHeadlessNoSandbox"))
}
}

// run npm test only with build task
tasks.register("npmTestConditional") {
if(gradle.startParameter.getTaskNames().contains("build")) {
if (gradle.startParameter.getTaskNames().contains("build")) {
println("do npm tests")
dependsOn(tasks.getByName("npmFeTest"))
}
else {
} else {
println("skip npm tests")
dependsOn(tasks.getByName("npmBuild"))
}
Expand Down

0 comments on commit e4e0c2e

Please sign in to comment.