Warp to Galaxy internal rebrand

This commit is contained in:
2026-08-27 00:29:21 -05:00
parent d72874534d
commit a69b927cc3
108 changed files with 395 additions and 2098 deletions
@@ -1,59 +0,0 @@
name: Get Channel Config
description: Provides a variety of config data for the given channel type.
inputs:
config_file:
description: The path to the configuration file.
required: true
channel:
description: The channel to retrieve configuration data for.
required: true
outputs:
channel:
description: The channel that we're building a release for. (This is the same as the input value.)
value: ${{ steps.get-config.outputs.channel }}
type:
description: The release type, either "nightly" or "weekly".
value: ${{ steps.get-config.outputs.type }}
is_prerelease:
description: Whether this channel is a prerelease channel.
value: ${{ steps.get-config.outputs.is_prerelease }}
is_autopush:
description: Whether new builds for this channel automatically trigger channel versions updates.
value: ${{ steps.get-config.outputs.is_autopush }}
release_base_name:
description: The base name for the GitHub release, to which the release number is appended.
value: ${{ steps.get-config.outputs.release_base_name }}
release_body_text:
description: The body text for the GitHub release.
value: ${{ steps.get-config.outputs.release_body_text }}
sentry_project:
description: The Sentry project under which a new release should be created.
value: ${{ steps.get-config.outputs.sentry_project }}
sentry_environment:
description: The environment to set for this channel's Sentry release.
value: ${{ steps.get-config.outputs.sentry_environment }}
changelog_slack_channel:
description: The Slack channel where the release's changelog should be posted.
value: ${{ steps.get-config.outputs.changelog_slack_channel }}
gcs_cache_control_value:
description: The Cache-Control value to set for release artifacts in Cloud Storage.
value: ${{ steps.get-config.outputs.gcs_cache_control_value }}
web_gcs_bucket_prefix:
description: The GCS bucket prefix for web artifacts. (Determines if they go in a staging or prod bucket.)
value: ${{ steps.get-config.outputs.web_gcs_bucket_prefix }}
runs:
using: composite
steps:
- id: get-config
env:
CONFIG_FILE: ${{ inputs.config_file }}
CHANNEL: ${{ inputs.channel }}
run: |
echo ::echo::on
jq -e '.channels[] | select(.channel == $ENV.CHANNEL)' $CONFIG_FILE > /dev/null
# Fail if the given channel is not found in the JSON release configuration.
[ $? -eq 0 ] || (echo ::error::"Channel $CHANNEL not found in release configuration" && exit 1)
jq -rc '.channels[] | select(.channel == $ENV.CHANNEL) | to_entries | map("\(.key)=\(.value)")[]' $CONFIG_FILE >> $GITHUB_OUTPUT
echo ::echo::off
shell: bash
@@ -15,8 +15,6 @@ inputs:
description: If true, dependencies needed for building release artifacts will be installed (e.g., cargo-about for license generation).
cache_key:
description: If set, the cache key to use. If unset, the cache key will be derived from the target OS.
ssh_key:
description: SSH private key used to clone the private warp-channel-config repository. Only consumed when running in warpdotdev/warp-internal.
runs:
using: composite
@@ -92,15 +90,6 @@ runs:
env:
BINSTALL_VERSION: 1.14.4
# Load the SSH key needed to clone the private warp-channel-config repo. Only
# run in warpdotdev/warp-internal; elsewhere (mirrors, fork PRs) this is a no-op
# and install_channel_config falls back gracefully.
- name: Setup SSH keys for warp-channel-config
if: ${{ github.repository == 'warpdotdev/warp-internal' && inputs.ssh_key != '' }}
uses: webfactory/ssh-agent@e83874834305fe9a4a2997156cb26c5de65a8555 # v0.10.0
with:
ssh-private-key: ${{ inputs.ssh_key }}
- uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0
if: ${{ inputs.target_os == 'macos' && inputs.is_self_hosted != 'true' }}
with:
@@ -111,9 +100,6 @@ runs:
run: |
cd "${{ steps.repo-root.outputs.path }}"
if ${{ inputs.target_os == 'macos' }}; then
# Try to install warp-channel-config but don't complain if it cannot
# be installed.
./script/install_channel_config || true
if ${{ inputs.install_release_deps == 'true' }}; then
./script/install_cargo_release_deps
else
-19
View File
@@ -1,19 +0,0 @@
# Release Configurations
This README file documents the format of the `release_configurations.json` file located in this directory. The file defines Warp's various release channels, and provides values for the various variables that are necessary to run the `create_new_releases.yml` GitHub workflow.
At some point, we may want to replace this document with a JSON schema file (which could be used to validate the correctness of the configuration as part of PR presubmit).
## Fields
* **channel**: The channel's unique identifier
* **type**: The release cadence. At present, the valid values are "nightly" or "weekly".
* **is_prerelease**: If true, the GitHub release for this channel will be marked as prerelease.
* **is_autopush**: If true, this channel uses the "latest" keyword in `channel_versions.json` to automatically deploy new release candidates. Non-autopush channels require a manual change in order to deploy them.
* **release_base_name**: The base name of GitHub releases created for this channel.
* **release_body_text**: The body text for GitHub releases created for this channel.
* **sentry_project**: Which Sentry project should receive crash and error reports for this channel.
* **sentry_environment**: The Sentry environment that corresponds to this channel.
* **changelog_slack_channel**: The Slack channel where new changelogs will be posted whenever a new release candidates is cut.
* **gcs_cache_control_value**: The value of the cache-control response header for release DMGs.
- **IMPORTANT!!**: the value of the cache-control header _must_ be all lowercase; uppercase values will not be respected by Cloud CDN.
+2 -10
View File
@@ -5,16 +5,8 @@ on:
# External contributors (fork-based) cannot trigger this workflow.
workflow_dispatch:
inputs:
channel:
description: "Release channel (stable, preview, dev)"
required: true
type: choice
options:
- stable
- preview
- dev
release_tag:
description: "Release tag (e.g. v0.2026.05.06.09.12.stable_00)"
description: "Release tag (e.g. v0.2026.05.06.09.12.oss_00)"
required: true
type: string
attribution:
@@ -49,7 +41,7 @@ jobs:
uses: warpdotdev/oz-agent-action@ce1621abf6a8ed8afdd4e4cc994545ede8fe1c6f # main
with:
prompt: |
Generate a changelog draft for the ${{ inputs.channel }} channel, release tag ${{ inputs.release_tag }}.
Generate a changelog draft for the Galaxy OSS release, release tag ${{ inputs.release_tag }}.
Attribution mode: ${{ inputs.attribution }}
Output directory: ${{ runner.temp }}/changelog-draft
File diff suppressed because it is too large Load Diff
+13 -26
View File
@@ -1,42 +1,29 @@
# A workflow to cut a new release candidate (i.e.: .stable_01) on the current
# release branch.
#
# The channel will be automatically determined from the branch name (i.e.: when
# run on a stable_release/* branch, it will assume it is building a new "stable"
# channel candidate).
# A workflow to cut a Galaxy OSS release candidate on the OSS release branch.
name: Cut New Release Candidate
on:
workflow_dispatch:
jobs:
compute_channel:
name: Compute release channel
verify_release_branch:
name: Verify OSS release branch
runs-on: ubuntu-latest
outputs:
channel: ${{ steps.compute-channel.outputs.channel }}
steps:
- name: "Compute release channel"
id: compute-channel
- name: Verify branch
run: |
# Check whether the current branch name starts with "some_release/",
# and if so, extract the value of "some" into the CHANNEL variable,
# discarding the rest of the branch name.
CHANNEL="$(echo $GITHUB_REF_NAME | sed -r 's|^(\w+)_release/.*$|\1|')"
# If the sed expression doesn't match the input, it will write out the
# input, unmodified.
if [[ $CHANNEL == $GITHUB_REF_NAME ]]; then
echo "::error::Can only create new release candidates on a release branch" && exit 1
fi
echo "channel=$CHANNEL" >> $GITHUB_OUTPUT
case "$GITHUB_REF_NAME" in
oss_release/*) ;;
*)
echo "::error::Can only create OSS release candidates on an oss_release/* branch"
exit 1
;;
esac
shell: bash
create_release_candidate:
name: Create Release Candidate
name: Create OSS Release Candidate
uses: ./.github/workflows/create_release.yml
needs: compute_channel
with:
channel: ${{ needs.compute_channel.outputs.channel }}
needs: verify_release_branch
secrets: inherit
update_channel_versions:
+6 -61
View File
@@ -1,8 +1,4 @@
# A workflow to cut new releases (i.e.: .stable_00) for various release
# channels.
#
# Supports cutting releases for nightly release channels, weekly release
# channels, or all release channels. Releases run in parallel where able.
# A workflow to cut the Galaxy OSS release.
name: Cut New Releases
on:
@@ -11,72 +7,21 @@ on:
- cron: "0 8 * * *"
workflow_dispatch:
inputs:
targets:
type: choice
description: Which releases to build. Nightly = dev; Weekly = preview/stable.
options:
- nightly
- weekly
- all
env:
CONFIG_FILE: ".github/workflows/release_configurations.json"
# The day of the week when the weekly release should be cut. This is a value
# from 1-7, with 1 representing Monday, 2 representing Tuesday, etc.
WEEKLY_RELEASE_DAY: 3 # Cut weekly builds on Wednesdays.
jobs:
get_config:
name: Get release configuration
verify_master:
name: Verify master branch
runs-on: ubuntu-latest
env:
SCHEDULE: ${{ github.event.schedule }}
TARGETS: ${{ inputs.targets }}
outputs:
channels: ${{ steps.get-config.outputs.channels }}
steps:
- name: Check for master branch
run: |
[ $GITHUB_REF == "refs/heads/master" ] || (echo "::error::Can only cut new releases on the master branch" && exit 1)
shell: bash
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- id: get-config
run: |
# Check to see if this was auto-run as a cron job. If so, set the
# value of TARGETS based on whether the current day of the week
# is when we build weekly releases (in addition to nightly ones).
if [[ ! -z "$SCHEDULE" ]]; then
if [[ "$(date +%u)" == "$WEEKLY_RELEASE_DAY" ]]; then
TARGETS="all"
else
TARGETS="nightly"
fi
fi
echo ::echo::on
if [[ "$TARGETS" == "all" ]]; then
TARGETS="$(jq -rc '[.channels[] | .type] | unique' $CONFIG_FILE)"
else
TARGETS="[\"$TARGETS\"]"
fi
export CHANNELS="$(jq -rc '[.channels[] | select(.type | inside($ENV.TARGETS)) | .channel]' $CONFIG_FILE)"
echo "channels=$CHANNELS" >> $GITHUB_OUTPUT
# CHANNELS_INCLUDE_AUTOPUSH=$(jq -rc '[.channels[] | select(.channel | inside($ENV.CHANNELS)) | .is_autopush] | any' $CONFIG_FILE)
# echo "channels-include-autopush=$CHANNELS_INCLUDE_AUTOPUSH" >> $GITHUB_OUTPUT
echo ::echo::off
[ "$GITHUB_REF" = "refs/heads/master" ] || (echo "::error::Can only cut new releases on the master branch" && exit 1)
shell: bash
create_release:
name: Create Release
name: Create OSS Release
uses: ./.github/workflows/create_release.yml
needs: get_config
strategy:
fail-fast: false
matrix:
channel: ${{ fromJSON(needs.get_config.outputs.channels) }}
with:
channel: ${{ matrix.channel }}
needs: verify_master
secrets: inherit
update_channel_versions:
+10 -11
View File
@@ -1,12 +1,11 @@
# A workflow to delete (soft-delete) a release branch by renaming it.
#
# The branch will be renamed from its original name to deleted/{original_name}.
# For example, stable_release/v0.2025.01.01.00.00 becomes
# deleted/stable_release/v0.2025.01.01.00.00.
# For example, oss_release/v0.2025.01.01.00.00 becomes
# deleted/oss_release/v0.2025.01.01.00.00.
#
# This workflow will fail if:
# - The branch doesn't start with a release channel prefix
# (i.e.: stable_release/, preview_release/, or dev_release/)
# - The branch doesn't start with the oss_release/ prefix
# - The release has an entry in channel_versions.json (i.e., it's deployed)
name: Delete Release
@@ -14,7 +13,7 @@ on:
workflow_dispatch:
inputs:
branch:
description: 'The release branch to delete (e.g., stable_release/v0.2025.01.01.00.00.stable)'
description: 'The OSS release branch to delete (e.g., oss_release/v0.2025.01.01.00.00.oss)'
required: true
type: string
confirmation:
@@ -41,15 +40,15 @@ jobs:
run: |
BRANCH_NAME="${{ inputs.branch }}"
# Validate branch is a release branch and extract the channel
if [[ ! "$BRANCH_NAME" =~ ^(stable|preview|dev)_release/ ]]; then
echo "::error::Branch '$BRANCH_NAME' is not a release branch." && exit 1
# Validate that this is an OSS release branch.
if [[ ! "$BRANCH_NAME" =~ ^oss_release/ ]]; then
echo "::error::Branch '$BRANCH_NAME' is not an OSS release branch." && exit 1
fi
CHANNEL="${BASH_REMATCH[1]}"
CHANNEL="oss"
# Extract the version base from the branch name
# e.g., "stable_release/v0.2025.01.26.12.30.stable" -> "v0.2025.01.26.12.30.stable"
VERSION_BASE="$(echo $BRANCH_NAME | sed -r 's|^\w+_release/(.*)$|\1|')"
# e.g., "oss_release/v0.2025.01.26.12.30.oss" -> "v0.2025.01.26.12.30.oss"
VERSION_BASE="$(echo "$BRANCH_NAME" | sed -r 's|^oss_release/(.*)$|\1|')"
echo "branch_name=$BRANCH_NAME" >> $GITHUB_OUTPUT
echo "new_branch_name=deleted/$BRANCH_NAME" >> $GITHUB_OUTPUT
@@ -1,44 +0,0 @@
{
"documentation": "See the README.md file in this directory.",
"channels": [
{
"channel": "dev",
"type": "nightly",
"is_prerelease": true,
"is_autopush": true,
"release_base_name": "Dev Release",
"release_body_text": "Nightly Galaxy Dev release",
"sentry_project": "warp-client-dev",
"sentry_environment": "dev_release",
"changelog_slack_channel": "#dev-beta-changelogs",
"gcs_cache_control_value": "private, max-age=604800, immutable",
"web_gcs_bucket_prefix": "warp-server-staging"
},
{
"channel": "preview",
"type": "weekly",
"is_prerelease": false,
"is_autopush": false,
"release_base_name": "Preview Release",
"release_body_text": "Galaxy Preview release",
"sentry_project": "warp-client-beta-stable",
"sentry_environment": "preview_release",
"changelog_slack_channel": "#dev-beta-changelogs",
"gcs_cache_control_value": "public, max-age=604800, immutable",
"web_gcs_bucket_prefix": "warp"
},
{
"channel": "stable",
"type": "weekly",
"is_prerelease": false,
"is_autopush": false,
"release_base_name": "Stable Release",
"release_body_text": "Galaxy Stable release",
"sentry_project": "warp-client-beta-stable",
"sentry_environment": "stable_release",
"changelog_slack_channel": "#release",
"gcs_cache_control_value": "public, max-age=604800, immutable",
"web_gcs_bucket_prefix": "warp"
}
]
}
+16 -51
View File
@@ -14,11 +14,11 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'warp'",
"name": "Debug executable 'galaxy-oss'",
"cargo": {
"args": ["build", "--bin=warp"],
"args": ["build", "--bin=galaxy-oss"],
"filter": {
"name": "warp",
"name": "galaxy-oss",
"kind": "bin"
}
},
@@ -29,9 +29,9 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug MacOS executable",
"preLaunchTask": "build_warplocal",
"program": "${workspaceFolder}/target/debug/bundle/osx/WarpLocal.app/Contents/MacOS/warp",
"name": "Debug macOS Galaxy OSS executable",
"preLaunchTask": "build_galaxyoss",
"program": "${workspaceFolder}/target/debug/bundle/osx/Galaxy.app/Contents/MacOS/galaxy-oss",
"args": [],
"cwd": "${workspaceFolder}",
"sourceLanguages": ["rust"]
@@ -39,11 +39,11 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'warp' with fast_dev",
"name": "Debug executable 'galaxy-oss' with fast_dev",
"cargo": {
"args": ["build", "--bin=warp", "--features=fast_dev"],
"args": ["build", "--bin=galaxy-oss", "--features=fast_dev"],
"filter": {
"name": "warp",
"name": "galaxy-oss",
"kind": "bin"
}
},
@@ -54,37 +54,12 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'warp' with with_local_server",
"cargo": {
"args": ["build", "--bin=warp", "--features=with_local_server"],
"filter": {
"name": "warp",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}",
"sourceLanguages": ["rust"]
},
{
"type": "lldb",
"request": "launch",
"name": "Debug MacOS executable local session sharing server",
"preLaunchTask": "build_warplocal_localsessionsharing",
"program": "${workspaceFolder}/target/debug/bundle/osx/WarpLocal.app/Contents/MacOS/warp",
"args": [],
"cwd": "${workspaceFolder}",
"sourceLanguages": ["rust"]
},
{
"type": "lldb",
"request": "launch",
"name": "Debug MacOS executable with fast_dev",
"name": "Debug macOS Galaxy OSS executable with fast_dev",
"env": {
"RUST_BACKTRACE": "1"
},
"preLaunchTask": "build_warplocal_fastdev",
"program": "${workspaceFolder}/target/debug/bundle/osx/WarpLocal.app/Contents/MacOS/warp",
"preLaunchTask": "build_galaxyoss_fastdev",
"program": "${workspaceFolder}/target/debug/bundle/osx/Galaxy.app/Contents/MacOS/galaxy-oss",
"args": [],
"cwd": "${workspaceFolder}",
"sourceLanguages": ["rust"]
@@ -92,21 +67,11 @@
{
"type": "lldb",
"request": "launch",
"name": "Debug MacOS executable with fast_dev + local session sharing server",
"preLaunchTask": "build_warplocal_fastdev_localsessionsharing",
"program": "${workspaceFolder}/target/debug/bundle/osx/WarpLocal.app/Contents/MacOS/warp",
"args": [],
"cwd": "${workspaceFolder}",
"sourceLanguages": ["rust"]
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'warp'",
"name": "Debug unit tests in executable 'galaxy-oss'",
"cargo": {
"args": ["test", "--no-run", "--bin=warp", "--package=warp"],
"args": ["test", "--no-run", "--bin=galaxy-oss", "--package=galaxy"],
"filter": {
"name": "warp",
"name": "galaxy-oss",
"kind": "bin"
}
},
@@ -119,7 +84,7 @@
"request": "launch",
"name": "Debug integration tests in executable 'integration'",
"cargo": {
"args": ["build", "--bin=integration", "--package=warp"],
"args": ["build", "--bin=integration", "--package=integration"],
"env": {
"WARPUI_USE_REAL_DISPLAY_IN_INTEGRATION_TESTS": "1"
},
+2 -12
View File
@@ -24,22 +24,12 @@
{
"type": "shell",
"command": "./script/run --dont-open",
"label": "build_warplocal"
"label": "build_galaxyoss"
},
{
"type": "shell",
"command": "./script/run --dont-open --features fast_dev",
"label": "build_warplocal_fastdev"
},
{
"type": "shell",
"command": "./script/run --dont-open --features fast_dev,with_local_session_sharing_server",
"label": "build_warplocal_fastdev_localsessionsharing"
},
{
"type": "shell",
"command": "./script/run --dont-open --features with_local_session_sharing_server",
"label": "build_warplocal_localsessionsharing"
"label": "build_galaxyoss_fastdev"
}
// TODO: If adding more configs that just add feature flags, consider argument passing from launch.json to tasks.json
]
Generated
-11
View File
@@ -5958,7 +5958,6 @@ dependencies = [
"warp-command-signatures",
"warp-workflows",
"warp_assets",
"warp_channel_config",
"warp_multi_agent_api",
"warp_search_core",
"warp_server_auth",
@@ -16992,15 +16991,6 @@ dependencies = [
"rust-embed 8.12.0",
]
[[package]]
name = "warp_channel_config"
version = "0.0.0"
dependencies = [
"command",
"galaxy_core",
"serde_json",
]
[[package]]
name = "warp_multi_agent_api"
version = "0.0.0"
@@ -17083,7 +17073,6 @@ dependencies = [
"string-offset",
"sum_tree",
"vec1",
"warp_channel_config",
]
[[package]]
-1
View File
@@ -81,7 +81,6 @@ virtual-fs = { path = "crates/virtual_fs" }
voice_input = { path = "crates/voice_input" }
galaxy = { path = "app" }
warp_assets = { path = "crates/warp_assets" }
warp_channel_config = { path = "crates/warp_channel_config" }
galaxy_cli = { path = "crates/galaxy_cli" }
galaxy_completer = { path = "crates/galaxy_completer" }
galaxy_core = { path = "crates/galaxy_core" }
+3 -5
View File
@@ -13,9 +13,8 @@ license.workspace = true
name = "galaxy"
path = "src/lib.rs"
# We define separate targets for each channel (stable, preview, dev) so that we can
# bundle with its own icon, app name, and channel-specific configuration (such as
# flag overrides). Otherwise these binaries are exactly identical to our main binary.
# The OSS target is the shipped desktop application. Its identity and production
# configuration are defined in app/src/bin/oss.rs.
[[bin]]
name = "galaxy-oss"
@@ -205,7 +204,6 @@ vte.workspace = true
walkdir.workspace = true
warp-workflows.workspace = true
warp_assets.workspace = true
warp_channel_config.workspace = true
galaxy_completer.workspace = true
galaxy_core.workspace = true
galaxy_agent_core.workspace = true
@@ -951,7 +949,7 @@ prompt_cache_expiry_warning = []
[package.metadata.bundle.bin.galaxy-oss]
category = "public.app-category.developer-tools"
copyright = "© 2026, Samsung Electronics Co., Ltd."
identifier = "samsung.galaxy.GalaxyOss"
identifier = "com.galaxy.GalaxyOss"
name = "Galaxy"
resources = ["assets/onboarding"]
icon = ["channels/oss/icon/no-padding/512x512.png", "channels/oss/icon/no-padding/icon.ico"]
+1 -1
View File
@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>samsung.galaxy.GalaxyDockTilePlugin</string>
<string>com.galaxy.GalaxyDockTilePlugin</string>
<key>CFBundleExecutable</key>
<string>GalaxyDockTilePlugin</string>
<key>CFBundleName</key>
+1 -7
View File
@@ -352,13 +352,7 @@ fn embed_resource_file(target_dir: &Path) {
let version = env::var("GIT_RELEASE_TAG").unwrap_or("v0".to_owned());
let app_name = env::var("GALAXY_APP_NAME").unwrap_or("Galaxy".to_owned());
let bin_name = env::var("CARGO_BIN_NAME").unwrap_or("local".to_owned());
let icon_path = Path::new("channels")
.join(bin_name)
.join("icon")
.join("no-padding")
.join("icon.ico");
let icon_path = Path::new("channels/oss/icon/no-padding/icon.ico");
fs::copy(icon_path, target_dir.join("icon.ico"))
.unwrap_or_else(|err| panic!("Could not copy icon: {err:#}"));
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=GalaxyDev
GenericName=TerminalEmulator
Exec=galaxy-terminal-dev %U
StartupWMClass=dev.galaxy.GalaxyDev
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.galaxy.GalaxyDev
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for galaxydev:// URLs.
MimeType=x-scheme-handler/galaxydev;
-23
View File
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=WarpDev
GenericName=TerminalEmulator
Exec=warp-terminal-dev %U
StartupWMClass=dev.warp.WarpDev
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.warp.WarpDev
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for warpdev:// URLs.
MimeType=x-scheme-handler/warpdev;
@@ -1,17 +0,0 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_1_7535)">
<path d="M454.582 331.499C454.717 330.936 454.785 330.655 454.715 330.434C454.653 330.24 454.523 330.075 454.349 329.97C454.15 329.851 453.861 329.851 453.283 329.851H251.769C211.283 329.851 178.462 364.057 178.462 406.252V702.871C178.462 745.067 211.283 779.273 251.769 779.273H500.821C501.198 779.273 501.386 779.273 501.542 779.207C501.68 779.148 501.799 779.054 501.888 778.934C501.989 778.797 502.033 778.614 502.121 778.248L511.509 739.11C511.644 738.547 511.711 738.266 511.641 738.045C511.58 737.851 511.45 737.686 511.276 737.581C511.077 737.462 510.788 737.462 510.209 737.462H358.898C358.319 737.462 358.03 737.462 357.831 737.342C357.657 737.237 357.527 737.072 357.466 736.878C357.396 736.657 357.463 736.376 357.598 735.813L454.582 331.499Z" fill="white"/>
<path d="M520.509 244.727H772.767C813.6 244.727 846.703 278.933 846.703 321.129V617.747C846.703 659.943 813.6 694.149 772.767 694.149H411.778L520.509 244.727Z" fill="white"/>
</g>
<defs>
<filter id="filter0_d_1_7535" x="-890.629" y="-824.364" width="2806.42" height="2672.73" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="133.636"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0.5 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1_7535"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1_7535" result="shape"/>
</filter>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,17 +0,0 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.8">
<path d="M878.651 -35.6921V1059.17" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M695.995 -35.6921V1059.17" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M513.341 -35.6921V1059.17" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M330.686 -35.6921V1059.17" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M148.03 -35.6921V1059.17" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M1059.17 877.583L-35.6916 877.583" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M1059.17 694.928L-35.6916 694.928" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M1059.17 512.273L-35.6916 512.273" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M1059.17 329.618L-35.6916 329.618" stroke="#CCCCCC" stroke-width="2.6704"/>
<path d="M1059.17 146.963L-35.6916 146.963" stroke="#CCCCCC" stroke-width="2.6704"/>
<circle cx="512.273" cy="511.204" r="365.043" stroke="#CCCCCC" stroke-width="2.6704"/>
<circle cx="512.272" cy="512.273" r="182.388" stroke="#CCCCCC" stroke-width="2.6704"/>
<circle cx="512.273" cy="512.273" r="472.927" stroke="#CCCCCC" stroke-width="2.6704"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 KiB

@@ -1,46 +0,0 @@
{
"fill" : "system-dark",
"groups" : [
{
"layers" : [
{
"fill-specializations" : [
{
"value" : "none"
},
{
"appearance" : "dark",
"value" : "none"
}
],
"image-name" : "Glyph.svg",
"name" : "Glyph"
},
{
"glass" : false,
"image-name" : "Guidelines.svg",
"name" : "Guidelines"
},
{
"fill" : "none",
"image-name" : "PLACE HERE.png",
"name" : "PLACE HERE"
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=GalaxyLocal
GenericName=TerminalEmulator
Exec=galaxy-terminal-local %U
StartupWMClass=dev.galaxy.GalaxyLocal
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.galaxy.GalaxyLocal
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for galaxylocal:// URLs.
MimeType=x-scheme-handler/galaxylocal;
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=WarpLocal
GenericName=TerminalEmulator
Exec=warp-terminal-local %U
StartupWMClass=dev.warp.WarpLocal
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.warp.WarpLocal
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for warplocal:// URLs.
MimeType=x-scheme-handler/warplocal;
@@ -1,37 +0,0 @@
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_d_1_7554)">
<path d="M454.581 331.499C454.716 330.936 454.784 330.655 454.714 330.434C454.652 330.24 454.522 330.075 454.348 329.97C454.149 329.851 453.86 329.851 453.282 329.851H251.768C211.282 329.851 178.461 364.057 178.461 406.252V702.871C178.461 745.067 211.282 779.273 251.768 779.273H500.82C501.197 779.273 501.385 779.273 501.541 779.207C501.679 779.148 501.798 779.054 501.887 778.934C501.988 778.797 502.032 778.614 502.12 778.248L511.508 739.11C511.643 738.547 511.71 738.266 511.64 738.045C511.579 737.851 511.449 737.686 511.275 737.581C511.076 737.462 510.787 737.462 510.208 737.462H358.897C358.318 737.462 358.029 737.462 357.83 737.342C357.656 737.237 357.526 737.072 357.465 736.878C357.395 736.657 357.462 736.376 357.597 735.813L454.581 331.499Z" fill="#1458B8" fill-opacity="0.9"/>
<path d="M454.581 331.499C454.716 330.936 454.784 330.655 454.714 330.434C454.652 330.24 454.522 330.075 454.348 329.97C454.149 329.851 453.86 329.851 453.282 329.851H251.768C211.282 329.851 178.461 364.057 178.461 406.252V702.871C178.461 745.067 211.282 779.273 251.768 779.273H500.82C501.197 779.273 501.385 779.273 501.541 779.207C501.679 779.148 501.798 779.054 501.887 778.934C501.988 778.797 502.032 778.614 502.12 778.248L511.508 739.11C511.643 738.547 511.71 738.266 511.64 738.045C511.579 737.851 511.449 737.686 511.275 737.581C511.076 737.462 510.787 737.462 510.208 737.462H358.897C358.318 737.462 358.029 737.462 357.83 737.342C357.656 737.237 357.526 737.072 357.465 736.878C357.395 736.657 357.462 736.376 357.597 735.813L454.581 331.499Z" fill="url(#paint0_linear_1_7554)" fill-opacity="0.2"/>
<g filter="url(#filter1_d_1_7554)">
<path d="M520.507 244.727H772.764C813.597 244.727 846.7 278.933 846.7 321.129V617.747C846.7 659.943 813.597 694.149 772.764 694.149H411.775L520.507 244.727Z" fill="url(#paint1_linear_1_7554)"/>
</g>
</g>
<defs>
<filter id="filter0_d_1_7554" x="-890.63" y="-824.364" width="2806.42" height="2672.73" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="133.636"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0.6 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1_7554"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1_7554" result="shape"/>
</filter>
<filter id="filter1_d_1_7554" x="144.503" y="-22.546" width="969.47" height="983.968" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="133.636"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0 0.0705882 0 0 0 0.5 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1_7554"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1_7554" result="shape"/>
</filter>
<linearGradient id="paint0_linear_1_7554" x1="475.692" y1="356.308" x2="229.538" y2="749.538" gradientUnits="userSpaceOnUse">
<stop stop-color="#1458B8"/>
<stop offset="1" stop-color="#1458B8" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_1_7554" x1="795.691" y1="291.692" x2="407.154" y2="494.831" gradientUnits="userSpaceOnUse">
<stop stop-color="#34B298"/>
<stop offset="1" stop-color="#1458B8"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

@@ -1,47 +0,0 @@
{
"fill-specializations" : [
{
"value" : {
"linear-gradient" : [
"gray:0.19068,1.00000",
"gray:0.08158,1.00000"
]
}
},
{
"appearance" : "dark",
"value" : {
"linear-gradient" : [
"gray:0.08342,1.00000",
"gray:0.00000,1.00000"
]
}
}
],
"groups" : [
{
"layers" : [
{
"blend-mode" : "normal",
"glass" : true,
"image-name" : "warp-glyph 3.svg",
"name" : "warp-glyph 3"
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

@@ -8,11 +8,11 @@ Name=GalaxyOss
GenericName=TerminalEmulator
Exec=galaxy-oss %U
StartupWMClass=dev.galaxy.GalaxyOss
StartupWMClass=com.galaxy.GalaxyOss
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.galaxy.GalaxyOss
Icon=com.galaxy.GalaxyOss
Categories=System;TerminalEmulator;
-23
View File
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=WarpOss
GenericName=TerminalEmulator
Exec=warp-terminal-oss %U
StartupWMClass=dev.warp.WarpOss
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.warp.WarpOss
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for warposs:// URLs.
MimeType=x-scheme-handler/warposs;
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=GalaxyPreview
GenericName=TerminalEmulator
Exec=galaxy-terminal-preview %U
StartupWMClass=dev.galaxy.GalaxyPreview
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.galaxy.GalaxyPreview
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for galaxypreview:// URLs.
MimeType=x-scheme-handler/galaxypreview;
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=WarpPreview
GenericName=TerminalEmulator
Exec=warp-terminal-preview %U
StartupWMClass=dev.warp.WarpPreview
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.warp.WarpPreview
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for warppreview:// URLs.
MimeType=x-scheme-handler/warppreview;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 852 KiB

@@ -1,29 +0,0 @@
{
"fill" : {
"automatic-gradient" : "extended-srgb:0.00000,0.53333,1.00000,1.00000"
},
"groups" : [
{
"layers" : [
{
"image-name" : "Preview.png",
"name" : "Preview"
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=Galaxy
GenericName=TerminalEmulator
Exec=galaxy-terminal %U
StartupWMClass=dev.galaxy.Galaxy
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.galaxy.Galaxy
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for galaxy:// URLs.
MimeType=x-scheme-handler/galaxy;
-23
View File
@@ -1,23 +0,0 @@
[Desktop Entry]
# The version of the desktop entry spec this conforms to.
Version=1.0
Type=Application
Name=Warp
GenericName=TerminalEmulator
Exec=warp-terminal %U
StartupWMClass=dev.warp.Warp
Keywords=shell;prompt;command;commandline;cmd;
Icon=dev.warp.Warp
Categories=System;TerminalEmulator;
# Don't run this application within a terminal.
Terminal=false
# Register ourselves as the handler for warp:// URLs.
MimeType=x-scheme-handler/warp;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

@@ -1,27 +0,0 @@
<svg width="824" height="690" viewBox="0 0 824 690" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_di_1_7716)">
<path d="M352.397 152.363C352.975 152.363 353.264 152.364 353.463 152.483C353.637 152.588 353.768 152.753 353.829 152.947C353.899 153.168 353.831 153.45 353.696 154.012L256.712 558.326C256.577 558.889 256.51 559.17 256.58 559.392C256.641 559.585 256.771 559.75 256.945 559.854C257.144 559.974 257.433 559.975 258.012 559.975H409.323C409.902 559.975 410.191 559.975 410.39 560.095C410.564 560.2 410.694 560.364 410.756 560.558C410.826 560.779 410.758 561.061 410.623 561.623L401.234 600.761C401.147 601.127 401.103 601.31 401.002 601.446C400.913 601.567 400.794 601.661 400.656 601.72C400.5 601.786 400.312 601.786 399.936 601.786H150.883C110.397 601.786 77.5762 567.58 77.5762 525.384V228.766C77.5762 186.57 110.397 152.363 150.883 152.363H352.397ZM671.878 67.2324C712.711 67.2326 745.814 101.439 745.814 143.635V440.252C745.814 482.448 712.711 516.654 671.878 516.654H310.89L419.62 67.2324H671.878Z" fill="url(#paint0_linear_1_7716)" fill-opacity="0.98"/>
</g>
<defs>
<filter id="filter0_di_1_7716" x="0.000411987" y="9.63211e-05" width="823.39" height="689.705" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="10.3434"/>
<feGaussianBlur stdDeviation="38.7879"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1_7716"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1_7716" result="shape"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="5.17172"/>
<feGaussianBlur stdDeviation="25.8586"/>
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.1 0"/>
<feBlend mode="normal" in2="shape" result="effect2_innerShadow_1_7716"/>
</filter>
<linearGradient id="paint0_linear_1_7716" x1="34.8718" y1="244.648" x2="799.638" y2="457.978" gradientUnits="userSpaceOnUse">
<stop stop-color="#121212"/>
<stop offset="1" stop-color="#2E2E2E"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

@@ -1,47 +0,0 @@
{
"fill" : {
"automatic-gradient" : "extended-srgb:0.00000,0.53333,1.00000,1.00000"
},
"groups" : [
{
"blend-mode" : "normal",
"hidden" : false,
"layers" : [
{
"blend-mode" : "multiply",
"fill" : "none",
"glass" : false,
"image-name" : "Glyph (1).svg",
"name" : "Glyph (1)",
"opacity" : 1
},
{
"blend-mode" : "overlay",
"fill" : "none",
"glass" : false,
"hidden" : false,
"image-name" : "4-2.png",
"name" : "4-2",
"opacity" : 1
}
],
"lighting" : "individual",
"opacity" : 1,
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"specular" : true,
"translucency" : {
"enabled" : true,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

+5 -7
View File
@@ -8,7 +8,7 @@
//! per-generator registration list to keep in sync.
//!
//! Usage:
//! cargo run --example generate_default_settings -- [--channel dev|preview|stable] <output_path>
//! cargo run --example generate_default_settings -- [--channel oss] <output_path>
//!
//! Example:
//! cargo run --example generate_default_settings -- ./default_settings.toml
@@ -38,11 +38,9 @@ fn active_flags_for_channel(channel: &str) -> HashSet<FeatureFlag> {
let mut flags = HashSet::new();
let flag_lists: &[&[FeatureFlag]] = match channel {
"stable" => &[RELEASE_FLAGS],
"preview" => &[RELEASE_FLAGS, PREVIEW_FLAGS],
"dev" => &[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS],
"oss" | "integration" => &[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS],
other => {
eprintln!("Unknown channel '{other}', defaulting to dev");
eprintln!("Unknown channel '{other}', defaulting to oss");
&[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS]
}
};
@@ -61,7 +59,7 @@ fn main() {
let args: Vec<String> = std::env::args().collect();
let mut channel = "dev";
let mut channel = "oss";
let mut output_path: Option<PathBuf> = None;
let mut i = 1;
while i < args.len() {
@@ -84,7 +82,7 @@ fn main() {
}
let Some(output_path) = output_path else {
eprintln!("Usage: generate_default_settings [--channel dev|preview|stable] <output_path>");
eprintln!("Usage: generate_default_settings [--channel oss] <output_path>");
std::process::exit(1);
};
+2 -2
View File
@@ -2,7 +2,7 @@
//!
//! Usage:
//! ```
//! cargo run --bin generate_settings_schema -- [--channel dev|preview|stable] [output_path]
//! cargo run --bin generate_settings_schema -- [output_path]
//! ```
use std::io::Write;
@@ -19,7 +19,7 @@ fn main() {
ensure_settings_linked();
let args: Vec<String> = std::env::args().collect();
let mut channel = "dev";
let mut channel = "oss";
let mut output_path: Option<&str> = None;
let mut index = 1;
+2 -2
View File
@@ -12,7 +12,7 @@ fn main() -> Result<()> {
let mut state = ChannelState::new(
Channel::Oss,
ChannelConfig {
app_id: AppId::new("com", "galaxy", "Galaxy"),
app_id: AppId::new("com", "galaxy", "GalaxyOss"),
logfile_name: "galaxy.log".into(),
server_config: WarpServerConfig::disabled(),
oz_config: OzConfig::production(),
@@ -68,7 +68,7 @@ embed_plist::embed_info_plist_bytes!(r#"
<key>UIDesignRequiresCompatibility</key>
<true/>
<key>CFBundleURLTypes</key>
<array><dict><key>CFBundleURLName</key><string>Galaxy</string><key>CFBundleURLSchemes</key><array><string>galaxy</string></array></dict></array>
<array><dict><key>CFBundleURLName</key><string>Galaxy</string><key>CFBundleURLSchemes</key><array><string>galaxyoss</string></array></dict></array>
<key>NSHumanReadableCopyright</key>
<string>© 2026, Galaxy Project</string>
<key>NSDockTilePlugIn</key>
+4 -7
View File
@@ -64,11 +64,9 @@ fn active_flags_for_channel(channel: &str) -> HashSet<FeatureFlag> {
let mut flags = HashSet::new();
let flag_lists: &[&[FeatureFlag]] = match channel {
"stable" => &[RELEASE_FLAGS],
"preview" => &[RELEASE_FLAGS, PREVIEW_FLAGS],
"dev" => &[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS],
"oss" | "integration" => &[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS],
other => {
log::warn!("Unknown settings schema channel '{other}', defaulting to dev");
log::warn!("Unknown settings schema channel '{other}', defaulting to oss");
&[RELEASE_FLAGS, PREVIEW_FLAGS, DOGFOOD_FLAGS, DEBUG_FLAGS]
}
};
@@ -190,9 +188,8 @@ pub fn generate_settings_schema(channel: &str) -> (String, usize) {
fn runtime_schema_channel() -> &'static str {
match ChannelState::channel() {
Channel::Stable => "stable",
Channel::Preview => "preview",
Channel::Dev | Channel::Local | Channel::Oss | Channel::Integration => "dev",
Channel::Stable | Channel::Preview | Channel::Dev | Channel::Local | Channel::Oss => "oss",
Channel::Integration => "integration",
}
}
+3 -6
View File
@@ -3,7 +3,6 @@ use std::path::Path;
use command::r#async::Command;
use galaxy_core::channel::ChannelState;
use galaxy_core::AppId;
use galaxyui::ApplicationBundleInfo;
use instant::Instant;
use objc2::rc::{autoreleasepool, Retained};
@@ -347,7 +346,7 @@ pub fn open_file_path_with_line_and_col(
if let Some(bundle_id) = bundle_id.as_deref() {
let current = ChannelState::app_id().to_string();
if bundle_id != current
&& is_warp_bundle(bundle_id)
&& is_galaxy_bundle(bundle_id)
&& open_with_bundle(&current, full_path)
{
return;
@@ -357,10 +356,8 @@ pub fn open_file_path_with_line_and_col(
ctx.open_file_path(full_path);
}
fn is_warp_bundle(bundle_id: &str) -> bool {
AppId::parse(bundle_id)
.map(|id| id.qualifier() == "dev" && id.organization() == "warp")
.unwrap_or(false)
fn is_galaxy_bundle(bundle_id: &str) -> bool {
bundle_id == "com.galaxy.GalaxyOss"
}
fn open_with_bundle(bundle_id: &str, path: &Path) -> bool {
+9 -12
View File
@@ -1,18 +1,15 @@
use super::is_warp_bundle;
use super::is_galaxy_bundle;
#[test]
fn is_warp_bundle_recognises_warp_channels() {
assert!(is_warp_bundle("dev.warp.Warp"));
assert!(is_warp_bundle("dev.warp.WarpDev"));
assert!(is_warp_bundle("dev.warp.WarpPreview"));
assert!(is_warp_bundle("dev.warp.WarpOss"));
fn is_galaxy_bundle_recognises_oss() {
assert!(is_galaxy_bundle("com.galaxy.GalaxyOss"));
}
#[test]
fn is_warp_bundle_rejects_other_apps() {
assert!(!is_warp_bundle("com.microsoft.VSCode"));
assert!(!is_warp_bundle("com.apple.TextEdit"));
assert!(!is_warp_bundle("dev.zed.Zed"));
assert!(!is_warp_bundle("invalid"));
assert!(!is_warp_bundle(""));
fn is_galaxy_bundle_rejects_other_apps() {
assert!(!is_galaxy_bundle("com.microsoft.VSCode"));
assert!(!is_galaxy_bundle("com.apple.TextEdit"));
assert!(!is_galaxy_bundle("dev.warp.WarpOss"));
assert!(!is_galaxy_bundle("invalid"));
assert!(!is_galaxy_bundle(""));
}
+1 -1
View File
@@ -37,7 +37,7 @@ pub struct ChannelState {
impl ChannelState {
pub fn init() -> Self {
let channel = Channel::Oss;
let app_id = AppId::new("samsung", "galaxy", "GalaxyOss");
let app_id = AppId::new("com", "galaxy", "GalaxyOss");
Self {
channel,
additional_features: Default::default(),
-12
View File
@@ -1,12 +0,0 @@
[package]
name = "warp_channel_config"
edition = "2021"
description = "Loads per-channel ChannelConfig for Warp's channel binaries"
authors.workspace = true
publish.workspace = true
license.workspace = true
[dependencies]
command.workspace = true
serde_json.workspace = true
warp_core.workspace = true
-113
View File
@@ -1,113 +0,0 @@
//! Loads a per-channel [`ChannelConfig`] for Warp's channel binaries.
//!
//! For non-bundled builds the internal `warp-channel-config` generator is
//! invoked at runtime; for `release_bundle` builds the config is embedded at
//! compile time via the consuming crate's build script. Shared by the GUI app
//! binaries and the `warp_tui` binaries so the loading logic lives in one place.
//!
//! The `release_bundle` cfg inside [`load_config!`] is evaluated in the
//! *consuming* crate, so each binary crate opts into embedding by defining its
//! own `release_bundle` feature (and generating `<channel>_config.json` into its
//! `OUT_DIR` from a build script).
use warp_core::channel::ChannelConfig;
/// The name of the config generator binary, expected to be on PATH.
const CONFIG_BIN_NAME: &str = "warp-channel-config";
#[macro_export]
#[cfg(windows)]
macro_rules! path_concat {
($path:expr, $file:expr) => {
concat!($path, "\\", $file)
};
}
#[macro_export]
#[cfg(not(windows))]
macro_rules! path_concat {
($path:expr, $file:expr) => {
concat!($path, "/", $file)
};
}
/// Loads the [`ChannelConfig`] for the given channel name.
///
/// In `release_bundle` builds the config is embedded at compile time (the
/// consuming crate's build script must generate `<channel>_config.json` into
/// `OUT_DIR`); otherwise the `warp-channel-config` generator is invoked at
/// runtime.
#[macro_export]
macro_rules! load_config {
($channel:expr) => {{
#[cfg(feature = "release_bundle")]
{
$crate::load_config_from_embedded(include_str!($crate::path_concat!(
env!("OUT_DIR"),
concat!($channel, "_config.json")
)))
}
#[cfg(not(feature = "release_bundle"))]
{
$crate::load_config_from_generator($channel)
}
}};
}
/// Invokes the config generator binary at runtime and deserializes its JSON
/// output into a [`ChannelConfig`].
pub fn load_config_from_generator(channel: &str) -> ChannelConfig {
let target_family = if cfg!(target_family = "wasm") {
"wasm"
} else {
"native"
};
let target_os = if cfg!(target_os = "macos") {
"macos"
} else if cfg!(target_os = "windows") {
"windows"
} else {
"linux"
};
let output = command::blocking::Command::new(CONFIG_BIN_NAME)
.arg("--channel")
.arg(channel)
.arg("--target-family")
.arg(target_family)
.arg("--target-os")
.arg(target_os)
.output()
.unwrap_or_else(|err| {
if err.kind() == std::io::ErrorKind::NotFound {
panic!(
"\n\n'{CONFIG_BIN_NAME}' was not found on PATH.\n\n\
To build internal channels, run:\n\
\n\
\x20 ./script/install_channel_config\n\n"
)
}
panic!("Failed to execute '{CONFIG_BIN_NAME}': {err}")
});
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
panic!("Config generator failed for channel '{channel}':\n{stderr}");
}
serde_json::from_slice(&output.stdout).unwrap_or_else(|err| {
let stdout = String::from_utf8_lossy(&output.stdout);
panic!(
"Failed to parse config generator output for channel '{channel}': {err}\nOutput:\n{stdout}"
)
})
}
/// Deserializes a [`ChannelConfig`] from a JSON string embedded at compile time.
///
/// Used to load channel configuration in release bundles, where configuration
/// is embedded at compile time instead of being generated at runtime.
pub fn load_config_from_embedded(json: &str) -> ChannelConfig {
serde_json::from_str(json)
.unwrap_or_else(|err| panic!("Failed to parse embedded channel config: {err}"))
}
+1 -25
View File
@@ -8,30 +8,11 @@ license.workspace = true
autobins = false
default-run = "warp-tui-oss"
# One binary per channel, mirroring the GUI app's `app/src/bin/*` layout. The
# OSS bin is the `default-run` so bare `cargo run -p warp_tui` builds without
# the internal `warp-channel-config` generator; `./script/run-tui` selects the
# local bin when the generator is available.
# The OSS binary is the only shipped TUI target.
[[bin]]
name = "warp-tui-oss"
path = "src/bin/oss.rs"
[[bin]]
name = "warp-tui"
path = "src/bin/local.rs"
[[bin]]
name = "warp-tui-dev"
path = "src/bin/dev.rs"
[[bin]]
name = "warp-tui-preview"
path = "src/bin/preview.rs"
[[bin]]
name = "warp-tui-stable"
path = "src/bin/stable.rs"
[dependencies]
anyhow.workspace = true
log.workspace = true
@@ -43,7 +24,6 @@ string-offset.workspace = true
sum_tree.workspace = true
vec1.workspace = true
warp = { workspace = true, features = ["tui"] }
warp_channel_config.workspace = true
warp_core.workspace = true
warp_editor.workspace = true
warp_terminal.workspace = true
@@ -64,8 +44,4 @@ name = "tui_input_demo"
required-features = []
[features]
# Declared so the `warp_channel_config::load_config!` macro's
# `cfg(feature = "release_bundle")` branch is a known cfg in this crate. Today it
# stays off and the local bin uses the runtime generator; wiring the embedded
# config path (a `build.rs`) is phase 2 of the channel setup.
release_bundle = ["warp/release_bundle"]
-85
View File
@@ -1,85 +0,0 @@
//! Build script for the `warp_tui` channel binaries.
//!
//! When the `release_bundle` feature is enabled and the internal
//! `warp-channel-config` generator is on PATH, this embeds each channel's config
//! JSON into `OUT_DIR` so the per-channel bins can `include_str!` it via
//! `warp_channel_config::load_config!`. Mirrors the equivalent logic in
//! `app/build.rs`. For non-bundled builds the config is loaded at runtime, so
//! there is nothing to embed.
//!
//! `std::process::Command` is fine in a build script (unlike the shipped binary,
//! where it could flash a console on Windows).
#![allow(clippy::disallowed_types)]
use std::path::Path;
use std::process::Command;
use std::{env, fs};
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=CARGO_CFG_TARGET_OS");
let target_os = env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS must be set");
generate_channel_config_if_needed(&target_os);
}
/// If the `release_bundle` feature is enabled and `warp-channel-config` is
/// available on PATH, invoke the config generator and write each channel's JSON
/// to `OUT_DIR` so it can be embedded via `include_str!` in the binary entry
/// points.
fn generate_channel_config_if_needed(target_os: &str) {
if env::var("CARGO_FEATURE_RELEASE_BUNDLE").is_err() {
// For non-bundled builds, config is loaded at runtime — nothing to embed.
return;
}
let config_bin = "warp-channel-config";
// If the generator is not on PATH we can't embed configs. This is expected
// for external contributors building Warp OSS.
if Command::new(config_bin)
.arg("--help")
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status()
.is_err()
{
return;
}
// Only tracked for bundled builds, where they affect the embedded config.
println!("cargo:rerun-if-env-changed=WITH_LOCAL_SERVER");
println!("cargo:rerun-if-env-changed=WITH_LOCAL_SESSION_SHARING_SERVER");
println!("cargo:rerun-if-env-changed=WITH_SANDBOX_TELEMETRY");
println!("cargo:rerun-if-env-changed=SERVER_ROOT_URL");
println!("cargo:rerun-if-env-changed=WS_SERVER_URL");
let out_dir = env::var("OUT_DIR").expect("OUT_DIR must be set");
// Generate config for every internal channel the TUI ships; each binary's
// `include_str!` picks up its own file.
for channel in ["local", "dev", "stable", "preview"] {
let output = Command::new(config_bin)
.arg("--channel")
.arg(channel)
.arg("--target-family")
.arg("native")
.arg("--target-os")
.arg(target_os)
.output()
.unwrap_or_else(|err| {
panic!("Failed to execute config generator at '{config_bin}': {err}")
});
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
panic!("Config generator failed for channel '{channel}':\n{stderr}");
}
let config_path = Path::new(&out_dir).join(format!("{channel}_config.json"));
fs::write(&config_path, &output.stdout).unwrap_or_else(|err| {
panic!("Failed to write config to {}: {err}", config_path.display())
});
}
}
-19
View File
@@ -1,19 +0,0 @@
//! Dev-channel `warp-tui` binary (internal nightly builds).
//!
//! Mirrors `app/src/bin/dev.rs`: loads the internal `dev` channel config and
//! layers the dev feature flags, then hands off to the shared TUI entry point.
use anyhow::Result;
use warp_core::channel::{Channel, ChannelState};
use warp_core::features;
fn main() -> Result<()> {
ChannelState::set(
ChannelState::new(Channel::Dev, warp_channel_config::load_config!("dev"))
.with_additional_features(features::DEBUG_FLAGS)
.with_additional_features(features::DOGFOOD_FLAGS)
.with_additional_features(features::PREVIEW_FLAGS),
);
warp_tui::run()
}
-23
View File
@@ -1,23 +0,0 @@
//! Local-channel `warp-tui` binary (internal dev builds).
//!
//! Mirrors `app/src/bin/local.rs`: loads the internal `local` channel config
//! (via the `warp-channel-config` generator) and layers the dev feature flags,
//! then hands off to the shared TUI entry point. Run it through
//! `./script/run-tui`, which installs the generator first; running it directly
//! without `warp-channel-config` on PATH will panic with install instructions.
use anyhow::Result;
use warp_core::channel::{Channel, ChannelState};
use warp_core::features;
fn main() -> Result<()> {
ChannelState::set(
ChannelState::new(Channel::Local, warp_channel_config::load_config!("local"))
.with_additional_features(features::DEBUG_FLAGS)
.with_additional_features(features::DOGFOOD_FLAGS)
.with_additional_features(features::PREVIEW_FLAGS)
.with_additional_features(features::LOCAL_FLAGS),
);
warp_tui::run()
}
+5 -6
View File
@@ -1,10 +1,9 @@
//! OSS-channel `warp-tui` binary and `default-run` target.
//!
//! This is what bare `cargo run -p warp_tui` builds, so it hand-builds a
//! production config and needs no internal `warp-channel-config` generator
//! (mirrors `app/src/bin/oss.rs`). It is a console application (no GUI window,
//! no app bundle), so unlike the GUI binaries it sets no `windows_subsystem`
//! attribute and embeds no `Info.plist`.
//! This is what bare `cargo run -p warp_tui` builds, so it hand-builds an
//! OSS production config (mirroring `app/src/bin/oss.rs`). It is a console
//! application (no GUI window, no app bundle), so unlike the GUI binaries it
//! sets no `windows_subsystem` attribute and embeds no `Info.plist`.
use anyhow::Result;
use warp_core::channel::{Channel, ChannelConfig, ChannelState, OzConfig, WarpServerConfig};
@@ -14,7 +13,7 @@ fn main() -> Result<()> {
let mut state = ChannelState::new(
Channel::Oss,
ChannelConfig {
app_id: AppId::new("dev", "warp", "WarpTui"),
app_id: AppId::new("com", "galaxy", "GalaxyOss"),
logfile_name: "warp-tui.log".into(),
server_config: WarpServerConfig::disabled(),
oz_config: OzConfig::production(),
-22
View File
@@ -1,22 +0,0 @@
//! Preview-channel `warp-tui` binary.
//!
//! Mirrors `app/src/bin/preview.rs`: loads the `preview` channel config and
//! enables the preview feature flags (plus forced login), then hands off to the
//! shared TUI entry point.
use anyhow::Result;
use warp_core::channel::{Channel, ChannelState};
use warp_core::features;
fn main() -> Result<()> {
ChannelState::set(
ChannelState::new(
Channel::Preview,
warp_channel_config::load_config!("preview"),
)
.with_additional_features(features::PREVIEW_FLAGS)
.with_additional_features(&[features::FeatureFlag::ForceLogin]),
);
warp_tui::run()
}
-16
View File
@@ -1,16 +0,0 @@
//! Stable-channel `warp-tui` binary.
//!
//! Mirrors `app/src/bin/stable.rs`: loads the `stable` channel config with no
//! additional feature flags, then hands off to the shared TUI entry point.
use anyhow::Result;
use warp_core::channel::{Channel, ChannelState};
fn main() -> Result<()> {
ChannelState::set(ChannelState::new(
Channel::Stable,
warp_channel_config::load_config!("stable"),
));
warp_tui::run()
}
+13 -13
View File
@@ -154,7 +154,7 @@
"-p"
"warp"
"--bin"
"warp-oss"
"galaxy-oss"
"--bin"
"generate_settings_schema"
];
@@ -175,13 +175,13 @@
let
installDir = "$out/opt/warpdotdev/warp-terminal-experimental";
resourcesDir = "${installDir}/resources";
releaseChannel = "stable";
releaseChannel = "oss";
libraryPath = lib.makeLibraryPath linuxRuntimeLibraries;
executablePath = lib.makeBinPath (with pkgs; [ xdg-utils ]);
in
''
install -Dm755 "$out/bin/warp-oss" "${installDir}/warp-oss"
rm -f "$out/bin/warp-oss"
install -Dm755 "$out/bin/galaxy-oss" "${installDir}/galaxy-oss"
rm -f "$out/bin/galaxy-oss"
patchShebangs \
./script/prepare_bundled_resources \
@@ -204,30 +204,30 @@
install -Dm644 LICENSE-AGPL "$out/share/licenses/warp-terminal-experimental/LICENSE-AGPL"
install -Dm644 LICENSE-MIT "$out/share/licenses/warp-terminal-experimental/LICENSE-MIT"
install -Dm644 app/channels/oss/dev.warp.WarpOss.desktop \
"$out/share/applications/dev.warp.WarpOss.desktop"
substituteInPlace "$out/share/applications/dev.warp.WarpOss.desktop" \
--replace-fail "Exec=warp-terminal-oss %U" "Exec=warp-terminal-experimental %U"
install -Dm644 app/channels/oss/com.galaxy.GalaxyOss.desktop \
"$out/share/applications/com.galaxy.GalaxyOss.desktop"
substituteInPlace "$out/share/applications/com.galaxy.GalaxyOss.desktop" \
--replace-fail "Exec=galaxy-oss %U" "Exec=warp-terminal-experimental %U"
for size in 16x16 32x32 64x64 128x128 256x256 512x512; do
icon="app/channels/oss/icon/no-padding/$size.png"
if [ -f "$icon" ]; then
install -Dm644 "$icon" \
"$out/share/icons/hicolor/$size/apps/dev.warp.WarpOss.png"
"$out/share/icons/hicolor/$size/apps/com.galaxy.GalaxyOss.png"
fi
done
wrapProgram "${installDir}/warp-oss" \
wrapProgram "${installDir}/galaxy-oss" \
--prefix LD_LIBRARY_PATH : "${libraryPath}" \
--prefix PATH : "${executablePath}"
mkdir -p "$out/bin"
ln -s "${installDir}/warp-oss" "$out/bin/warp-oss"
ln -s "${installDir}/warp-oss" "$out/bin/warp-terminal-experimental"
ln -s "${installDir}/galaxy-oss" "$out/bin/galaxy-oss"
ln -s "${installDir}/galaxy-oss" "$out/bin/galaxy-terminal-experimental"
'';
postFixup = lib.optionalString pkgs.stdenv.isLinux ''
wrapped="/opt/warpdotdev/warp-terminal-experimental/.warp-oss-wrapped"
wrapped="/opt/warpdotdev/warp-terminal-experimental/.galaxy-oss-wrapped"
if [ -e "$out$wrapped" ] && ! patchelf --print-needed "$out$wrapped" | grep -q '^libfontconfig\.so\.1$'; then
patchelf --add-needed libfontconfig.so.1 "$out$wrapped"
fi
+10 -10
View File
@@ -3,36 +3,36 @@
# Compile a .icon bundle using actool and update the app's Info.plist
# to support macOS Sequoia's icon tinting feature.
#
# Usage: compile_icon <channel> <app_bundle_path>
# channel: The release channel (e.g., stable)
# app_bundle_path: Path to the .app bundle (e.g., Warp.app)
# Usage: compile_icon oss <app_bundle_path>
# app_bundle_path: Path to the Galaxy.app bundle
set -e
if [ "$#" -ne 2 ]; then
echo "Usage: compile_icon <channel> <app_bundle_path>"
echo "Usage: compile_icon oss <app_bundle_path>"
exit 1
fi
CHANNEL="$1"
APP_BUNDLE_PATH="$2"
if [[ "$CHANNEL" != "oss" ]]; then
echo "Error: only the oss release channel is supported" >&2
exit 1
fi
# Determine the repository root directory
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
ICON_BUNDLE_PATH="$REPO_ROOT/app/channels/$CHANNEL/icon/AppIcon.icon"
# Only compile if the .icon bundle exists for this channel.
# Only compile the OSS .icon bundle.
if [[ ! -d "$ICON_BUNDLE_PATH" ]]; then
if [[ "$CHANNEL" = "oss" ]]; then
echo "Warning: no .icon bundle found for $CHANNEL channel at $ICON_BUNDLE_PATH; skipping adaptive icon compilation." >&2
exit 0
fi
echo "Error: .icon bundle not found at $ICON_BUNDLE_PATH" >&2
exit 1
fi
echo "Compiling .icon bundle for $CHANNEL channel"
echo "Compiling Galaxy OSS .icon bundle"
BUNDLED_RESOURCES_DIR="$APP_BUNDLE_PATH/Contents/Resources"
PARTIAL_INFO_PLIST="$(dirname "$APP_BUNDLE_PATH")/partial-icon-info.plist"
+7 -76
View File
@@ -6,14 +6,10 @@
# copy_conditional_skills <channel> <gated_skills_src> <dest_skills_dir>
#
# Arguments:
# channel: Release channel (local, dev, preview, stable).
# channel: Release channel (oss or integration).
# gated_skills_src: Path to resources/channel-gated-skills/.
# dest_skills_dir: Destination skills directory (e.g. .../bundled/skills/).
#
# Gating is progressive: earlier gates include all skills from later gates.
# For example, a dogfood build includes skills from both dogfood/ and
# preview/. The stable channel has no gate — stable-ready skills belong
# in resources/bundled/skills/ (the always-bundled directory).
set -e
@@ -26,83 +22,18 @@ CHANNEL="$1"
GATED_SKILLS_SRC="$2"
DEST_SKILLS_DIR="$3"
# Gate labels ordered from most-inclusive to least-inclusive.
# A channel's gate includes all gates at or after its position.
GATE_ORDER=("dogfood" "preview")
if [ ! -d "$GATED_SKILLS_SRC" ]; then
exit 0
fi
# Error out if a stable/ gate directory exists — stable skills should live
# in the always-bundled resources/bundled/skills/ directory instead.
if [ -d "$GATED_SKILLS_SRC/stable" ]; then
echo "Error: found a 'stable/' directory in $GATED_SKILLS_SRC." >&2
echo "The stable channel does not use gated skills. Move stable-ready skills to resources/bundled/skills/ (the always-bundled directory) instead." >&2
exit 1
fi
# Map the release channel to its gate label.
# OSS and integration bundles have no gated skills.
case "$CHANNEL" in
local|dev) GATE="dogfood" ;;
preview) GATE="preview" ;;
*)
oss|integration)
echo " Channel '$CHANNEL' has no gated skills, skipping"
exit 0
;;
*)
echo "Error: unsupported release channel '$CHANNEL'" >&2
exit 1
;;
esac
# Build the set of included gates (progressive: this gate and all after it).
INCLUDED_GATES=()
FOUND=false
for g in "${GATE_ORDER[@]}"; do
if [ "$g" = "$GATE" ]; then
FOUND=true
fi
if [ "$FOUND" = true ]; then
INCLUDED_GATES+=("$g")
fi
done
# Helper: check if a value is in the included gates list.
is_included() {
local needle="$1"
for g in "${INCLUDED_GATES[@]}"; do
if [ "$g" = "$needle" ]; then
return 0
fi
done
return 1
}
# Iterate over gate directories and copy matching skills.
for gate_dir in "$GATED_SKILLS_SRC"/*/; do
# Skip if the glob didn't match anything.
[ -d "$gate_dir" ] || continue
gate_name="$(basename "$gate_dir")"
if ! is_included "$gate_name"; then
# List the skills that would have been included for the skip message.
skills=""
for skill_dir in "$gate_dir"/*/; do
[ -d "$skill_dir" ] || continue
if [ -n "$skills" ]; then
skills="$skills, "
fi
skills="$skills$(basename "$skill_dir")"
done
echo " Skipping gate '$gate_name' (channel '$CHANNEL') — would include: $skills"
continue
fi
for skill_dir in "$gate_dir"/*/; do
[ -d "$skill_dir" ] || continue
skill_name="$(basename "$skill_dir")"
dest="$DEST_SKILLS_DIR/$skill_name"
echo " Copying gated skill: $skill_name (gate: $gate_name)"
mkdir -p "$dest"
cp -R "$skill_dir"/. "$dest"/
done
done
-4
View File
@@ -14,10 +14,6 @@ if [ "${GITHUB_ACTIONS}" != "true" ]; then
cargo binstall --force -y diesel_cli
fi
# Install the internal channel config binary. This will fail gracefully for
# external contributors who don't have access to the private configuration.
"$PWD"/script/install_channel_config || echo "Skipping internal channel config installation (no repo access)."
if [ "$(uname -s)" = "Darwin" ]; then
"$PWD"/script/macos/install_build_deps
fi
-28
View File
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
#
# Installs the warp_channel_config binary at a pinned revision.
#
# This script acts as a lockfile: the REVISION variable pins the exact version
# of the config binary to the code that reads its output. Update REVISION when
# the config binary changes.
#
# Usage:
# ./script/install_channel_config # install if not already at pinned rev
# ./script/install_channel_config --force # force reinstall
REPO="ssh://git@github.com/warpdotdev/warp-channel-config.git"
REVISION="97a199b5bba11af9c7d3bd43dfb3669316d1f0f8"
BIN_NAME="warp-channel-config"
# Check for repo access before attempting to `cargo install` the binary.
if ! git ls-remote --exit-code "${REPO}" HEAD >/dev/null 2>&1; then
echo "Cannot access ${REPO} (no SSH access?). Skipping install."
exit 1
fi
FORCE_FLAG=""
if [ "${1:-}" = "--force" ]; then
FORCE_FLAG="--force"
fi
cargo install ${FORCE_FLAG} --git "${REPO}" --rev "${REVISION}" --bin "${BIN_NAME}"
+17 -69
View File
@@ -17,8 +17,8 @@ cleanup() {
# Run cleanup() when the script terminates (whether it succeeded or failed).
trap cleanup EXIT
# By default we build dev bundles.
RELEASE_CHANNEL="dev"
# Build the OSS bundle.
RELEASE_CHANNEL="oss"
FEATURES="release_bundle"
EXTRA_FEATURES=""
PACKAGES=( appimage )
@@ -140,21 +140,10 @@ DIST_DIR="$CARGO_TARGET_OUTPUT_ROOT/dist"
if [[ $DEBUG = true ]]; then
CARGO_PROFILE="dev"
elif [[ $RELEASE_CHANNEL = "local" || $RELEASE_CHANNEL = "dev" ]]; then
# For dev bundles, we want to enable debug assertions to
# catch violations that would otherwise silently pass in
# a normal release build (e.g. in stable).
if [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli-debug_assertions"
else
CARGO_PROFILE="release-lto-debug_assertions"
fi
elif [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli"
else
if [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli"
else
CARGO_PROFILE="release-lto"
fi
CARGO_PROFILE="release-lto"
fi
if [[ "$CARGO_PROFILE" == "dev" ]]; then
@@ -168,54 +157,20 @@ fi
OUT_DIR="$CARGO_TARGET_OUTPUT_DIR/bundle/linux"
mkdir -p "$OUT_DIR"
# Update parameters based on the target release channel.
#
# APP_NAME here must match the value used in Rust as the
# application name; see app/src/channel.rs.
#
# GALAXY_BIN is the name of the binary produced by cargo;
# BINARY_NAME is the desired name of the binary in the final package.
if [[ $RELEASE_CHANNEL = "local" ]]; then
GALAXY_BIN="galaxy-local"
BINARY_NAME="galaxy-local"
APP_NAME="GalaxyLocal"
FEATURES="$FEATURES,agent_mode_debug"
export HANDLE_MARKDOWN=1
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
GALAXY_BIN="galaxy-dev"
BINARY_NAME="galaxy-dev"
APP_NAME="GalaxyDev"
FEATURES="$FEATURES,agent_mode_debug"
# Enable heap usage tracking & profiling using jemalloc through pprof.
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
export HANDLE_MARKDOWN=1
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
GALAXY_BIN="galaxy-preview"
BINARY_NAME="galaxy-preview"
APP_NAME="GalaxyPreview"
FEATURES="$FEATURES,preview_channel"
# Enable heap usage tracking & profiling using jemalloc through pprof.
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
GALAXY_BIN="stable"
BINARY_NAME="galaxy"
APP_NAME="Galaxy"
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
GALAXY_BIN="galaxy-oss"
BINARY_NAME="galaxy-oss"
APP_NAME="GalaxyOss"
if [[ "$RELEASE_CHANNEL" != "oss" ]]; then
echo "Error: only the oss release channel is supported" >&2
exit 1
fi
# OSS is the only supported release channel.
GALAXY_BIN="galaxy-oss"
BINARY_NAME="galaxy-oss"
APP_NAME="GalaxyOss"
# Artifact-specific binary naming
if [[ "$ARTIFACT" == "cli" ]]; then
# Keep packaged CLI names aligned with `Channel::cli_command_name`.
case "$RELEASE_CHANNEL" in
stable) BINARY_NAME="galaxy-ai" ;;
preview) BINARY_NAME="galaxy-ai-preview" ;;
dev) BINARY_NAME="galaxy-ai-dev" ;;
local) BINARY_NAME="galaxy-ai-local" ;;
oss) BINARY_NAME="galaxy-ai-oss" ;;
esac
BINARY_NAME="galaxy-ai-oss"
elif [[ "$ARTIFACT" == "galaxyctrl" ]]; then
BINARY_NAME="galaxyctrl"
PACKAGES=()
@@ -235,7 +190,7 @@ if [[ -n "$EXTRA_FEATURES" ]]; then
FEATURES="$FEATURES,$EXTRA_FEATURES"
fi
BUNDLE_ID="dev.galaxy.$APP_NAME"
BUNDLE_ID="com.galaxy.GalaxyOss"
EXECUTABLE_PATH="$CARGO_TARGET_OUTPUT_DIR/$GALAXY_BIN"
DEBUG_EXECUTABLE_PATH="$EXECUTABLE_PATH.debug"
@@ -261,15 +216,8 @@ if [[ "$BUILD" == "true" ]]; then
cp "$EXECUTABLE_PATH" "$DEBUG_EXECUTABLE_PATH"
echo "Stripping debug symbols from '$EXECUTABLE_PATH'"
if [[ $RELEASE_CHANNEL = "dev" ]]; then
# For dev builds, only strip debug symbols, as we want to keep some
# symbols for profiling purposes.
"${WARP_MUSL_STRIP:-strip}" --strip-debug "$EXECUTABLE_PATH"
else
# For production builds, strip all symbols, to keep the binary size
# smaller.
"${WARP_MUSL_STRIP:-strip}" --strip-all "$EXECUTABLE_PATH"
fi
# Strip all symbols to keep the shipped OSS binary small.
"${WARP_MUSL_STRIP:-strip}" --strip-all "$EXECUTABLE_PATH"
else
echo 'Skipping `cargo build` step due to --skip-build argument'
fi
+2 -2
View File
@@ -7,8 +7,8 @@
# - DIST_DIR: A temporary directory we can use for staging files as we build the package.
# - OUT_DIR: The directory into which we should place the final package.
# - CARGO_TARGET_OUTPUT_DIR: The cargo target directory containing build output.
# - RELEASE_CHANNEL: The release channel we're bundling (e.g.: "dev").
# - BUNDLE_ID: The app ID for the bundle (e.g.: "dev.galaxy.GalaxyDev").
# - RELEASE_CHANNEL: The release channel we're bundling ("oss").
# - BUNDLE_ID: The app ID for the bundle ("com.galaxy.GalaxyOss").
# - EXECUTABLE_PATH: The path to the compiled executable we want to install.
# - BINARY_NAME: The name that the compiled executable should have on the target machine.
# - APPIMAGE_NAME: The name of the AppImage file to produce.
+2 -2
View File
@@ -7,8 +7,8 @@
# - DIST_DIR: A temporary directory we can use for staging files as we build the package.
# - OUT_DIR: The directory into which we should place the final package.
# - CARGO_TARGET_OUTPUT_DIR: The cargo target directory containing build output.
# - RELEASE_CHANNEL: The release channel we're bundling (e.g.: "dev").
# - BUNDLE_ID: The app ID for the bundle (e.g.: "dev.galaxy.GalaxyDev").
# - RELEASE_CHANNEL: The release channel we're bundling ("oss").
# - BUNDLE_ID: The app ID for the bundle ("com.galaxy.GalaxyOss").
# - EXECUTABLE_PATH: The path to the compiled executable we want to install.
# - BINARY_NAME: The name that the compiled executable should have on the target machine.
# - ARTIFACT: Which artifact to build: app or cli.
+2 -11
View File
@@ -7,8 +7,8 @@
# - DIST_DIR: A temporary directory we can use for staging files as we build the package.
# - OUT_DIR: The directory into which we should place the final package.
# - CARGO_TARGET_OUTPUT_DIR: The cargo target directory containing build output.
# - RELEASE_CHANNEL: The release channel we're bundling (e.g.: "dev").
# - BUNDLE_ID: The app ID for the bundle (e.g.: "dev.galaxy.GalaxyDev").
# - RELEASE_CHANNEL: The release channel we're bundling ("oss").
# - BUNDLE_ID: The app ID for the bundle ("com.galaxy.GalaxyOss").
# - EXECUTABLE_PATH: The path to the compiled executable we want to install.
# - BINARY_NAME: The name that the compiled executable should have on the target machine.
# - ARTIFACT: Which artifact to build: app or cli.
@@ -18,15 +18,6 @@ set -e
source "$WORKSPACE_ROOT_DIR/script/linux/package_metadata"
TEMPLATE_DIR="$WORKSPACE_ROOT_DIR/resources/linux/debian/$ARTIFACT"
# Add a simple test to make sure we're generating the appropriate repository
# name for the stable channel.
if [ "$RELEASE_CHANNEL" = "stable" ]; then
if [ "$REPO_NAME" != "warpdotdev" ]; then
echo "::error ::Unexpected repo name for $RELEASE_CHANNEL channel: $REPO_NAME (expected \"warpdotdev\")"
exit 1
fi
fi
BUILD_ARCH="${BUILD_ARCH:-$(uname -m)}"
if [ "$BUILD_ARCH" = "aarch64" ]; then
ARCH="arm64"
+4 -4
View File
@@ -8,8 +8,8 @@
# - WORKSPACE_ROOT_DIR: The root directory of the Cargo workspace.
# - CARGO_TARGET_OUTPUT_DIR: The cargo target directory containing build output.
# - OPT_DIR: The absolute path to our install directory (under /opt) on the target machine.
# - RELEASE_CHANNEL: The release channel we're bundling (e.g.: "dev").
# - BUNDLE_ID: The app ID for the bundle (e.g.: "dev.galaxy.GalaxyDev").
# - RELEASE_CHANNEL: The release channel we're bundling ("oss").
# - BUNDLE_ID: The app ID for the bundle ("com.galaxy.GalaxyOss").
# - EXECUTABLE_PATH: The path to the compiled executable we want to install.
# - BINARY_NAME: The name that the compiled executable should have on the target machine.
# - ARTIFACT: Which artifact to build: app or cli.
@@ -52,9 +52,9 @@ EOF
"${TARGET_DIR}/usr/bin/$GALAXY_AI_COMMAND_NAME" \
"${TARGET_DIR}/usr/bin/$GALAXY_CONTROL_COMMAND_NAME"
install -Dm644 "$WORKSPACE_ROOT_DIR/app/channels/$RELEASE_CHANNEL/$BUNDLE_ID.desktop" "${TARGET_DIR}/usr/share/applications/$BUNDLE_ID.desktop"
install -Dm644 "$WORKSPACE_ROOT_DIR/app/channels/oss/$BUNDLE_ID.desktop" "${TARGET_DIR}/usr/share/applications/$BUNDLE_ID.desktop"
for size in 16x16 32x32 64x64 128x128 256x256 512x512; do
src_path="$WORKSPACE_ROOT_DIR/app/channels/$RELEASE_CHANNEL/icon/no-padding/$size.png"
src_path="$WORKSPACE_ROOT_DIR/app/channels/oss/icon/no-padding/$size.png"
if [[ -f "$src_path" ]]; then
install -Dm644 "$src_path" "${TARGET_DIR}/usr/share/icons/hicolor/$size/apps/$BUNDLE_ID.png"
fi
+2 -2
View File
@@ -7,8 +7,8 @@
# - DIST_DIR: A temporary directory we can use for staging files as we build the package.
# - OUT_DIR: The directory into which we should place the final package.
# - CARGO_TARGET_OUTPUT_DIR: The cargo target directory containing build output.
# - RELEASE_CHANNEL: The release channel we're bundling (e.g.: "dev").
# - BUNDLE_ID: The app ID for the bundle (e.g.: "dev.galaxy.GalaxyDev").
# - RELEASE_CHANNEL: The release channel we're bundling ("oss").
# - BUNDLE_ID: The app ID for the bundle ("com.galaxy.GalaxyOss").
# - EXECUTABLE_PATH: The path to the compiled executable we want to install.
# - BINARY_NAME: The name that the compiled executable should have on the target machine.
# - ARTIFACT: Which artifact to build: app or cli.
+2 -2
View File
@@ -12,8 +12,8 @@
# as installing a .deb or .rpm package.
#
# Required environment variables:
# WARP_BINARY_NAME: Name of the binary (e.g. "galaxy-dev").
# WARP_PACKAGE_NAME: Package directory name (e.g. "galaxy-terminal-dev").
# WARP_BINARY_NAME: Name of the binary (e.g. "galaxy-oss").
# WARP_PACKAGE_NAME: Package directory name (e.g. "galaxy-oss").
# WARP_BUNDLED_RESOURCES_DIR: Path to the staged resources directory to copy.
set -e
+8 -21
View File
@@ -3,32 +3,19 @@
# Derives Linux package metadata from Galaxy's release channel and artifact.
# This file is sourced by the individual package builders.
case "$RELEASE_CHANNEL" in
stable)
CHANNEL_SUFFIX=""
;;
local|dev|preview|oss)
CHANNEL_SUFFIX="-$RELEASE_CHANNEL"
;;
*)
echo "::error ::Unknown RELEASE_CHANNEL: $RELEASE_CHANNEL" >&2
return 1
;;
esac
if [[ "$RELEASE_CHANNEL" != "oss" ]]; then
echo "::error ::Only the oss release channel is supported" >&2
return 1
fi
CHANNEL_SUFFIX="-oss"
GALAXY_AI_COMMAND_NAME="galaxy-ai$CHANNEL_SUFFIX"
GALAXY_CONTROL_COMMAND_NAME="galaxyctrl$CHANNEL_SUFFIX"
case "$ARTIFACT" in
app)
# The OSS desktop entry invokes the Cargo binary directly. Other channels
# expose the traditional `*-terminal` launcher independently of the Cargo
# binary name.
if [[ "$RELEASE_CHANNEL" == "oss" ]]; then
PACKAGE_NAME="galaxy-oss"
else
PACKAGE_NAME="galaxy-terminal$CHANNEL_SUFFIX"
fi
PACKAGE_NAME="galaxy-oss"
;;
cli)
PACKAGE_NAME="galaxy-ai$CHANNEL_SUFFIX"
@@ -41,4 +28,4 @@ esac
# Repository provisioning still uses the existing release infrastructure and
# templates. This name is intentionally independent of Galaxy package names.
REPO_NAME="warpdotdev$CHANNEL_SUFFIX"
REPO_NAME="galaxy-oss"
+5 -5
View File
@@ -49,16 +49,16 @@ PATH="$temp_dir/bin:$PATH" \
grep -qx -- '--features' "$temp_dir/cargo-args"
grep -qx -- 'galaxy' "$temp_dir/cargo-args"
grep -qx -- 'galaxy-dev' "$temp_dir/cargo-args"
grep -qx -- 'release_bundle,agent_mode_debug,jemalloc_pprof,heap_usage_tracking,standalone,galaxy_control_cli,smoke_feature' "$temp_dir/cargo-args"
grep -qx -- 'galaxy-oss' "$temp_dir/cargo-args"
grep -qx -- 'release_bundle,standalone,galaxy_control_cli,smoke_feature' "$temp_dir/cargo-args"
profile_dir="$temp_dir/target/$target/release-cli-debug_assertions"
profile_dir="$temp_dir/target/$target/release-cli"
mkdir -p "$profile_dir"
cat > "$profile_dir/galaxy-dev" <<'EOF'
cat > "$profile_dir/galaxy-oss" <<'EOF'
#!/usr/bin/env bash
printf '%s\n' "$@" > "$FORWARDED_ARGS_FILE"
EOF
chmod +x "$profile_dir/galaxy-dev"
chmod +x "$profile_dir/galaxy-oss"
PATH="$temp_dir/bin:$PATH" \
CARGO_TARGET_DIR="$temp_dir/target" \
+18 -30
View File
@@ -19,32 +19,20 @@ assert_metadata() {
[[ "$GALAXY_CONTROL_COMMAND_NAME" == "galaxyctrl$expected_suffix" ]]
}
assert_metadata app stable "" galaxy-terminal
assert_metadata app local -local galaxy-terminal-local
assert_metadata app dev -dev galaxy-terminal-dev
assert_metadata app preview -preview galaxy-terminal-preview
assert_metadata app oss -oss galaxy-oss
assert_metadata cli stable "" galaxy-ai
assert_metadata cli local -local galaxy-ai-local
assert_metadata cli dev -dev galaxy-ai-dev
assert_metadata cli preview -preview galaxy-ai-preview
assert_metadata cli oss -oss galaxy-ai-oss
assert_desktop_launcher() {
local channel="$1"
local app_name="$2"
local expected_launcher="$3"
local desktop_file="$workspace_root/app/channels/$channel/dev.galaxy.$app_name.desktop"
local desktop_file
desktop_file="$workspace_root/app/channels/oss/com.galaxy.$app_name.desktop"
[[ -f "$desktop_file" ]]
grep -qx -- "Exec=$expected_launcher %U" "$desktop_file"
}
assert_desktop_launcher stable Galaxy galaxy-terminal
assert_desktop_launcher local GalaxyLocal galaxy-terminal-local
assert_desktop_launcher dev GalaxyDev galaxy-terminal-dev
assert_desktop_launcher preview GalaxyPreview galaxy-terminal-preview
assert_desktop_launcher oss GalaxyOss galaxy-oss
grep -qx -- 'Package: @@PACKAGE_NAME@@' \
@@ -68,7 +56,7 @@ stage_dir="$temp_dir/stage"
mkdir -p \
"$fake_workspace/bin" \
"$fake_workspace/script/linux" \
"$fake_workspace/app/channels/dev" \
"$fake_workspace/app/channels/oss" \
"$stage_dir"
ln -s \
"$workspace_root/script/linux/package_metadata" \
@@ -90,29 +78,29 @@ mkdir -p "$(dirname "${paths[1]}")"
cp "${paths[0]}" "${paths[1]}"
EOF
chmod +x "$fake_workspace/bin/install"
cat > "$fake_workspace/app/channels/dev/dev.galaxy.GalaxyDev.desktop" <<'EOF'
cat > "$fake_workspace/app/channels/oss/com.galaxy.GalaxyOss.desktop" <<'EOF'
[Desktop Entry]
Name=Galaxy Dev
Exec=galaxy-terminal-dev %U
Name=GalaxyOss
Exec=galaxy-oss %U
EOF
cat > "$temp_dir/galaxy-dev" <<'EOF'
cat > "$temp_dir/galaxy-oss" <<'EOF'
#!/usr/bin/env bash
exit 0
EOF
chmod +x "$temp_dir/galaxy-dev"
chmod +x "$temp_dir/galaxy-oss"
PATH="$fake_workspace/bin:$PATH" \
WORKSPACE_ROOT_DIR="$fake_workspace" \
RELEASE_CHANNEL=dev \
RELEASE_CHANNEL=oss \
ARTIFACT=app \
BUNDLE_ID=dev.galaxy.GalaxyDev \
EXECUTABLE_PATH="$temp_dir/galaxy-dev" \
BINARY_NAME=galaxy-dev \
OPT_DIR=/opt/warpdotdev/galaxy-terminal-dev \
CARGO_PROFILE=dev \
BUNDLE_ID=com.galaxy.GalaxyOss \
EXECUTABLE_PATH="$temp_dir/galaxy-oss" \
BINARY_NAME=galaxy-oss \
OPT_DIR=/opt/warpdotdev/galaxy-oss \
CARGO_PROFILE=release \
"$workspace_root/script/linux/bundle_install" "$stage_dir"
grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-terminal-dev/galaxy-dev" "$@"' \
"$stage_dir/usr/bin/galaxy-ai-dev"
grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-terminal-dev/galaxy-dev" --galaxyctrl "$@"' \
"$stage_dir/usr/bin/galaxyctrl-dev"
grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-oss/galaxy-oss" "$@"' \
"$stage_dir/usr/bin/galaxy-ai-oss"
grep -Fq 'exec -a "$0" "/opt/warpdotdev/galaxy-oss/galaxy-oss" --galaxyctrl "$@"' \
"$stage_dir/usr/bin/galaxyctrl-oss"
+22 -81
View File
@@ -97,8 +97,8 @@ UNIVERSAL_BINARY=true
BUILD_BINARY=true
TARGET_ARCH=""
DMG_NAME_SUFFIX=""
# By default we build dev bundles.
RELEASE_CHANNEL="dev"
# Build the OSS bundle.
RELEASE_CHANNEL="oss"
FEATURES="release_bundle,cocoa_sentry,extern_plist"
REGISTER_SERVICES=true
DEBUG=false
@@ -184,7 +184,7 @@ while (( "$#" )); do
OPEN_AFTER_BUNDLE=true
shift
;;
# Specify the release channel (local, dev, preview, stable, oss)
# Specify the release channel (oss)
-c|--channel)
if [ -n "$2" ] && [ "${2:0:1}" != "-" ]; then
RELEASE_CHANNEL=$2
@@ -246,21 +246,10 @@ eval set -- "$PARAMS"
# Infer a cargo profile from the bundle configuration.
if [[ $DEBUG = true ]]; then
CARGO_PROFILE="dev"
elif [[ $RELEASE_CHANNEL = "local" || $RELEASE_CHANNEL = "dev" ]]; then
# For dev bundles, we want to enable debug assertions to
# catch violations that would otherwise silently pass in
# a normal release build (e.g. in stable).
if [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli-debug_assertions"
else
CARGO_PROFILE="release-lto-debug_assertions"
fi
elif [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli"
else
if [[ "$ARTIFACT" == "cli" || "$ARTIFACT" == "galaxyctrl" ]]; then
CARGO_PROFILE="release-cli"
else
CARGO_PROFILE="release-lto"
fi
CARGO_PROFILE="release-lto"
fi
TARGET_PROFILE_DIR="$CARGO_PROFILE"
@@ -268,53 +257,13 @@ if [[ "$CARGO_PROFILE" == "dev" ]]; then
TARGET_PROFILE_DIR="debug"
fi
if [[ $RELEASE_CHANNEL = "local" ]]; then
WARP_BIN="galaxy-local"
BUNDLE_ID="com.samsung.Galaxy-Local"
WARP_APP_NAME="Galaxy Local"
WARP_SCHEME_NAME="galaxy"
FEATURES="$FEATURES,agent_mode_debug"
# For local builds, use different versions of our bundled frameworks (e.g.:
# Sentry). This needs to be exported so it can be referenced by
# app/build.rs later, while running `cargo bundle`.
export FRAMEWORK_OVERRIDE="dev"
elif [[ $RELEASE_CHANNEL = "dev" ]]; then
WARP_BIN="galaxy-dev"
BUNDLE_ID="com.samsung.Galaxy-Dev"
WARP_APP_NAME="Galaxy Dev"
WARP_SCHEME_NAME="galaxydev"
FEATURES="$FEATURES,agent_mode_debug"
# Enable heap usage tracking & profiling using jemalloc through pprof.
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
# For dev builds, use different versions of our bundled frameworks (e.g.:
# Sentry). This needs to be exported so it can be referenced by
# app/build.rs later, while running `cargo bundle`.
export FRAMEWORK_OVERRIDE="dev"
export HANDLE_MARKDOWN=1
elif [[ $RELEASE_CHANNEL = "preview" ]]; then
WARP_BIN="galaxy-preview"
BUNDLE_ID="com.samsung.Galaxy-Preview"
WARP_APP_NAME="Galaxy Preview"
WARP_SCHEME_NAME="galaxypreview"
FEATURES="$FEATURES,preview_channel"
# Enable heap usage tracking & profiling using jemalloc through pprof.
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
elif [[ $RELEASE_CHANNEL = "stable" ]]; then
WARP_BIN="stable"
BUNDLE_ID="com.samsung.Galaxy"
WARP_APP_NAME="Galaxy"
WARP_SCHEME_NAME="galaxy"
# Enable heap usage tracking & profiling using jemalloc through pprof.
FEATURES="$FEATURES,jemalloc_pprof,heap_usage_tracking"
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
WARP_BIN="galaxy-oss"
BUNDLE_ID="com.samsung.Galaxy"
WARP_APP_NAME="Galaxy"
WARP_SCHEME_NAME="galaxy"
# The OSS channel does not ship Sentry, so drop the cocoa_sentry feature
# (which would otherwise pull in the Sentry framework dependency).
FEATURES="release_bundle,extern_plist"
fi
WARP_BIN="galaxy-oss"
BUNDLE_ID="com.galaxy.GalaxyOss"
WARP_APP_NAME="Galaxy"
WARP_SCHEME_NAME="galaxyoss"
# The OSS channel does not ship Sentry, so drop the cocoa_sentry feature
# (which would otherwise pull in the Sentry framework dependency).
FEATURES="release_bundle,extern_plist"
OUT_DIR="target/$TARGET_PROFILE_DIR/bundle/osx"
DOCK_TILE_PLUGIN_NAME="GalaxyDockTilePlugin.docktileplugin"
@@ -347,6 +296,11 @@ else
fi
fi
if [[ "$RELEASE_CHANNEL" != "oss" ]]; then
echo "Error: only the oss release channel is supported" >&2
exit 1
fi
# Set artifact-specific configuration.
if [[ "$ARTIFACT" == cli ]]; then
UNIVERSAL_BINARY=false
@@ -539,15 +493,8 @@ if [[ "$ARTIFACT" == "app" ]]; then
"$WORKSPACE_ROOT_DIR/script/prepare_bundled_pprof" "$HELPERS_DIR"
fi
# Determine CLI wrapper script path based on release channel. Each channel's
# value here must match `Channel::cli_command_name` in the Rust source.
if [[ $RELEASE_CHANNEL = "stable" ]]; then
CLI_SCRIPT_PATH="$BUNDLED_RESOURCES_DIR/bin/galaxy-ai"
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
CLI_SCRIPT_PATH="$BUNDLED_RESOURCES_DIR/bin/galaxy-ai-oss"
else
CLI_SCRIPT_PATH="$BUNDLED_RESOURCES_DIR/bin/galaxy-ai-$RELEASE_CHANNEL"
fi
# Keep this name aligned with `Channel::cli_command_name` in the Rust source.
CLI_SCRIPT_PATH="$BUNDLED_RESOURCES_DIR/bin/galaxy-ai-oss"
echo "Creating Resources/bin directory and CLI wrapper script..."
mkdir -p "$BUNDLED_RESOURCES_DIR/bin"
@@ -565,14 +512,8 @@ EOF
chmod +x "$CLI_SCRIPT_PATH"
if [[ ",$FEATURES," =~ ",galaxy_control_cli," ]]; then
# Each value must match `Channel::galaxyctrl_command_name` in the Rust source.
if [[ $RELEASE_CHANNEL = "stable" ]]; then
GALAXYCTRL_COMMAND_NAME="galaxyctrl"
elif [[ $RELEASE_CHANNEL = "oss" ]]; then
GALAXYCTRL_COMMAND_NAME="galaxyctrl-oss"
else
GALAXYCTRL_COMMAND_NAME="galaxyctrl-$RELEASE_CHANNEL"
fi
# Keep this name aligned with `Channel::galaxyctrl_command_name` in the Rust source.
GALAXYCTRL_COMMAND_NAME="galaxyctrl-oss"
GALAXYCTRL_SCRIPT_PATH="$BUNDLED_RESOURCES_DIR/bin/$GALAXYCTRL_COMMAND_NAME"
echo "Creating galaxyctrl wrapper script at $GALAXYCTRL_SCRIPT_PATH..."
"$WORKSPACE_ROOT_DIR/script/macos/create_galaxyctrl_wrapper" \
+10 -35
View File
@@ -4,11 +4,10 @@
# Galaxy as a real 'app' instead of a bare executable, so macOS can treat it
# like a real signed app (custom URL schemes, user notifications, etc.).
#
# This script is invoked by `./script/run`, which handles cross-platform
# setup (install_channel_config, binary name detection, feature-to-env-var
# mapping). The following env vars are expected to be set by the caller:
# WARP_BIN_NAME — "galaxy-local" or "galaxy-oss"
# WARP_CHANNEL — "local" or "oss"
# This script is invoked by `./script/run`; the caller supplies the OSS
# binary/channel values:
# WARP_BIN_NAME — "galaxy-oss"
# WARP_CHANNEL — "oss"
# FEATURES — comma-separated cargo features (already normalized)
# Must be called from the root directory of the Galaxy repository.
@@ -29,20 +28,15 @@ if [ -z "$TARGET_DIR" ] || [ "$TARGET_DIR" = "null" ]; then
TARGET_DIR="${REPO_ROOT}/target"
fi
if [ "$WARP_CHANNEL" = "local" ]; then
WARP_APP_PATH="${TARGET_DIR}/debug/bundle/osx/Galaxy Local.app"
WARP_SCHEME_NAME="galaxylocal"
else
WARP_APP_PATH="${TARGET_DIR}/debug/bundle/osx/Galaxy.app"
WARP_SCHEME_NAME="galaxyoss"
fi
WARP_APP_PATH="${TARGET_DIR}/debug/bundle/osx/Galaxy.app"
WARP_SCHEME_NAME="galaxyoss"
TARGET_PROFILE_DIR="debug"
DONT_OPEN=false
# Launches the binary with "open", meaning the Galaxy process is
# launched by the MacOS application launcher instead of a shell session.
# Note that since Galaxy isn't launched as a child process, using ctrl+c
# won't kill the app (but will kill the tail process displaying output).
# tl;dr better simulates running Galaxy Local/OSS
# tl;dr better simulates running Galaxy OSS
OPEN_WITH_LAUNCHD=false
# Arguments to pass directly to Galaxy (specified after --)
@@ -50,10 +44,6 @@ OPEN_WITH_LAUNCHD=false
# an application doesn't make sense.
WARP_ARGS=()
# Export this variable so it can be referenced by app/build.rs later when
# running `cargo bundle`.
export FRAMEWORK_OVERRIDE="dev"
PARAMS=""
while (( "$#" )); do
case "$1" in
@@ -69,11 +59,7 @@ while (( "$#" )); do
--release)
echo "Detected release build, pointing at release bundle under ${TARGET_DIR}/release/bundle"
TARGET_PROFILE_DIR="release"
if [ "$WARP_CHANNEL" = "local" ]; then
WARP_APP_PATH="${TARGET_DIR}/release/bundle/osx/Galaxy Local.app"
else
WARP_APP_PATH="${TARGET_DIR}/release/bundle/osx/Galaxy.app"
fi
WARP_APP_PATH="${TARGET_DIR}/release/bundle/osx/Galaxy.app"
PARAMS="$PARAMS $1"
shift
;;
@@ -81,11 +67,7 @@ while (( "$#" )); do
PROFILE="$2"
TARGET_PROFILE_DIR="$PROFILE"
shift 2
if [ "$WARP_CHANNEL" = "local" ]; then
WARP_APP_PATH="${TARGET_DIR}/${PROFILE}/bundle/osx/Galaxy Local.app"
else
WARP_APP_PATH="${TARGET_DIR}/${PROFILE}/bundle/osx/Galaxy.app"
fi
WARP_APP_PATH="${TARGET_DIR}/${PROFILE}/bundle/osx/Galaxy.app"
PARAMS="$PARAMS --profile $PROFILE"
;;
--open_with_launchd)
@@ -171,14 +153,7 @@ if [ "$DONT_OPEN" = false ] ; then
if [ "$OPEN_WITH_LAUNCHD" = true ]; then
echo "Launching with MacOS application launcher"
PATH="" /usr/bin/open "$WARP_APP_PATH"
if [ "$WARP_CHANNEL" = "local" ]; then
LOG_FILE=~/Library/Logs/warp_local.log
elif [ "$WARP_CHANNEL" = "oss" ]; then
LOG_FILE=~/Library/Logs/warp-oss.log
else
echo "Warning: unrecognized WARP_CHANNEL '$WARP_CHANNEL', defaulting to OSS log path" >&2
LOG_FILE=~/Library/Logs/warp-oss.log
fi
LOG_FILE=~/Library/Logs/warp-oss.log
tail -F "$LOG_FILE"
else
echo "Opening app at $WARP_APP_PATH/Contents/MacOS/$WARP_BIN_NAME"
+5 -5
View File
@@ -6,10 +6,10 @@ workspace_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
temp_dir="$(mktemp -d)"
trap 'rm -rf "$temp_dir"' EXIT
bundle_dir="$temp_dir/GalaxyDev.app/Contents"
wrapper_path="$bundle_dir/Resources/bin/galaxyctrl-dev"
binary_path="$bundle_dir/MacOS/galaxy-dev"
installed_path="$temp_dir/usr/local/bin/galaxyctrl-dev"
bundle_dir="$temp_dir/Galaxy.app/Contents"
wrapper_path="$bundle_dir/Resources/bin/galaxyctrl-oss"
binary_path="$bundle_dir/MacOS/galaxy-oss"
installed_path="$temp_dir/usr/local/bin/galaxyctrl-oss"
forwarded_args_file="$temp_dir/forwarded-args"
expected_args_file="$temp_dir/expected-args"
@@ -22,7 +22,7 @@ chmod +x "$binary_path"
"$workspace_root/script/macos/create_galaxyctrl_wrapper" \
"$wrapper_path" \
"../../MacOS/galaxy-dev"
"../../MacOS/galaxy-oss"
cat > "$expected_args_file" << 'EOF'
--galaxyctrl
+9 -7
View File
@@ -12,8 +12,8 @@
# destination_directory: The directory where resources should be installed.
# Resources will be copied to subdirectories within
# this path (e.g., $DEST_DIR/skills).
# channel: (Optional) Release channel (local, dev, preview,
# stable). Used to include channel-gated skills.
# channel: (Optional) Release channel. OSS has no gated skills;
# integration remains supported for test bundles.
# cargo_profile: (Optional) Cargo build profile to use when
# generating the settings schema. Reusing the same
# profile as the main build avoids recompiling deps.
@@ -86,10 +86,15 @@ if [ -n "$GIT_RELEASE_TAG" ]; then
printf '{\n "warp_version": "%s"\n}\n' "$GIT_RELEASE_TAG" > "$VERSION_METADATA_PATH"
fi
# Copy channel-gated skills matching the current release channel.
# OSS and integration bundles do not consume channel-gated skills.
GATED_SRC="$REPO_ROOT/resources/channel-gated-skills"
DEST_SKILLS="$DEST_DIR/bundled/skills"
if [ -n "$CHANNEL" ] && [[ "$CHANNEL" != "oss" && "$CHANNEL" != "integration" ]]; then
echo "Error: unsupported release channel '$CHANNEL'" >&2
exit 1
fi
if [ -n "$CHANNEL" ] && [ -d "$GATED_SRC" ]; then
echo "Copying channel-gated skills for channel '$CHANNEL'..."
"$SCRIPT_DIR/copy_conditional_skills" \
@@ -156,10 +161,7 @@ if [ "${SKIP_SETTINGS_SCHEMA:-}" != "1" ]; then
if [ -n "$CARGO_PROFILE" ]; then
SCHEMA_CMD+=(--profile "$CARGO_PROFILE")
fi
SCHEMA_CMD+=(--manifest-path "$REPO_ROOT/Cargo.toml" --bin generate_settings_schema --)
if [ -n "$CHANNEL" ]; then
SCHEMA_CMD+=(--channel "$CHANNEL")
fi
SCHEMA_CMD+=(--manifest-path "$REPO_ROOT/Cargo.toml" --bin generate_settings_schema -- --channel oss)
SCHEMA_CMD+=("$SCHEMA_OUTPUT")
"${SCHEMA_CMD[@]}"
+4 -32
View File
@@ -6,10 +6,8 @@
# as a real `.app` bundle (with code signing, plist updates, etc.). On Linux
# and Windows it invokes `cargo run` directly for the appropriate binary.
#
# This script owns all cross-platform setup (running install_channel_config,
# detecting internal vs OSS builds, and mapping legacy `--features` entries
# to environment variables), so platform-specific scripts can assume those
# values are already provided via environment variables.
# This script owns all cross-platform setup and passes the OSS channel values
# to the platform-specific scripts.
set -e
@@ -23,17 +21,8 @@ INSTALL_COMMON_SKILLS=1
FORCE_COMMON_SKILLS=0
COMMON_SKILLS_TARGET="${WARP_COMMON_SKILLS_INSTALL_TARGET:-}"
./script/install_channel_config || echo "Skipping internal channel config installation (no repo access)."
# If warp_channel_config is on PATH, build the Local channel binary; otherwise build the OSS channel.
if command -v warp-channel-config &>/dev/null; then
WARP_BIN_NAME="galaxy-local"
WARP_CHANNEL="local"
else
WARP_BIN_NAME="galaxy-oss"
WARP_CHANNEL="oss"
fi
WARP_BIN_NAME="galaxy-oss"
WARP_CHANNEL="oss"
# Shared argument parsing. macOS-specific flags (--dont-open,
# --open_with_launchd, --generate-schema) are forwarded through MAC_ARGS and
@@ -122,23 +111,6 @@ if [[ "$INSTALL_COMMON_SKILLS" -eq 1 ]]; then
fi
fi
# These cargo features were removed and replaced by environment variables read
# by warp-channel-config. Intercept them here so that existing --features
# invocations keep working.
for mapping in \
"with_local_server:WITH_LOCAL_SERVER" \
"with_local_session_sharing_server:WITH_LOCAL_SESSION_SHARING_SERVER" \
"with_sandbox_telemetry:WITH_SANDBOX_TELEMETRY"; do
feature="${mapping%%:*}"
env_var="${mapping##*:}"
if [[ ",$FEATURES," =~ ,"$feature", ]]; then
export "$env_var"=1
FEATURES="$(echo "$FEATURES" | sed "s/,$feature,/,/; s/^$feature,//; s/,$feature$//; s/^$feature$//")"
FEATURES="$(echo "$FEATURES" | sed 's/,,*/,/g; s/^,//; s/,$//')"
echo "Note: '$feature' is no longer a cargo feature; setting $env_var=1 instead."
fi
done
export FEATURES
export WARP_BIN_NAME
export WARP_CHANNEL
+5 -16
View File
@@ -2,29 +2,18 @@
#
# Run a local `warp_tui` build.
#
# Selects the internal `local` channel when the `warp-channel-config` generator
# is available (mirroring `./script/run`), otherwise falls back to the OSS
# channel so contributors without repo access can still run the TUI. Unlike the
# GUI `./script/run`, the TUI is a console binary, so there is no `.app` bundle
# step — it just runs the appropriate `cargo` binary.
# Runs the OSS TUI binary. Unlike the GUI `./script/run`, the TUI is a
# console binary, so there is no `.app` bundle step.
#
# Extra arguments are forwarded to `cargo run` (e.g. `--release`); use `--` to
# pass arguments through to the binary itself.
# Extra arguments are forwarded to `cargo run` (e.g. `--release`).
set -e
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
cd "${REPO_ROOT}"
./script/install_channel_config || echo "Skipping internal channel config installation (no repo access)."
if command -v warp-channel-config &>/dev/null; then
BIN="warp-tui"
CHANNEL="local"
else
BIN="warp-tui-oss"
CHANNEL="oss"
fi
BIN="warp-tui-oss"
CHANNEL="oss"
echo "Running cargo run -p warp_tui --bin ${BIN} (channel: ${CHANNEL})"
exec cargo run -p warp_tui --bin "${BIN}" "$@"

Some files were not shown because too many files have changed in this diff Show More