From 45f939a611cc9d4fedbc1d471261b7cba0190ad0 Mon Sep 17 00:00:00 2001 From: moilanik Date: Fri, 19 Jun 2026 12:51:18 +0300 Subject: [PATCH 1/2] =?UTF-8?q?uusia=20testej=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/check-version.yml | 9 +++++++++ scripts/check-version.sh | 19 ++++++++++++------- tests/check-version.bats | 15 +++++++++++++++ .../check-version/Chart-umbrella.yaml | 12 ++++++++++++ 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 tests/fixtures/check-version/Chart-umbrella.yaml diff --git a/.gitea/workflows/check-version.yml b/.gitea/workflows/check-version.yml index f638b08..14c0e49 100644 --- a/.gitea/workflows/check-version.yml +++ b/.gitea/workflows/check-version.yml @@ -32,6 +32,15 @@ jobs: repository: niko/gitea-ci-library path: .ci + - name: Install yq + # COMPROMISE: Requires internet access. + # Does NOT work in air-gapped environments. The script falls back + # to BOM-stripping sed if yq is not available. + run: | + if ! command -v yq &>/dev/null; then + sudo apt-get update -qq && sudo apt-get install -y -qq yq + fi + - name: Check existing artifact and calculate version env: SERVER_URL: ${{ gitea.server_url }} diff --git a/scripts/check-version.sh b/scripts/check-version.sh index 0f588c0..4baf9cf 100755 --- a/scripts/check-version.sh +++ b/scripts/check-version.sh @@ -4,13 +4,15 @@ set -e RAW_VERSION="" if [ -n "${VERSION_FILE-}" ] && [ -f "${VERSION_FILE-}" ]; then - RAW_VERSION=$(sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p' "${VERSION_FILE}") - if [ -z "${RAW_VERSION}" ]; then - if echo "${VERSION_FILE}" | grep -q -E '\.json$'; then - RAW_VERSION=$(jq -r '.version' "${VERSION_FILE}") - else - RAW_VERSION=$(cat "${VERSION_FILE}" | tr -d '[:space:]') + if echo "${VERSION_FILE}" | grep -q -E '\.[Yy][Aa][Mm][Ll]$'; then + RAW_VERSION=$(yq '.version' "${VERSION_FILE}" 2>/dev/null | grep -v '^null$' || true) + if [ -z "${RAW_VERSION}" ]; then + RAW_VERSION=$(sed 's/'$'\xef\xbb\xbf''//g' "${VERSION_FILE}" | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') fi + elif echo "${VERSION_FILE}" | grep -q -E '\.json$'; then + RAW_VERSION=$(jq -r '.version' "${VERSION_FILE}") + else + RAW_VERSION=$(cat "${VERSION_FILE}" | tr -d '[:space:]') fi fi @@ -22,7 +24,10 @@ if [ -z "${RAW_VERSION}" ]; then elif [ -f pom.xml ]; then RAW_VERSION=$(grep -oP '\K[^<]+' pom.xml | head -1) elif [ -f Chart.yaml ]; then - RAW_VERSION=$(sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p' Chart.yaml) + RAW_VERSION=$(yq '.version' Chart.yaml 2>/dev/null | grep -v '^null$' || true) + if [ -z "${RAW_VERSION}" ]; then + RAW_VERSION=$(sed 's/'$'\xef\xbb\xbf''//g' Chart.yaml | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') + fi else echo "ERROR: No version source found (VERSION_FILE, VERSION, package.json, pom.xml, Chart.yaml)" >&2 exit 1 diff --git a/tests/check-version.bats b/tests/check-version.bats index 028e932..f27f4cd 100644 --- a/tests/check-version.bats +++ b/tests/check-version.bats @@ -153,6 +153,21 @@ teardown() { [ "$NEXT_VERSION" = "0.3.2" ] } +@test "VERSION_FILE=Chart-umbrella.yaml extracts only top-level version" { + mock_set_sequence '[{"code": 200, "body": []}]' + mock_start + + export VERSION_FILE="$BATS_TEST_DIRNAME/fixtures/check-version/Chart-umbrella.yaml" + run bash scripts/check-version.sh + + echo "STATUS=$status" + echo "OUTPUT=$output" + [ "$status" -eq 0 ] + source /tmp/build-ctx/build.env + echo "NEXT_VERSION=$NEXT_VERSION" + [ "$NEXT_VERSION" = "0.1.0" ] +} + @test "no version source exits with error" { mock_set_sequence '[{"code": 200, "body": []}]' mock_start diff --git a/tests/fixtures/check-version/Chart-umbrella.yaml b/tests/fixtures/check-version/Chart-umbrella.yaml new file mode 100644 index 0000000..66c873c --- /dev/null +++ b/tests/fixtures/check-version/Chart-umbrella.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +name: agent-platform +description: Agent Platform umbrella chart +type: application +version: 0.1.0 +dependencies: + - name: vikunja + version: "0.1.0" + repository: oci://registry.example.com + - name: langfuse + version: "0.2.0" + repository: oci://registry.example.com -- 2.52.0 From 272d59e0626f6d5a088aa59475a3328a109c287c Mon Sep 17 00:00:00 2001 From: moilanik Date: Fri, 19 Jun 2026 13:09:30 +0300 Subject: [PATCH 2/2] fragine test fix --- .gitea/workflows/check-version.yml | 9 --------- scripts/check-version.sh | 19 +++++++------------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/.gitea/workflows/check-version.yml b/.gitea/workflows/check-version.yml index 14c0e49..f638b08 100644 --- a/.gitea/workflows/check-version.yml +++ b/.gitea/workflows/check-version.yml @@ -32,15 +32,6 @@ jobs: repository: niko/gitea-ci-library path: .ci - - name: Install yq - # COMPROMISE: Requires internet access. - # Does NOT work in air-gapped environments. The script falls back - # to BOM-stripping sed if yq is not available. - run: | - if ! command -v yq &>/dev/null; then - sudo apt-get update -qq && sudo apt-get install -y -qq yq - fi - - name: Check existing artifact and calculate version env: SERVER_URL: ${{ gitea.server_url }} diff --git a/scripts/check-version.sh b/scripts/check-version.sh index 4baf9cf..5af0761 100755 --- a/scripts/check-version.sh +++ b/scripts/check-version.sh @@ -4,15 +4,13 @@ set -e RAW_VERSION="" if [ -n "${VERSION_FILE-}" ] && [ -f "${VERSION_FILE-}" ]; then - if echo "${VERSION_FILE}" | grep -q -E '\.[Yy][Aa][Mm][Ll]$'; then - RAW_VERSION=$(yq '.version' "${VERSION_FILE}" 2>/dev/null | grep -v '^null$' || true) - if [ -z "${RAW_VERSION}" ]; then - RAW_VERSION=$(sed 's/'$'\xef\xbb\xbf''//g' "${VERSION_FILE}" | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') + RAW_VERSION=$(tr -d "$(printf '\xef\xbb\xbf')" < "${VERSION_FILE}" | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') + if [ -z "${RAW_VERSION}" ]; then + if echo "${VERSION_FILE}" | grep -q -E '\.json$'; then + RAW_VERSION=$(jq -r '.version' "${VERSION_FILE}") + else + RAW_VERSION=$(cat "${VERSION_FILE}" | tr -d '[:space:]') fi - elif echo "${VERSION_FILE}" | grep -q -E '\.json$'; then - RAW_VERSION=$(jq -r '.version' "${VERSION_FILE}") - else - RAW_VERSION=$(cat "${VERSION_FILE}" | tr -d '[:space:]') fi fi @@ -24,10 +22,7 @@ if [ -z "${RAW_VERSION}" ]; then elif [ -f pom.xml ]; then RAW_VERSION=$(grep -oP '\K[^<]+' pom.xml | head -1) elif [ -f Chart.yaml ]; then - RAW_VERSION=$(yq '.version' Chart.yaml 2>/dev/null | grep -v '^null$' || true) - if [ -z "${RAW_VERSION}" ]; then - RAW_VERSION=$(sed 's/'$'\xef\xbb\xbf''//g' Chart.yaml | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') - fi + RAW_VERSION=$(tr -d "$(printf '\xef\xbb\xbf')" < Chart.yaml | sed -n 's/^version:[[:space:]]*\([^[:space:]]*\).*/\1/p') else echo "ERROR: No version source found (VERSION_FILE, VERSION, package.json, pom.xml, Chart.yaml)" >&2 exit 1 -- 2.52.0