zed/.github/workflows/deploy_collab.yml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

145 lines
4.6 KiB
YAML
Raw Normal View History

name: Publish Collab Server Image
on:
push:
tags:
- collab-production
- collab-staging
env:
DOCKER_BUILDKIT: 1
DIGITALOCEAN_ACCESS_TOKEN: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
jobs:
style:
name: Check formatting and Clippy lints
runs-on:
- self-hosted
- test
steps:
- name: Checkout repo
Pin dependencies (#15188) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [2428392/gh-truncate-string-action](https://togithub.com/2428392/gh-truncate-string-action) | action | pinDigest | -> `67b1b81` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `692973e` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `ee0669b` | | [actions/setup-node](https://togithub.com/actions/setup-node) | action | pinDigest | -> `1e60f62` | | [actions/setup-python](https://togithub.com/actions/setup-python) | action | pinDigest | -> `39cd149` | | [actions/upload-artifact](https://togithub.com/actions/upload-artifact) | action | pinDigest | -> `0b2256b` | | [cloudflare/wrangler-action](https://togithub.com/cloudflare/wrangler-action) | action | pinDigest | -> `f84a562` | | [dcarbone/install-jq-action](https://togithub.com/dcarbone/install-jq-action) | action | pinDigest | -> `8867ddb` | | [peaceiris/actions-mdbook](https://togithub.com/peaceiris/actions-mdbook) | action | pinDigest | -> `ee69d23` | | [rui314/setup-mold](https://togithub.com/rui314/setup-mold) | action | pinDigest | -> `2e332a0` | | [softprops/action-gh-release](https://togithub.com/softprops/action-gh-release) | action | pinDigest | -> `de2c0eb` | | [swatinem/rust-cache](https://togithub.com/swatinem/rust-cache) | action | pinDigest | -> `23bce25` | | [tsickert/discord-webhook](https://togithub.com/tsickert/discord-webhook) | action | pinDigest | -> `c840d45` | --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 13:19:05 +00:00
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
with:
clean: false
fetch-depth: 0
- name: Run style checks
uses: ./.github/actions/check_style
- name: Run clippy
run: ./script/clippy
tests:
name: Run tests
runs-on:
- self-hosted
- test
needs: style
steps:
- name: Checkout repo
Pin dependencies (#15188) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [2428392/gh-truncate-string-action](https://togithub.com/2428392/gh-truncate-string-action) | action | pinDigest | -> `67b1b81` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `692973e` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `ee0669b` | | [actions/setup-node](https://togithub.com/actions/setup-node) | action | pinDigest | -> `1e60f62` | | [actions/setup-python](https://togithub.com/actions/setup-python) | action | pinDigest | -> `39cd149` | | [actions/upload-artifact](https://togithub.com/actions/upload-artifact) | action | pinDigest | -> `0b2256b` | | [cloudflare/wrangler-action](https://togithub.com/cloudflare/wrangler-action) | action | pinDigest | -> `f84a562` | | [dcarbone/install-jq-action](https://togithub.com/dcarbone/install-jq-action) | action | pinDigest | -> `8867ddb` | | [peaceiris/actions-mdbook](https://togithub.com/peaceiris/actions-mdbook) | action | pinDigest | -> `ee69d23` | | [rui314/setup-mold](https://togithub.com/rui314/setup-mold) | action | pinDigest | -> `2e332a0` | | [softprops/action-gh-release](https://togithub.com/softprops/action-gh-release) | action | pinDigest | -> `de2c0eb` | | [swatinem/rust-cache](https://togithub.com/swatinem/rust-cache) | action | pinDigest | -> `23bce25` | | [tsickert/discord-webhook](https://togithub.com/tsickert/discord-webhook) | action | pinDigest | -> `c840d45` | --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 13:19:05 +00:00
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
with:
clean: false
fetch-depth: 0
- name: Install cargo nextest
shell: bash -euxo pipefail {0}
run: |
cargo install cargo-nextest
- name: Limit target directory size
shell: bash -euxo pipefail {0}
run: script/clear-target-dir-if-larger-than 100
- name: Run tests
shell: bash -euxo pipefail {0}
run: cargo nextest run --package collab --no-fail-fast
publish:
name: Publish collab server image
needs:
- style
- tests
runs-on:
- self-hosted
- deploy
steps:
- name: Add Rust to the PATH
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
- name: Sign into DigitalOcean docker registry
run: doctl registry login
- name: Checkout repo
Pin dependencies (#15188) [![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [2428392/gh-truncate-string-action](https://togithub.com/2428392/gh-truncate-string-action) | action | pinDigest | -> `67b1b81` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `692973e` | | [actions/checkout](https://togithub.com/actions/checkout) | action | pinDigest | -> `ee0669b` | | [actions/setup-node](https://togithub.com/actions/setup-node) | action | pinDigest | -> `1e60f62` | | [actions/setup-python](https://togithub.com/actions/setup-python) | action | pinDigest | -> `39cd149` | | [actions/upload-artifact](https://togithub.com/actions/upload-artifact) | action | pinDigest | -> `0b2256b` | | [cloudflare/wrangler-action](https://togithub.com/cloudflare/wrangler-action) | action | pinDigest | -> `f84a562` | | [dcarbone/install-jq-action](https://togithub.com/dcarbone/install-jq-action) | action | pinDigest | -> `8867ddb` | | [peaceiris/actions-mdbook](https://togithub.com/peaceiris/actions-mdbook) | action | pinDigest | -> `ee69d23` | | [rui314/setup-mold](https://togithub.com/rui314/setup-mold) | action | pinDigest | -> `2e332a0` | | [softprops/action-gh-release](https://togithub.com/softprops/action-gh-release) | action | pinDigest | -> `de2c0eb` | | [swatinem/rust-cache](https://togithub.com/swatinem/rust-cache) | action | pinDigest | -> `23bce25` | | [tsickert/discord-webhook](https://togithub.com/tsickert/discord-webhook) | action | pinDigest | -> `c840d45` | --- ### Configuration 📅 **Schedule**: Branch creation - "after 3pm on Wednesday" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- Release Notes: - N/A <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-25 13:19:05 +00:00
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
with:
clean: false
- name: Set up default .cargo/config.toml
2024-06-14 22:36:48 +00:00
run: cp ./.cargo/collab-config.toml ./.cargo/config.toml
- name: Build docker image
run: docker build . --build-arg GITHUB_SHA=$GITHUB_SHA --tag registry.digitalocean.com/zed/collab:$GITHUB_SHA
- name: Publish docker image
run: docker push registry.digitalocean.com/zed/collab:${GITHUB_SHA}
- name: Prune Docker system
run: docker system prune --filter 'until=72h' -f
deploy:
name: Deploy new server image
needs:
- publish
runs-on:
- self-hosted
- deploy
steps:
- name: Sign into Kubernetes
run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 ${{ secrets.CLUSTER_NAME }}
- name: Start rollout
run: |
set -eu
if [[ $GITHUB_REF_NAME = "collab-production" ]]; then
export ZED_KUBE_NAMESPACE=production
export ZED_COLLAB_LOAD_BALANCER_SIZE_UNIT=10
export ZED_API_LOAD_BALANCER_SIZE_UNIT=2
export ZED_LLM_LOAD_BALANCER_SIZE_UNIT=2
elif [[ $GITHUB_REF_NAME = "collab-staging" ]]; then
export ZED_KUBE_NAMESPACE=staging
export ZED_COLLAB_LOAD_BALANCER_SIZE_UNIT=1
export ZED_API_LOAD_BALANCER_SIZE_UNIT=1
export ZED_LLM_LOAD_BALANCER_SIZE_UNIT=1
else
echo "cowardly refusing to deploy from an unknown branch"
exit 1
fi
echo "Deploying collab:$GITHUB_SHA to $ZED_KUBE_NAMESPACE"
source script/lib/deploy-helpers.sh
export_vars_for_environment $ZED_KUBE_NAMESPACE
export ZED_DO_CERTIFICATE_ID=$(doctl compute certificate list --format ID --no-header)
export ZED_IMAGE_ID="registry.digitalocean.com/zed/collab:${GITHUB_SHA}"
export ZED_SERVICE_NAME=collab
export ZED_LOAD_BALANCER_SIZE_UNIT=$ZED_COLLAB_LOAD_BALANCER_SIZE_UNIT
envsubst < crates/collab/k8s/collab.template.yml | kubectl apply -f -
kubectl -n "$ZED_KUBE_NAMESPACE" rollout status deployment/$ZED_SERVICE_NAME --watch
echo "deployed ${ZED_SERVICE_NAME} to ${ZED_KUBE_NAMESPACE}"
export ZED_SERVICE_NAME=api
export ZED_LOAD_BALANCER_SIZE_UNIT=$ZED_API_LOAD_BALANCER_SIZE_UNIT
envsubst < crates/collab/k8s/collab.template.yml | kubectl apply -f -
kubectl -n "$ZED_KUBE_NAMESPACE" rollout status deployment/$ZED_SERVICE_NAME --watch
echo "deployed ${ZED_SERVICE_NAME} to ${ZED_KUBE_NAMESPACE}"
export ZED_SERVICE_NAME=llm
export ZED_LOAD_BALANCER_SIZE_UNIT=$ZED_LLM_LOAD_BALANCER_SIZE_UNIT
envsubst < crates/collab/k8s/collab.template.yml | kubectl apply -f -
kubectl -n "$ZED_KUBE_NAMESPACE" rollout status deployment/$ZED_SERVICE_NAME --watch
echo "deployed ${ZED_SERVICE_NAME} to ${ZED_KUBE_NAMESPACE}"