Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 172 additions & 0 deletions .github/workflows/_pr_image_build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
name: Image_oncall
on:
workflow_call:
inputs:
suffix:
description: 'The tag subfix to use'
required: true
type: string
should_push:
description: 'Whether to push the image'
required: false
type: boolean
default: False
dockerfile:
description: 'The Dockerfile to use'
required: false
type: string
quay_username:
description: 'Quay username for pushing images'
required: false
type: string
secrets:
QUAY_PASSWORD:
description: 'Quay password for pushing images'
required: false

jobs:
build-push-digest:
name: Image Build and Push
runs-on: ${{ matrix.runner }}
strategy:
matrix:
include:
- arch: linux/amd64
runner: ubuntu-latest
tag: amd64
- arch: linux/arm64
runner: ubuntu-22.04-arm
tag: arm64
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- name: Free up disk space
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
with:
tool-cache: true
docker-images: false

- name: Publish - Login to Quay Container Registry
if: ${{ inputs.should_push }}
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ inputs.quay_username }}
password: ${{ secrets.QUAY_PASSWORD }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
driver: docker-container
use: true

- name: Build and push
uses: docker/build-push-action@v6
id: build
with:
platforms: ${{ matrix.arch }}
# use the current repo path as the build context, ensure .git is contained
context: .
file: ${{ inputs.dockerfile || 'Dockerfile' }}
# only trigger when tag, branch/main push
push: ${{ inputs.should_push }}
tags: quay.io/ascend/vllm-ascend
outputs: type=image,push-by-digest=true,name-canonical=true,push=${{ inputs.should_push }}
build-args: |
PIP_INDEX_URL=https://pypi.org/simple
provenance: false

- name: Export digest
run: |
mkdir -p ${{ runner.temp }}/digests
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ inputs.suffix }}-${{ matrix.tag }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1


merge-image:
runs-on: ubuntu-latest
needs: build-push-digest
if: ${{ inputs.should_push }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download arm64 digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-${{ inputs.suffix }}-arm64
merge-multiple: true

- name: Download amd64 digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-${{ inputs.suffix }}-amd64
merge-multiple: true

- name: Prepare suffix
id: suffix
run: |
if [ -n "${{ inputs.suffix }}" ]; then
echo "SUFFIX=-${{ inputs.suffix }}" >> $GITHUB_ENV
else
echo "SUFFIX=" >> $GITHUB_ENV
fi

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# TODO(yikun): add more hub image and a note on release policy for container image
images: |
quay.io/ascend/vllm-ascend
# Note for test case
# https://github.com/marketplace/actions/docker-metadata-action#typeref
# 1. branch job pulish per main/*-dev branch commits
# 2. main and dev pull_request is build only, so the tag pr-N-openeuler is fine
# 3. only pep440 matched tag will be published:
# - v0.7.1 --> v0.7.1-openeuler
# - pre/post/dev: v0.7.1rc1-openeuler/v0.7.1rc1-openeuler/v0.7.1rc1.dev1-openeuler/v0.7.1.post1-openeuler, no latest
# which follow the rule from vLLM with prefix v
# TODO(yikun): the post release might be considered as latest release
tags: |
type=ref,event=branch,suffix=${{ env.SUFFIX }}
type=ref,event=pr,suffix=${{ env.SUFFIX }}
type=pep440,pattern={{raw}},suffix=${{ env.SUFFIX }}
flavor:
latest=false

- name: Login to Quay
uses: docker/login-action@v3
with:
registry: quay.io
username: ${{ inputs.quay_username }}
password: ${{ secrets.QUAY_PASSWORD }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Merge and push multi-arch image
env:
IMAGE: quay.io/ascend/vllm-ascend
TAGS: ${{ steps.meta.outputs.tags }}
run: |
DIGESTS=$(printf "$IMAGE@sha256:%s " $(ls ${{ runner.temp }}/digests))

echo "Digests: $DIGESTS"
echo "Current tags: $TAGS"
docker buildx imagetools create \
-t TAGS \
$DIGESTS
Loading
Loading