From 9e33d5426971b73c301bb64e493cd55b17f724ac Mon Sep 17 00:00:00 2001 From: Chris Date: Wed, 30 Sep 2026 09:49:27 +0800 Subject: [PATCH] fix(release): package stable preview tags without updating channels (#8256) --- .github/workflows/package.yml | 4 ++-- scripts/release/package_versions.sh | 4 ++-- .../check_preview_release_workflow.sh | 3 +++ scripts/test_package_versions.sh | 21 +++++++++++++++---- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 58a815429..c76a2573e 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -123,7 +123,7 @@ jobs: semver_core='(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)' prerelease_id='(alpha|beta|rc)\.(0|[1-9][0-9]*)' if [[ -n "$TAG" ]]; then - if [[ "$TAG" =~ ^${semver_core}-${prerelease_id}-preview\.(0|[1-9][0-9]*)$ ]]; then + if [[ "$TAG" =~ ^${semver_core}(-${prerelease_id})?-preview\.(0|[1-9][0-9]*)$ ]]; then BUILD_TYPE=preview elif [[ "$TAG" =~ ^${semver_core}-${prerelease_id}$ ]]; then BUILD_TYPE=prerelease @@ -504,7 +504,7 @@ jobs: retention-days: 30 - name: Upload packages to Cloudflare R2 - if: env.R2_ACCESS_KEY_ID != '' + if: needs.resolve.outputs.build_type != 'preview' && env.R2_ACCESS_KEY_ID != '' env: R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} diff --git a/scripts/release/package_versions.sh b/scripts/release/package_versions.sh index 322f95dbc..dd5f359f4 100755 --- a/scripts/release/package_versions.sh +++ b/scripts/release/package_versions.sh @@ -89,8 +89,8 @@ case "$build_type" in ;; preview) [[ -z "$dev_sequence" ]] || fail "preview must not have a development sequence" - [[ "$source_version" =~ ^${semver_core}-${prerelease_id}-preview\.(0|[1-9][0-9]*)$ ]] || - fail "preview version must be strict prerelease-preview SemVer" + [[ "$source_version" =~ ^${semver_core}(-${prerelease_id})?-preview\.(0|[1-9][0-9]*)$ ]] || + fail "preview version must be strict release-preview or prerelease-preview SemVer" deb_version=${source_version//-/$tilde} rpm_version=${source_version//-/$tilde} diff --git a/scripts/security/check_preview_release_workflow.sh b/scripts/security/check_preview_release_workflow.sh index e783204b9..54bf2ef50 100755 --- a/scripts/security/check_preview_release_workflow.sh +++ b/scripts/security/check_preview_release_workflow.sh @@ -4,6 +4,7 @@ set -euo pipefail build_workflow=".github/workflows/build.yml" docker_workflow=".github/workflows/docker.yml" helm_workflow=".github/workflows/helm-package.yml" +package_workflow=".github/workflows/package.yml" release_script="scripts/release/create_or_update_release.sh" # shellcheck source=scripts/release/create_or_update_release.sh @@ -138,6 +139,8 @@ for block in "$tag_branch_tail" "$post_strategy"; do done require_line "$build_workflow" " if [[ \"\$BUILD_TYPE\" == \"release\" ]] || [[ \"\$BUILD_TYPE\" == \"prerelease\" ]]; then" "latest artifact guard" require_line "$build_workflow" " if: needs.build-check.outputs.should_publish == 'true' && env.R2_ACCESS_KEY_ID != '' && (needs.build-check.outputs.build_type == 'release' || needs.build-check.outputs.build_type == 'prerelease' || needs.build-check.outputs.build_type == 'development')" "R2 publication guard" +require_line "$package_workflow" " if [[ \"\$TAG\" =~ ^\${semver_core}(-\${prerelease_id})?-preview\\.(0|[1-9][0-9]*)$ ]]; then" "stable and prerelease preview package classification" +require_line "$package_workflow" " if: needs.resolve.outputs.build_type != 'preview' && env.R2_ACCESS_KEY_ID != ''" "preview packages must not publish to R2" release_guard="needs.build-check.outputs.should_publish == 'true' && startsWith(github.ref, 'refs/tags/') && (needs.build-check.outputs.build_type == 'preview' || needs.build-check.outputs.build_type == 'release' || needs.build-check.outputs.build_type == 'prerelease')" for job in create-release upload-release-assets publish-release; do require_job_if "$build_workflow" "$job" " if: $release_guard" diff --git a/scripts/test_package_versions.sh b/scripts/test_package_versions.sh index 3573f0620..e8db35cf9 100755 --- a/scripts/test_package_versions.sh +++ b/scripts/test_package_versions.sh @@ -94,6 +94,12 @@ run_success preview-x86_64-gnu \ run_success preview-aarch64-musl \ $'deb_version=1.0.0~rc.5~preview.2\nrpm_version=1.0.0~rc.5~preview.2\nrpm_release=1\ndeb_file=rustfs-linux-aarch64-musl-v1.0.0-rc.5-preview.2.deb\nrpm_file=rustfs-linux-aarch64-musl-v1.0.0-rc.5-preview.2.rpm' \ preview 1.0.0-rc.5-preview.2 '' aarch64 musl +run_success stable-preview-x86_64-gnu \ + $'deb_version=1.0.1~preview.14\nrpm_version=1.0.1~preview.14\nrpm_release=1\ndeb_file=rustfs-linux-x86_64-gnu-v1.0.1-preview.14.deb\nrpm_file=rustfs-linux-x86_64-gnu-v1.0.1-preview.14.rpm' \ + preview 1.0.1-preview.14 '' x86_64 gnu +run_success stable-preview-aarch64-musl \ + $'deb_version=1.0.1~preview.14\nrpm_version=1.0.1~preview.14\nrpm_release=1\ndeb_file=rustfs-linux-aarch64-musl-v1.0.1-preview.14.deb\nrpm_file=rustfs-linux-aarch64-musl-v1.0.1-preview.14.rpm' \ + preview 1.0.1-preview.14 '' aarch64 musl run_success development-x86_64-gnu \ "deb_version=0~dev.7463.${sha} rpm_version=0 @@ -117,7 +123,8 @@ run_failure release-with-sequence release 1.2.3 1 x86_64 gnu run_failure release-prerelease-mismatch release 1.2.3-rc.1 '' x86_64 gnu run_failure prerelease-release-mismatch prerelease 1.2.3 '' x86_64 gnu run_failure preview-malformed preview 1.2.3-rc.1-preview '' x86_64 gnu -run_failure preview-wrong-shape preview 1.2.3-preview.1 '' x86_64 gnu +run_failure preview-leading-zero preview 1.2.3-preview.01 '' x86_64 gnu +run_failure preview-extra-suffix preview 1.2.3-preview.1-extra '' x86_64 gnu run_failure short-semver release 1.2 '' x86_64 gnu run_failure leading-v release v1.2.3 '' x86_64 gnu run_failure leading-zero release 01.2.3 '' x86_64 gnu @@ -139,8 +146,8 @@ run_failure unknown-libc release 1.2.3 '' x86_64 static run_failure too-many-arguments release 1.2.3 '' x86_64 gnu extra # Ordering contract shared by both package managers: every pre-release sorts -# below its final release, every preview sorts below the pre-release it -# previews, and pre-release kinds/numbers keep their SemVer order. +# below its final release, every preview sorts below the target it previews, +# and pre-release kinds/numbers keep their SemVer order. if command -v dpkg >/dev/null 2>&1; then dpkg --compare-versions "0~dev.7462.${sha}" lt "0~dev.7463.${sha}" dpkg --compare-versions "0~dev.7463.${sha}" lt 0.1.0 @@ -152,7 +159,10 @@ if command -v dpkg >/dev/null 2>&1; then dpkg --compare-versions 1.0.0~rc.5~preview.1 lt 1.0.0~rc.5~preview.2 dpkg --compare-versions 1.0.0~rc.5~preview.2 lt 1.0.0~rc.6 dpkg --compare-versions 1.0.0~rc.5 lt 1.0.1 - passed=$((passed + 10)) + dpkg --compare-versions 1.0.0 lt 1.0.1~preview.14 + dpkg --compare-versions 1.0.1~preview.13 lt 1.0.1~preview.14 + dpkg --compare-versions 1.0.1~preview.14 lt 1.0.1 + passed=$((passed + 13)) elif [[ $require_package_managers == true ]]; then printf 'FAIL package ordering: dpkg is required\n' >&2 exit 1 @@ -175,6 +185,9 @@ if command -v rpm >/dev/null 2>&1; then rpm_lt 1.0.0~rc.5~preview.1-1 1.0.0~rc.5~preview.2-1 rpm_lt 1.0.0~rc.5~preview.2-1 1.0.0~rc.6-1 rpm_lt 1.0.0~rc.5-1 1.0.1-1 + rpm_lt 1.0.0-1 1.0.1~preview.14-1 + rpm_lt 1.0.1~preview.13-1 1.0.1~preview.14-1 + rpm_lt 1.0.1~preview.14-1 1.0.1-1 elif [[ $require_package_managers == true ]]; then printf 'FAIL package ordering: rpm is required\n' >&2 exit 1