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
10 changes: 6 additions & 4 deletions .github/workflows/build-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -216,12 +216,14 @@ jobs:
VERSION=${{ inputs.version }}
IS_RELEASE=True
fi
BASE_IMAGE=$(cat src/dstack/version.py | grep "base_image = ")
BASE_IMAGE_UBUNTU_VERSION=$(cat src/dstack/version.py | grep "base_image_ubuntu_version = ")
DOCKER_BASE_IMAGE=$(cat src/dstack/version.py | grep "docker_base_image = ")
DOCKER_BASE_IMAGE_UBUNTU_VERSION=$(cat src/dstack/version.py | grep "docker_base_image_ubuntu_version = ")
VM_BASE_IMAGE=$(cat src/dstack/version.py | grep "vm_base_image = ")
echo "__version__ = \"$VERSION\"" > src/dstack/version.py
echo "__is_release__ = $IS_RELEASE" >> src/dstack/version.py
echo $BASE_IMAGE >> src/dstack/version.py
echo $BASE_IMAGE_UBUNTU_VERSION >> src/dstack/version.py
echo $DOCKER_BASE_IMAGE >> src/dstack/version.py
echo $DOCKER_BASE_IMAGE_UBUNTU_VERSION >> src/dstack/version.py
echo $VM_BASE_IMAGE >> src/dstack/version.py
cp README.md src
uv build
- uses: actions/upload-artifact@v4
Expand Down
200 changes: 2 additions & 198 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Build Docker & cloud images
run-name: Build Docker & cloud images ${{ inputs.image_version }}${{ inputs.staging && ' (staging)' || '' }}
name: Build Docker images
run-name: Build Docker images ${{ inputs.image_version }}${{ inputs.staging && ' (staging)' || '' }}

on:
workflow_dispatch:
Expand All @@ -11,35 +11,12 @@ on:
description: "Build staging images"
type: boolean
default: false
build_docker:
description: "Build Docker images"
type: boolean
default: true
build_aws:
description: "Build AWS images"
type: boolean
default: true
build_azure:
description: "Build Azure images"
type: boolean
default: true
build_gcp:
description: "Build GCP images"
type: boolean
default: true
build_oci:
description: "Build OCI images"
type: boolean
default: true

env:
PACKER_VERSION: "1.9.2"
BUILD_DOCKER_REPO: ${{ inputs.staging && 'base-stgn' || 'base' }}
VM_IMAGE_BUILD_PREFIX: ${{ inputs.staging && format('stgn-{0}-', github.run_number) || '' }} # staging ? prefix : ''

jobs:
build-docker:
if: inputs.build_docker
defaults:
run:
working-directory: docker
Expand Down Expand Up @@ -83,176 +60,3 @@ jobs:
--provenance=false \
--push \
-f $FILE .

build-aws-images:
needs: build-docker
if: always() && inputs.build_aws && (needs.build-docker.result == 'success' || needs.build-docker.result == 'skipped')
defaults:
run:
working-directory: scripts/packer
runs-on: ubuntu-latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
strategy:
matrix:
variant: ["", "-cuda"]
steps:
- uses: actions/checkout@v4
- name: Download packer
run: |
wget https://releases.hashicorp.com/packer/${{ env.PACKER_VERSION }}/packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
unzip packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
chmod +x packer
- name: Run packer
run: |
./packer build -var-file=versions.json $PROD_VARS -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX aws-image${{ matrix.variant }}.json
env:
PROD_VARS: ${{ !inputs.staging && '-var-file=aws-vars-prod.json' || '' }} # production ? var-file : ''

build-azure-images:
needs: build-docker
if: always() && inputs.build_azure && (needs.build-docker.result == 'success' || needs.build-docker.result == 'skipped')
defaults:
run:
working-directory: scripts/packer
runs-on: ubuntu-latest
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
VERSION: ${{ github.run_number }}
strategy:
matrix:
variant: ["", "-cuda", "-grid"]
steps:
- uses: actions/checkout@v4
- uses: Azure/login@v2
name: Log in to az
with:
creds: '{"clientId":"${{ secrets.AZURE_CLIENT_ID }}","clientSecret":"${{ secrets.AZURE_CLIENT_SECRET }}","subscriptionId":"${{ secrets.AZURE_SUBSCRIPTION_ID }}","tenantId":"${{ secrets.AZURE_TENANT_ID }}"}'
- name: Download packer
run: |
wget https://releases.hashicorp.com/packer/${{ env.PACKER_VERSION }}/packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
unzip packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
chmod +x packer
- name: Run packer
run: |
./packer build -var-file=versions.json -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX azure-image${{ matrix.variant }}.json
- name: Publish azure image
if: ${{ !inputs.staging }}
run: |
IMAGE_DEFINITION=${VM_IMAGE_BUILD_PREFIX}dstack${{ matrix.variant }}-${{ inputs.image_version }}
IMAGE_NAME=${VM_IMAGE_BUILD_PREFIX}dstack${{ matrix.variant }}-${{ inputs.image_version }}
../publish_azure_image.sh $IMAGE_DEFINITION $IMAGE_NAME

