* work
* moar work
* notes
* work
* separate to terminal and control channels
* stdin working
* serve html web client initial
* serve static assets loaded with include_dir
* merge
* enable_web_server config parameter
* compile time flag to disable web server capability
* rustfmt
* add license to all xterm.js assets
* mouse working except copy/paste
* helpful comment
* web client improvements
- move script to js file
- add favicon
- add nerd font
- change title
TODO: investigate if font license embedded in otf is sufficient
* get mouse to work properly
* kitty keyboard support initial
* fix wrong type in preload link
* wip axum websocket handlers
- upgrade axum to v0.8.1, enable ws feature
- begin setup of websocket handlers
- tidy up imports
* replace control listener
* handle terminal websocket with axum
* cleanup Cargo.toml
* kitty fixes and bracketed paste
* fix(mouse): pane not found crash
* initial session switching infra
* add `web_client_font` option
* session switching, creation and resurrection working through the session manager
* move session module to zellij-utils and share logic with web-client
* some cleanups
* require restart for enable-web-server
* use session name from router
* write config to disk and watch for config changes
* rename session name to ipc path
* add basic panic handler, make render_to_client exit on channel close
* use while let instead of loop
* handle websocket close
* add mouse motions
* make clipboard work
* add weblink handling and webgl rendering
* add todo
* fix: use session name instead of patch on session switch
* use "default" layout for new sessions
* ui indication for session being shared
* share this session ui
* plugin assets
* Fix process crash on mac with notify watcher.
Use poll watcher instead of recommended as a workaround.
* make url session switching and creation work
* start welcome screen on root url
* scaffold control messages, set font from config
* set dimensions on session start
* bring back session name from url
* send bytes on terminal websocket instead of json
- create web client os input and id before websocket connection
* draft ui
* work
* refactor ui
* remove otf font, remove margins to avoid scrollbar
* version query endpoint for server status
* web session info query endpoint
* refactor: move stuff around
* add web client info to session metadata
* make tests pass
* populate real data in session list
* remove unnecessary endpoint
* add web_client node to config, add font option
* remove web_client_font
* allow disabling the web session through the config - WIP
* formalize sharing/not-sharing configuration
* fix tests
* allow shutting down web server
* display error when web clients are forbidden to attach
* only show sessions that allow web clients if this is a web client
* style(fmt): rustfmt
* fix: query web server from Zellij rather than from each plugin
* remove log spam
* handle some error paths better in the web client
* allow controlling the web server through the cli
* allow configuring the web server's ip/port
* fix tests and format code
* use direct WebServerStatus event instead of piggy-backing on SessionInfo
* plugin revamp initial
* make plugin responsive
* adjust plugin title
* refactor: share plugin
* refactor: share plugin
* add cors middleware
* some fixes for running without a compiled web server capability
* display error when starting the share plugin without web server support
* clarify config
* add pipelines to compile zellij without web support
* display error when unable to start web server
* only query web server when share plugin is running
* refactor(web-client): connection table
* give zellij_server_listener access to the control channel
* fixes and clarifications
* refactor: consolidate generate_unique_session_name
* give proper error when trying to attach to a forbidden session
* change browser URL when switching sessions
* add keyboard shortcut
* enforce https when bound to non-loopback ip
* initial authentication token implementation
* background color from theme
* initial web client theme config
* basic token generation ui
* refactor set config message creation
* also set body background
* allow editing scrollback for plugins too
* set scrollback to 0
* properly parse colors in config
* generate token from plugin
* nice login modals
* initial token management screen
* implement token authentication
* refactor(share): token management screen
* style(fmt): rustfmt
* fix(plugin): some minor bugs
* refactor(share): main screen
* refactor(share): token screen
* refactor(share): main
* refactor(share): ui components
* fix(responsiveness): properly send usage_width to the render function
* fix cli commands and add some verbosity
* add support for settings ansi and selection colors
* add cursor and cursor accent
* basic web client tests
* fix tests
* refactor: web client
* use session tokens for authentication
* improve modals
* move shutdown to ipc
* refactor: ipc logic
* serialize theme config for web client
* update tests
* refactor: move some stuff around to prepare for config hot reload
* config live reloading for the web clients
* change remember-me UI wording
* improve xterm.js link handling
* make sure terminal is focused on mousemove
* remove deprecated sharing indication from compact-bar
* gate deps and functionality behind the web_server_compatibility feature
* feat(build): add --no-web flag in all the places
* fix some other build flows
* add new assets
* update CI for no-web (untested)
* make more dependencies optional
* update axum-extra
* add web client configuration options
* gracefully close connections on server exit
* tests for graceful connection closing
* handle client-side reconnect when server is down
* fix: make sure ipc bus folder exists before starting
* add commands to manage login tokens from the cli
* style(fmt): rustfmt
* some cleanups
* fix(ux): allow alt-right-click on the web client without opening the context menu
* fix: prevent attaching to welcome screen
* fix: reload config issues
* fix long socket path on macos
* normalize config conversion and fix color gap in browser
* revoke session_token cookie if it is not valid
* fix: visual bug with multiple clients in extremely small screen sizes
* fix: only include rusqlite for the web server capability builds
* update e2e snapshots
* refactor(web): client side js
* some cleanups
* moar cleanups
* fix(tests): wait for server instead of using a fixed timeout
* debug CI
* fix(tests): use spawn_blocking for running the test web server
* fix(tests): wait for http rather than tcp port
* fix(tests): properly pass config path - hopefully this is the issue...
* success! bring back the rest of the tests
* attempt to fix the macos CI issue
* docs(changelog): add PR
---------
Co-authored-by: Thomas Linford <linford.t@gmail.com>
* chore(cargo): Update dependencies
for xtask subcommand to remove warnings about unknown compiler
attributes.
* deps(xtask): Remove `lazy_static`
as dependency, since the code we need can now be expressed using rusts
`std` builtin types.
* fix(xtask): Hide deprecated args
so the compiler doesn't complain about dead code any more.
* fix(xtask): Remove needless borrow.
* fix: Remove dead code
across the codebase, as discovered by the rust compiler.
* fix(server): Log previously ignored errors.
* fix(xtask): Remove needless `format!` calls.
* fix(xtask): Remove superfluous return statement.
* fix(client): Remove unused enum variant
from `ClientInstruction` and all code attached to it.
* fix(server): Restore functions needed in tests.
* chore: Apply rustfmt.
* fix(server): Add missing code.
* fix: Remove leftover warnings.
* CHANGELOG: Add MR #4026.
* fix(xtask): Pin `xshell` to version 0.2.2
because release 0.2.3 changed the way stdin is handled, breaking
interactive command invocations (such as we use).
* chore(cargo): Update dependencies
for xtask subcommand to remove warnings about unknown compiler
attributes.
* deps(xtask): Remove `lazy_static`
as dependency, since the code we need can now be expressed using rusts
`std` builtin types.
* fix(xtask): Hide deprecated args
so the compiler doesn't complain about dead code any more.
* fix(xtask): Remove needless borrow.
* fix: Remove dead code
across the codebase, as discovered by the rust compiler.
* fix(server): Log previously ignored errors.
* fix(xtask): Remove needless `format!` calls.
* fix(xtask): Remove superfluous return statement.
* fix(client): Remove unused enum variant
from `ClientInstruction` and all code attached to it.
* fix(server): Restore functions needed in tests.
* chore: Apply rustfmt.
* fix(server): Add missing code.
* fix: Remove leftover warnings.
* CHANGELOG: Add MR #4026.
* chore: Remove deprecated `Makefile.toml`
which really should have been deleted as part of #2012. This hasn't been
updated for more than 2 years now and I don't expect anyone to still use
this. Our build process is now managed by `cargo xtask`.
* Cargo: Update the Rust toolchain to 1.84.0
from 1.75.0 which has been deprecated for a while now. Along with this
change, the `wasm32-wasi` target is no longer available (see subsequent
commit for additional info).
* chore: Rename `wasm32-wasi` to `wasm32-wasip1`
as required by the Rust project. The `wasm32-wasi` target name has been
retired and will likely be reused at a later time, although to express
an entirely different target (i.e. implementation of the WASI standard).
For additional information, see:
- https://blog.rust-lang.org/2024/04/09/updates-to-rusts-wasi-targets.html
- https://blog.rust-lang.org/2024/09/05/Rust-1.81.0.html#wasi-01-target-naming-changed
* chore: Drop `rust-analysis` component
from the `rust-toolchain.toml` definition. This was added way back in
2021 via 8688569a, and while I'm not sure what it expressed back then,
nowadays it refers to [Metadata for RLS][1], which apparently was an
early language server implementation and has long since been replaced by
*rust-analyzer*.
We don't want to propose or enforce the use of a specific toolchain and
in any case, setting this up properly is the job of a developers
IDE/Editor.
[1]:
1f06e3b31d/doc/user-guide/src/concepts/components.md (previous-components)
* chore: Adhere to type rename
from `std::panic::PanicInfo` to `std::panic::PanicHookInfo`, which was
introduced in Rust 1.81.0. For additional information, see:
- https://releases.rs/docs/1.81.0/#compatibility-notes
- https://github.com/rust-lang/rust/pull/115974/
* fix(utils/data): Adhere to expected case
in match arm patterns, since the expression being matched against has
been modified using `to_ascii_lowercase`. Hence, we cannot have upper
case ASCII chars in the expressions (these arms were previously no-ops).
* fix(utils): Derive `Hash` manually
in `input/layout` since the `PartialEq` trait is also implemented
manually. Previously the `Hash` impl wasn't consistent with the `Eq`
impl, which can have weird effects when using these types in e.g.
`HashMap`s or similar types. For additional information, see:
- https://rust-lang.github.io/rust-clippy/master/index.html#derived_hash_with_manual_eq
- https://doc.rust-lang.org/stable/std/hash/trait.Hash.html#hash-and-eq
* fix(utils): Derive `Hash` manually
in `pane_size` since the `PartialEq` trait is also implemented manually.
Previously the `Hash` impl wasn't consistent with the `Eq` impl, which
can have weird effects when using these types in e.g. `HashMap`s or
similar types. For additional information, see:
- https://rust-lang.github.io/rust-clippy/master/index.html#derived_hash_with_manual_eq
- https://doc.rust-lang.org/stable/std/hash/trait.Hash.html#hash-and-eq
* fix(server): Don't redeclare variables
with their same names. Latest rust toolchains reject this code.
* chore(actions): Use non-archived toolchain setup
for the Rust toolchain. The previously used action has been archived
over a year ago. The new one should also support reading our
`rust-toolchain.toml`, so we no longer have to keep track of the
toolchain in multiple places.
* chore(actions): Add some space to YAML files
to make them better visually parsable.
* ci: Remove toolchain update Job
since as far as I can tell, this isn't used any more.
* ci: Fix invalid actions specification
and only request an action without running other code.
* CHANGELOG: Add PR #3945.
* refactor: Simplify transfer_rows_from_viewport_to_lines_above
next_lines is always consolidated to a single Row, which immediately
gets removed - we can remove some dead code as a result
* perf: Batch remove rows from the viewport for performance
Given a 1MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~9s to ~3s
* perf: Optimize Row::drain_until by splitting chars in one step
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~23s to ~20s
* refactor: Simplify `if let` into a `.map`
* refactor: There are only new saved coordinates when there were old ones
* refactor: Unify viewport transfer: use common variable names
* fix: Use same saved cursor logic in height resize as width
See #2182 for original introduction that only added it in one branch,
this fixes an issue where the saved cursor was incorrectly reset when
the real cursor was
* fix: Correct saved+real cursor calculations when reflowing long lines
* fix: Don't create canonical lines if cursor ends on EOL after resize
Previously if a 20 character line were split into two 10 character
lines, the cursor would be placed on the line after the two lines.
New characters would then be treated as a new canonical line. This
commit fixes this by biasing cursors to the end of the previous line.
* fix: for cursor index calculation in lines that are already wrapped
* chore: test for real/saved cursor position being handled separately
* chore: Apply cargo format
* refactor: Unify viewport transfer: transfer + cursor update together
* perf: Reduce size of TerminalCharacter from 72 to 60 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
964092 kB to 874020 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~15s to ~12.5s
* fix(build): Don't unconditionally rebuild zellij-utils
* refactor: Remove Copy impl on TerminalCharacter
* perf: Rc styles to reduce TerminalCharacter from 60 to 24 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
845156 kB to 478396 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~12.5s to ~7s
* perf: Remove RcCharacterStyles::Default, allow enum niche optimisation
This reduces TerminalCharacter from 24 to 16 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
478396 kB to 398108 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~7s to ~4.75s
* docs: link anchor omission from reset_all is deliberate
reset_all is only used from ansi params, and ansi params don't control
link anchor
* fix: Remove no-op on variable that gets immediately dropped
* refactor: Simplify replace_character_at logic
The original condition checked absolute_x_index was in bounds, then
used the index to manipulate it. This is equivalent to getting a
ref to the character at that position and manipulating directly
* chore: Run xtask format
* chore(repo): update issue templates
* Bump rust version to 1.75.0 (#3039)
* rust-toolchain: Bump toolchain version to 1.69.0
which, compared to the previous 1.67.0, has the following impacts on
`zellij`:
- [Turn off debuginfo for build deps][2]: Increases build time (on my
machine) from ~230 s in 1.67.0 to ~250 s now, *which is unexpected*
This version also changes [handling of the `default-features` flag][3]
when specifying dependencies in `Cargo.toml`. If a dependent crate
requires `default-features = true` on a crate that is required as
`default-features = false` further up the dependency tree, the `true`
setting "wins". We only specify `default-features = false` for three
crates total:
- `names`: This is used only by us
- `surf`: This is used only by us
- `vte`: This is also required by `strip-ansi-escapes`, but that has
`default-features = false` as well
How this affects our transitive dependencies is unknown at this point.
[2]: https://github.com/rust-lang/cargo/pull/11252/
[3]: https://github.com/rust-lang/cargo/pull/11409/
* rust-toolchain: Bump toolchain version to 1.70.0
which, compared to the previous 1.69.0, as the following impacts on
`zellij`:
1. [Enable sparse registry checkout for crates.io by default][1]
This drastically increases the time to first build on a fresh rust
installation/a rust installation with a clean cargo registry cache.
Previously it took about 75s to populate the deps/cache (with `cargo
fetch --locked` and ~100 MBit/s network), whereas now the same process
takes ~10 s.
2. [The `OnceCell` type is now part of std][2]
In theory, this would allow us to cut a dependency from `zellij-utils`,
but the `once_cell` crate is pulled in by another 16 deps, so there's no
point in attempting it right now.
Build times and binary sizes are unaffected by this change compared to
the previous 1.69.0 toolchain.
[1]: https://github.com/rust-lang/cargo/pull/11791/
[2]: https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html
* rust-toolchain: Bump toolchain version to 1.75.0
which, compared to the previous 1.70.0, has the following impacts on
`zellij`:
1. [cross-crate inlining][8]
This should increase application performance, as functions can now be
inlined across crates.
2. [`async fn` in traits][9]
This would allow us to drop the `async_trait` dependency, but it is
currently still required by 3 other dependencies.
Build time in debug mode (on my own PC) is cut down from 256s to 189s
(for a clean build). Build time in release mode is cut down from 473s to
391s (for a clean build). Binary sizes only change minimally (825 MB ->
807 MB in debug, 29 MB -> 30 MB in release).
[8]: https://github.com/rust-lang/rust/pull/116505
[9]: https://github.com/rust-lang/rust/pull/115822/
* chore: Apply rustfmt.
* CHANGELOG: Add PR #3039.
* feat(plugins): introduce 'pipes', allowing users to pipe data to and control plugins from the command line (#3066)
* prototype - working with message from the cli
* prototype - pipe from the CLI to plugins
* prototype - pipe from the CLI to plugins and back again
* prototype - working with better cli interface
* prototype - working after removing unused stuff
* prototype - working with launching plugin if it is not launched, also fixed event ordering
* refactor: change message to cli-message
* prototype - allow plugins to send messages to each other
* fix: allow cli messages to send plugin parameters (and implement backpressure)
* fix: use input_pipe_id to identify cli pipes instead of their message name
* fix: come cleanups and add skip_cache parameter
* fix: pipe/client-server communication robustness
* fix: leaking messages between plugins while loading
* feat: allow plugins to specify how a new plugin instance is launched when sending messages
* fix: add permissions
* refactor: adjust cli api
* fix: improve cli plugin loading error messages
* docs: cli pipe
* fix: take plugin configuration into account when messaging between plugins
* refactor: pipe message protobuf interface
* refactor: update(event) -> pipe
* refactor - rename CliMessage to CliPipe
* fix: add is_private to pipes and change some naming
* refactor - cli client
* refactor: various cleanups
* style(fmt): rustfmt
* fix(pipes): backpressure across multiple plugins
* style: some cleanups
* style(fmt): rustfmt
* style: fix merge conflict mistake
* style(wording): clarify pipe permission
* docs(changelog): introduce pipes
* xtask: Disable pusing during publish (#3040)
* xtask: Add `--no-push` flag to `publish`
which can be used when simulating releases to work without a writable
git fork of the zellij code.
* xtask: Fix borrow issues
* xtask/pipe: Require lockfile in publish
to avoid errors from invalid dependency versions.
* CHANGELOG: Add PR #3040.
* fix(terminal): some real/saved cursor bugs during resize (#3032)
* refactor: Simplify transfer_rows_from_viewport_to_lines_above
next_lines is always consolidated to a single Row, which immediately
gets removed - we can remove some dead code as a result
* perf: Batch remove rows from the viewport for performance
Given a 1MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~9s to ~3s
* perf: Optimize Row::drain_until by splitting chars in one step
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~23s to ~20s
* refactor: Simplify `if let` into a `.map`
* refactor: There are only new saved coordinates when there were old ones
* refactor: Unify viewport transfer: use common variable names
* fix: Use same saved cursor logic in height resize as width
See #2182 for original introduction that only added it in one branch,
this fixes an issue where the saved cursor was incorrectly reset when
the real cursor was
* fix: Correct saved+real cursor calculations when reflowing long lines
* fix: Don't create canonical lines if cursor ends on EOL after resize
Previously if a 20 character line were split into two 10 character
lines, the cursor would be placed on the line after the two lines.
New characters would then be treated as a new canonical line. This
commit fixes this by biasing cursors to the end of the previous line.
* fix: for cursor index calculation in lines that are already wrapped
* chore: test for real/saved cursor position being handled separately
* chore: Apply cargo format
* chore(repo): update issue templates
* Bump rust version to 1.75.0 (#3039)
* rust-toolchain: Bump toolchain version to 1.69.0
which, compared to the previous 1.67.0, has the following impacts on
`zellij`:
- [Turn off debuginfo for build deps][2]: Increases build time (on my
machine) from ~230 s in 1.67.0 to ~250 s now, *which is unexpected*
This version also changes [handling of the `default-features` flag][3]
when specifying dependencies in `Cargo.toml`. If a dependent crate
requires `default-features = true` on a crate that is required as
`default-features = false` further up the dependency tree, the `true`
setting "wins". We only specify `default-features = false` for three
crates total:
- `names`: This is used only by us
- `surf`: This is used only by us
- `vte`: This is also required by `strip-ansi-escapes`, but that has
`default-features = false` as well
How this affects our transitive dependencies is unknown at this point.
[2]: https://github.com/rust-lang/cargo/pull/11252/
[3]: https://github.com/rust-lang/cargo/pull/11409/
* rust-toolchain: Bump toolchain version to 1.70.0
which, compared to the previous 1.69.0, as the following impacts on
`zellij`:
1. [Enable sparse registry checkout for crates.io by default][1]
This drastically increases the time to first build on a fresh rust
installation/a rust installation with a clean cargo registry cache.
Previously it took about 75s to populate the deps/cache (with `cargo
fetch --locked` and ~100 MBit/s network), whereas now the same process
takes ~10 s.
2. [The `OnceCell` type is now part of std][2]
In theory, this would allow us to cut a dependency from `zellij-utils`,
but the `once_cell` crate is pulled in by another 16 deps, so there's no
point in attempting it right now.
Build times and binary sizes are unaffected by this change compared to
the previous 1.69.0 toolchain.
[1]: https://github.com/rust-lang/cargo/pull/11791/
[2]: https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html
* rust-toolchain: Bump toolchain version to 1.75.0
which, compared to the previous 1.70.0, has the following impacts on
`zellij`:
1. [cross-crate inlining][8]
This should increase application performance, as functions can now be
inlined across crates.
2. [`async fn` in traits][9]
This would allow us to drop the `async_trait` dependency, but it is
currently still required by 3 other dependencies.
Build time in debug mode (on my own PC) is cut down from 256s to 189s
(for a clean build). Build time in release mode is cut down from 473s to
391s (for a clean build). Binary sizes only change minimally (825 MB ->
807 MB in debug, 29 MB -> 30 MB in release).
[8]: https://github.com/rust-lang/rust/pull/116505
[9]: https://github.com/rust-lang/rust/pull/115822/
* chore: Apply rustfmt.
* CHANGELOG: Add PR #3039.
* feat(plugins): introduce 'pipes', allowing users to pipe data to and control plugins from the command line (#3066)
* prototype - working with message from the cli
* prototype - pipe from the CLI to plugins
* prototype - pipe from the CLI to plugins and back again
* prototype - working with better cli interface
* prototype - working after removing unused stuff
* prototype - working with launching plugin if it is not launched, also fixed event ordering
* refactor: change message to cli-message
* prototype - allow plugins to send messages to each other
* fix: allow cli messages to send plugin parameters (and implement backpressure)
* fix: use input_pipe_id to identify cli pipes instead of their message name
* fix: come cleanups and add skip_cache parameter
* fix: pipe/client-server communication robustness
* fix: leaking messages between plugins while loading
* feat: allow plugins to specify how a new plugin instance is launched when sending messages
* fix: add permissions
* refactor: adjust cli api
* fix: improve cli plugin loading error messages
* docs: cli pipe
* fix: take plugin configuration into account when messaging between plugins
* refactor: pipe message protobuf interface
* refactor: update(event) -> pipe
* refactor - rename CliMessage to CliPipe
* fix: add is_private to pipes and change some naming
* refactor - cli client
* refactor: various cleanups
* style(fmt): rustfmt
* fix(pipes): backpressure across multiple plugins
* style: some cleanups
* style(fmt): rustfmt
* style: fix merge conflict mistake
* style(wording): clarify pipe permission
* docs(changelog): introduce pipes
* fix: add some robustness and future proofing
* fix e2e tests
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: har7an <99636919+har7an@users.noreply.github.com>
* fix integer overflow again (oops)
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: har7an <99636919+har7an@users.noreply.github.com>
* xtask/pipeline: Fix publish task
which was previously stuck in an infinite loop after successfully
publishing a crate. The error originated in the code only checking for
error conditions but not breaking out of the inner infinite loop in case
of success.
* xtask: Improve publish failure UX
by offering the user more actions to choose from when an error occured.
* utils/assets: Add generated prost files to assets
to make sure they're available at build time and are picked up by all
components. It seems we hit some strange bug with the build script
where, when running `cargo publish --dry-run` the build script **is
not** run before regularly compiling zellij-utils. This shouldn't happen
according to the docs, but I cannot explain what's causing it. So we're
using this as a workaround for now to make a smooth release.
* xtask: Prevent accidental git commit deletion
when dry-running a publish.
* utils: Add comments to protobuf-related code
to explain why these changes were performed. The comments all include a
link to an issue comment explaining the situation in greater detail.
* xtask: Build protobuf definitions
when building any part of the project, similar to how we build the
plugins when required. This should ensure that all crates built through
`cargo xtask` (which is the officially supported build method) will
receive up-to-date protobuf definitions.
* rust: Update toolchain version to 1.67
* xtask/pipeline/publish: Drop manual "wait"
for crates.io to catch up, which is obsolete with rust 1.66 and up.
Cargo does that on its own now. See
https://github.com/rust-lang/cargo/pull/11062
* xtask: Add function to obtain asset_dir
instead of assembling it on demand throughout the codebase.
* xtask/run: Add '--quick-run' flag
as a convenient shorthand for `cargo xtask run --data-dir
$PROJECT_ROOT/zellij-utils/assets`.
* cargo: Add 'q' command alias
as a shorthand for 'cargo xtask run --quick-run'
* cargo: Update thiserror to 1.0.40
* cargo: Update anyhow to 1.0.70
and specify dependency only once inside `zellij-utils`, not inside the
zellij root crate.
* cargo: Update names to 0.14.0
* cargo: Update miette to 5.7.0
and re-export the dependency from zellij-utils, to avoid duplicate
(incompatible) includes from inside zellij-utils and the root crate.
* cargo: Update dialoguer to 0.10.4
* fix formatting
* changelog: Add PR #2375
- avoid building all workspace crates with `cargo x build` (only plugins and main binary)
- only set the target triple in tests for plugins
- add new profile for `cargo x run` to build with optimized dependencies => FAST plugins when developing (thanks [Bevy Book](https://bevyengine.org/learn/book/getting-started/setup/#compile-with-performance-optimizations) for the idea)
- use https://github.com/Swatinem/rust-cache to avoid rebuilding dependencies every time in ci
- split `Build & Test` job into two so they run in parallel
- hopefully improve the flaky tests situation, this also makes the e2e tests run much faster (some tests produced correct snapshots but had some logic errors causing them to loop for much longer than necessary). Add some output to the tests so it is easier to see if something goes wrong.
- remove verbose build output from e2e test build
* xtask: Add arguments to `publish`
that allow specifying a custom git remote to push to and a custom cargo
registry to publish packages to.
* xtask/publish: Don't release `xtask` subcrate
because it's not meant to be released at all.
* xtask/publish: Add status messages to publish
so we see what crate is currently being published, too.
* xtask/publish: Disable default features on `zellij`
because otherwise it tries to pick up the debug builds of the plugins,
which aren't part of released version of `zellij utils`.
* xtask/publish: Fix handling of custom registry
* docs: Add `RELEASE.md`
which explains how to simulate a zellij release.
* xtask: Apply rustfmt
* xtask: Remove `wasm-opt` from build steps
because recent versions cause havoc in the release process in GitHub
pipelines and it's primary goal is to only reduce binary size. Current
rust versions seem to produce very compact wasm binaries themselves,
though.
* .github: Don't install wasm-opt in workflows
* xtask: Implement a new build system
xtask is a cargo alias that is used to extend the cargo build system
with custom commands. For an introduction to xtask, see here:
https://github.com/matklad/cargo-xtask/
The idea is that instead of writing makefiles, xtask requires no
additional dependencies except `cargo` and `rustc`, which must be
available to build the project anyway.
This commit provides a basic implementation of the `build` and `test`
subcommands.
* xtask/deps: Add 'which'
* xtask/test: Handle error when cargo not found
* xtask/flags: Add more commands
to perform different useful tasks. Includes:
- clippy
- format
- "make" (composite)
- "install" (composite)
Also add more options to `build` to selectively compile plugins or leave
them out entirely.
* xtask/main: Return error when cargo not found
* xtask/build: Add more subtasks
- `wasm_opt_plugins` and
- `manpage`
that perform other build commands. Add thorough documentation on what
each of these does and also handle the new `build` cli flags
appropriately.
* xtask/clippy: Add job to run clippy
* xtask/format: Add job to run rustfmt
* xtask/pipeline: Add composite commands
that perform multiple atomic xtask commands sequentially in a pipeline
sort of fashion.
* xtask/deps: Pin dependencies
* xtask/main: Integrate new jobs
and add documentation.
* xtask: Implement 'dist'
which performs an 'install' and copies the resulting zellij binary along
with some other assets to a `target/dist` folder.
* cargo: Update xflags version
* xtask: Measure task time, update tty title
* xtask: Update various tasks
* xtask: wasm-opt plugins in release builds
automatically.
* xtask/build: Copy debug plugins to assets folder
* xtask: Add 'run' subcommand
* xtask: Add arbitrary args to test and run
* xtask: Rearrange CLI commands in help
* xtask: Add deprecation notice
* docs: Replace `cargo make` with `xtask`
* github: Use `xtask` in workflows.
* xtask: Add support for CI commands
* xtask: Streamline error handling
* github: Use new xtask commands in CI
* xtask: Add 'publish' job
* xtask/publish: Add retry when publish fails
* xtask: Apply rustfmt
* xtask: Refine 'make' deprecation warning
* xtask: add task to build manpage
* contributing: Fix e2e commands
* xtask/run: Add missing `--`
to pass all arguments following `xtask run` directly to the zellij
binary being run.
* xtask: Stay in invocation dir
and make all tasks that need it change to the project root dir
themselves.
* xtask/run: Add `--data-dir` flag
which will allow very quick iterations when not changing the plugins
between builds.
* xtask/ci: Install dependencies without asking
* utils: Allow including plugins from target folder
* utils/assets: Reduce asset map complexity
* utils/consts: Update asset map docs
* xtask: Fix plugin includes
* xtask/test: Build plugins first
because the zellij binary needs to include the plugins.
* xtask/test: Fix formatting
* xtask: Add notice on how to disable it