Check client/server compatibility (#810) #135
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
tags: | |
- '*' | |
jobs: | |
python-lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- name: Run isort | |
uses: isort/isort-action@master | |
with: | |
isort-version: 5.12.0 | |
configuration: "--settings-file pyconfig.toml --check-only --diff" | |
sort-paths: "src" | |
- name: Run black | |
uses: psf/black@stable | |
with: | |
options: "--config pyconfig.toml --check --verbose" | |
src: "./src" | |
version: "~= 22.0" | |
python-test: | |
needs: [ python-lint ] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ macos-latest, ubuntu-latest] | |
python-version: [ 3.8, 3.9, "3.10", 3.11 ] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install '.[all]' | |
pip install -r requirements_dev.txt | |
- name: Run pytest | |
run: | | |
pytest src/tests | |
runner-test: | |
defaults: | |
run: | |
working-directory: runner | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: 1.21.1 | |
- name: golangci-lint | |
uses: golangci/golangci-lint-action@v3 | |
with: | |
version: v1.51.2 | |
args: --issues-exit-code=0 --timeout=20m | |
working-directory: runner | |
- name: Test | |
run: | | |
go version | |
go fmt $(go list ./... | grep -v /vendor/) | |
go vet $(go list ./... | grep -v /vendor/) | |
go test -race $(go list ./... | grep -v /vendor/) | |
runner-compile: | |
needs: [ runner-test ] | |
defaults: | |
run: | |
working-directory: runner | |
env: | |
REPO_NAME: github.com/dstackai/dstack | |
strategy: | |
matrix: | |
include: | |
- {goos: "linux", goarch: "amd64", runson: "ubuntu-latest"} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: 1.21.1 | |
- name: build | |
env: | |
GOOS: ${{ matrix.goos }} | |
GOARCH: ${{ matrix.goarch }} | |
ACTIONSOS: ${{ matrix.runson }} | |
CGO_ENABLED: 0 | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
go build -ldflags "-X '$REPO_NAME/runner/cmd/runner/version.Version=$VERSION' -extldflags '-static'" -o dstack-runner-$GOOS-$GOARCH $REPO_NAME/runner/cmd/runner | |
go build -ldflags "-X '$REPO_NAME/runner/cmd/shim/version.Version=$VERSION' -extldflags '-static'" -o dstack-shim-$GOOS-$GOARCH $REPO_NAME/runner/cmd/shim | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: dstack-runner | |
path: | | |
runner/dstack-runner-${{ matrix.goos }}-${{ matrix.goarch }} | |
runner/dstack-shim-${{ matrix.goos }}-${{ matrix.goarch }} | |
runner-upload: | |
needs: [ runner-compile ] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install AWS | |
run: pip install awscli | |
- name: Download Runner | |
uses: actions/download-artifact@v3 | |
with: | |
name: dstack-runner | |
path: runner | |
- name: Upload to S3 | |
working-directory: runner | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
aws s3 cp . "s3://dstack-runner-downloads/$VERSION/binaries/" --recursive --exclude "*" --include "dstack-*" --acl public-read | |
aws s3 cp . "s3://dstack-runner-downloads/latest/binaries/" --recursive --exclude "*" --include "dstack-*" --acl public-read | |
pypi-upload: | |
needs: [ python-test, runner-upload ] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install wheel twine | |
- name: Upload pip package | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
BASE_IMAGE=$(cat src/dstack/version.py | grep base_image) | |
echo "__version__ = \"$VERSION\"" > src/dstack/version.py | |
echo "__is_release__ = True" >> src/dstack/version.py | |
echo $BASE_IMAGE >> src/dstack/version.py | |
cp README.md src | |
python setup.py sdist bdist_wheel -v | |
python -m twine upload --repository pypi --username ${{ secrets.PYPI_USERNAME }} --password ${{ secrets.PYPI_PASSWORD }} dist/* | |
update-get-dstack-tag: | |
needs: [ pypi-upload ] | |
runs-on: ubuntu-latest | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
steps: | |
- name: Install AWS | |
run: pip install awscli | |
- run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
echo $VERSION | aws s3 cp - s3://get-dstack/cli/latest-version --acl public-read | |
server-docker-upload: | |
needs: [ pypi-upload ] | |
defaults: | |
run: | |
working-directory: docker/server | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Build and upload to DockerHub | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
docker buildx build --platform linux/arm64/v8 --build-arg VERSION=$VERSION --push --provenance=false --tag dstackai/dstack:$VERSION-arm64 -f release/Dockerfile . | |
docker buildx build --platform linux/amd64 --build-arg VERSION=$VERSION --push --provenance=false --tag dstackai/dstack:$VERSION-amd64 -f release/Dockerfile . | |
docker manifest create dstackai/dstack:$VERSION --amend dstackai/dstack:$VERSION-arm64 --amend dstackai/dstack:$VERSION-amd64 | |
docker manifest push dstackai/dstack:$VERSION | |
docker manifest create dstackai/dstack:latest --amend dstackai/dstack:$VERSION-arm64 --amend dstackai/dstack:$VERSION-amd64 | |
docker manifest push dstackai/dstack:latest | |
generate-json-schema: | |
needs: [ pypi-upload ] | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install AWS | |
run: pip install awscli | |
- name: Install dstack | |
run: pip install . | |
- name: Generate json schema | |
run: | | |
python -c "from dstack._internal.core.models.configurations import RunConfiguration; print(RunConfiguration.schema_json(indent=2))" > configuration.json | |
python -c "from dstack._internal.core.models.profiles import ProfilesConfig; print(ProfilesConfig.schema_json(indent=2))" > profiles.json | |
- name: Upload json schema to S3 | |
run: | | |
VERSION=${GITHUB_REF#refs/tags/} | |
aws s3 cp configuration.json "s3://dstack-runner-downloads/$VERSION/schemas/configuration.json" --acl public-read | |
aws s3 cp configuration.json "s3://dstack-runner-downloads/latest/schemas/configuration.json" --acl public-read | |
aws s3 cp profiles.json "s3://dstack-runner-downloads/$VERSION/schemas/profiles.json" --acl public-read | |
aws s3 cp profiles.json "s3://dstack-runner-downloads/latest/schemas/profiles.json" --acl public-read |