build-gcp-images:
needs: build-docker
if: always() && inputs.build_gcp && (needs.build-docker.result == 'success' || needs.build-docker.result == 'skipped')
defaults:
run:
working-directory: scripts/packer
runs-on: ubuntu-latest
strategy:
matrix:
variant: ["", "-cuda"]
permissions:
contents: "read"
id-token: "write"
steps:
- uses: actions/checkout@v4
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
workload_identity_provider: "projects/531508670106/locations/global/workloadIdentityPools/github-identity-pool/providers/github-id-provider"
service_account: "github-actions@dstack.iam.gserviceaccount.com"
create_credentials_file: true
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v2
- name: Download packer
run: |
wget https://releases.hashicorp.com/packer/${{ env.PACKER_VERSION }}/packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
unzip packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
chmod +x packer
- name: Run packer
run: |
./packer build -var-file=versions.json -var image_version=${{ inputs.image_version }} -var build_prefix=$VM_IMAGE_BUILD_PREFIX gcp-image${{ matrix.variant }}.json
- name: Publish images
run: |
IMAGE_VERSION=${IMAGE_VERSION//./-}
gcloud compute images add-iam-policy-binding ${VM_IMAGE_BUILD_PREFIX}dstack${{ matrix.variant }}-$IMAGE_VERSION --member='allAuthenticatedUsers' --role='roles/compute.imageUser'
env:
IMAGE_VERSION: ${{ inputs.image_version }}

build-oci-images:
needs: build-docker
if: always() && inputs.build_oci && (needs.build-docker.result == 'success' || needs.build-docker.result == 'skipped')
runs-on: ubuntu-latest
env:
OCI_COMPARTMENT: ocid1.compartment.oc1..aaaaaaaaxu2uq64unfa2imwkp37icxqv6f7gwp2mczdt2mukuqbkauwqmbtq
OCI_SUBNET: ocid1.subnet.oc1.eu-frankfurt-1.aaaaaaaaewxkaqsmbi2tig5sfw4eexzo3mkb4zrpm4gwvfhqdddnxicxe4fa
OCI_AVAILABILITY_DOMAIN: kZql:EU-FRANKFURT-1-AD-3
OCI_REGION: eu-frankfurt-1
strategy:
matrix:
variant: ["", "-cuda"]
steps:
- uses: actions/checkout@v4
- name: Setup OCI config
run: |
mkdir ~/.oci
echo "$OCI_KEY_CONTENT" > ~/.oci/key.pem
echo [DEFAULT] > ~/.oci/config
echo region=$OCI_REGION >> ~/.oci/config
echo tenancy=$OCI_TENANCY >> ~/.oci/config
echo user=$OCI_USER >> ~/.oci/config
echo fingerprint=$OCI_FINGERPRINT >> ~/.oci/config
echo key_file=~/.oci/key.pem >> ~/.oci/config
env:
OCI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
- name: Install packer
working-directory: scripts/packer
run: |
wget https://releases.hashicorp.com/packer/${{ env.PACKER_VERSION }}/packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
unzip packer_${{ env.PACKER_VERSION }}_linux_amd64.zip
chmod +x packer
./packer plugins install github.com/hashicorp/oracle
- name: Run packer
working-directory: scripts/packer
run: |
./packer build \
-var-file=versions.json \
-var image_version=${{ inputs.image_version }} \
-var build_prefix=$VM_IMAGE_BUILD_PREFIX \
-var oci_compartment_ocid=$OCI_COMPARTMENT \
-var oci_subnet_ocid=$OCI_SUBNET \
-var oci_availability_domain=$OCI_AVAILABILITY_DOMAIN \
oci-image${{ matrix.variant }}.json
- uses: astral-sh/setup-uv@v5
with:
python-version: "3.12"
- name: Install dependencies for publishing
run: |
uv sync --extra oci
- name: Copy image to target regions
if: ${{ !inputs.staging }}
run: |
uv run scripts/oci_image_tools.py copy \
--image ${VM_IMAGE_BUILD_PREFIX}dstack${{ matrix.variant }}-${{ inputs.image_version }} \
--from $OCI_REGION \
--compartment $OCI_COMPARTMENT
- name: Publish image in OCI Marketplace
if: ${{ !inputs.staging }}
run: |
uv run scripts/oci_image_tools.py publish \
--image ${VM_IMAGE_BUILD_PREFIX}dstack${{ matrix.variant }}-${{ inputs.image_version }} \
--compartment $OCI_COMPARTMENT \
--version ${{ inputs.image_version }} \
--description "Image for running workloads with dstack - https://dstack.ai/" \
--os "Ubuntu 22.04" \
--contact-name dstack \
--contact-email hello@dstack.ai
Loading
Loading