diff --git a/.github/workflows/prepare-release-3.yml b/.github/workflows/prepare-release-3.yml
index f97080f26fc..7e7800f1c42 100644
--- a/.github/workflows/prepare-release-3.yml
+++ b/.github/workflows/prepare-release-3.yml
@@ -33,8 +33,18 @@ permissions:
pull-requests: write
jobs:
+ validate-branch:
+ if: github.ref_name != '3.0.0'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Require 3.0.0 branch
+ run: |
+ echo "This workflow can run only from branch 3.0.0 (current: ${GITHUB_REF_NAME})."
+ exit 1
+
prepare:
# Resolves release versions, applies file updates, validates build, then opens PR.
+ if: github.ref_name == '3.0.0'
runs-on: ubuntu-latest
env:
CODEGEN_VERSION: ${{ inputs.codegen_version }}
@@ -85,6 +95,17 @@ jobs:
# Performs version bump to release and updates docs/poms/openapi.
run: bash CI/release/prepare-codegen-release.sh
+ - name: Create or update draft GitHub release
+ uses: ncipollo/release-action@v1
+ with:
+ allowUpdates: true
+ bodyFile: ${{ steps.prepare-release.outputs.release_notes_file }}
+ commit: 3.0.0
+ draft: true
+ name: v${{ steps.prepare-release.outputs.codegen_version }}
+ tag: v${{ steps.prepare-release.outputs.codegen_version }}
+ token: ${{ steps.generate-token.outputs.token }}
+
- name: Build release candidate
# Build with the resolved generators version to catch dependency issues early.
run: |
diff --git a/CI/release/prepare-codegen-release.sh b/CI/release/prepare-codegen-release.sh
index b0578a69baf..67cc43b5ac9 100644
--- a/CI/release/prepare-codegen-release.sh
+++ b/CI/release/prepare-codegen-release.sh
@@ -13,6 +13,8 @@ previous_generators_version="${PREVIOUS_GENERATORS_VERSION:-}"
build_generators_version=""
# Prepare flow must start from a SNAPSHOT on branch 3.0.0.
+current_branch="$(git rev-parse --abbrev-ref HEAD)"
+[[ "${current_branch}" == "3.0.0" ]] || fail "Prepare release can run only on branch 3.0.0, got ${current_branch}"
current_version="$(maven_project_version)"
[[ "${current_version}" =~ SNAPSHOT$ ]] || fail "Prepare release must start from a SNAPSHOT codegen version, got ${current_version}"
@@ -76,9 +78,10 @@ mvn -B versions:set -DnewVersion="${codegen_version}"
mvn -B versions:commit
# Generate a minimal release-notes draft aligned with current GitHub release style.
-mkdir -p docs/release-notes
+release_notes_dir="${RUNNER_TEMP:-/tmp}/swagger-codegen-release-drafts"
+mkdir -p "${release_notes_dir}"
previous_tag="$(git tag --merged HEAD --list 'v3.*' | sort -V | tail -n 1 || true)"
-release_notes_file="docs/release-notes/v${codegen_version}.md"
+release_notes_file="${release_notes_dir}/v${codegen_version}.md"
{
echo "# Swagger Codegen v${codegen_version}"
echo
@@ -98,6 +101,10 @@ release_notes_file="docs/release-notes/v${codegen_version}.md"
fi
} > "${release_notes_file}"
+if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
+ echo "release_notes_file=${release_notes_file}" >> "${GITHUB_OUTPUT}"
+fi
+
update_codegen_release_files_script="CI/release/update-codegen-release-files.py"
[[ -f "${update_codegen_release_files_script}" ]] || fail "Missing ${update_codegen_release_files_script}"
diff --git a/CI/release/update-codegen-release-files.py b/CI/release/update-codegen-release-files.py
index 816a5811a54..13eb4bfcbd8 100644
--- a/CI/release/update-codegen-release-files.py
+++ b/CI/release/update-codegen-release-files.py
@@ -66,6 +66,22 @@ def update_generators_poms(generators_version: str) -> None:
replace_text("pom.docker.xml", replacements)
+def update_sample_meta_codegen_pom(codegen_version: str) -> None:
+ # Keep sample project pinned to the codegen version being prepared.
+ replace_text(
+ "samples/meta-codegen/pom.xml",
+ [(r"[^<]+", f"{codegen_version}")],
+ )
+
+
+def update_docker_pom_version(codegen_version: str) -> None:
+ # Keep root project version in pom.docker.xml aligned with released codegen version.
+ replace_text(
+ "pom.docker.xml",
+ [(r"3\.0\.[0-9]+(?:-SNAPSHOT)?", f"{codegen_version}")],
+ )
+
+
def update_openapi_version(version: str) -> None:
# Reflect current codegen version in online generator OpenAPI metadata.
replace_text(
@@ -121,6 +137,8 @@ def main() -> int:
return 2
codegen_version, next_snapshot, generators_version = sys.argv[2:5]
update_generators_poms(generators_version)
+ update_sample_meta_codegen_pom(codegen_version)
+ update_docker_pom_version(codegen_version)
update_openapi_version(codegen_version)
update_snapshot_rows(next_snapshot)
update_release_rows(codegen_version)