prerelease bool

Ben Kunkle created

Change summary

.github/workflows/after_release.yml                | 21 ++++++---
tooling/xtask/src/tasks/workflows/after_release.rs | 36 ++++++++--------
2 files changed, 32 insertions(+), 25 deletions(-)

Detailed changes

.github/workflows/after_release.yml 🔗

@@ -1,6 +1,9 @@
 # Generated from xtask::workflows::after_release
 # Rebuild with `cargo xtask workflows`.
 name: after_release
+env:
+  TAG_NAME: ${{ github.event.release.tag_name || inputs.tag_name }}
+  IS_PRERELEASE: ${{ github.event.release.prerelease || inputs.prerelease }}
 on:
   release:
     types:
@@ -11,6 +14,10 @@ on:
         description: tag_name
         required: true
         type: string
+      prerelease:
+        description: prerelease
+        required: true
+        type: boolean
       body:
         description: body
         type: string
@@ -21,7 +28,7 @@ jobs:
     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 || inputs.tag_name }}
+      run: curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag=$TAG_NAME
     - name: steps::checkout_repo
       uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
       with:
@@ -40,8 +47,8 @@ jobs:
       CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
       CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
     with:
-      channel: ${{ endsWith(github.event.release.tag_name || inputs.tag_name, '-pre') && 'preview' || 'stable' }}
-      checkout_ref: ${{ github.event.release.tag_name || inputs.tag_name }}
+      channel: ${{ env.IS_PRERELEASE == 'true' && 'preview' || 'stable' }}
+      checkout_ref: ${{ env.TAG_NAME }}
   post_to_discord:
     needs:
     - rebuild_releases_page
@@ -51,7 +58,7 @@ jobs:
     - id: get-release-url
       name: after_release::post_to_discord::get_release_url
       run: |
-        if [ "${{ endsWith(github.event.release.tag_name || inputs.tag_name, '-pre') }}" == "true" ]; then
+        if [ "$IS_PRERELEASE" == "true" ]; then
             URL="https://zed.dev/releases/preview"
         else
             URL="https://zed.dev/releases/stable"
@@ -63,7 +70,7 @@ jobs:
       uses: 2428392/gh-truncate-string-action@b3ff790d21cf42af3ca7579146eedb93c8fb0757
       with:
         stringToTruncate: |
-          📣 Zed [${{ github.event.release.tag_name || inputs.tag_name }}](<${{ steps.get-release-url.outputs.URL }}>)  was just released!
+          📣 Zed [${{ env.TAG_NAME }}](<${{ steps.get-release-url.outputs.URL }}>)  was just released!
 
           ${{ github.event.release.body || inputs.body }}
         maxLength: 2000
@@ -98,7 +105,7 @@ jobs:
     - id: set-package-name
       name: after_release::publish_winget::set_package_name
       run: |
