88 description : " Docker image version"
99 required : true
1010 staging :
11- description : " Staging build"
11+ description : " Build staging images"
12+ type : boolean
13+ default : false
14+ prepull_staging :
15+ description : " Pre-pull staging Docker images"
1216 type : boolean
1317 default : false
1418 build_docker :
15- description : " Build docker images"
19+ description : " Build Docker images"
1620 type : boolean
1721 default : true
1822 build_aws :
3438
3539env :
3640 PACKER_VERSION : " 1.9.2"
37- BUILD_PREFIX : ${{ inputs.staging && format('stgn-{0}-', github.run_number) || '' }} # staging ? prefix : ''
41+ BUILD_DOCKER_REPO : ${{ inputs.staging && 'base-stgn' || 'base' }}
42+ PREPULL_DOCKER_REPO : ${{ inputs.prepull_staging && 'base-stgn' || 'base' }}
43+ VM_IMAGE_BUILD_PREFIX : ${{ inputs.staging && format('stgn-{0}-', github.run_number) || '' }} # staging ? prefix : ''
3844
3945jobs :
4046 build-docker :
4551 runs-on : ubuntu-latest
4652 strategy :
4753 matrix :
48- python : ["3.9", "3.10", "3.11", "3.12", "3.13"]
54+ flavor : ["base", "devel", "devel-efa"]
55+ ubuntu_version : ["22"]
4956 steps :
5057 - name : Checkout repository
5158 uses : actions/checkout@v4
6067 uses : docker/setup-qemu-action@v3
6168 - name : Build and upload to DockerHub
6269 run : |
63- docker buildx build --platform linux/amd64 --build-arg PYTHON=${{ matrix.python }} --push --provenance=false --tag dstackai/base:py${{ matrix.python }}-${{ inputs.image_version }}-cuda-12.1 -f base/Dockerfile .
64- docker buildx build --platform linux/amd64 --build-arg PYTHON=${{ matrix.python }} --build-arg VERSION=${{ inputs.image_version }} --push --provenance=false --tag dstackai/base:py${{ matrix.python }}-${{ inputs.image_version }}-cuda-12.1-devel -f base/devel.Dockerfile .
70+ if [ "${{ matrix.flavor }}" = "base" ]; then
71+ FILE="base/Dockerfile"
72+ elif [ "${{ matrix.flavor }}" = "devel" ]; then
73+ FILE="base/Dockerfile"
74+ else
75+ FILE="base/efa/Dockerfile"
76+ fi
77+ docker buildx build \
78+ --platform linux/amd64 \
79+ --tag dstackai/${{ env.BUILD_DOCKER_REPO }}:${{ inputs.image_version }}-${{ matrix.flavor }}-ubuntu${{ matrix.ubuntu_version }}.04 \
80+ --build-arg FLAVOR=${{ matrix.flavor }} \
81+ --build-arg UBUNTU_VERSION=${{ matrix.ubuntu_version }} \
82+ --provenance=false \
83+ --push \
84+ -f $FILE .
6585
6686 build-aws-images :
6787 needs : build-docker
85105 chmod +x packer
86106 - name : Run packer
87107 run : |
88- ./packer build -var-file=versions.json $PROD_VARS -var image_version=${{ inputs.image_version }} -var build_prefix=$BUILD_PREFIX aws-image${{ matrix.variant }}.json
108+ ./packer build -var-file=versions.json $PROD_VARS -var image_repo=${{ env.PREPULL_DOCKER_REPO }} -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX aws-image${{ matrix.variant }}.json
89109 env :
90110 PROD_VARS : ${{ !inputs.staging && '-var-file=aws-vars-prod.json' || '' }} # production ? var-file : ''
91111
@@ -118,12 +138,12 @@ jobs:
118138 chmod +x packer
119139 - name : Run packer
120140 run : |
121- ./packer build -var-file=versions.json -var image_version=${{ inputs.image_version }} -var build_prefix=$BUILD_PREFIX azure-image${{ matrix.variant }}.json
141+ ./packer build -var-file=versions.json -var image_repo=${{ env.PREPULL_DOCKER_REPO }} -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX azure-image${{ matrix.variant }}.json
122142 - name : Publish azure image
123143 if : ${{ !inputs.staging }}
124144 run : |
125- IMAGE_DEFINITION=${BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }}
126- IMAGE_NAME=${BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }}
145+ IMAGE_DEFINITION=${VM_IMAGE_BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }}
146+ IMAGE_NAME=${VM_IMAGE_BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }}
127147 ../publish_azure_image.sh $IMAGE_DEFINITION $IMAGE_NAME
128148
129149 build-gcp-images :
@@ -156,11 +176,11 @@ jobs:
156176 chmod +x packer
157177 - name : Run packer
158178 run : |
159- ./packer build -var-file=versions.json -var image_version=${{ inputs.image_version }} -var build_prefix=$BUILD_PREFIX gcp-image${{ matrix.variant }}.json
179+ ./packer build -var-file=versions.json -var image_repo=${{ env.PREPULL_DOCKER_REPO }} -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX gcp-image${{ matrix.variant }}.json
160180 - name : Publish images
161181 run : |
162182 IMAGE_VERSION=${IMAGE_VERSION//./-}
163- gcloud compute images add-iam-policy-binding ${BUILD_PREFIX }dstack${{ matrix.variant }}-$IMAGE_VERSION --member='allAuthenticatedUsers' --role='roles/compute.imageUser'
183+ gcloud compute images add-iam-policy-binding ${VM_IMAGE_BUILD_PREFIX }dstack${{ matrix.variant }}-$IMAGE_VERSION --member='allAuthenticatedUsers' --role='roles/compute.imageUser'
164184 env :
165185 IMAGE_VERSION : ${{ inputs.image_version }}
166186
@@ -205,8 +225,9 @@ jobs:
205225 run : |
206226 ./packer build \
207227 -var-file=versions.json \
228+ -var image_repo=${{ env.PREPULL_DOCKER_REPO }} \
208229 -var image_version=${{ inputs.image_version }} \
209- -var build_prefix=$BUILD_PREFIX \
230+ -var build_prefix=$VM_IMAGE_BUILD_PREFIX \
210231 -var oci_compartment_ocid=$OCI_COMPARTMENT \
211232 -var oci_subnet_ocid=$OCI_SUBNET \
212233 -var oci_availability_domain=$OCI_AVAILABILITY_DOMAIN \
@@ -221,14 +242,14 @@ jobs:
221242 if : ${{ !inputs.staging }}
222243 run : |
223244 uv run scripts/oci_image_tools.py copy \
224- --image ${BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }} \
245+ --image ${VM_IMAGE_BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }} \
225246 --from $OCI_REGION \
226247 --compartment $OCI_COMPARTMENT
227248 - name : Publish image in OCI Marketplace
228249 if : ${{ !inputs.staging }}
229250 run : |
230251 uv run scripts/oci_image_tools.py publish \
231- --image ${BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }} \
252+ --image ${VM_IMAGE_BUILD_PREFIX }dstack${{ matrix.variant }}-${{ inputs.image_version }} \
232253 --compartment $OCI_COMPARTMENT \
233254 --version ${{ inputs.image_version }} \
234255 --description "Image for running workloads with dstack - https://dstack.ai/" \
0 commit comments