Skip to content

Commit 7a4cd38

Browse files
RamSubbaraoGitHub Enterprise
authored andcommitted
Enable builds on SPS for SC2 branch (#1004)
* Enable builds on SPS for sc2 branch
1 parent c22f7c7 commit 7a4cd38

21 files changed

+1115
-117
lines changed

Makefile

Lines changed: 30 additions & 112 deletions
Large diffs are not rendered by default.

Makefile.pipeline.mk

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# © Copyright IBM Corporation 2025
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
#sps : Check if the environment is SPS or not
16+
ifneq (,$(PIPELINE_RUN_ID))
17+
PIPELINE_BRANCH=$(BRANCH)
18+
BUILD_DIRECTORY=$(SPS_BUILD_DIR)
19+
BUILD_SCRIPTS_PATH=sps-build-scripts
20+
COMMAND=podman
21+
IMAGE_FORMAT=--format docker
22+
ifeq "$(ARCH)" "ppc64le"
23+
NUM_CPU=2
24+
endif
25+
ifeq "$(PIPELINE_NAMESPACE)" "pr"
26+
PIPELINE_PULL_REQUEST=true
27+
endif
28+
ifeq "$(PIPELINE_NAMESPACE)" "ci"
29+
PIPELINE_PULL_REQUEST=false
30+
endif
31+
else
32+
# sps: If TRAVIS has a value then the build is running on travis
33+
PIPELINE_BRANCH=$(TRAVIS_BRANCH)
34+
PIPELINE_PULL_REQUEST=$(TRAVIS_PULL_REQUEST)
35+
BUILD_DIRECTORY=$(TRAVIS_BUILD_DIR)
36+
BUILD_SCRIPTS_PATH=travis-build-scripts
37+
endif
38+
39+
# If this is a fake master build, push images to alternative location (pipeline wont consider these images GA candidates)
40+
ifeq ($(shell [ "$(TRAVIS)" = "true" ] && [ -n "$(MAIN_BRANCH)" ] && [ -n "$(SOURCE_BRANCH)" ] && [ "$(MAIN_BRANCH)" != "$(SOURCE_BRANCH)" ] && echo "true"), true)
41+
MQ_DELIVERY_REGISTRY_NAMESPACE="master-fake"
42+
endif
43+
44+
# LTS_TAG is the tag modifier for an LTS container build
45+
LTS_TAG=
46+
ifeq "$(LTS)" "true"
47+
ifneq "$(LTS_TAG_OVERRIDE)" "$(EMPTY)"
48+
LTS_TAG=$(LTS_TAG_OVERRIDE)
49+
else
50+
LTS_TAG=-lts
51+
endif
52+
MQ_ARCHIVE:=$(MQ_VERSION)-IBM-MQ-Advanced-Non-Install-Linux$(MQ_ARCHIVE_ARCH).tar.gz
53+
MQ_DELIVERY_REGISTRY_NAMESPACE:=$(MQ_DELIVERY_REGISTRY_NAMESPACE)$(LTS_TAG)
54+
endif
55+
56+
ifneq "$(MQ_DELIVERY_REGISTRY_NAMESPACE)" "$(EMPTY)"
57+
MQ_DELIVERY_REGISTRY_FULL_PATH=$(MQ_DELIVERY_REGISTRY_HOSTNAME)/$(MQ_DELIVERY_REGISTRY_NAMESPACE)
58+
else
59+
MQ_DELIVERY_REGISTRY_FULL_PATH=$(MQ_DELIVERY_REGISTRY_HOSTNAME)
60+
endif
61+
62+
#sps : check if the build is Travis or SPS
63+
ifeq ($(shell ( [ ! -z $(TRAVIS) ] || [ ! -z $(PIPELINE_RUN_ID) ] ) && echo "$(PIPELINE_BRANCH)" | grep -q '^ifix-' && echo true), true)
64+
MQ_DELIVERY_REGISTRY_FULL_PATH=$(MQ_DELIVERY_REGISTRY_HOSTNAME)/$(MQ_DELIVERY_REGISTRY_NAMESPACE_IFIX)
65+
MQ_DELIVERY_REGISTRY_NAMESPACE=$(MQ_DELIVERY_REGISTRY_NAMESPACE_IFIX)
66+
endif
67+
68+
# image tagging
69+
70+
ifneq "$(RELEASE)" "$(EMPTY)"
71+
EXTRA_LABELS_RELEASE=--label "release=$(RELEASE)"
72+
RELEASE_TAG=-$(RELEASE)
73+
endif
74+
75+
ifneq "$(MQ_ARCHIVE_LEVEL)" "$(EMPTY)"
76+
EXTRA_LABELS_LEVEL=--label "mq-build=$(MQ_ARCHIVE_LEVEL)"
77+
endif
78+
79+
EXTRA_LABELS=$(EXTRA_LABELS_RELEASE) $(EXTRA_LABELS_LEVEL)
80+
81+
ifeq "$(TIMESTAMPFLAT)" "$(EMPTY)"
82+
TIMESTAMPFLAT=$(shell date "+%Y%m%d%H%M%S")
83+
endif
84+
85+
ifeq "$(GIT_COMMIT)" "$(EMPTY)"
86+
GIT_COMMIT=$(shell git rev-parse --short HEAD)
87+
endif
88+
89+
#sps: Use the new variable PIPELINE_PULL_REQUEST
90+
ifeq ($(shell ( [ ! -z $(TRAVIS) ] || [ ! -z $(PIPELINE_RUN_ID) ] ) && [ "$(PIPELINE_PULL_REQUEST)" = "false" ] && [ "$(PIPELINE_BRANCH)" = "$(MAIN_BRANCH)" ] && echo true), true)
91+
MQ_MANIFEST_TAG_SUFFIX=.$(TIMESTAMPFLAT).$(GIT_COMMIT)
92+
endif
93+
94+
#sps: Use the new variable PIPELINE_PULL_REQUEST
95+
ifeq ($(shell ( [ ! -z $(TRAVIS) ] || [ ! -z $(PIPELINE_RUN_ID) ] ) && [ "$(PIPELINE_PULL_REQUEST)" = "false" ] && echo "$(PIPELINE_BRANCH)" | grep -q '^ifix-' && echo true), true)
96+
MQ_MANIFEST_TAG_SUFFIX=-$(APAR_NUMBER)-$(FIX_NUMBER).$(TIMESTAMPFLAT).$(GIT_COMMIT)
97+
endif
98+
99+
#sps: Update the TRAVIS_BUILD_DIR variable to use BUILD_DIRECTORY
100+
PATH_TO_MQ_TAG_CACHE=$(BUILD_DIRECTORY)/.tagcache
101+
ifneq ($(strip $(TRAVIS))$(strip $(PIPELINE_RUN_ID)),)
102+
ifneq ("$(wildcard $(PATH_TO_MQ_TAG_CACHE))","")
103+
include $(PATH_TO_MQ_TAG_CACHE)
104+
endif
105+
endif
106+
107+
MQ_AMD64_TAG=$(MQ_MANIFEST_TAG)-amd64
108+
MQ_S390X_TAG?=$(MQ_MANIFEST_TAG)-s390x
109+
MQ_PPC64LE_TAG?=$(MQ_MANIFEST_TAG)-ppc64le
110+
111+
# end image tagging
112+
113+
MQ_IMAGE_FULL_RELEASE_NAME=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)
114+
MQ_IMAGE_DEV_FULL_RELEASE_NAME=$(MQ_IMAGE_DEVSERVER):$(MQ_TAG)
115+
116+
#setup variables for fat-manifests
117+
MQ_IMAGE_DEVSERVER_MANIFEST=$(MQ_IMAGE_DEVSERVER):$(MQ_MANIFEST_TAG)
118+
MQ_IMAGE_ADVANCEDSERVER_MANIFEST=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_MANIFEST_TAG)
119+
MQ_IMAGE_DEVSERVER_AMD64=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_DEVSERVER):$(MQ_AMD64_TAG)
120+
MQ_IMAGE_DEVSERVER_S390X=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_DEVSERVER):$(MQ_S390X_TAG)
121+
MQ_IMAGE_DEVSERVER_PPC64LE=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_DEVSERVER):$(MQ_PPC64LE_TAG)
122+
MQ_IMAGE_ADVANCEDSERVER_AMD64=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_AMD64_TAG)
123+
MQ_IMAGE_ADVANCEDSERVER_S390X=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_S390X_TAG)
124+
MQ_IMAGE_ADVANCEDSERVER_PPC64LE=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_PPC64LE_TAG)
125+
126+
MQ_IMAGE_DEVSERVER_MANIFEST_IFIX=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_DEVSERVER):$(MQ_MANIFEST_TAG)
127+
MQ_IMAGE_ADVANCESERVER_MANIFEST_IFIX=$(MQ_DELIVERY_REGISTRY_FULL_PATH)/$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_MANIFEST_TAG)
128+
129+
PROJECT_DIR := $(shell pwd)
130+
BUILD_MANIFEST_FILE := $(PROJECT_DIR)/latest-build-info/build-manifest.yaml