-        if ("${{ endsWith(github.event.release.tag_name || inputs.tag_name, '-pre') }}" -eq "true") {
+        if ($env:IS_PRERELEASE -eq "true") {
             $PACKAGE_NAME = "ZedIndustries.Zed.Preview"
         } else {
             $PACKAGE_NAME = "ZedIndustries.Zed"
@@ -110,7 +117,7 @@ jobs:
       uses: vedantmgoyal9/winget-releaser@19e706d4c9121098010096f9c495a70a7518b30f
       with:
         identifier: ${{ steps.set-package-name.outputs.PACKAGE_NAME }}
-        release-tag: ${{ github.event.release.tag_name || inputs.tag_name }}
+        release-tag: ${{ env.TAG_NAME }}
         max-versions-to-keep: 5
         token: ${{ secrets.WINGET_TOKEN }}
   create_sentry_release:

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

@@ -7,14 +7,15 @@ use crate::tasks::workflows::{
     vars::{self, StepOutput, WorkflowInput},
 };
 
-const TAG_NAME: &str = "${{ github.event.release.tag_name || inputs.tag_name }}";
-const IS_PRERELEASE: &str =
-    "${{ endsWith(github.event.release.tag_name || inputs.tag_name, '-pre') }}";
+const TAG_NAME_ENV: &str = "${{ github.event.release.tag_name || inputs.tag_name }}";
+const IS_PRERELEASE_ENV: &str = "${{ github.event.release.prerelease || inputs.prerelease }}";
+const TAG_NAME: &str = "${{ env.TAG_NAME }}";
 const RELEASE_BODY: &str = "${{ github.event.release.body || inputs.body }}";
-const DOCS_CHANNEL: &str = "${{ endsWith(github.event.release.tag_name || inputs.tag_name, '-pre') && 'preview' || 'stable' }}";
+const DOCS_CHANNEL: &str = "${{ env.IS_PRERELEASE == 'true' && 'preview' || 'stable' }}";
 
 pub fn after_release() -> Workflow {
     let tag_name = WorkflowInput::string("tag_name", None);
+    let prerelease = WorkflowInput::bool("prerelease", None);
     let body = WorkflowInput::string("body", Some(String::new()));
 
     let refresh_zed_dev = rebuild_releases_page();
@@ -36,11 +37,14 @@ pub fn after_release() -> Workflow {
     };
 
     named::workflow()
+        .add_env(("TAG_NAME", TAG_NAME_ENV))
+        .add_env(("IS_PRERELEASE", IS_PRERELEASE_ENV))
         .on(Event::default()
             .release(Release::default().types(vec![ReleaseType::Published]))
             .workflow_dispatch(
                 WorkflowDispatch::default()
                     .add_input(tag_name.name, tag_name.input())
+                    .add_input(prerelease.name, prerelease.input())
                     .add_input(body.name, body.input()),
             ))
         .add_job(refresh_zed_dev.name, refresh_zed_dev.job)
@@ -91,9 +95,7 @@ fn deploy_docs() -> NamedJob<UsesJob> {
 
 fn rebuild_releases_page() -> NamedJob {
     fn refresh_cloud_releases() -> Step<Run> {
-        named::bash(format!(
-            "curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag={TAG_NAME}"
-        ))
+        named::bash("curl -fX POST https://cloud.zed.dev/releases/refresh?expect_tag=$TAG_NAME")
     }
 
     fn redeploy_zed_dev() -> Step<Run> {
@@ -112,16 +114,16 @@ fn rebuild_releases_page() -> NamedJob {
 
 fn post_to_discord(deps: &[&NamedJob]) -> NamedJob {
     fn get_release_url() -> Step<Run> {
-        named::bash(format!(
-            r#"if [ "{IS_PRERELEASE}" == "true" ]; then
+        named::bash(
+            r#"if [ "$IS_PRERELEASE" == "true" ]; then
     URL="https://zed.dev/releases/preview"
 else
     URL="https://zed.dev/releases/stable"
 fi
 
 echo "URL=$URL" >> "$GITHUB_OUTPUT"
-"#
-        ))
+"#,
+        )
         .id("get-release-url")
     }
 
@@ -182,17 +184,15 @@ fn publish_winget() -> NamedJob {
     }
 
     fn set_package_name() -> (Step<Run>, StepOutput) {
-        let script = format!(
-            r#"if ("{IS_PRERELEASE}" -eq "true") {{
+        let script = r#"if ($env:IS_PRERELEASE -eq "true") {
     $PACKAGE_NAME = "ZedIndustries.Zed.Preview"
-}} else {{
+} else {
     $PACKAGE_NAME = "ZedIndustries.Zed"
-}}
+}
 
 echo "PACKAGE_NAME=$PACKAGE_NAME" >> $env:GITHUB_OUTPUT
-"#
-        );
-        let step = named::pwsh(&script).id("set-package-name");
+"#;
+        let step = named::pwsh(script).id("set-package-name");
 
         let output = StepOutput::new(&step, "PACKAGE_NAME");
         (step, output)