Skip to content

Commit b9f5f77

Browse files
authored
added initial support for arazzo workflow (#70)
* shifting service name from outer context * publishing api artifacts as zip * copying zip file to provided path for local run mode * made nopo11y helm config configurable * added arazzo build workflow related logic * aded service version to the api tag * displaying zip extraction info in local mode * removed version from the zip filename formation
1 parent 2f40333 commit b9f5f77

File tree

7 files changed

+181
-4
lines changed

7 files changed

+181
-4
lines changed

tools/chart-generator/scripts/config/settings.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ action:
2626
envVar: APP_IMAGE_TAG
2727
repo:
2828
envVar: APP_IMAGE_REPO
29+
nopo11yHelm:
30+
name:
31+
default: meta-chart
32+
envVar: NOPO11Y_HELM_NAME
33+
version:
34+
default: "1.0.0"
35+
envVar: NOPO11Y_HELM_VERSION
36+
repo:
37+
default: https://znsio.github.io/nopo11y
38+
envVar: NOPO11Y_HELM_REPO
2939
apiBuild:
3040
input:
3141
codebase:

tools/chart-generator/scripts/lib/config.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,15 @@ function appImageTag() {
171171
function appImageRepo() {
172172
envValOf "action.nopo11yApiBuild.input.appImage.repo"
173173
}
174+
175+
function nopo11yHelmName() {
176+
envOrConfiguredValOf "action.nopo11yApiBuild.input.nopo11yHelm.name"
177+
}
178+
179+
function nopo11yHelmVersion() {
180+
envOrConfiguredValOf "action.nopo11yApiBuild.input.nopo11yHelm.version"
181+
}
182+
183+
function nopo11yHelmRepo() {
184+
envOrConfiguredValOf "action.nopo11yApiBuild.input.nopo11yHelm.repo"
185+
}

tools/chart-generator/scripts/lib/constants.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ readonly KEY_ERROR="error"
1010
readonly GENERATE_COMP_ARTIFACTS="generateComponentArtifacts"
1111
readonly GENERATE_API_ARTIFACTS="generateApiArtifacts"
1212
readonly GENERATE_NOPOLLY_API_ARTIFACTS="generateNopo11yApiArtifacts"
13+
readonly GENERATE_ARAZZO_WORKFLOW_ARTIFACTS="generateArazzoWorkflowArtifacts"
1314
readonly RUN_API_CTKS_FROM_COMP_ARTIFACTS="runApiCtksFromComponentArtifacts"
1415

1516
readonly WORKDIR_SUfFIX_CA="comp-build"
1617
readonly WORKDIR_SUfFIX_AA="api-build"
1718
readonly WORKDIR_SUfFIX_NAA="api-build-np"
19+
readonly WORKDIR_SUfFIX_AZW="arz-workflow-build"
1820
readonly WORKDIR_SUfFIX_CR="ctk-run"
1921

2022
readonly ODAC_REPO_URL=$(compSpecRepoUrl)
@@ -74,3 +76,7 @@ readonly APP_ENV=$(appEnv)
7476
readonly APP_IMAGE_NAME=$(appImageName)
7577
readonly APP_IMAGE_TAG=$(appImageTag)
7678
readonly APP_IMAGE_REPO=$(appImageRepo)
79+
80+
readonly NOPO11Y_HELM_NAME=$(nopo11yHelmName)
81+
readonly NOPO11Y_HELM_VERSION=$(nopo11yHelmVersion)
82+
readonly NOPO11Y_HELM_REPO=$(nopo11yHelmRepo)

tools/chart-generator/scripts/lib/o11y/services.sh

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function generateNopo11yApiArtifacts() {
3333

3434
show "Creating Chart.yaml '$chartsFile'" "h3"
3535
mkdir -p "$tmpChartsDir"
36-
cat $(nopo11yConfigFileIn $(inputDir) "default") | yq '{"apiVersion": "v2", "name": .api.service.name, "description": .api.service.description, "type": "application", "version": "1.0.0", "appVersion": .api.service.version, "dependencies": [{"name": "meta-chart", "version": "1.0.0", "repository": "https://znsio.github.io/nopo11y"}]}' > "$chartsFile"
36+
cat $(nopo11yConfigFileIn $(inputDir) "default") | NAME="$NOPO11Y_HELM_NAME" VER="$NOPO11Y_HELM_VERSION" REPO="$NOPO11Y_HELM_REPO" yq '{"apiVersion": "v2", "name": .api.service.name, "description": .api.service.description, "type": "application", "version": "1.0.0", "appVersion": .api.service.version, "dependencies": [{"name": strenv(NAME), "version": strenv(VER), "repository": strenv(REPO)}]}' > "$chartsFile"
3737
cat "$chartsFile"
3838

3939
show "Creating default and env wise values.yaml" "h3"
@@ -76,14 +76,13 @@ function generateNopo11yApiArtifacts() {
7676
valuesFileTemp="$valuesFile.tmp"
7777

7878
show "Adding initial k8s name tags to '$valuesFile'"
79-
serviceName=$(cat "$valuesFile" | yq '.meta-chart.api.service.name')
8079
cat "$valuesFile" | SHORT_TAG="$(shortenedTag $serviceName)" READABLE_TAG="$(readableTag $serviceName)" yq '.meta-chart.api.service.nameGenerated = {"short": strenv(SHORT_TAG), "readable": strenv(READABLE_TAG)}' > "$valuesFileTemp"
8180
cp "$valuesFileTemp" "$valuesFile"
8281
cat "$valuesFile" | grep -A5 'nameGenerated'
8382

8483
show "Adding generated image name to '$valuesFile'"
85-
imgName=$(nonBlankValOrDefault "$APP_IMAGE_NAME" $(cat "$valuesFile" | yq '.meta-chart.api.service.name'))
86-
imgTag=$(nonBlankValOrDefault "$APP_IMAGE_TAG" $(cat "$valuesFile" | yq '.meta-chart.api.service.version'))
84+
imgName=$(nonBlankValOrDefault "$APP_IMAGE_NAME" "$serviceName")
85+
imgTag=$(nonBlankValOrDefault "$APP_IMAGE_TAG" "$serviceVer")
8786
cat "$valuesFile" | IMG_URL=$(dockerImageUrl "$imgName" "$imgTag" "$APP_IMAGE_REPO") yq '.meta-chart.api.container.imageGenerated = strenv(IMG_URL)' > "$valuesFileTemp"
8887
cp "$valuesFileTemp" "$valuesFile"
8988
cat "$valuesFile" | grep -A1 'imageGenerated'
@@ -108,8 +107,34 @@ function generateNopo11yApiArtifacts() {
108107
ls -lah $(chartsDirIn $trgDirByEnv)
109108
}
110109

110+
function publishArtifacts() {
111+
local zipName="$serviceName.zip"
112+
local artifactsDir=$(artifactsDirIn $(outputDir))
113+
local zipFile=$(createPath "$artifactsDir" "$zipName")
114+
115+
show "Creating artifact '$zipName' in '$artifactsDir'" "h2"
116+
currentDir=($pwd)
117+
cd "$artifactsDir" && zip -r "$zipFile" . && cd "$currentDir"
118+
unzip -l "$zipFile"
119+
120+
if [[ "$RUNTIME_MODE" == "$RUNTIME_MODE_LOCAL" ]]; then
121+
if [[ -z "$API_ARTIFACTS_PATH" ]]; then
122+
show "Invalid artifacts file path provided '$API_ARTIFACTS_PATH'" "x"
123+
fi
124+
show "Publishing artifact '$zipFile' to '$API_ARTIFACTS_PATH'"
125+
126+
mkdir -p "$API_ARTIFACTS_PATH"
127+
mv "$zipFile" "$API_ARTIFACTS_PATH"
128+
129+
show "Contents of destination '$API_ARTIFACTS_PATH' (after copying artifact)"
130+
ls -lah "$API_ARTIFACTS_PATH"
131+
fi
132+
}
133+
111134
tmpChartsDir=$(chartsDirIn $(tempDir))
112135
chartsFile=$(chartsFileIn $tmpChartsDir)
136+
serviceName=$(cat $(nopo11yConfigFileIn $(inputDir) "default") | yq '.api.service.name')
137+
serviceVer=$(cat $(nopo11yConfigFileIn $(inputDir) "default") | yq '.api.service.version')
113138
generateInitialHelmCharts
114139

115140
for env in $(echo -n "$ALL_ENVS")
@@ -119,4 +144,6 @@ function generateNopo11yApiArtifacts() {
119144
modifyValuesByEnv
120145
finalizeArtifactsByEnv
121146
done
147+
148+
publishArtifacts
122149
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
function setupArazzoWorkflowWorkspace() {
2+
3+
show "Setting up workspace under directory - '$(baseWorkDir)'" "h1"
4+
5+
function createInitialDirs() {
6+
show "Creating initial set of directories under '$(baseWorkDir)'"
7+
mkdir -p $(tempDir) $(inputDir) $(artifactsDirIn $(outputDir))
8+
ls -lah $(baseWorkDir)
9+
}
10+
11+
function initialiseInputDirs() {
12+
trgPath=$(inputDir)
13+
show "Copying required source content from '$INPUT_ODAC' under - '$trgPath'" "h2"
14+
15+
mkdir -p "$trgPath"
16+
cp -r $(arazzoConfigDirIn "$INPUT_ODAC") "$trgPath"
17+
copySpecmaticFilesIfPresent "$INPUT_ODAC" "$trgPath"
18+
cp $(metaConfigFileIn "$INPUT_ODAC") $(metaConfigFileIn $trgPath)
19+
20+
show "Contents of source: '$INPUT_ODAC'"
21+
ls -lah "$INPUT_ODAC"
22+
23+
show "Contents of destination: '"$trgPath"'"
24+
ls -lah "$trgPath"
25+
ls -lah "$(arazzoConfigDirIn $trgPath)"
26+
}
27+
28+
show "Creating/Cleaning required dirs" "h2"
29+
cleanUpDirs "$(dirsToClean)"
30+
31+
createInitialDirs
32+
initialiseInputDirs
33+
}
34+
35+
function generateArazzoWorkflowArtifacts() {
36+
37+
function finalizeArtifacts() {
38+
show "Finalizing artifact (of component)" "h2"
39+
40+
srcDir=$(inputDir)
41+
trgDir=$(artifactsDirIn $(outputDir))
42+
43+
cp -r "$srcDir/." $trgDir
44+
ls -lah $trgDir
45+
}
46+
47+
function publishArtifacts() {
48+
local zipName="$componentName.zip"
49+
local artifactsDir=$(artifactsDirIn $(outputDir))
50+
local zipFile=$(createPath "$artifactsDir" "$zipName")
51+
52+
show "Creating artifact '$zipName' in '$artifactsDir'" "h2"
53+
currentDir=($pwd)
54+
cd "$artifactsDir" && zip -r "$zipFile" . && cd "$currentDir"
55+
unzip -l "$zipFile"
56+
57+
if [[ "$RUNTIME_MODE" == "$RUNTIME_MODE_LOCAL" ]]; then
58+
if [[ -z "$API_ARTIFACTS_PATH" ]]; then
59+
show "Invalid artifacts file path provided '$API_ARTIFACTS_PATH'" "x"
60+
fi
61+
show "Publishing artifact '$zipFile' to '$API_ARTIFACTS_PATH'"
62+
63+
mkdir -p "$API_ARTIFACTS_PATH"
64+
mv "$zipFile" "$API_ARTIFACTS_PATH"
65+
66+
show "Contents of destination '$API_ARTIFACTS_PATH' (after copying artifact)"
67+
ls -lah "$API_ARTIFACTS_PATH"
68+
fi
69+
}
70+
71+
function displayReleaseInfo() {
72+
local zipName="$componentName.zip"
73+
74+
if [[ "$RUNTIME_MODE" == "$RUNTIME_MODE_LOCAL" ]]; then
75+
zipFile=$(createPath "$API_ARTIFACTS_PATH" "$zipName")
76+
trgDirName=$(basename "$zipFile" ".zip")
77+
trgDir="$API_ARTIFACTS_PATH/$trgDirName"
78+
79+
show "Unzipping artifact '$zipName' in '$trgDir'" "h2"
80+
if [[ -z "$API_ARTIFACTS_PATH" ]]; then
81+
show "Invalid artifacts file path provided '$API_ARTIFACTS_PATH'" "x"
82+
fi
83+
84+
show "Unzipping artifact '$zipFile' into '$trgDir'"
85+
mkdir -p "$trgDir" && rm -rf "$trgDir" && mkdir -p "$trgDir"
86+
unzip "$zipFile" -d "$trgDir"
87+
88+
show "Contents of destination '$trgDir' (after unzipping artifact)"
89+
ls -lah "$trgDir"
90+
91+
show "API artifacts to download"
92+
metaCnfigFile=$(metaConfigFileIn "$trgDir")
93+
cat $metaCnfigFile | yq '.apis[] | "\(.name).zip"'
94+
95+
show "Arazzo command to use"
96+
metaCnfigFile=$(metaConfigFileIn "$trgDir")
97+
params=$(cat $metaCnfigFile | yq '.apis[] | "--serverUrlIndex=\(.arazzoSpecName):\(.server.urlIndexInSpec)"' | tr '\n' ' ')
98+
echo "specmatic-arazzo test $params"
99+
fi
100+
}
101+
102+
componentName=$(cat $(metaConfigFileIn $(inputDir)) | yq '.component.name')
103+
104+
finalizeArtifacts
105+
publishArtifacts
106+
displayReleaseInfo
107+
}

tools/chart-generator/scripts/lib/paths.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ function baseWorkDir() {
1818
echo -n "$WORKDIR/$WORKDIR_SUfFIX_AA"
1919
elif [[ "$ACTION" == "$GENERATE_NOPOLLY_API_ARTIFACTS" ]]; then
2020
echo -n "$WORKDIR/$WORKDIR_SUfFIX_NAA"
21+
elif [[ "$ACTION" == "$GENERATE_ARAZZO_WORKFLOW_ARTIFACTS" ]]; then
22+
echo -n "$WORKDIR/$WORKDIR_SUfFIX_AZW"
2123
elif [[ "$ACTION" == "$RUN_API_CTKS_FROM_COMP_ARTIFACTS" ]]; then
2224
echo -n "$WORKDIR/$WORKDIR_SUfFIX_CR"
2325
else
@@ -385,3 +387,13 @@ function nopo11yConfigFileIn() {
385387
local env="$2"
386388
createPath $(nopo11yConfigDirIn $prefix) "$env.yaml"
387389
}
390+
391+
function arazzoConfigDirIn() {
392+
local prefix="$1"
393+
createPath $prefix "arazzo"
394+
}
395+
396+
function metaConfigFileIn() {
397+
local prefix="$1"
398+
createPath $prefix "meta-config.yaml"
399+
}

tools/chart-generator/scripts/start.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ function performAction() {
1919
elif [[ "$ACTION" == "$GENERATE_NOPOLLY_API_ARTIFACTS" ]]; then
2020
setupNopo11yWorkspace
2121
generateNopo11yApiArtifacts
22+
elif [[ "$ACTION" == "$GENERATE_ARAZZO_WORKFLOW_ARTIFACTS" ]]; then
23+
setupArazzoWorkflowWorkspace
24+
generateArazzoWorkflowArtifacts
2225
elif [[ "$ACTION" == "$RUN_API_CTKS_FROM_COMP_ARTIFACTS" ]]; then
2326
runApiCtksFromCompArtifacts
2427
else

0 commit comments

Comments
 (0)