This is an automated email from the ASF dual-hosted git repository.
porcelli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new de12cf1dde3 NO-ISSUE: Adding `maven-m2-repo-via-http-image` to allow
Maven projects to be built inside container image builds while referring to
JARs built/downloaded in the host environment (#2389)
de12cf1dde3 is described below
commit de12cf1dde3827fcbe08d7b7a01b419f55219e8c
Author: Tiago Bento <[email protected]>
AuthorDate: Fri May 31 08:42:25 2024 -0400
NO-ISSUE: Adding `maven-m2-repo-via-http-image` to allow Maven projects to
be built inside container image builds while referring to JARs built/downloaded
in the host environment (#2389)
---
.../Containerfile | 9 ++-
.../env/index.js | 29 +++++++---
.../package.json | 20 ++++---
packages/image-builder/README.md | 23 ++++----
packages/image-builder/src/bin.ts | 65 ++++++++++++++++------
.../maven-m2-repo-via-http-image/Containerfile | 48 ++++++++++++++++
packages/maven-m2-repo-via-http-image/README.md | 26 +++++++++
packages/maven-m2-repo-via-http-image/env/index.js | 53 ++++++++++++++++++
packages/maven-m2-repo-via-http-image/package.json | 26 +++++++++
.../settings.xml.envsubst | 56 +++++++++++++++++++
pnpm-lock.yaml | 15 +++++
repo/graph.dot | 4 ++
repo/graph.json | 9 +++
13 files changed, 337 insertions(+), 46 deletions(-)
diff --git
a/packages/dev-deployment-kogito-quarkus-blank-app-image/Containerfile
b/packages/dev-deployment-kogito-quarkus-blank-app-image/Containerfile
index c82a6e8e2d0..c43d145b81c 100644
--- a/packages/dev-deployment-kogito-quarkus-blank-app-image/Containerfile
+++ b/packages/dev-deployment-kogito-quarkus-blank-app-image/Containerfile
@@ -27,12 +27,11 @@ ENV
DEV_DEPLOYMENT__UPLOAD_SERVICE_EXTRACT_TO_DIR=$HOME_PATH/app/src/main/resour
ENV DEV_DEPLOYMENT__UPLOAD_SERVICE_PORT=8080
COPY --chown=$USER_ID:$USER_ID dist-dev/quarkus-app $HOME_PATH/app/
-# This copies the jbpm-quarkus-devui dependencies to the m2 repository.
-# Commented out for now as it still requires docker to run.
https://github.com/apache/incubator-kie-issues/issues/1272
-# COPY --chown=$USER_ID:$USER_ID dist-dev/quarkus-app-m2
/tmp/kogito/.m2/repository
+COPY --chown=$USER_ID:$USER_ID dist-dev/settings.xml
/tmp/kogito/.m2/settings.xml
-RUN ./mvnw clean package -B -ntp -Dmaven.test.skip
-Dmaven.repo.local=/tmp/kogito/.m2/repository
-Dquarkus.http.non-application-root-path=${ROOT_PATH}/q
-Dquarkus.http.root-path=${ROOT_PATH} \
- && chgrp -R 0 $HOME_PATH/app && chmod -R g=u $HOME_PATH/app && chgrp -R 0
/tmp/kogito && chmod -R g=u /tmp/kogito && chgrp -R 0 /.m2 && chmod -R g=u /.m2
+# Pre-populate local Maven repository for faster startup
+RUN ./mvnw clean package -B --settings /tmp/kogito/.m2/settings.xml
-Dmaven.test.skip -Dmaven.repo.local=/tmp/kogito/.m2/repository
-Dquarkus.http.non-application-root-path=${ROOT_PATH}/q
-Dquarkus.http.root-path=${ROOT_PATH} \
+ && chgrp -R 0 $HOME_PATH/app && chmod -R g=u $HOME_PATH/app && chgrp -R 0
/tmp/kogito && chmod -R g=u /tmp/kogito && chgrp -R 0 /.m2 && chmod -R g=u /.m2
&& rm /tmp/kogito/.m2/settings.xml
USER $USER_ID
diff --git
a/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js
b/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js
index cddd941d89c..259c8ffa825 100644
--- a/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js
+++ b/packages/dev-deployment-kogito-quarkus-blank-app-image/env/index.js
@@ -20,16 +20,21 @@
const { varsWithName, composeEnv, getOrDefault } =
require("@kie-tools-scripts/build-env");
const rootEnv = require("@kie-tools/root-env/env");
-const devDeploymentBaseImageEnv =
require("@kie-tools/dev-deployment-base-image/env");
-module.exports = composeEnv([rootEnv, devDeploymentBaseImageEnv], {
+const {
+ env: { devDeploymentBaseImage: devDedevDeploymentBaseImageEnv },
+} = require("@kie-tools/dev-deployment-base-image/env");
+
+const {
+ env: { mavenM2RepoViaHttpImage: mavenM2RepoViaHttpImageEnv },
+} = require("@kie-tools/maven-m2-repo-via-http-image/env");
+
+module.exports = composeEnv([rootEnv], {
vars: varsWithName({
DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__builderImage: {
- default:
`${devDeploymentBaseImageEnv.env.devDeploymentBaseImage.registry}/${
- devDeploymentBaseImageEnv.env.devDeploymentBaseImage.account
- }/${devDeploymentBaseImageEnv.env.devDeploymentBaseImage.name}:${
- devDeploymentBaseImageEnv.env.devDeploymentBaseImage.tags.split(" ")[0]
- }`,
+ default:
`${devDedevDeploymentBaseImageEnv.registry}/${devDedevDeploymentBaseImageEnv.account}/${
+ devDedevDeploymentBaseImageEnv.name
+ }:${devDedevDeploymentBaseImageEnv.tags.split(" ")[0]}`,
description: "The image used in the FROM import.",
},
DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__registry: {
@@ -48,6 +53,10 @@ module.exports = composeEnv([rootEnv,
devDeploymentBaseImageEnv], {
default: rootEnv.env.root.streamName,
description: "The image tag.",
},
+ DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__mavenM2RepoViaHttpImage: {
+ default:
`${mavenM2RepoViaHttpImageEnv.registry}/${mavenM2RepoViaHttpImageEnv.account}/${mavenM2RepoViaHttpImageEnv.name}:${mavenM2RepoViaHttpImageEnv.tag}`,
+ description: "The image tag for the Maven M2 Repo via HTTP. Used during
the build only.",
+ },
}),
get env() {
return {
@@ -58,6 +67,12 @@ module.exports = composeEnv([rootEnv,
devDeploymentBaseImageEnv], {
name:
getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__name),
tags:
getOrDefault(this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__buildTags),
version: require("../package.json").version,
+ dev: {
+ mavenM2RepoViaHttpImage: getOrDefault(
+
this.vars.DEV_DEPLOYMENT_KOGITO_QUARKUS_BLANK_APP_IMAGE__mavenM2RepoViaHttpImage
+ ),
+ mavenM2RepoViaHttpImagePort: 8008,
+ },
},
};
},
diff --git
a/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json
b/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json
index 7a5600680f2..891a35e7da3 100644
--- a/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json
+++ b/packages/dev-deployment-kogito-quarkus-blank-app-image/package.json
@@ -13,20 +13,25 @@
"url": "https://github.com/apache/incubator-kie-tools/issues"
},
"scripts": {
- "build:dev": "run-script-if --bool \"$(build-env containerImages.build)\"
--then \"pnpm copy:assets\" \"pnpm image:docker:build\"",
- "build:prod": "run-script-if --bool \"$(build-env containerImages.build)\"
--then \"pnpm copy:assets\" \"pnpm image:docker:build\"",
- "copy:assets": "rimraf dist-dev && mkdir -p ./dist-dev && pnpm
copy:quarkus-app",
- "copy:m2-for-jbpm-quarkus-devui": "mvn dependency:copy-dependencies
-Dmdep.useRepositoryLayout=true -Dmdep.copyPom=true -DexcludeTransitive=true
-DoutputDirectory=./dist-dev/quarkus-app-m2",
+ "build": "run-script-if --bool \"$(build-env containerImages.build)\"
--then \"pnpm copy:assets\" \"pnpm m2-repo-via-http:container:run\" \"pnpm
image:docker:build\" --finally \"pnpm m2-repo-via-http:container:kill\"",
+ "build:dev": "pnpm build",
+ "build:prod": "pnpm build",
+ "copy:assets": "rimraf dist-dev && mkdir -p ./dist-dev && pnpm
copy:quarkus-app && pnpm copy:maven-m2-repo-via-http-image--settings-xml",
+ "copy:maven-m2-repo-via-http-image--settings-xml": "run-script-os",
+ "copy:maven-m2-repo-via-http-image--settings-xml:linux:darwin":
"M2_REPO_VIA_HTTP_PORT=$(build-env
devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImagePort)
envsubst <
./node_modules/@kie-tools/maven-m2-repo-via-http-image/settings.xml.envsubst >
dist-dev/settings.xml",
+ "copy:maven-m2-repo-via-http-image--settings-xml:win32": "pnpm powershell
\"(Get-Content
./node_modules/@kie-tools/maven-m2-repo-via-http-image/settings.xml.envsubst)
-replace '$M2_REPO_VIA_HTTP_PORT', $(build-env
devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImagePort) |
Set-Content ./dist-dev/settings.xml\"",
"copy:quarkus-app": "run-script-os",
"copy:quarkus-app:linux:darwin": " cp -R
./node_modules/@kie-tools/dev-deployment-kogito-quarkus-blank-app/
./dist-dev/quarkus-app && rm -rf ./dist-dev/quarkus-app/node_modules
./dist-dev/quarkus-app/install.js ./dist-dev/quarkus-app/env
./dist-dev/quarkus-app/package.json",
"copy:quarkus-app:win32": "pnpm powershell \"New-Item -ItemType Directory
-Force -Path ./dist-dev/quarkus-app; Copy-Item -R
./node_modules/@kie-tools/dev-deployment-kogito-quarkus-blank-app/*
./dist-dev/quarkus-app -Exclude @('node_modules')\"",
- "create-test-image:build-only": "kie-tools--image-builder build -r
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
+ "create-test-image:build-only": "kie-tools--image-builder build
--allowHostNetworkAccess -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
"create-test-image:kind": "kie-tools--image-builder kind -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/
--kind-cluster-name kie-sandbox-dev-cluster",
"create-test-image:minikube": "kie-tools--image-builder minikube -r
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
"create-test-image:openshift": "kie-tools--image-builder openshift -r
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.account)\" -n
\"$(build-env devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
- "image:docker:build": "kie-tools--image-builder build -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
- "image:podman:build": "kie-tools--image-builder build -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/
-e podman",
+ "image:docker:build": "kie-tools--image-builder build
--allowHostNetworkAccess -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg
ROOT_PATH=/",
+ "image:podman:build": "kie-tools--image-builder build
--allowHostNetworkAccess -r \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.registry)\" -a \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.account)\" -n \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.name)\" -t \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.tags)\" --build-arg
BUILDER_IMAGE_ARG=\"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.builderImage)\" --build-arg ROOT_PATH=/
-e podman",
"install": "node install.js",
+ "m2-repo-via-http:container:kill": "(docker container kill
m2-repo-via-http || true) && (docker container rm m2-repo-via-http || true)",
+ "m2-repo-via-http:container:run": "(pnpm m2-repo-via-http:container:kill
|| true) && docker run --name m2-repo-via-http -v
~/.m2/repository:/var/www/html -dit -p \"$(build-env
devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImagePort):80\"
$(build-env
devDeploymentKogitoQuarkusBlankAppImage.dev.mavenM2RepoViaHttpImage)",
"powershell": "@powershell -NoProfile -ExecutionPolicy Unrestricted
-Command"
},
"dependencies": {
@@ -36,6 +41,7 @@
"devDependencies": {
"@kie-tools/image-builder": "workspace:*",
"@kie-tools/maven-config-setup-helper": "workspace:*",
+ "@kie-tools/maven-m2-repo-via-http-image": "workspace:*",
"@kie-tools/root-env": "workspace:*",
"rimraf": "^3.0.2",
"run-script-os": "^1.1.6"
diff --git a/packages/image-builder/README.md b/packages/image-builder/README.md
index f5896519b02..7da5473806f 100644
--- a/packages/image-builder/README.md
+++ b/packages/image-builder/README.md
@@ -8,17 +8,18 @@ Commands:
@kie-tools/image-builder openshift Builds the image on the OpenShift
cluster in an ImageStream
Options:
- -r, --registry The string for the image registry [string]
- -a, --account The string for the image account [string]
- -n, --name The string for the image name [string] [required]
- -t, --tags The string for the image tags [array] [required]
- -e, --engine The build engine to be used [string] [choices:
"docker", "podman"] [default: "docker"]
- -p, --push Push the image to the registry [boolean] [default:
false]
- -f, --containerfile Path to the Containerfile/Dockerfile [string]
[default: "Containerfile"]
- -c, --context Path to the build context [string] [default: "./"]
- --build-arg Build args for the builder in the format
'<arg>=<value>', where <value> is a string (Can be used multiple times)
[array] [default: []]
- --arch The target build architecture. If not provided will
default to the native architecture [string] [choices: "amd64", "arm64",
"native"] [default: "native"]
- -h, --help Show help [boolean]
+ -r, --registry The string for the image registry [string]
+ -a, --account The string for the image account [string]
+ -n, --name The string for the image name [string]
[required]
+ -t, --tags The string for the image tags [array]
[required]
+ -e, --engine The build engine to be used [string]
[choices: "docker", "podman"] [default: "docker"]
+ -p, --push Push the image to the registry [boolean]
[default: false]
+ --allowHostNetworkAccess Allows host network access during build
[boolean] [default: false]
+ -f, --containerfile Path to the Containerfile/Dockerfile [string]
[default: "Containerfile"]
+ -c, --context Path to the build context [string] [default:
"./"]
+ --build-arg Build args for the builder in the format
'<arg>=<value>', where <value> is a string (Can be used multiple times)
[array] [default: []]
+ --arch The target build architecture. If not provided
will default to the native architecture [string] [choices: "amd64", "arm64",
"native"] [default: "native"]
+ -h, --help Show help [boolean]
Examples:
$ image-builder --registry "$(build-env myCustomEnv.registry)" --account
"$(build-env myCustomEnv.account)" --name "$(build-env myCustomEnv.name)"
--tags "$(build-env myCustomEnv.buildTags)" --engine docker --push Build an
image using parameters from your myCustomEnv build env variables
diff --git a/packages/image-builder/src/bin.ts
b/packages/image-builder/src/bin.ts
index dacff5d095c..2c4f64fdfe6 100644
--- a/packages/image-builder/src/bin.ts
+++ b/packages/image-builder/src/bin.ts
@@ -35,6 +35,7 @@ type ArgsType = {
push: boolean;
buildArg: string[];
arch: string;
+ allowHostNetworkAccess: boolean;
};
function shell() {
@@ -61,7 +62,7 @@ function getImageFullNames(args: ArgsType) {
return args.tags.map((tag) => `${imageFullNameWithoutTags}:${tag}`);
}
-function createAndUseDockerBuilder() {
+function createAndUseDockerBuilder(args: { allowHostNetworkAccess: boolean }) {
try {
console.info("-> Checking for existing kie-tools-builder...");
execSync("docker buildx inspect kie-tools-builder", { stdio: "inherit" });
@@ -69,9 +70,19 @@ function createAndUseDockerBuilder() {
execSync("docker buildx use kie-tools-builder", { stdio: "inherit" });
} catch (e) {
console.info("- kie-tools-builder not found, creating it.");
- execSync("docker buildx create --name kie-tools-builder --driver
docker-container --bootstrap --use", {
- stdio: "inherit",
- });
+ execSync(
+ `docker buildx create
+ ${args.allowHostNetworkAccess ? "--buildkitd-flags
'--allow-insecure-entitlement network.host'" : ""}
+ --name kie-tools-builder
+ --driver docker-container
+ --bootstrap
+ --use`
+ .split("\n")
+ .join(" "),
+ {
+ stdio: "inherit",
+ }
+ );
}
}
@@ -93,23 +104,35 @@ function buildArchImage(args: ArgsType & { arch: "arm64" |
"amd64" }, imageFullN
amd64: "linux/amd64",
}[args.arch];
- createAndUseDockerBuilder();
-
- const buildPlatformCommand = `docker buildx build --progress=plain --load
--platform ${platform} ${
- args.push ? "--push" : ""
- } ${imageFullNames.map((fullName) => `-t ${fullName}`).join(" ")}
${args.buildArg
- .map((arg: string) => `--build-arg ${arg}`)
- .join(" ")} ${args.context} -f ${args.containerfile}`;
+ createAndUseDockerBuilder({ allowHostNetworkAccess:
args.allowHostNetworkAccess });
+
+ const buildPlatformCommand = `docker buildx build
+ ${args.allowHostNetworkAccess ? "--allow network.host --network host" : ""}
+ --progress=plain
+ --load
+ --platform ${platform}
+ ${args.push ? "--push" : ""}
+ ${imageFullNames.map((fullName) => `-t ${fullName}`).join(" ")}
+ ${args.buildArg.map((arg) => `--build-arg ${arg}`).join(" ")}
+ ${args.context}
+ -f ${args.containerfile}`
+ .split("\n")
+ .join(" ");
execSync(buildPlatformCommand, { stdio: "inherit" });
}
function buildNativeImage(args: ArgsType, imageFullNames: string[]) {
- const buildNativeCommand = `${args.engine} build --progress=plain
${args.push ? "--push" : ""} ${imageFullNames
- .map((fullName) => `-t ${fullName}`)
- .join(" ")} ${args.buildArg.map((arg: string) => `--build-arg
${arg}`).join(" ")} ${args.context} -f ${
- args.containerfile
- }`;
+ const buildNativeCommand = `${args.engine} build
+ --progress=plain
+ ${args.allowHostNetworkAccess ? "--allow network.host --network host" : ""}
+ ${args.push ? "--push" : ""}
+ ${imageFullNames.map((fullName) => `-t ${fullName}`).join(" ")}
+ ${args.buildArg.map((arg) => `--build-arg ${arg}`).join(" ")}
+ ${args.context}
+ -f ${args.containerfile}`
+ .split("\n")
+ .join(" ");
execSync(buildNativeCommand, { stdio: "inherit" });
}
@@ -257,6 +280,12 @@ Also useful to aid on developing images and pushing them
to Kubernetes/OpenShift
describe: "Push the image to the registry",
type: "boolean",
},
+ allowHostNetworkAccess: {
+ demandOption: false,
+ default: false,
+ describe: "Allows host network access during build",
+ type: "boolean",
+ },
containerfile: {
alias: "f",
demandOption: false,
@@ -321,6 +350,7 @@ Also useful to aid on developing images and pushing them to
Kubernetes/OpenShift
- buildArgs: ${args.buildArg.join(" ")}
- engine: ${args.engine}
- push: ${args.push}
+ - allowHostNetworkAccess: ${args.allowHostNetworkAccess}
- arch: linux/${args.arch}
`);
if (args.arch !== "native" && args.engine !== "docker") {
@@ -348,6 +378,7 @@ Also useful to aid on developing images and pushing them to
Kubernetes/OpenShift
- buildArg: ${args.buildArg?.join(" ") ?? " - "}
- engine: ${args.engine}
- push: ${args.push}
+ - allowHostNetworkAccess: ${args.allowHostNetworkAccess}
- arch: linux/amd64`);
if (args.engine !== "docker") {
@@ -390,6 +421,7 @@ Also useful to aid on developing images and pushing them to
Kubernetes/OpenShift
- engine: ${args.engine}
- push: ${args.push}
- arch: linux/amd64
+ - allowHostNetworkAccess: ${args.allowHostNetworkAccess} (ignored)
- kindClusterName: ${args.kindClusterName}
`);
@@ -429,6 +461,7 @@ Also useful to aid on developing images and pushing them to
Kubernetes/OpenShift
- buildArg: ${args.buildArg?.join(" ") ?? " - "}
- engine: ${args.engine} (ignored)
- push: ${args.push}
+ - allowHostNetworkAccess: ${args.allowHostNetworkAccess} (ignored)
- arch: linux/amd64
`);
diff --git a/packages/maven-m2-repo-via-http-image/Containerfile
b/packages/maven-m2-repo-via-http-image/Containerfile
new file mode 100644
index 00000000000..214b9e3164f
--- /dev/null
+++ b/packages/maven-m2-repo-via-http-image/Containerfile
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+FROM --platform=linux/amd64 registry.access.redhat.com/ubi9/ubi-minimal:9.4
+
+# Argument for configuring the port
+ARG PORT=80
+
+# Install required packages: httpd and unzip, clean up after installation
+RUN microdnf --disableplugin=subscription-manager -y install httpd \
+ && microdnf --disableplugin=subscription-manager clean all
+
+# Apache configuration adjustments
+RUN echo "Mutex posixsem" >> /etc/httpd/conf/httpd.conf \
+ && sed -i "s/Listen 80/Listen $PORT/g" /etc/httpd/conf/httpd.conf \
+ && sed -i "s/#ServerName www.example.com:80/ServerName 127.0.0.1:$PORT/g"
/etc/httpd/conf/httpd.conf \
+ && sed -i "/ServerName 127.0.0.1:$PORT/a Header set Content-Security-Policy
\"frame-ancestors 'self';\"" /etc/httpd/conf/httpd.conf \
+ && sed -i "s/Options Indexes FollowSymLinks/Options +Indexes
+FollowSymLinks/" /etc/httpd/conf/httpd.conf \
+ && sed -i "$ a ServerTokens Prod" /etc/httpd/conf/httpd.conf \
+ && sed -i "$ a ServerSignature Off" /etc/httpd/conf/httpd.conf \
+ && sed -i "\$ a <Directory \"/var/www/html\">\n Options +Indexes
+FollowSymLinks\n AllowOverride None\n Require all granted\n
IndexOptions FancyIndexing SuppressDescription SuppressHTMLPreamble
SuppressLastModified SuppressSize NameWidth=* SuppressColumnSorting
SuppressIcon SuppressRules\n HeaderName /header.html\n ReadmeName
/readme.html\n</Directory>" /etc/httpd/conf/httpd.conf
+
+VOLUME /var/www/html/
+
+# Remove the default welcome page to avoid conflicts
+RUN rm -rf /etc/httpd/conf.d/welcome.conf
+
+# Expose the configured port
+EXPOSE $PORT
+
+HEALTHCHECK --interval=1s --timeout=60s CMD curl -f http://localhost:"$PORT"
|| exit 1
+
+# Start httpd when the container launches
+CMD ["httpd", "-D", "FOREGROUND"]
\ No newline at end of file
diff --git a/packages/maven-m2-repo-via-http-image/README.md
b/packages/maven-m2-repo-via-http-image/README.md
new file mode 100644
index 00000000000..1146e369e98
--- /dev/null
+++ b/packages/maven-m2-repo-via-http-image/README.md
@@ -0,0 +1,26 @@
+## (private) Apache KIE⢠:: Tools :: Maven M2 repo via HTTP
+
+Used to expose the local Maven repository (E.g., ~/.m2/repository) via HTTP,
so it can be used inside other container builds. This is important so that
containers can include applications that depend on locally-built Maven
artifacts.
+
+Containers referencing this must make use of `settings.xml.envsubst` so that:
+
+1. The default Maven blocker for repositories exposed via HTTP without TSL is
disabled.
+1. The exposed Maven repository via HTTP is accessible from within the
container image build.
+
+> NOTE: Host network access is not enabled by default during image builds. Use
the `--allowHostNetworkAccess` option of `@kie-tools/image-builder` to enable
it.
+
+### Usage
+
+Running the container:
+
+- `docker run --name m2-repo-via-http -v ~/.m2/repository:/var/www/html -dit
-p 8008:80 docker.io/apache/incubator-kie-tools-maven-m2-repo-via-http:main`
+
+Interpolating settings.xml
+
+- Linux and macOS:
+
+ `M2_REPO_VIA_HTTP_PORT=8008 envsubst < settings.xml.envsubst >
/tmp/settings.xml`
+
+- Windows (PowerShell):
+
+ `(Get-Content settings.xml.envsubst) -replace '$M2_REPO_VIA_HTTP_PORT', 8008
| Set-Content /tmp/settings.xml`
diff --git a/packages/maven-m2-repo-via-http-image/env/index.js
b/packages/maven-m2-repo-via-http-image/env/index.js
new file mode 100644
index 00000000000..69b9c5e351a
--- /dev/null
+++ b/packages/maven-m2-repo-via-http-image/env/index.js
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const { varsWithName, composeEnv, getOrDefault } =
require("@kie-tools-scripts/build-env");
+
+const rootEnv = require("@kie-tools/root-env/env");
+
+module.exports = composeEnv([rootEnv], {
+ vars: varsWithName({
+ MAVEN_M2_REPO_VIA_HTTP_IMAGE__registry: {
+ default: "docker.io",
+ description: "The image registry.",
+ },
+ MAVEN_M2_REPO_VIA_HTTP_IMAGE__account: {
+ default: "apache",
+ description: "The image registry account.",
+ },
+ MAVEN_M2_REPO_VIA_HTTP_IMAGE__name: {
+ default: "incubator-kie-tools-maven-m2-repo-via-http",
+ description: "The image name.",
+ },
+ MAVEN_M2_REPO_VIA_HTTP_IMAGE__buildTag: {
+ default: rootEnv.env.root.streamName,
+ description: "The image tag.",
+ },
+ }),
+ get env() {
+ return {
+ mavenM2RepoViaHttpImage: {
+ registry:
getOrDefault(this.vars.MAVEN_M2_REPO_VIA_HTTP_IMAGE__registry),
+ account: getOrDefault(this.vars.MAVEN_M2_REPO_VIA_HTTP_IMAGE__account),
+ name: getOrDefault(this.vars.MAVEN_M2_REPO_VIA_HTTP_IMAGE__name),
+ tag: getOrDefault(this.vars.MAVEN_M2_REPO_VIA_HTTP_IMAGE__buildTag),
+ },
+ };
+ },
+});
diff --git a/packages/maven-m2-repo-via-http-image/package.json
b/packages/maven-m2-repo-via-http-image/package.json
new file mode 100644
index 00000000000..62e0c9afa68
--- /dev/null
+++ b/packages/maven-m2-repo-via-http-image/package.json
@@ -0,0 +1,26 @@
+{
+ "private": true,
+ "name": "@kie-tools/maven-m2-repo-via-http-image",
+ "version": "0.0.0",
+ "description": "",
+ "license": "Apache-2.0",
+ "homepage": "https://github.com/apache/incubator-kie-tools",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/apache/incubator-kie-tools.git"
+ },
+ "bugs": {
+ "url": "https://github.com/apache/incubator-kie-tools/issues"
+ },
+ "scripts": {
+ "build": "run-script-if --bool \"$(build-env containerImages.build)\"
--then \"pnpm image:docker:build\"",
+ "build:dev": "pnpm build",
+ "build:prod": "pnpm build",
+ "image:docker:build": "kie-tools--image-builder build -r \"$(build-env
mavenM2RepoViaHttpImage.registry)\" -a \"$(build-env
mavenM2RepoViaHttpImage.account)\" -n \"$(build-env
mavenM2RepoViaHttpImage.name)\" -t \"$(build-env mavenM2RepoViaHttpImage.tag)\""
+ },
+ "devDependencies": {
+ "@kie-tools/image-builder": "workspace:*",
+ "@kie-tools/root-env": "workspace:*",
+ "run-script-os": "^1.1.6"
+ }
+}
\ No newline at end of file
diff --git a/packages/maven-m2-repo-via-http-image/settings.xml.envsubst
b/packages/maven-m2-repo-via-http-image/settings.xml.envsubst
new file mode 100644
index 00000000000..5579fb17347
--- /dev/null
+++ b/packages/maven-m2-repo-via-http-image/settings.xml.envsubst
@@ -0,0 +1,56 @@
+<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
+ <mirrors>
+ <mirror>
+ <id>kie-tools--maven-m2-repo-via-http-allowed</id>
+ <mirrorOf>kie-tools--maven-m2-repo-via-http</mirrorOf>
+ <name>Mirror to override default blocking mirror that blocks http.</name>
+ <url>http://localhost:$M2_REPO_VIA_HTTP_PORT</url>
+ </mirror>
+ </mirrors>
+
+ <profiles>
+ <profile>
+ <id>kie-tools--maven-m2-repo-via-http-allowed-profile</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <repositories>
+ <repository>
+ <id>kie-tools--maven-m2-repo-via-http</id>
+ <name>KIE Tools :: Maven M2 Repo via HTTP</name>
+ <url>http://localhost:$M2_REPO_VIA_HTTP_PORT/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>daily</updatePolicy>
+ </snapshots>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>kie-tools--maven-m2-repo-via-http</id>
+ <name>KIE Tools :: Maven M2 Repo via HTTP</name>
+ <url>http://localhost:$M2_REPO_VIA_HTTP_PORT/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>daily</updatePolicy>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+
+
+</settings>
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 186b2ed6ca4..9faba3aec0f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3363,6 +3363,9 @@ importers:
"@kie-tools/maven-config-setup-helper":
specifier: workspace:*
version: link:../maven-config-setup-helper
+ "@kie-tools/maven-m2-repo-via-http-image":
+ specifier: workspace:*
+ version: link:../maven-m2-repo-via-http-image
"@kie-tools/root-env":
specifier: workspace:*
version: link:../root-env
@@ -6212,6 +6215,18 @@ importers:
packages/maven-config-setup-helper: {}
+ packages/maven-m2-repo-via-http-image:
+ devDependencies:
+ "@kie-tools/image-builder":
+ specifier: workspace:*
+ version: link:../image-builder
+ "@kie-tools/root-env":
+ specifier: workspace:*
+ version: link:../root-env
+ run-script-os:
+ specifier: ^1.1.6
+ version: 1.1.6
+
packages/monaco-editor:
dependencies:
monaco-editor:
diff --git a/repo/graph.dot b/repo/graph.dot
index efc21715fa8..74f179a2141 100644
--- a/repo/graph.dot
+++ b/repo/graph.dot
@@ -90,6 +90,7 @@ digraph G {
"@kie-tools/dev-deployment-kogito-quarkus-blank-app" [ color = "black",
fontcolor = "black", style = "dashed, rounded" ];
"@kie-tools/maven-config-setup-helper" [ color = "black", fontcolor =
"black", style = "dashed, rounded" ];
"@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" [ color =
"black", fontcolor = "black", style = "dashed, rounded" ];
+ "@kie-tools/maven-m2-repo-via-http-image" [ color = "black", fontcolor =
"black", style = "dashed, rounded" ];
"@kie-tools/dmn-editor" [ color = "blue", fontcolor = "blue", style =
"rounded" ];
"@kie-tools-core/react-hooks" [ color = "purple", fontcolor = "purple",
style = "rounded" ];
"@kie-tools/pmml-editor-marshaller" [ color = "blue", fontcolor = "blue",
style = "rounded" ];
@@ -311,6 +312,7 @@ digraph G {
"@kie-tools/dev-deployment-kogito-quarkus-blank-app" ->
"@kie-tools/root-env" [ style = "dashed", color = "black" ];
"@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" ->
"@kie-tools/dev-deployment-base-image" [ style = "solid", color = "black" ];
"@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" ->
"@kie-tools/dev-deployment-kogito-quarkus-blank-app" [ style = "solid", color =
"black" ];
+ "@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" ->
"@kie-tools/maven-m2-repo-via-http-image" [ style = "dashed", color = "black" ];
"@kie-tools/dev-deployment-upload-service" -> "@kie-tools/root-env" [ style
= "dashed", color = "black" ];
"@kie-tools/dmn-editor" -> "@kie-tools-core/react-hooks" [ style = "solid",
color = "blue" ];
"@kie-tools/dmn-editor" -> "@kie-tools/boxed-expression-component" [ style =
"solid", color = "blue" ];
@@ -410,6 +412,8 @@ digraph G {
"@kie-tools-core/kubernetes-bridge" -> "@kie-tools/cors-proxy-api" [ style =
"solid", color = "purple" ];
"@kie-tools/maven-base" -> "@kie-tools/maven-config-setup-helper" [ style =
"dashed", color = "black" ];
"@kie-tools/maven-base" -> "@kie-tools/root-env" [ style = "dashed", color =
"black" ];
+ "@kie-tools/maven-m2-repo-via-http-image" -> "@kie-tools/image-builder" [
style = "dashed", color = "black" ];
+ "@kie-tools/maven-m2-repo-via-http-image" -> "@kie-tools/root-env" [ style =
"dashed", color = "black" ];
"@kie-tools-core/monaco-editor" -> "@kie-tools/eslint" [ style = "dashed",
color = "purple" ];
"@kie-tools-core/monaco-editor" -> "@kie-tools/root-env" [ style = "dashed",
color = "purple" ];
"@kie-tools-core/monaco-editor" -> "@kie-tools/tsconfig" [ style = "dashed",
color = "purple" ];
diff --git a/repo/graph.json b/repo/graph.json
index 1d7d99b44f3..75b9eb78534 100644
--- a/repo/graph.json
+++ b/repo/graph.json
@@ -108,6 +108,7 @@
{ "id": "@kie-tools/dev-deployment-dmn-form-webapp-image" },
{ "id": "@kie-tools/dev-deployment-kogito-quarkus-blank-app" },
{ "id": "@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" },
+ { "id": "@kie-tools/maven-m2-repo-via-http-image" },
{ "id": "@kie-tools/dmn-editor" },
{ "id": "@kie-tools/dmn-editor-envelope" },
{ "id": "@kie-tools/dmn-feel-antlr4-parser" },
@@ -724,6 +725,13 @@
"target": "@kie-tools/dev-deployment-kogito-quarkus-blank-app",
"weight": 1
},
+ {
+ "source": "@kie-tools/dev-deployment-kogito-quarkus-blank-app-image",
+ "target": "@kie-tools/maven-m2-repo-via-http-image",
+ "weight": 1
+ },
+ { "source": "@kie-tools/maven-m2-repo-via-http-image", "target":
"@kie-tools/image-builder", "weight": 1 },
+ { "source": "@kie-tools/maven-m2-repo-via-http-image", "target":
"@kie-tools/root-env", "weight": 1 },
{ "source": "@kie-tools/dmn-editor", "target":
"@kie-tools-core/react-hooks", "weight": 1 },
{ "source": "@kie-tools/dmn-editor", "target":
"@kie-tools/boxed-expression-component", "weight": 1 },
{ "source": "@kie-tools/dmn-editor", "target":
"@kie-tools/pmml-editor-marshaller", "weight": 1 },
@@ -1273,6 +1281,7 @@
["@kie-tools-core/kubernetes-bridge", "packages/kubernetes-bridge"],
["@kie-tools/maven-base", "packages/maven-base"],
["@kie-tools/maven-config-setup-helper",
"packages/maven-config-setup-helper"],
+ ["@kie-tools/maven-m2-repo-via-http-image",
"packages/maven-m2-repo-via-http-image"],
["@kie-tools-core/monaco-editor", "packages/monaco-editor"],
["@kie-tools-core/notifications", "packages/notifications"],
["@kie-tools/online-editor", "packages/online-editor"],
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]