diff --git a/.buildkite/release-pipeline.yaml b/.buildkite/release-pipeline.yaml index 8f1642805..6b7e1da25 100644 --- a/.buildkite/release-pipeline.yaml +++ b/.buildkite/release-pipeline.yaml @@ -274,14 +274,14 @@ steps: - input-release-version - build-wheels - - label: "Upload release wheels to PyPI and GitHub" + - label: "Upload release wheels to PyPI" depends_on: - block-upload-release-wheels id: upload-release-wheels agents: queue: small_cpu_queue_postmerge commands: - - "bash .buildkite/scripts/upload-release-wheels.sh" + - "bash .buildkite/scripts/upload-release-wheels-pypi.sh" # ============================================================================= # ROCm Release Pipeline (x86_64 only) diff --git a/.buildkite/scripts/annotate-release.sh b/.buildkite/scripts/annotate-release.sh index ef9b457b8..efc5256aa 100755 --- a/.buildkite/scripts/annotate-release.sh +++ b/.buildkite/scripts/annotate-release.sh @@ -11,58 +11,80 @@ fi buildkite-agent annotate --style 'info' --context 'release-workflow' << EOF To download the wheel (by commit): \`\`\` -aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux1_x86_64.whl . -aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux2014_aarch64.whl . +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux_2_31_x86_64.whl . +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux_2_31_aarch64.whl . -aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cu129-cp38-abi3-manylinux1_x86_64.whl . -aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cu129-cp38-abi3-manylinux1_x86_64.whl . +(Optional) For CUDA 13.0: +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cu130-cp38-abi3-manylinux_2_35_x86_64.whl . +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cu130-cp38-abi3-manylinux_2_35_aarch64.whl . + +(Optional) For CPU: +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cpu-cp38-abi3-manylinux_2_35_x86_64.whl . +aws s3 cp s3://vllm-wheels/${BUILDKITE_COMMIT}/vllm-${RELEASE_VERSION}+cpu-cp38-abi3-manylinux_2_35_aarch64.whl . \`\`\` -To download the wheel (by version): -\`\`\` -aws s3 cp s3://vllm-wheels/${RELEASE_VERSION}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux1_x86_64.whl . -aws s3 cp s3://vllm-wheels/${RELEASE_VERSION}/vllm-${RELEASE_VERSION}-cp38-abi3-manylinux2014_aarch64.whl . - -aws s3 cp s3://vllm-wheels/${RELEASE_VERSION}+cu129/vllm-${RELEASE_VERSION}+cu129-cp38-abi3-manylinux1_x86_64.whl . -aws s3 cp s3://vllm-wheels/${RELEASE_VERSION}+cu130/vllm-${RELEASE_VERSION}+cu130-cp38-abi3-manylinux1_x86_64.whl . -\`\`\` To download and upload the image: \`\`\` +Download images: + docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64 docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64 +docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64-cu130 +docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64-cu130 docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm-base docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm +Tag and push images: + docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64 vllm/vllm-openai:x86_64 docker tag vllm/vllm-openai:x86_64 vllm/vllm-openai:latest-x86_64 docker tag vllm/vllm-openai:x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 docker push vllm/vllm-openai:latest-x86_64 docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 +docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-x86_64-cu130 vllm/vllm-openai:x86_64-cu130 +docker tag vllm/vllm-openai:x86_64-cu130 vllm/vllm-openai:latest-x86_64-cu130 +docker tag vllm/vllm-openai:x86_64-cu130 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu130 +docker push vllm/vllm-openai:latest-x86_64-cu130 +docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu130 + docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64 vllm/vllm-openai:aarch64 docker tag vllm/vllm-openai:aarch64 vllm/vllm-openai:latest-aarch64 docker tag vllm/vllm-openai:aarch64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 docker push vllm/vllm-openai:latest-aarch64 docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 +docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-aarch64-cu130 vllm/vllm-openai:aarch64-cu130 +docker tag vllm/vllm-openai:aarch64-cu130 vllm/vllm-openai:latest-aarch64-cu130 +docker tag vllm/vllm-openai:aarch64-cu130 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu130 +docker push vllm/vllm-openai:latest-aarch64-cu130 +docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu130 + +docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-rocm +docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-rocm vllm/vllm-openai-rocm:latest +docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-rocm vllm/vllm-openai-rocm:v${RELEASE_VERSION}-rocm +docker push vllm/vllm-openai-rocm:latest +docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION}-rocm + +Create multi-arch manifest: docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm-base vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-base docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-base vllm/vllm-openai-rocm:latest-base docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT}-base vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base docker push vllm/vllm-openai-rocm:latest-base docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base -docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${BUILDKITE_COMMIT}-rocm vllm/vllm-openai-rocm:${BUILDKITE_COMMIT} -docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT} vllm/vllm-openai-rocm:latest -docker tag vllm/vllm-openai-rocm:${BUILDKITE_COMMIT} vllm/vllm-openai-rocm:v${RELEASE_VERSION} -docker push vllm/vllm-openai-rocm:latest -docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION} - docker manifest rm vllm/vllm-openai:latest docker manifest create vllm/vllm-openai:latest vllm/vllm-openai:latest-x86_64 vllm/vllm-openai:latest-aarch64 docker manifest create vllm/vllm-openai:v${RELEASE_VERSION} vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64 docker manifest push vllm/vllm-openai:latest docker manifest push vllm/vllm-openai:v${RELEASE_VERSION} + +docker manifest rm vllm/vllm-openai:latest-cu130 +docker manifest create vllm/vllm-openai:latest-cu130 vllm/vllm-openai:latest-x86_64-cu130 vllm/vllm-openai:latest-aarch64-cu130 +docker manifest create vllm/vllm-openai:v${RELEASE_VERSION}-cu130 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu130 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu130 +docker manifest push vllm/vllm-openai:latest-cu130 +docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-cu130 \`\`\` EOF diff --git a/.buildkite/scripts/upload-release-wheels.sh b/.buildkite/scripts/upload-release-wheels-pypi.sh similarity index 56% rename from .buildkite/scripts/upload-release-wheels.sh rename to .buildkite/scripts/upload-release-wheels-pypi.sh index 2d8fc6a40..75f519168 100644 --- a/.buildkite/scripts/upload-release-wheels.sh +++ b/.buildkite/scripts/upload-release-wheels-pypi.sh @@ -7,17 +7,19 @@ SUBPATH=$BUILDKITE_COMMIT S3_COMMIT_PREFIX="s3://$BUCKET/$SUBPATH/" RELEASE_VERSION=$(buildkite-agent meta-data get release-version) -echo "Release version from Buildkite: $RELEASE_VERSION" GIT_VERSION=$(git describe --exact-match --tags $BUILDKITE_COMMIT 2>/dev/null) -if [ -z "$GIT_VERSION" ]; then + +echo "Release version from Buildkite: $RELEASE_VERSION" + +if [[ -z "$GIT_VERSION" ]]; then echo "[FATAL] Not on a git tag, cannot create release." exit 1 else echo "Git version for commit $BUILDKITE_COMMIT: $GIT_VERSION" fi # sanity check for version mismatch -if [ "$RELEASE_VERSION" != "$GIT_VERSION" ]; then - if [ "$FORCE_RELEASE_IGNORE_VERSION_MISMATCH" == "true" ]; then +if [[ "$RELEASE_VERSION" != "$GIT_VERSION" ]]; then + if [[ "$FORCE_RELEASE_IGNORE_VERSION_MISMATCH" == "true" ]]; then echo "[WARNING] Force release and ignore version mismatch" else echo "[FATAL] Release version from Buildkite does not match Git version." @@ -27,7 +29,7 @@ fi PURE_VERSION=${RELEASE_VERSION#v} # remove leading 'v' # check pypi token -if [ -z "$PYPI_TOKEN" ]; then +if [[ -z "$PYPI_TOKEN" ]]; then echo "[FATAL] PYPI_TOKEN is not set." exit 1 else @@ -35,41 +37,8 @@ else export TWINE_PASSWORD="$PYPI_TOKEN" fi -# check github token -if [ -z "$GITHUB_TOKEN" ]; then - echo "[FATAL] GITHUB_TOKEN is not set." - exit 1 -else - export GH_TOKEN="$GITHUB_TOKEN" -fi - set -x # avoid printing secrets above -# download gh CLI from github -# Get latest gh CLI version from GitHub API -GH_VERSION=$(curl -s https://api.github.com/repos/cli/cli/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/^v//') -if [ -z "$GH_VERSION" ]; then - echo "[FATAL] Failed to get latest gh CLI version from GitHub" - exit 1 -fi -echo "Downloading gh CLI version: $GH_VERSION" -GH_TARBALL="gh_${GH_VERSION}_linux_amd64.tar.gz" -GH_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/${GH_TARBALL}" -GH_INSTALL_DIR="/tmp/gh-install" -mkdir -p "$GH_INSTALL_DIR" -pushd "$GH_INSTALL_DIR" -curl -L -o "$GH_TARBALL" "$GH_URL" -tar -xzf "$GH_TARBALL" -GH_BIN=$(realpath $(find . -name "gh" -type f -executable | head -n 1)) -if [ -z "$GH_BIN" ]; then - echo "[FATAL] Failed to find gh CLI executable" - exit 1 -fi -echo "gh CLI downloaded successfully, version: $($GH_BIN --version)" -echo "Last 5 releases on GitHub:" # as a sanity check of gh and GH_TOKEN -command "$GH_BIN" release list --limit 5 -popd - # install twine from pypi python3 -m venv /tmp/vllm-release-env source /tmp/vllm-release-env/bin/activate @@ -89,16 +58,13 @@ echo "Wheels copied to local directory" git archive --format=tar.gz --output="$DIST_DIR/vllm-${PURE_VERSION}.tar.gz" $BUILDKITE_COMMIT ls -la $DIST_DIR - # upload wheels to PyPI (only default variant, i.e. files without '+' in the name) PYPI_WHEEL_FILES=$(find $DIST_DIR -name "vllm-${PURE_VERSION}*.whl" -not -name "*+*") -if [ -z "$PYPI_WHEEL_FILES" ]; then +if [[ -z "$PYPI_WHEEL_FILES" ]]; then echo "No default variant wheels found, quitting..." exit 1 fi -python3 -m twine check $PYPI_WHEEL_FILES -python3 -m twine --non-interactive --verbose upload $PYPI_WHEEL_FILES -echo "Wheels uploaded to PyPI" -# create release on GitHub with the release version and all wheels -command "$GH_BIN" release create $GIT_VERSION -d --latest --notes-from-tag --verify-tag $DIST_DIR/*.whl +python3 -m twine check $PYPI_WHEEL_FILES +python3 -m twine upload --non-interactive --verbose $PYPI_WHEEL_FILES +echo "Wheels uploaded to PyPI"