From 267b4f9877d937d8eb1ebcd8bfd346d059d4e424 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Thu, 27 Mar 2025 19:03:05 +0100 Subject: [PATCH] WIP Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at> --- .../target/create-event-listener.jar | Bin 10143 -> 10138 bytes dbrepo-dashboard-service/app.py | 2 +- dbrepo-dashboard-service/dashboard.py | 306 ++---------------- dbrepo-dashboard-service/init/dashboard.py | 4 +- .../init/tests/test_integration_dashboard.py | 2 +- dbrepo-data-service/Dockerfile | 6 +- dbrepo-metadata-service/Dockerfile | 33 +- helm/dbrepo/files/create-event-listener.jar | Bin 10143 -> 10138 bytes lib/java/dbrepo-core/Dockerfile | 12 + make/build.mk | 3 +- 10 files changed, 66 insertions(+), 302 deletions(-) create mode 100644 lib/java/dbrepo-core/Dockerfile diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar index 9fa1288598118b348a3341e591558b66152c43b3..9defdad744bc4cb391b2ea104502106d0011f6af 100644 GIT binary patch delta 941 zcmbR5Kg(Y_z?+#xgn@yBgF$9`b(Dw0h9?D#3=C(O7#Kt*-%}E=?+v<`cSu2`Hvdxn z19pb3w=(Z9tG>~b*LiMl@Q&C{-P{M;&h3{E3pd`J<L$Mxfd9M9xm4Yra|aY_nO~Qr z3K^v|8$?71aCDvP=Zx$Y<Jr00=(=u%(8iCPhWRB6Uj)5<xsB~*|J~MunwMryW2#mC zwQ6HS%Ze*bv4Iy8{A6#0dDri7{dQ;Zx-YqxR-95xv0Oh#`Q^kMhl%cui626)u}(?& zkiSp*g}Ia2PsRWK=kBIWoglNZjPrT>;l`I|40HITc!Vc$KDm_=X0fIB$g!r!>6JD- zdoFIAKW&ky?S1AYQ8Vg3uU5WyOWfUG)}uos)aKo_^NYS*kIlSXQ}S9)-uS+=R6XxY z*4<N8V?&NL9MOB9GILM%8@A{F=9_Cy4n6t3V2Z2ix7q_WlTN?W4anG=R$myE(VlQ% z9(VqNtKu^yPn<Lferz$zb+N^~pB!luTqnO|S!6P=Z_0nRS2cO*-K&fDXFkYataxe5 zQhoIj=f@_!s67)CKX8I#go}ZJg8>vHleaLcFw0D@o_w287ff?A$$@DdCRH#U!lVVJ z8<|YN^bRI3FnyJ|8%(n@p9RsIlUe34ff-Ef+?-&BfIy8Ph%vceaTb`?QJTyNPXv=s zC|SybcnnB@6V4W3c<Z=mvVyV%Sf{nJG~>z1;mV3&UbV8c*iS|VhQt#60B=Sn5oUyM z)+kF`N-=?@N=nN!Q}fVOM8R!fU|`^fb3oQPO;Uk)T~S4vDW7Tb1SZ+Z(JEXD=#JD! z(X|YuP<rwL6(z9Sq*bMvJ~K_WPz?a<`!lc2sf&Su;R6E$g9cn51H+QWM&`*P%vzIq zRC&Pqx>co_0$C=@3#d;%uPO-^daWwW^nq=%AiKn51vQ8&eKl#OfBci>1#~A@s%bIJ zmYqC-NqX`DHBGRFH)_&MwTe(7smXTgV&DK4_6Rwb%)r2~k%56h7{v`zlZ(~W*w!h5 F1ObdhLZbix delta 1071 zcmbQ`Ki^+Cz?+#xgn@yBgMqE6JnGS6qtB%ig%#@$=G`{n*(?3Q{sp_rRo_Qf_UYbD z<h{k~as6IqS6s`DB87|RK79|KbH=rK(QQW|RlAS2wy!wntkv95qbi^C+-u^>*(N)` zv-r5J>swmU)HvtIqrz<VPf5$3sUKOjy?0{v=E>))4^`yOR9k-Hnpk79>d(tX&PxrZ zF0WNz_<SwT6ZZP<lHNHx@{eD-?wM{C-}QABw_}L=Mn&a)jLT0t@6KPLdi?*h-A((H zL%R7t{XhA0Q>D()X_fL`Yx&!oH<bq5k=L<gUD2?$bZh&8eeUmUS!<^)zpNrP_joEV zvrkR@%1sZJ9o{e7dF>y^rz?#?4%wf6?)cA_Tk~#l>EHK-_796itLrt=XYNUuzj5mK zxy3Cu&zQG8)j$3Cg4Ma(`+{z4t#WtIvAW^g*yY*#IDUeO%h`_)H*IV@IniGH-h~AH zII#)mvyR*mDK$Kv8mpVXDso>$NaaMuv<afm@(RnV_kDjf+x)rR<pno|Uz$~U{PR7n zp~AH*qtk8KNqJCQa4|4&FfcH)6_rn3&!_^XuQBR^X*MP~Fs;s{3a0&;w7_%?lL?sK z%;W{8`<Tyy=t<1oAZl|Q%N!;!<1ZUGCz!!4P$LLpOzu*g1*X-NCUe50fAV1^OR(sF zCF%O*j0_CEt|5-Po_=on0p5&EBFqpMf|N5L0U<bBfZ?s<Ib?0csYPX($*IM7^)sXB z|HsI{kXWK0;D*OWE)*T|Okf=)rRABadFVDxzOO9J=sx+kG9&<HRHPY8CfBRTXyfyd zK8pFPC)cakfrG_BRhsDs(_~*&GcfmniZs&+=E?lbE;<m?5V`69r{>-MObiUySQ!|M z;HEJ!ENKj5nVidFf}w%?pWvTc91INW1Q-~^P&9mHo6N&5F<DxT2W+X9nlux$z~o#O z^~rf^28;_P&sTF*07c2}bq|u97#J8p*cQcvCdJ7M)J!LzQ{;mB8sSc1kC1c83=9k# V85kIZQ8dX<&Qn)o+pGi<1OOJCQ?>vA diff --git a/dbrepo-dashboard-service/app.py b/dbrepo-dashboard-service/app.py index 94f838e2b4..fe5d8218b0 100644 --- a/dbrepo-dashboard-service/app.py +++ b/dbrepo-dashboard-service/app.py @@ -216,7 +216,7 @@ def create_dashboard(): logging.debug( f"endpoint create dashboard, is_public={is_public}, is_schema_public={is_schema_public}, owner_username={owner_username}") try: - db = dashboard.create(request.json['database_name'], request.json['owner_username']) + db = dashboard.create(request.json['database_name']) access.update_anonymous_read_access(db['uid'], is_public, is_schema_public) return Response(dumps(db)), 201, headers except GrafanaClientError as e: diff --git a/dbrepo-dashboard-service/dashboard.py b/dbrepo-dashboard-service/dashboard.py index a170e63dbb..8ff4b47c49 100644 --- a/dbrepo-dashboard-service/dashboard.py +++ b/dbrepo-dashboard-service/dashboard.py @@ -1,37 +1,30 @@ import logging import os -from dbrepo.api.dto import Database, View +from dbrepo.api.dto import Database +from dbrepo.api.exceptions import MalformedError +from grafana_client.client import GrafanaClientError +from api.exceptions import DashboardNotFound from clients.grafana_client import GrafanaClient - -statistics_row_title = '${view_id}' +from panel import get_panels base_url = os.getenv('BASE_URL', 'http://localhost') datasource_uid = os.getenv('JSON_DATASOURCE_NAME', 'dbrepojson0') -def map_link(title: str, url: str) -> dict: +def map_link(title: str, url: str, icon: str = 'info') -> dict: return dict(targetBlank=True, asDropdown=False, includeVars=False, keepTime=False, tags=[], type='link', - icon='info', + icon=icon, title=title, url=url) -def map_statistics_row(dashboard: dict) -> dict | None: - filtered_panels = [panel for panel in dashboard['panels'] if - panel['type'] == 'row' and panel['title'] == statistics_row_title] - if len(filtered_panels) == 0: - logging.warning(f"Failed to find statistics row title {statistics_row_title} in: {filtered_panels}") - return None - return filtered_panels[0] - - def map_links(database: Database) -> [dict]: links = [] if len(database.identifiers) > 0: @@ -41,275 +34,30 @@ def map_links(database: Database) -> [dict]: return links -def map_templating(database: Database) -> dict: - options = [dict(selected=False, - text=view.name, - value=str(view.id)) for view in database.views] - selected = dict(selected=True, - text=[view.name for view in database.views], - value=[str(view.id) for view in database.views]) - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(list=[dict(description='', - name='view_id', - hide=0, - includeAll=True, - multi=True, - datasource=datasource, - refresh=1, - regex='', - sort=0, - definition='dbrepo-json- (infinity) json', - query=dict(queryType='infinity', - query='', - infinityQuery=dict(format='table', - filters=[], - parser='backend', - refId='variable', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database.id}/view", - columns=[dict(selector='id', - text='value', - type='string'), - dict( - selector='internal_name', - text='name', - type='string')], - url_options=dict(data='', - method='GET'))), - label='Datasource', - skipUrlSync=False, - type='query', - current=selected, - options=options)]) - - -def map_timeseries_panel(database: Database, view: View) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict( - title=view['name'], - type='timeseries', - datasource=datasource, - targets=[dict(datasource=datasource, - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database['id']}/view/{view['id']}", - url_options=dict(data='', - method='GET'))], - gridPos=dict(h=8, - w=12, - x=0, - y=0), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True), - tooltip=dict(mode='single', - sort='none')), - fieldConfig=dict( - defaults=dict(color=dict(mode='palette-classic'), - custom=dict( - axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict(legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict(type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict(mode='absolute'))))) - - -def map_statistics_panel(database_id: str, view: View) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict( - title=view.name, - type='table', - datasource=datasource, - targets=[dict(datasource=datasource, - columns=[], - filters=[], - format='table', - global_query_id='', - hide=False, - refId='A', - root_selector='', - source='url', - type='json', - url=f"/api/database/{database_id}/view/{view.id}/data", - url_options=dict(data='', - method='GET'))], - options=dict(cellHeight="sm", - showHeader=True, - footer=dict(countRows=False, - fields="", - reducer=["sum"], - show=False)), - gridPos=dict(h=8, - w=12, - x=12, - y=0), - transformations=dict(id="organize", - options=dict(excludeByName=dict(), - includeByName=dict(), - indexByName=dict( - HEADER_AVG=3, - HEADER_COL=0, - HEADER_STDDEV=4, - HEADER_MAX=2, - HEADER_MIN=1))), - fieldConfig=dict(defaults=dict(custom=dict(align="auto", - filterable="true", - cellOptions=dict(type="auto"), - inspect=False), - mappings=[], - thresholds=dict(mode="absolute", - steps=[dict(color="green", - value=None), - dict(color="red", - value=80) - ])), - overrides=[dict(matcher=dict(id="byName", - options="HEADER_COL"), - properties=[dict(id="custom.align", - value="center")]), - dict(matcher=dict(id="byName", - options="HEADER_MIN"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_MAX"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_AVG"), - properties=[dict(id="custom.width", - value=115)]), - dict(matcher=dict(id="byName", - options="HEADER_STDDEV"), - properties=[dict(id="custom.width", - value=115)]) - ])) - - -def map_overview_panel(database_id: str) -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(title='Preview', - type='table', - fieldConfig=dict( - defaults=dict( - color=dict(mode='palette-classic'), - custom=dict(axisBorderShow=False, - axisCenteredZero=False, - axisColorMode='text', - axisLabel='', - axisPlacement='auto', - barAlignment=0, - drawStyle='line', - fillOpacity=0, - gradientMode='none', - hideFrom=dict( - legend=False, - tooltip=False, - viz=False), - insertNulls=False, - lineInterpolation='linear', - lineWidth=1, - pointSize=5, - scaleDistribution=dict( - type='linear'), - showPoints='auto', - spanNulls=False, - stacking=dict(group='A', - mode='none'), - thresholdsStyle=dict( - mode='off'))), - overrides=[]), - options=dict(legend=dict(displayMode='list', - placement='bottom', - showLegend=True, - calcs=[]), - tooltip=dict(mode='single', - sort='none')), - targets=[dict(format='json', - columns=[], - datasource=datasource, - filters=[], - global_query_id='', - refId='A', - root_selector='', - source='url', - type='json', - url='/api/database/' + database_id + '/view/${view_id}/data', - url_options=dict(data='', - method='GET'))], - datasource=datasource, - gridPos=dict(h=4, - w=12, - x=0, - y=0)) - - -def map_row() -> dict: - datasource = dict(uid=datasource_uid, - type='yesoreyeram-infinity-datasource') - return dict(collapsed=False, - repeat='view_id', - repeatDirection='h', - title=statistics_row_title, - type='row', - panels=[], - targets=[dict(refId='A', - datasource=datasource)], - gridPos=dict(h=1, - w=24, - x=0, - y=0)) - - -def map_panels(dashboard: dict, database: Database) -> [dict]: - if map_statistics_row(dashboard) is None: - dashboard['panels'].append(map_row()) - dashboard['panels'].append(map_overview_panel(database.id)) - for view in database.views: - dashboard['panels'].append(map_statistics_panel(database.id, view)) - return dashboard['panels'] - - def find(uid: str): + """ + Finds a dashboard with the given uid. + + @return The dashboard, if successful. Otherwise, `None`. + """ + if uid is None: + return None grafana = GrafanaClient().connect() - return grafana.dashboard.get_dashboard(uid) + try: + return grafana.dashboard.get_dashboard(uid) + except GrafanaClientError: + logging.warning(f"Failed to find dashboard with uid: {uid}") + return None def create(database_name: str, uid: str = '') -> dict: grafana = GrafanaClient().connect() dashboard = dict(uid=uid, title=f'{database_name} Overview', - tags=['dbrepo'], + tags=['managed'], timezone='browser', - fiscalYearStartMonth=1, + refresh='30m', + preload=False, panels=[]) dashboard['panels'] = [] payload = dict(folderUid='', @@ -327,16 +75,20 @@ def delete(uid: str) -> None: def update(database: Database) -> None: grafana = GrafanaClient().connect() - dashboard = find(database.dashboard_uid)['dashboard'] + dashboard = find(database.dashboard_uid) + if dashboard is None: + raise DashboardNotFound(f'Dashboard {database.dashboard_uid} not found') + dashboard = dashboard['dashboard'] # update metadata + if not database.is_dashboard_enabled and 'managed' in dashboard['tags']: + dashboard['tags'].remove('managed') if len(database.identifiers) > 0 and len(database.identifiers[0].titles) > 0: dashboard['title'] = database.identifiers[0].titles[0].title if len(database.identifiers) > 0 and len(database.identifiers[0].descriptions) > 0: dashboard['description'] = database.identifiers[0].descriptions[0].description dashboard['links'] = map_links(database) - dashboard['templating'] = map_templating(database) # update panels - dashboard['panels'] = map_panels(dashboard, database) + dashboard['panels'] = get_panels(dashboard, database) payload = dict(folderUid='', overwrite=True, dashboard=dashboard) diff --git a/dbrepo-dashboard-service/init/dashboard.py b/dbrepo-dashboard-service/init/dashboard.py index a7c03894e4..8ff4b47c49 100644 --- a/dbrepo-dashboard-service/init/dashboard.py +++ b/dbrepo-dashboard-service/init/dashboard.py @@ -50,7 +50,7 @@ def find(uid: str): return None -def create(database_name: str, uid: str = '') -> str: +def create(database_name: str, uid: str = '') -> dict: grafana = GrafanaClient().connect() dashboard = dict(uid=uid, title=f'{database_name} Overview', @@ -65,7 +65,7 @@ def create(database_name: str, uid: str = '') -> str: dashboard=dashboard) dashboard = grafana.dashboard.update_dashboard(payload) logging.info(f"Created dashboard with uid: {dashboard['uid']}") - return dashboard['uid'] + return dashboard def delete(uid: str) -> None: diff --git a/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py b/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py index 1ae27faae0..da6071f13b 100644 --- a/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py +++ b/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py @@ -108,7 +108,7 @@ class DashboardIntegrationTest(unittest.TestCase): def test_create_succeeds(self): # test - dashboard.create('some_database', 'foobar') + dashboard.create('some_database') def test_create_with_uid_succeeds(self): # test diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile index 9edf1375fb..233e1f43c4 100644 --- a/dbrepo-data-service/Dockerfile +++ b/dbrepo-data-service/Dockerfile @@ -1,5 +1,5 @@ ###### FIRST STAGE ###### -FROM dbrepo-metadata-service:build AS dependency +FROM dbrepo-core:build AS dependency LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" ###### SECOND STAGE ###### @@ -10,7 +10,7 @@ COPY ./pom.xml ./ RUN mvn -fn dependency:go-offline -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien +COPY --from=dependency /root/.m2/repository/at/ac/tuwien/ifs/dbrepo /root/.m2/repository/at/ac/tuwien/ifs/dbrepo COPY ./querystore ./querystore COPY ./report ./report @@ -28,7 +28,7 @@ RUN apk add --no-cache curl bash jq WORKDIR /app -RUN adduser -S -u 1001 data-service +RUN adduser -S -u 1001 dbrepo USER 1001 diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index fa92b799ee..9bcf0d75c7 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -1,32 +1,27 @@ ###### FIRST STAGE ###### +FROM dbrepo-core:build AS dependency +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +###### SECOND STAGE ###### FROM maven:3-amazoncorretto-17 AS build LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" COPY ./pom.xml ./ -COPY ./api/pom.xml ./api/ -COPY ./entities/pom.xml ./entities/ -COPY ./oai/pom.xml ./oai/ -COPY ./report/pom.xml ./report/ -COPY ./repositories/pom.xml ./repositories/ -COPY ./rest-service/pom.xml ./rest-service/ -COPY ./services/pom.xml ./services/ -COPY ./test/pom.xml ./test/ - -RUN mvn dependency:go-offline - -COPY ./api ./api -COPY ./entities ./entities + +RUN mvn -fn dependency:go-offline + +COPY --from=dependency /root/.m2/repository/at/ac/tuwien/ifs/dbrepo /root/.m2/repository/at/ac/tuwien/ifs/dbrepo + COPY ./oai ./oai COPY ./report ./report COPY ./repositories ./repositories COPY ./rest-service ./rest-service COPY ./services ./services -COPY ./test ./test # Make sure it compiles -RUN mvn clean install -DskipTests +RUN mvn -fn clean package -DskipTests -###### SECOND STAGE ###### +###### THIRD STAGE ###### FROM amazoncorretto:17-alpine3.19 AS runtime LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" @@ -34,6 +29,8 @@ RUN apk add --no-cache curl bash jq WORKDIR /app +RUN adduser -S -u 1001 dbrepo + USER 1001 COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-rest-service-*.jar ./metadata-service.jar @@ -41,4 +38,6 @@ COPY --from=build --chown=1001 ./rest-service/target/dbrepo-metadata-service-res # non-root port EXPOSE 8080 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] +ENV JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" + +ENTRYPOINT exec java $JAVA_OPTS -jar ./metadata-service.jar \ No newline at end of file diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar index 9fa1288598118b348a3341e591558b66152c43b3..9defdad744bc4cb391b2ea104502106d0011f6af 100644 GIT binary patch delta 941 zcmbR5Kg(Y_z?+#xgn@yBgF$9`b(Dw0h9?D#3=C(O7#Kt*-%}E=?+v<`cSu2`Hvdxn z19pb3w=(Z9tG>~b*LiMl@Q&C{-P{M;&h3{E3pd`J<L$Mxfd9M9xm4Yra|aY_nO~Qr z3K^v|8$?71aCDvP=Zx$Y<Jr00=(=u%(8iCPhWRB6Uj)5<xsB~*|J~MunwMryW2#mC zwQ6HS%Ze*bv4Iy8{A6#0dDri7{dQ;Zx-YqxR-95xv0Oh#`Q^kMhl%cui626)u}(?& zkiSp*g}Ia2PsRWK=kBIWoglNZjPrT>;l`I|40HITc!Vc$KDm_=X0fIB$g!r!>6JD- zdoFIAKW&ky?S1AYQ8Vg3uU5WyOWfUG)}uos)aKo_^NYS*kIlSXQ}S9)-uS+=R6XxY z*4<N8V?&NL9MOB9GILM%8@A{F=9_Cy4n6t3V2Z2ix7q_WlTN?W4anG=R$myE(VlQ% z9(VqNtKu^yPn<Lferz$zb+N^~pB!luTqnO|S!6P=Z_0nRS2cO*-K&fDXFkYataxe5 zQhoIj=f@_!s67)CKX8I#go}ZJg8>vHleaLcFw0D@o_w287ff?A$$@DdCRH#U!lVVJ z8<|YN^bRI3FnyJ|8%(n@p9RsIlUe34ff-Ef+?-&BfIy8Ph%vceaTb`?QJTyNPXv=s zC|SybcnnB@6V4W3c<Z=mvVyV%Sf{nJG~>z1;mV3&UbV8c*iS|VhQt#60B=Sn5oUyM z)+kF`N-=?@N=nN!Q}fVOM8R!fU|`^fb3oQPO;Uk)T~S4vDW7Tb1SZ+Z(JEXD=#JD! z(X|YuP<rwL6(z9Sq*bMvJ~K_WPz?a<`!lc2sf&Su;R6E$g9cn51H+QWM&`*P%vzIq zRC&Pqx>co_0$C=@3#d;%uPO-^daWwW^nq=%AiKn51vQ8&eKl#OfBci>1#~A@s%bIJ zmYqC-NqX`DHBGRFH)_&MwTe(7smXTgV&DK4_6Rwb%)r2~k%56h7{v`zlZ(~W*w!h5 F1ObdhLZbix delta 1071 zcmbQ`Ki^+Cz?+#xgn@yBgMqE6JnGS6qtB%ig%#@$=G`{n*(?3Q{sp_rRo_Qf_UYbD z<h{k~as6IqS6s`DB87|RK79|KbH=rK(QQW|RlAS2wy!wntkv95qbi^C+-u^>*(N)` zv-r5J>swmU)HvtIqrz<VPf5$3sUKOjy?0{v=E>))4^`yOR9k-Hnpk79>d(tX&PxrZ zF0WNz_<SwT6ZZP<lHNHx@{eD-?wM{C-}QABw_}L=Mn&a)jLT0t@6KPLdi?*h-A((H zL%R7t{XhA0Q>D()X_fL`Yx&!oH<bq5k=L<gUD2?$bZh&8eeUmUS!<^)zpNrP_joEV zvrkR@%1sZJ9o{e7dF>y^rz?#?4%wf6?)cA_Tk~#l>EHK-_796itLrt=XYNUuzj5mK zxy3Cu&zQG8)j$3Cg4Ma(`+{z4t#WtIvAW^g*yY*#IDUeO%h`_)H*IV@IniGH-h~AH zII#)mvyR*mDK$Kv8mpVXDso>$NaaMuv<afm@(RnV_kDjf+x)rR<pno|Uz$~U{PR7n zp~AH*qtk8KNqJCQa4|4&FfcH)6_rn3&!_^XuQBR^X*MP~Fs;s{3a0&;w7_%?lL?sK z%;W{8`<Tyy=t<1oAZl|Q%N!;!<1ZUGCz!!4P$LLpOzu*g1*X-NCUe50fAV1^OR(sF zCF%O*j0_CEt|5-Po_=on0p5&EBFqpMf|N5L0U<bBfZ?s<Ib?0csYPX($*IM7^)sXB z|HsI{kXWK0;D*OWE)*T|Okf=)rRABadFVDxzOO9J=sx+kG9&<HRHPY8CfBRTXyfyd zK8pFPC)cakfrG_BRhsDs(_~*&GcfmniZs&+=E?lbE;<m?5V`69r{>-MObiUySQ!|M z;HEJ!ENKj5nVidFf}w%?pWvTc91INW1Q-~^P&9mHo6N&5F<DxT2W+X9nlux$z~o#O z^~rf^28;_P&sTF*07c2}bq|u97#J8p*cQcvCdJ7M)J!LzQ{;mB8sSc1kC1c83=9k# V85kIZQ8dX<&Qn)o+pGi<1OOJCQ?>vA diff --git a/lib/java/dbrepo-core/Dockerfile b/lib/java/dbrepo-core/Dockerfile new file mode 100644 index 0000000000..8a6348bbce --- /dev/null +++ b/lib/java/dbrepo-core/Dockerfile @@ -0,0 +1,12 @@ +###### FIRST STAGE ###### +FROM maven:3-amazoncorretto-17 AS build +LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at" + +COPY ./pom.xml ./ + +RUN mvn dependency:go-offline + +COPY ./src/ ./src/ + +# Make sure it compiles +RUN mvn clean install -DskipTests \ No newline at end of file diff --git a/make/build.mk b/make/build.mk index 96cd6392d5..48e9212a6a 100644 --- a/make/build.mk +++ b/make/build.mk @@ -2,8 +2,9 @@ .PHONY: build-images build-images: ## Build Docker images. - docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service + docker build --network=host -t dbrepo-core:build --target build ./lib/java/dbrepo-core docker build --network=host -t dbrepo-data-service:build --target build dbrepo-data-service + docker build --network=host -t dbrepo-metadata-service:build --target build dbrepo-metadata-service docker compose build --parallel .PHONY: build-data-service -- GitLab