Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[backport 2.3.x] Fix offline script to use maven settings and option to skip ssl verification (#5538) #5549

Merged
merged 1 commit into from
May 27, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 59 additions & 22 deletions script/offline_dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@

set -e

if [[ "$OSTYPE" != "linux"* ]]; then
echo "ERROR: This script is intended to run in linux. You may try to edit and tweak it to run in other OS."
exit 1
fi

mvnCmd=$(which mvn)
central_repo=https://repo1.maven.org/maven2
remote_repo=https://repo1.maven.org/maven2
start_time=$(date -u +"%s")

while getopts ":v:m:r:d:" opt; do
while getopts ":v:m:r:d:s" opt; do
case "${opt}" in
m)
mvnCmd="${OPTARG}"
Expand All @@ -33,7 +39,10 @@ while getopts ":v:m:r:d:" opt; do
runtime_version="${OPTARG}"
;;
d)
offline_dir="${OPTARG}"
offline_new_dir="${OPTARG}"
;;
s)
skip_https="-k"
;;
*)
;;
Expand All @@ -43,26 +52,27 @@ shift $((OPTIND-1))

if [ -z ${runtime_version} ]; then
echo "usage: $0 -v <Camel K Runtime version> [optional parameters]"
echo " -m path to mvn command"
echo " -r URL address of the maven repository manager"
echo " -d local directory to add the offline dependencies"
echo " -m </usr/share/bin/mvn> - Path to mvn command"
echo " -r <http://my-repo.com> - URL address of the maven repository manager"
echo " -d </var/tmp/offline-1.2> - Local directory to add the offline dependencies"
echo " -s - Skip Certificate validation"
exit 1
fi

offline=./_offline-${runtime_version}
if [ ! -z ${offline_dir} ]; then
offline=${offline_dir}
offline_dir=./_offline-${runtime_version}
if [ ! -z ${offline_new_dir} ]; then
offline_dir=${offline_new_dir}
fi

offline_repo=${offline}/repo
offline_repo=${offline_dir}/repo

# the pom.xml is the one containing all the dependencies from the camel-catalog file
# it is used when running the go-offline and quarkus:go-offline goals to resolve all dependencies
pom=${offline}/pom.xml
pom=${offline_dir}/pom.xml
# the pom-min.xml is used to actually build the project
# it was noted that some transitive dependencies are not correctly resolve when using the go-offlilne plugin goals
# then this was required to resolve some transitive dependencies.
pom_min=${offline}/pom-min.xml
pom_min=${offline_dir}/pom-min.xml

############# SETUP MAVEN
# get the maven version used by camel-k-operator
Expand All @@ -86,23 +96,41 @@ mkdir -p ${offline_repo}
rm -f ${pom} 2> /dev/null

$mvnCmd --version | grep "Apache Maven"

# setup the maven settings in case there is a custom maven repository url
if [[ "${central_repo}" != "${remote_repo}" ]]; then
curl -sfSL https://raw.githubusercontent.com/apache/camel-k/release-2.3.x/script/maven-settings-offline-template.xml -o ${offline_dir}/maven-settings-offline-template.xml
sed "s,_local-maven-proxy_,${remote_repo},g;/<mirrors>/,/<\/mirrors>/d" ${offline_dir}/maven-settings-offline-template.xml > ${offline_dir}/custom-maven-settings.xml

fi

## END SETUP MAVEN

############# SETUP CAMEL CATALOG
echo "INFO: downloading catalog for Camel K Runtime ${runtime_version}"
url=${remote_repo}/org/apache/camel/k/camel-k-catalog/${runtime_version}/camel-k-catalog-${runtime_version}-catalog.yaml
response_code=$(curl -o /dev/null --silent -Iw '%{http_code}' ${url})

if [ -z "${skip_https}" ]; then
# validate if there are certificate issues connecting with curl
cert_problem=$(curl --no-progress-meter -o /dev/null -LI -w '%{http_code}' ${url} 2>&1|grep -i 'SSL certificate problem'|head -1)
if [ ! -z "${cert_problem}" ]; then
echo "ERROR: There is a problem to connect to the maven repository: ${cert_problem}"
echo "You can set the parameter -s to skip certificate validation."
exit 1
fi
fi

