diff --git a/.github/workflows/publish_collab_image.yml b/.github/workflows/publish_collab_image.yml new file mode 100644 index 0000000000..a257f25433 --- /dev/null +++ b/.github/workflows/publish_collab_image.yml @@ -0,0 +1,46 @@ +name: Publish Collab Server Image + +on: + push: + tags: + - collab-v* + +env: + DOCKER_BUILDKIT: 1 + DIGITALOCEAN_ACCESS_TOKEN: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + +jobs: + publish: + name: Publish collab server image + 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 + uses: actions/checkout@v3 + with: + clean: false + + - name: Check that tag version matches package version + run: | + set -eu + package_version=$(cargo metadata --no-deps --format-version=1 | jq --raw-output '.packages[] | select(.name == "collab") | .version') + tag_version=$(echo $GITHUB_REF_NAME | sed -e 's/collab-v//') + if [[ $tag_version != $package_version ]]; then + echo "collab package version $package_version does not match git tag version $tag_version" + exit 1 + fi + echo "Publishing image version: $package_version" + echo "COLLAB_VERSION=$package_version" >> $GITHUB_ENV + + - name: Build docker image + run: docker build . --tag registry.digitalocean.com/zed/collab:v${COLLAB_VERSION} + + - name: Publish docker image + run: docker push registry.digitalocean.com/zed/collab:v${COLLAB_VERSION} diff --git a/crates/collab/src/main.rs b/crates/collab/src/main.rs index 1c3a5fa20d..2c0fb69b67 100644 --- a/crates/collab/src/main.rs +++ b/crates/collab/src/main.rs @@ -9,7 +9,7 @@ mod db_tests; #[cfg(test)] mod integration_tests; -use axum::{body::Body, Router}; +use axum::{routing::get, Router}; use collab::{Error, Result}; use db::{Db, PostgresDb}; use serde::Deserialize; @@ -22,6 +22,8 @@ use tracing_log::LogTracer; use tracing_subscriber::{filter::EnvFilter, fmt::format::JsonFields, Layer}; use util::ResultExt; +const VERSION: &'static str = env!("CARGO_PKG_VERSION"); + #[derive(Default, Deserialize)] pub struct Config { pub http_port: u16, @@ -67,9 +69,9 @@ async fn main() -> Result<()> { rpc_server.start_recording_project_activity(Duration::from_secs(5 * 60), rpc::RealExecutor); - let app = Router::
::new() - .merge(api::routes(&rpc_server, state.clone())) - .merge(rpc::routes(rpc_server)); + let app = api::routes(&rpc_server, state.clone()) + .merge(rpc::routes(rpc_server)) + .merge(Router::new().route("/", get(handle_root))); axum::Server::from_tcp(listener)? .serve(app.into_make_service_with_connect_info::