-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathhelm-ci.yml
More file actions
62 lines (55 loc) · 2.5 KB
/
helm-ci.yml
File metadata and controls
62 lines (55 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.helm:build-push:
image: alpine/helm:latest
variables:
CHARTS_DIR: ./charts
script:
# Install git for detecting changed charts
- apk add --no-cache git
# Detect changed charts based on git diff
- |
if [ -z "$CI_COMMIT_BEFORE_SHA" ] || [ "$CI_COMMIT_BEFORE_SHA" = "0000000000000000000000000000000000000000" ]; then
echo "No previous commit found, packaging all charts"
CHANGED_CHARTS=$(find ${CHARTS_DIR} -maxdepth 1 -type d ! -path ${CHARTS_DIR} -exec basename {} \;)
else
echo "Detecting changed charts between $CI_COMMIT_BEFORE_SHA and $CI_COMMIT_SHA"
CHANGED_FILES=$(git diff --name-only ${CI_COMMIT_BEFORE_SHA} ${CI_COMMIT_SHA})
echo "Changed files: $CHANGED_FILES"
CHANGED_CHARTS=$(echo "$CHANGED_FILES" | grep "^charts/" | cut -d'/' -f2 | sort -u)
fi
echo "Changed charts: $CHANGED_CHARTS"
- |
if [ -z "$CHANGED_CHARTS" ]; then
echo "No charts changed, skipping..."
exit 0
fi
# Setup Docker auth for Helm (same credentials as kaniko)
- mkdir -p /root/.docker
- echo "$DOCKER_AUTH" > /root/.docker/config.json
# Package and push each changed chart
- |
for CHART in $CHANGED_CHARTS; do
CHART_PATH="${CHARTS_DIR}/${CHART}"
if [ ! -f "${CHART_PATH}/Chart.yaml" ]; then
echo "Skipping ${CHART} - not a valid chart"
continue
fi
# Extract version from Chart.yaml
CHART_VERSION=$(grep '^version:' ${CHART_PATH}/Chart.yaml | awk '{print $2}')
CHART_NAME=$(grep '^name:' ${CHART_PATH}/Chart.yaml | awk '{print $2}')
# Validate extracted values
if [ -z "$CHART_VERSION" ] || [ -z "$CHART_NAME" ]; then
echo "Error: Could not extract chart name or version from ${CHART_PATH}/Chart.yaml"
exit 1
fi
echo "Packaging ${CHART_NAME} version ${CHART_VERSION}"
# Update dependencies if Chart.lock exists or dependencies are defined
if [ -f "${CHART_PATH}/Chart.lock" ] || grep -q "^dependencies:" "${CHART_PATH}/Chart.yaml"; then
echo "Updating chart dependencies..."
helm dependency update ${CHART_PATH}
fi
# Package the chart
helm package ${CHART_PATH}
# Push to Harbor as OCI artifact
helm push ${CHART_NAME}-${CHART_VERSION}.tgz oci://${IMAGE_REPOSITORY}
echo "Successfully pushed ${CHART_NAME}:${CHART_VERSION} to ${IMAGE_REPOSITORY}"
done