-
#!/usr/bin/env bash
-
14
set -euo pipefail
-
-
56
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-
-
_gitops_fail() {
-
8
local MSG="${1:-GitOps update failed}"
-
8
echo "[ERROR] ${MSG}" >&2
-
-
15
if [ -n "${GITOPS_REPO:-}" ] && [ -n "${GITOPS_SHA:-}" ] && \
-
[ -n "${SOURCE_REPO:-}" ] && [ -n "${SOURCE_COMMIT:-}" ] && \
-
[ -n "${GITEA_API_URL:-}" ] && [ -n "${GITEA_TOKEN:-}" ]; then
-
local env repo context
-
env=$(dirname "${INPUT_FILE}")
-
repo=$(basename "${SOURCE_REPO}")
-
context="${repo} ${GITHUB_RUN_ID:-unknown}"
-
[ -n "${GIT_TAG_PREFIX:-}" ] && context="${repo}/${GIT_TAG_PREFIX} ${GITHUB_RUN_ID:-unknown}"
-
-
local SOURCE_URL="${GITEA_API_URL}/${SOURCE_REPO}/commit/${SOURCE_COMMIT}"
-
ROOT_REPO="${GITOPS_REPO}" ROOT_COMMIT="${GITOPS_SHA}" \
-
GITEA_API_URL="${GITEA_API_URL}" GITEA_TOKEN="${GITEA_TOKEN}" \
-
bash "${SCRIPT_DIR}/report-status.sh" failure "Install to ${env} ${VERSION}" \
-
"${context}" "" "${SOURCE_URL}" 2>/dev/null || true
-
fi
-
-
8
exit 1
-
}
-
-
_gitops_validate() {
-
15
[ -n "${INPUT_FILE:-}" ] || _gitops_fail "INPUT_FILE is required"
-
14
[ -n "${YQ_TPL:-}" ] || _gitops_fail "YQ_TPL is required"
-
13
[ -n "${VERSION:-}" ] || _gitops_fail "VERSION is required"
-
12
[ -n "${SOURCE_REPO:-}" ] || _gitops_fail "SOURCE_REPO is required"
-
11
[ -n "${SOURCE_COMMIT:-}" ] || _gitops_fail "SOURCE_COMMIT is required"
-
10
[ -n "${GITOPS_REPO:-}" ] || _gitops_fail "GITOPS_REPO is required"
-
9
[ -n "${GITEA_TOKEN:-}" ] || _gitops_fail "GITEA_TOKEN is required"
-
8
[ -n "${GITEA_API_URL:-}" ] || _gitops_fail "GITEA_API_URL is required"
-
}
-
-
_gitops_success() {
-
2
local env repo context
-
4
env=$(dirname "${INPUT_FILE}")
-
4
repo=$(basename "${SOURCE_REPO}")
-
2
context="${repo} ${GITHUB_RUN_ID:-unknown}"
-
2
[ -n "${GIT_TAG_PREFIX:-}" ] && context="${repo}/${GIT_TAG_PREFIX} ${GITHUB_RUN_ID:-unknown}"
-
-
2
local SOURCE_URL="${GITEA_API_URL}/${SOURCE_REPO}/commit/${SOURCE_COMMIT}"
-
-
10
ROOT_REPO="${GITOPS_REPO}" ROOT_COMMIT="${GITOPS_SHA}" \
-
10
GITEA_API_URL="${GITEA_API_URL}" GITEA_TOKEN="${GITEA_TOKEN}" \
-
10
bash "${SCRIPT_DIR}/report-status.sh" success \
-
10
"Install to ${env} ${VERSION}" \
-
10
"${context}" "" "${SOURCE_URL}"
-
}
-
-
_gitops_nochange() {
-
local env repo context
-
env=$(dirname "${INPUT_FILE}")
-
repo=$(basename "${SOURCE_REPO}")
-
context="${repo} ${GITHUB_RUN_ID:-unknown}"
-
[ -n "${GIT_TAG_PREFIX:-}" ] && context="${repo}/${GIT_TAG_PREFIX} ${GITHUB_RUN_ID:-unknown}"
-
-
local SOURCE_URL="${GITEA_API_URL}/${SOURCE_REPO}/commit/${SOURCE_COMMIT}"
-
-
ROOT_REPO="${GITOPS_REPO}" ROOT_COMMIT="${GITOPS_SHA}" \
-
GITEA_API_URL="${GITEA_API_URL}" GITEA_TOKEN="${GITEA_TOKEN}" \
-
bash "${SCRIPT_DIR}/report-status.sh" success \
-
"Install to ${env} ${VERSION} — no change" \
-
"${context}" "" "${SOURCE_URL}"
-
}
-
-
_gitops_substitute() {
-
16
echo "$1" | sed "s/{{VERSION}}/$2/g"
-
}
-
-
_gitops_update() {
-
4
local CLONE_DIR="${GITOPS_TARGET_DIR:-$(mktemp -d)}"
-
-
2
if [ -n "${GITOPS_CLONE_URL:-}" ]; then
-
git clone "${GITOPS_CLONE_URL}" "${CLONE_DIR}" || _gitops_fail "Failed to clone GitOps repo"
-
else
-
2
git clone "${CLONE_URL}" "${CLONE_DIR}" || _gitops_fail "Failed to clone GitOps repo"
-
fi
-
-
2
cd "${CLONE_DIR}" || _gitops_fail "Failed to enter clone directory"
-
2
yq eval -i "${YQ_EXPR}" "${INPUT_FILE}" || _gitops_fail "Failed to update ${INPUT_FILE}"
-
2
git add "${INPUT_FILE}" || _gitops_fail "Failed to stage ${INPUT_FILE}"
-
-
2
if git diff --cached --quiet; then
-
echo "No changes — ${INPUT_FILE} already at ${VERSION}"
-
GITOPS_SHA="$(git rev-parse HEAD)"
-
_gitops_nochange
-
exit 0
-
fi
-
-
2
git -c user.name="gitea-ci-bot" \
-
-c user.email="ci@keskikuja.site" \
-
commit -m "[skip ci] gitops: update version to ${VERSION}" || _gitops_fail "Failed to commit"
-
4
GITOPS_SHA="$(git rev-parse HEAD)"
-
2
git push || _gitops_fail "Failed to push"
-
-
2
_gitops_success
-
}
-
-
14
_gitops_validate
-
-
12
YQ_EXPR=$(_gitops_substitute "${YQ_TPL}" "${VERSION}")
-
-
24
GITEA_HOST=$(echo "${GITEA_API_URL}" | sed 's|https://||' | sed 's|http://||')
-
6
CLONE_URL="${GITOPS_CLONE_URL:-https://${GITEA_TOKEN}@${GITEA_HOST}/${GITOPS_REPO}.git}"
-
-
6
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
-
2
_gitops_update
-
fi