-
Notifications
You must be signed in to change notification settings - Fork 5
141 lines (125 loc) · 4.95 KB
/
Copy pathdeploy-site.yml
File metadata and controls
141 lines (125 loc) · 4.95 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Deploy site to gh-pages
on:
workflow_dispatch:
env:
UMBRELLA_REPO: "validatedpatterns/helm-charts"
ASSETS_BASE_URL: "https://github.com/validatedpatterns/helm-charts/releases/download/main/"
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Helm
uses: azure/setup-helm@v5.0.0
with:
version: v3.19.5
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Build site
run: |-
set -e
cd site
npm ci
npm run build
cp -rv dist /tmp/site-dist
- name: Download release assets and generate helm index
env:
GH_TOKEN: ${{ github.token }}
run: |-
set -e
mkdir -p /tmp/all-charts
ASSETS=$(gh api "repos/${UMBRELLA_REPO}/releases/latest" \
--jq '.assets[].browser_download_url' 2>/dev/null || true)
if [ -z "$ASSETS" ]; then
echo "No release assets found."
exit 1
fi
for url in $ASSETS; do
filename=$(basename "$url")
[[ "$filename" == *.tgz ]] || continue
echo "Downloading $filename..."
curl -sLo "/tmp/all-charts/$filename" "$url"
done
echo "Generating index.yaml..."
helm repo index --url "${ASSETS_BASE_URL}" /tmp/all-charts
cp /tmp/all-charts/index.yaml /tmp/index.yaml
- name: Fix index.yaml timestamps
env:
GH_TOKEN: ${{ github.token }}
run: |-
set -e
TIMESTAMPS=$(gh api "repos/${UMBRELLA_REPO}/releases/latest" \
--jq '[.assets[] | select(.name | endswith(".tgz")) | {(.name): .created_at}] | add')
for chart in $(yq -r '.entries | keys[]' /tmp/index.yaml); do
for idx in $(yq -r ".entries[\"${chart}\"] | keys[]" /tmp/index.yaml); do
version=$(yq -r ".entries[\"${chart}\"][${idx}].version" /tmp/index.yaml)
tgz="${chart}-${version}.tgz"
ts=$(echo "$TIMESTAMPS" | jq -r --arg k "$tgz" '.[$k] // empty')
if [ -n "$ts" ]; then
yq -i ".entries[\"${chart}\"][${idx}].created = \"${ts}\"" /tmp/index.yaml
fi
done
done
cat /tmp/index.yaml
- name: Extract chart docs from latest versions
run: |-
set -e
mkdir -p /tmp/extracted-docs
declare -A LATEST_FILE
for filepath in /tmp/all-charts/*.tgz; do
filename=$(basename "$filepath")
name=$(echo "$filename" | sed -E 's/-[0-9]+\.[0-9]+\.[0-9]+(-.*)?\.tgz$//')
version=$(echo "$filename" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+(-.*)?)\.tgz$/\1/')
if [ -z "${LATEST_FILE[$name]+x}" ]; then
LATEST_FILE[$name]="$filepath"
else
current_file=$(basename "${LATEST_FILE[$name]}")
current_ver=$(echo "$current_file" | sed -E 's/.*-([0-9]+\.[0-9]+\.[0-9]+(-.*)?)\.tgz$/\1/')
higher=$(printf '%s\n%s' "$current_ver" "$version" | sort -V | tail -1)
if [ "$higher" = "$version" ]; then
LATEST_FILE[$name]="$filepath"
fi
fi
done
echo "Extracting docs for ${#LATEST_FILE[@]} charts..."
for name in $(echo "${!LATEST_FILE[@]}" | tr ' ' '\n' | sort); do
filepath="${LATEST_FILE[$name]}"
echo -n " $name... "
mkdir -p "/tmp/extracted-docs/charts/$name"
tar xzf "$filepath" -C "/tmp/extracted-docs/charts/$name/" \
--strip-components=1 "$name/README.md" 2>/dev/null || true
tar xzf "$filepath" -C "/tmp/extracted-docs/charts/$name/" \
--strip-components=1 "$name/values.yaml" 2>/dev/null || true
if [ -f "/tmp/extracted-docs/charts/$name/README.md" ] || \
[ -f "/tmp/extracted-docs/charts/$name/values.yaml" ]; then
echo "OK"
else
echo "SKIP"
rmdir "/tmp/extracted-docs/charts/$name" 2>/dev/null || true
fi
done
rm -rf /tmp/all-charts
- name: Deploy to gh-pages
run: |-
set -e
git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.github.com"
git checkout gh-pages
# Deploy built site
cp -rv /tmp/site-dist/* .
# SPA fallback for GitHub Pages
cp -v index.html 404.html
# Copy all extracted chart docs
cp -rv /tmp/extracted-docs/* .
# Copy helm repo index
cp -v /tmp/index.yaml .
git add assets/ charts/ favicon.svg icons.svg index.html 404.html index.yaml
git commit -m "Rebuild github pages site"
git push origin gh-pages