pipeline.env

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
###########################################################################################################################################################
2+
MAIN_BRANCH=v9.4.0
3+
RELEASE=r1
4+
BASE_MQ_LOCKED=false
5+
###########################################################################################################################################################

sps-build-scripts/artifact-util.sh

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
#!/bin/bash
2+
3+
# © Copyright IBM Corporation 2020,2025
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
usage="
18+
Usage: artifact-util.sh -c my-registry.com/artifacts/my-project/builds/123 -u [email protected] -p top-secret -f tagcache -l ./.tagcache --upload \"
19+
20+
Where:
21+
-c - Full artifact destination hostname and path
22+
-u - The username to access repository
23+
-p - The password or api-key to access repository
24+
-f - Name of the file in repository
25+
-l - The path and name to the file whose contents is to be pushed or retrieved into
26+
Then one action of either
27+
--check - Check if the file exists
28+
--upload - Upload the contents of a file [-l must be specified]
29+
--get - Get a file and write to a local file [-l must be specified]
30+
--delete - Delet the remote file from repository
31+
"
32+
33+
GREEN="\033[32m"
34+
RED="\033[31m"
35+
36+
END="\033[0m"
37+
38+
39+
RIGHTARROW="\xE2\x96\xB6"
40+
GREENRIGHTARROW=${GREEN}${RIGHTARROW}${END}
41+
42+
ERROR=${RED}
43+
44+
TICK="\xE2\x9C\x94"
45+
CROSS="\xE2\x9C\x97"
46+
GREENTICK=${GREEN}${TICK}${END}
47+
REDCROSS=${RED}${CROSS}${END}
48+
49+
50+
SPACER="\n\n"
51+
52+
USER=
53+
CREDENTIAL=
54+
FILE_NAME=
55+
FILE_LOCATION=
56+
PROPERTY_NAME=
57+
58+
CHECK=false
59+
UPLOAD=false
60+
GET=false
61+
GET_PROPERTY=false
62+
DELETE=false
63+
DELETE_NAMESPACE=false
64+
num_commands_selected=0
65+
while getopts "f:u:p:c:l:n:-:" flag
66+
do
67+
case "${flag}" in
68+
f) FILE_NAME=${OPTARG};;
69+
u) USER=${OPTARG};;
70+
p) CREDENTIAL=${OPTARG};;
71+
c) CACHE_PATH=${OPTARG};;
72+
l) FILE_LOCATION=${OPTARG};;
73+
n) PROPERTY_NAME=${OPTARG};;
74+
-)
75+
case "${OPTARG}" in
76+
check)
77+
CHECK=true
78+
num_commands_selected=$((num_commands_selected+1))
79+
;;
80+
upload)
81+
UPLOAD=true
82+
num_commands_selected=$((num_commands_selected+1))
83+
;;
84+
get)
85+
GET=true
86+
num_commands_selected=$((num_commands_selected+1))
87+
;;
88+
get-property)
89+
GET_PROPERTY=true
90+
num_commands_selected=$((num_commands_selected+1))
91+
;;
92+
delete)
93+
DELETE=true
94+
num_commands_selected=$((num_commands_selected+1))
95+
;;
96+
delete-namespace)
97+
DELETE_NAMESPACE=true
98+
num_commands_selected=$((num_commands_selected+1))
99+
;;
100+
*)
101+
if [ "$OPTERR" = 1 ] && [ "${optspec:0:1}" != ":" ]; then
102+
echo "Unknown option --${OPTARG}" >&2
103+
fi
104+
;;
105+
esac;;
106+
esac
107+
done
108+
109+
if [[ $num_commands_selected == 0 || $num_commands_selected -gt 1 ]]; then
110+
printf "${REDCROSS} ${ERROR}Too many actions specified. Should be one of ${END}--check${ERROR},${END} --get${ERROR},${END} --upload${ERROR} or${END} --delete${ERROR}!${END}\n"
111+
printf $SPACER
112+
printf "${ERROR}$usage${END}\n"
113+
exit 1
114+
fi
115+
116+
if [ "$DELETE_NAMESPACE" != "true" ]; then
117+
if [[ -z $CACHE_PATH|| -z $USER || -z $CREDENTIAL || -z $FILE_NAME ]] ; then
118+
printf "${REDCROSS} ${ERROR}Missing parameter!${END}\n"
119+
printf "Cache Path:"$CACHE_PATH"\n"
120+
printf "File name:"$FILE_NAME"\n"
121+
printf "User":$USER"\n"
122+
printf $SPACER
123+
printf "${ERROR}$usage${END}\n"
124+
exit 1
125+
fi
126+
fi
127+
128+
#sps modify from build directory to pipeline run id
129+
REMOTE_PATH="https://${CACHE_PATH}/${PIPELINE_RUN_ID}"
130+
131+
if [ "$CHECK" == "true" ]; then
132+
printf "${GREENRIGHTARROW} Checking to see if file ${FILE_NAME} exists in repository ${REMOTE_PATH}\n"
133+
FILE_FOUND=`curl -u ${USER}:${CREDENTIAL} -X GET "${REMOTE_PATH}/${FILE_NAME}" -o /dev/null -w "%{http_code}" -s`
134+
if [ "$FILE_FOUND" != "200" ]; then
135+
printf "${REDCROSS} File ${FILE_NAME} was not found\n"
136+
exit 1
137+
else
138+
printf "${GREENTICK} File ${FILE_NAME} was found\n"
139+
fi
140+
fi
141+
142+
if [ "$UPLOAD" == "true" ]; then
143+
printf "${GREENRIGHTARROW} Attempting to upload the file ${FILE_NAME} to repository ${REMOTE_PATH}\n"
144+
if [[ -z $FILE_LOCATION ]]; then
145+
printf "${REDCROSS} Location for ${FILE_NAME} was not supplied please do so\n"
146+
printf $SPACER
147+
printf "${ERROR}$usage${END}\n"
148+
exit 1
149+
fi
150+
if [ ! -f "$FILE_LOCATION" ]; then
151+
printf "${REDCROSS} Location -- ${PWD} -- ${PATH_TO_MQ_TAG_CACHE} supplied ${FILE_LOCATION} for file ${FILE_NAME} did not resolve to a file with contents to upload\n"
152+
printf $SPACER
153+
printf "${ERROR}$usage${END}\n"
154+
exit 1
155+
fi
156+
curl -u ${USER}:${CREDENTIAL} -X PUT "$REMOTE_PATH/${FILE_NAME}" -T ${FILE_LOCATION}
157+
fi
158+
159+
if [ "$GET" == "true" ]; then
160+
printf "${GREENRIGHTARROW} Attempting to download file ${FILE_NAME} from repository ${REMOTE_PATH} to ${FILE_LOCATION}\n"
161+
if [[ -z $FILE_LOCATION ]]; then
162+
printf "${REDCROSS} Location for ${FILE_NAME} was not supplied please do so\n"
163+
printf $SPACER
164+
printf "${ERROR}$usage${END}\n"
165+
exit 1
166+
fi
167+
curl -u ${USER}:${CREDENTIAL} "$REMOTE_PATH/${FILE_NAME}" -o ${FILE_LOCATION} -s
168+
if [ $? != 0 ]; then
169+
printf "${REDCROSS} Failed download\n"
170+
else
171+
printf "${GREENTICK} File ${FILE_NAME} was downloaded to ${FILE_LOCATION}\n"
172+
fi
173+
fi
174+
175+
if [ "$GET_PROPERTY" == "true" ]; then
176+
if [[ -z $PROPERTY_NAME ]]; then
177+
printf "${REDCROSS} Property name to retrieve from '${FILE_NAME}' was not supplied please do so\n"
178+
printf $SPACER
179+
printf "${ERROR}$usage${END}\n"
180+
exit 1
181+
fi
182+
if [[ -z $FILE_LOCATION ]]; then
183+
printf "${REDCROSS} File location to store property value in was not supplied please do so\n"
184+
printf $SPACER
185+
printf "${ERROR}$usage${END}\n"
186+
exit 1
187+
fi
188+
printf "${GREENRIGHTARROW} Attempting to retrieve ${PROPERTY_NAME} of ${FILE_NAME} from repository ${REMOTE_PATH} and store it in ${FILE_LOCATION}\n"
189+
190+
query_url="${FILE_NAME}"
191+
query_url="${query_url/\/artifactory\//\/artifactory\/api\/storage\//}?properties=${PROPERTY_NAME}"
192+
request_result="$(curl -s -u ${USER}:${CREDENTIAL} "${query_url}")"
193+
if [ $? != 0 ]; then
194+
printf "Unable to retrieve properties from ${query_url}"
195+
exit 1
196+
else
197+
printf "${GREENTICK} Properties retrieved from ${query_url}"
198+
fi
199+
200+
jq -r '.properties.snapshot|first' <<<"$request_result" > ${FILE_LOCATION}
201+
202+
if [ $? != 0 ]; then
203+
printf "Unable to write snapshot property to ${FILE_LOCATION}"
204+
exit 1
205+
else
206+
printf "${GREENTICK} Property written to ${FILE_LOCATION}"
207+
fi
208+
209+
fi
210+
211+
if [ "$DELETE" == "true" ]; then
212+
printf "${GREENRIGHTARROW} Checking to see if file ${FILE_NAME} exists in repository ${REMOTE_PATH} before delete\n"
213+
FILE_FOUND=`curl -u ${USER}:${CREDENTIAL} -X GET "${REMOTE_PATH}/${FILE_NAME}" -o /dev/null -w "%{http_code}" -s`
214+
if [ "$FILE_FOUND" != "200" ]; then
215+
printf "${REDCROSS} File ${FILE_NAME} was not found to delete\n"
216+
exit 1
217+
else
218+
printf "${GREENTICK} File ${FILE_NAME} was found\n"
219+
printf "${GREENRIGHTARROW} Attempting the delete of ${REMOTE_PATH}/${FILE_NAME}"
220+
curl -u ${USER}:${CREDENTIAL} -X DELETE "${REMOTE_PATH}/${FILE_NAME}" -s
221+
if [ $? != 0 ]; then
222+
printf "${REDCROSS} Failed delete\n"
223+
else
224+
printf "${GREENTICK} File ${FILE_NAME} was deleted from "${REMOTE_PATH}"\n"
225+
fi
226+
fi
227+
fi
228+
229+
if [ "$DELETE_NAMESPACE" == "true" ]; then
230+
printf "${GREENRIGHTARROW} Checking to see if repository ${REMOTE_PATH} exists before delete\n"
231+
DIR_FOUND=`curl -u ${USER}:${CREDENTIAL} -X GET "${REMOTE_PATH}" -o /dev/null -w "%{http_code}" -s`
232+
if [ "$DIR_FOUND" != "200" ]; then
233+
printf "${REDCROSS} Namespace ${REMOTE_PATH} was not found to delete\n"
234+
exit 1
235+
else
236+
printf "${GREENTICK} Namespace ${REMOTE_PATH} was found\n"
237+
printf "${GREENRIGHTARROW} Attempting the delete of ${REMOTE_PATH}"
238+
curl -u ${USER}:${CREDENTIAL} -X DELETE "${REMOTE_PATH}" -s
239+
if [ $? != 0 ]; then
240+
printf "${REDCROSS} Failed delete\n"
241+
else
242+
printf "${GREENTICK} Namespace ${REMOTE_PATH} deleted \n"
243+
fi
244+
fi
245+
fi
246+
exit 0

0 commit comments

Comments
 (0)