Warp to Galaxy internal rebrand
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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
|
||||
]
|
||||
|
||||
@@ -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]]
|
||||
|
||||
@@ -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" }
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
@@ -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 |
|
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"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 807 B |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
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"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 172 KiB |
|
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;
|
||||
|
||||
@@ -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;
|
||||
|
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"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 856 B |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 7.1 KiB |
|
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;
|
||||
@@ -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;
|
||||
|
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"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 747 B |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 152 KiB |
@@ -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,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;
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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(¤t, 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 {
|
||||
|
||||
@@ -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(""));
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
@@ -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}"))
|
||||
}
|
||||
@@ -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"]
|
||||
|
||||
@@ -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())
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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(),
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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" \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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" \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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[@]}"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}" "$@"
|
||||
|
||||