Refresh releases page post deploy (#42218)

Conrad Irwin created

Release Notes:

- N/A

Change summary

.github/workflows/after_release.yml                | 14 ++++++++++
tooling/xtask/src/tasks/workflows/after_release.rs | 22 +++++++++++----
tooling/xtask/src/tasks/workflows/vars.rs          |  2 
3 files changed, 31 insertions(+), 7 deletions(-)

Detailed changes

.github/workflows/after_release.yml 🔗

@@ -6,7 +6,21 @@ on:
     types:
     - published
 jobs:
+  rebuild_releases_page:
+    if: github.repository_owner == 'zed-industries'
+    runs-on: namespace-profile-2x4-ubuntu-2404
+    steps:
+    - name: after_release::rebuild_releases_page::refresh_cloud_releases
+      run: curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag=${{ github.event.release.tag_name }}
+      shell: bash -euxo pipefail {0}
+    - name: after_release::rebuild_releases_page::redeploy_zed_dev
+      run: npm exec --yes -- vercel@37 --token="$VERCEL_TOKEN" --scope zed-industries redeploy https://zed.dev
+      shell: bash -euxo pipefail {0}
+      env:
+        VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
   post_to_discord:
+    needs:
+    - rebuild_releases_page
     if: github.repository_owner == 'zed-industries'
     runs-on: namespace-profile-2x4-ubuntu-2404
     steps:

tooling/xtask/src/tasks/workflows/after_release.rs 🔗

@@ -7,29 +7,39 @@ use crate::tasks::workflows::{
 };
 
 pub fn after_release() -> Workflow {
-    // let refresh_zed_dev = rebuild_releases_page();
-    let post_to_discord = post_to_discord(&[]);
+    let refresh_zed_dev = rebuild_releases_page();
+    let post_to_discord = post_to_discord(&[&refresh_zed_dev]);
     let publish_winget = publish_winget();
     let create_sentry_release = create_sentry_release();
 
     named::workflow()
         .on(Event::default().release(Release::default().types(vec![ReleaseType::Published])))
+        .add_job(refresh_zed_dev.name, refresh_zed_dev.job)
         .add_job(post_to_discord.name, post_to_discord.job)
         .add_job(publish_winget.name, publish_winget.job)
         .add_job(create_sentry_release.name, create_sentry_release.job)
 }
 
-#[allow(unused)]
 fn rebuild_releases_page() -> NamedJob {
+    fn refresh_cloud_releases() -> Step<Run> {
+        named::bash(
+            "curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag=${{ github.event.release.tag_name }}",
+        )
+    }
+
+    fn redeploy_zed_dev() -> Step<Run> {
+        named::bash("npm exec --yes -- vercel@37 --token=\"$VERCEL_TOKEN\" --scope zed-industries redeploy https://zed.dev")
+            .add_env(("VERCEL_TOKEN", vars::VERCEL_TOKEN))
+    }
+
     named::job(
         Job::default()
             .runs_on(runners::LINUX_SMALL)
             .cond(Expression::new(
                 "github.repository_owner == 'zed-industries'",
             ))
-            .add_step(named::bash(
-                "curl https://zed.dev/api/revalidate-releases -H \"Authorization: Bearer ${RELEASE_NOTES_API_TOKEN}\"",
-            ).add_env(("RELEASE_NOTES_API_TOKEN", vars::RELEASE_NOTES_API_TOKEN))),
+            .add_step(refresh_cloud_releases())
+            .add_step(redeploy_zed_dev()),
     )
 }
 

tooling/xtask/src/tasks/workflows/vars.rs 🔗

@@ -38,7 +38,7 @@ secret!(ZED_ZIPPY_APP_ID);
 secret!(ZED_ZIPPY_APP_PRIVATE_KEY);
 secret!(DISCORD_WEBHOOK_RELEASE_NOTES);
 secret!(WINGET_TOKEN);
-secret!(RELEASE_NOTES_API_TOKEN);
+secret!(VERCEL_TOKEN);
 
 // todo(ci) make these secrets too...
 var!(AZURE_SIGNING_ACCOUNT_NAME);