Skip to content

Commit 29a175b

Browse files
add nightly build for OCI format Helm chart
Signed-off-by: Jintao Zhang <[email protected]>
1 parent 3ef1b76 commit 29a175b

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
name: charts nightly
2+
3+
on:
4+
schedule:
5+
- cron: "30 4 * * *"
6+
workflow_dispatch: {}
7+
8+
permissions:
9+
contents: read
10+
11+
jobs:
12+
publish-nightly-chart:
13+
name: Publish nightly Helm chart
14+
runs-on: ubuntu-latest
15+
env:
16+
HELM_EXPERIMENTAL_OCI: 1
17+
steps:
18+
- name: Harden Runner
19+
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
20+
with:
21+
egress-policy: audit
22+
23+
- name: Checkout
24+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
25+
26+
- name: Setup Python
27+
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
28+
with:
29+
python-version: "3.13"
30+
31+
- name: Setup toolchain
32+
uses: jdx/mise-action@146a28175021df8ca24f8ee1828cc2a60f980bd5 # v3.5.1
33+
with:
34+
install: true
35+
36+
- name: Install PyYAML
37+
run: python -m pip install --upgrade "pyyaml>=6.0"
38+
39+
- name: Compute nightly chart metadata
40+
id: metadata
41+
run: |
42+
DATE=$(date -u +%Y%m%d)
43+
SHORT_SHA=$(git rev-parse --short "${GITHUB_SHA}")
44+
CHART_VERSION="0.0.0-nightly.${DATE}.sha.${SHORT_SHA}"
45+
APP_VERSION="$(cat VERSION)-nightly.${DATE}.${SHORT_SHA}"
46+
echo "chart_version=${CHART_VERSION}" >> "${GITHUB_OUTPUT}"
47+
echo "app_version=${APP_VERSION}" >> "${GITHUB_OUTPUT}"
48+
echo "chart_name=nightly-kong-operator-chart" >> "${GITHUB_OUTPUT}"
49+
echo "chart_dir=${RUNNER_TEMP}/nightly-kong-operator-chart" >> "${GITHUB_OUTPUT}"
50+
51+
- name: Prepare chart for publication
52+
env:
53+
CHART_DIR: ${{ steps.metadata.outputs.chart_dir }}
54+
CHART_NAME: ${{ steps.metadata.outputs.chart_name }}
55+
CHART_VERSION: ${{ steps.metadata.outputs.chart_version }}
56+
APP_VERSION: ${{ steps.metadata.outputs.app_version }}
57+
run: |
58+
rsync -a charts/kong-operator/ "${CHART_DIR}/"
59+
python - <<'PY'
60+
import os
61+
import pathlib
62+
import yaml
63+
64+
chart_dir = pathlib.Path(os.environ["CHART_DIR"])
65+
chart_path = chart_dir / "Chart.yaml"
66+
chart = yaml.safe_load(chart_path.read_text())
67+
chart["name"] = os.environ["CHART_NAME"]
68+
chart["version"] = os.environ["CHART_VERSION"]
69+
chart["appVersion"] = os.environ["APP_VERSION"]
70+
chart_path.write_text(yaml.safe_dump(chart, sort_keys=False))
71+
72+
values_path = chart_dir / "values.yaml"
73+
values = yaml.safe_load(values_path.read_text())
74+
values.setdefault("image", {})
75+
values["image"]["repository"] = "docker.io/kong/nightly-kong-operator"
76+
values["image"]["tag"] = "nightly"
77+
values_path.write_text(yaml.safe_dump(values, sort_keys=False))
78+
PY
79+
80+
- name: Package chart
81+
id: package
82+
env:
83+
CHART_DIR: ${{ steps.metadata.outputs.chart_dir }}
84+
run: |
85+
PACKAGE_DIR="${RUNNER_TEMP}/chart-packages"
86+
mkdir -p "${PACKAGE_DIR}"
87+
helm package "${CHART_DIR}" --destination "${PACKAGE_DIR}"
88+
PACKAGE_PATH=$(ls "${PACKAGE_DIR}"/*.tgz)
89+
echo "package_path=${PACKAGE_PATH}" >> "${GITHUB_OUTPUT}"
90+
91+
- name: Log in to Docker Hub
92+
env:
93+
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_PUSH_USERNAME_NIGHTLY }}
94+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_PUSH_TOKEN_KO_NIGHTLY }}
95+
run: |
96+
if [ -z "${DOCKERHUB_USERNAME}" ] || [ -z "${DOCKERHUB_TOKEN}" ]; then
97+
echo "Docker Hub credentials are missing."
98+
exit 1
99+
fi
100+
echo "${DOCKERHUB_TOKEN}" | helm registry login registry-1.docker.io \
101+
--username "${DOCKERHUB_USERNAME}" --password-stdin
102+
103+
- name: Push nightly chart
104+
env:
105+
PACKAGE: ${{ steps.package.outputs.package_path }}
106+
run: |
107+
helm push "${PACKAGE}" oci://registry-1.docker.io/kong

0 commit comments

Comments
 (0)