Files
kks-provider-plugin/.github/workflows/release.yaml
T
josh cf30022133
Release Chart / release (push) Successful in 5s
Release / release (push) Successful in 4s
deploy / build (push) Successful in 2m27s
ci: switch release pipelines to gitea only
2026-08-01 07:45:36 +03:30

129 lines
4.6 KiB
YAML

name: Release
on:
push:
tags:
- "v*"
- "kks-provider-plugin-*"
permissions:
contents: write
packages: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Resolve release version
id: version
run: |
tag="${{ github.ref_name }}"
if [[ "$tag" == v* ]]; then
echo "app_version=${tag#v}" >> "$GITHUB_OUTPUT"
echo "is_app_release=true" >> "$GITHUB_OUTPUT"
else
echo "is_app_release=false" >> "$GITHUB_OUTPUT"
fi
- name: Install Helm
if: steps.version.outputs.is_app_release == 'true'
uses: azure/setup-helm@v4
- name: Package Helm chart
if: steps.version.outputs.is_app_release == 'true'
run: |
version="${{ steps.version.outputs.app_version }}"
chart_dir="charts/kks-provider-plugin"
sed -i "s/^version:.*/version: ${version}/" "${chart_dir}/Chart.yaml"
sed -i "s/^appVersion:.*/appVersion: \"${version}\"/" "${chart_dir}/Chart.yaml"
helm lint "${chart_dir}"
mkdir -p dist
helm package "${chart_dir}" --destination dist
echo "CHART_PACKAGE=dist/kks-provider-plugin-${version}.tgz" >> "$GITHUB_ENV"
- name: Create or update Gitea release
if: secrets.GITEA_TOKEN != ''
env:
GITEA_BASE_URL: https://git.kloude.ir
GITEA_REPO: kloude/kks-provider-plugin
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
TAG: ${{ github.ref_name }}
run: |
set -euo pipefail
api="${GITEA_BASE_URL}/api/v1/repos/${GITEA_REPO}"
release_name="$TAG"
release_body="Release ${TAG}"
release_json=$(curl -fsS \
-H "Authorization: token ${GITEA_TOKEN}" \
"${api}/releases/tags/${TAG}" || true)
if [ -z "$release_json" ]; then
release_json=$(curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${api}/releases" \
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${release_name}\",\"body\":\"${release_body}\",\"target_commitish\":\"${GITHUB_SHA}\"}")
else
release_id=$(python3 -c 'import json,sys; print(json.loads(sys.stdin.read())["id"])' <<< "$release_json")
curl -fsS -X PATCH \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${api}/releases/${release_id}" \
-d "{\"name\":\"${release_name}\",\"body\":\"${release_body}\"}" >/dev/null
release_json=$(curl -fsS \
-H "Authorization: token ${GITEA_TOKEN}" \
"${api}/releases/tags/${TAG}")
fi
if [ "${{ steps.version.outputs.is_app_release }}" != "true" ]; then
exit 0
fi
if [ ! -f "$CHART_PACKAGE" ]; then
echo "Chart package not found: $CHART_PACKAGE"
exit 1
fi
release_id=$(python3 -c 'import json,sys; print(json.loads(sys.stdin.read())["id"])' <<< "$release_json")
file_name=$(basename "$CHART_PACKAGE")
existing_assets=$(curl -fsS \
-H "Authorization: token ${GITEA_TOKEN}" \
"${api}/releases/${release_id}/assets")
existing_asset_id=$(python3 -c 'import json,sys; assets=json.loads(sys.stdin.read()); name=sys.argv[1]; print(next((str(a["id"]) for a in assets if a.get("name")==name), ""))' "$file_name" <<< "$existing_assets")
if [ -n "$existing_asset_id" ]; then
curl -fsS -X DELETE \
-H "Authorization: token ${GITEA_TOKEN}" \
"${api}/releases/${release_id}/assets/${existing_asset_id}"
fi
curl -fsS -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/gzip" \
--data-binary "@${CHART_PACKAGE}" \
"${api}/releases/${release_id}/assets?name=${file_name}"
- name: Push chart to OCI registry
if: steps.version.outputs.is_app_release == 'true'
run: |
set -euo pipefail
repo="oci://registry.kloude.ir/kloude-public/kks-provider-plugin-charts"
if ! helm push --plain-http \
--username "${{ secrets.REGISTRY_USER }}" \
--password "${{ secrets.REGISTRY_PASS }}" \
"$CHART_PACKAGE" "$repo"; then
echo "OCI push failed (registry token realm/protocol issue). Continuing because chart artifact is already published to Gitea release assets."
fi