response_code=$(curl --no-progress-meter -o /dev/null --silent -LI ${skip_https} -w '%{http_code}' ${url} 2>&1)
if [ 200 != ${response_code} ]; then
echo "ERROR: Camel K Runtime version ${runtime_version} catalog doesn't exist at ${url}"
exit 1
fi
catalog="${offline}/camel-catalog-${runtime_version}.yaml"
echo "INFO: downloading catalog for Camel K Runtime ${runtime_version}"
curl -sfSL ${url} -o ${catalog}
catalog="${offline_dir}/camel-catalog-${runtime_version}.yaml"
curl -sfSL ${skip_https} ${url} -o ${catalog}
## END SETUP CAMEL CATALOG

############# SETUP POM PROJECT
ckr_version=$(yq .spec.runtime.version $catalog)
ckr_version=$(yq .spec.runtime.version ${catalog})
cq_version=$(yq '.spec.runtime.metadata."camel-quarkus.version"' $catalog)
quarkus_version=$(yq '.spec.runtime.metadata."quarkus.version"' $catalog)
jibVersion=$(curl -s https://raw.githubusercontent.com/apache/camel-k/release-2.3.x/pkg/util/jib/configuration.go|grep 'const JibMavenPluginVersionDefault'|cut -d\" -f2)
Expand Down Expand Up @@ -146,7 +174,7 @@ sed 's/- //g' $catalog | grep "groupId\|artifactId" | paste -d " " - - |awk '{p
a=$(echo $line|cut -d: -f2);

# there is no opentracing extension in CEQ, but it was present at the time camel-catalog, skipping it.
if [[ $a == *opentracing ]]; then
if [[ $a == *opentracing ]] || [[ $a == *camel-quarkus-beanio ]]; then
continue;
fi

Expand Down Expand Up @@ -286,8 +314,8 @@ cat <<EOF >> ${pom_min}
EOF

# add a single route to compile
mkdir -p ${offline}/src/main/java/foo
cat <<EOF > ${offline}/src/main/java/foo/Foo.java
mkdir -p ${offline_dir}/src/main/java/foo
cat <<EOF > ${offline_dir}/src/main/java/foo/Foo.java
package foo;

import java.lang.Exception;
Expand All @@ -309,14 +337,23 @@ EOF
# resolve and download artifacts in parallel
perf_params="-Dmaven.artifact.threads=6 -T 6 -Daether.dependencyCollector.impl=bf"
silent="-ntp -Dsilent=true"
$mvnCmd ${perf_params} ${silent} -Dmaven.repo.local=$offline_repo dependency:go-offline quarkus:go-offline -f ${pom}
$mvnCmd ${perf_params} ${silent} -Dmaven.repo.local=$offline_repo package -f ${pom_min}
mvn_skip_ssl=""
if [ ! -z "${skip_https}" ]; then
mvn_skip_ssl="-Dmaven.wagon.http.ssl.insecure=true"
fi
settings_param=""
if [[ "${central_repo}" != "${remote_repo}" ]]; then
settings_param="-s ${offline_dir}/custom-maven-settings.xml"
fi

$mvnCmd ${perf_params} ${silent} ${mvn_skip_ssl} ${settings_param} -Dmaven.repo.local=$offline_repo dependency:go-offline quarkus:go-offline -f ${pom}
$mvnCmd ${perf_params} ${silent} ${mvn_skip_ssl} ${settings_param} -Dmaven.repo.local=$offline_repo package -f ${pom_min}

# remove _remote.repositories as they interfere with the original repo resolver when running in the camel-k-operator pod
find $offline_repo -type f -name _remote.repositories -delete

# we can bundle into a single archive now
offline_file=${offline}/camel-k-runtime-$runtime_version-maven-offline.tar.gz
offline_file=${offline_dir}/camel-k-runtime-$runtime_version-maven-offline.tar.gz
echo "INFO: building ${offline_file} archive"
tar -czf ${offline_file} -C $offline_repo .

Expand Down