# Global Settings [env] CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = true CARGO_TARGET_DIR = "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/target" SKIP_TEST = false ZELLIJ_EXAMPLE_DIR = "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/example" ZELLIJ_ASSETS_DIR = "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/zellij-utils/assets" # Add clippy to the default flow [tasks.dev-test-flow] dependencies = [ "format-flow", "format-toml-conditioned-flow", "pre-build", "build", "post-build", "test-flow", "clippy", ] [tasks.test] dependencies = ["get-host-triple"] args = ["test", "--target", "${CARGO_HOST_TRIPLE}", "--", "@@split(CARGO_MAKE_TASK_ARGS,;)"] # Running Zellij using the development data directory [tasks.run] workspace = false dependencies = ["build-workspace", "build-dev-data-dir"] run_task = "launch" [tasks.build-workspace] run_task = { name = "build", fork = true } [tasks.build] args = ["build"] [tasks.build-release] args = ["build", "--release"] [tasks.build-dev-data-dir] dependencies = ["build-plugins"] script_runner = "@duckscript" script = ''' target_dir = set ${CARGO_TARGET_DIR} data_dir = set ${target_dir}/dev-data rm -r ${data_dir} plugins = glob_array ${target_dir}/wasm32-wasi/debug/*.wasm mkdir ${data_dir} mkdir ${data_dir}/plugins for plugin in ${plugins} plugin_name = basename ${plugin} cp ${plugin} ${data_dir}/plugins/${plugin_name} end writefile ${data_dir}/VERSION ${CARGO_MAKE_CRATE_VERSION} ''' [tasks.build-e2e-data-dir] dependencies = ["build-plugins-release"] script_runner = "@duckscript" script = ''' target_dir = set ${CARGO_TARGET_DIR} data_dir = set ${target_dir}/e2e-data rm -r ${data_dir} plugins = glob_array ${target_dir}/wasm32-wasi/release/*.wasm mkdir ${data_dir} mkdir ${data_dir}/plugins for plugin in ${plugins} plugin_name = basename ${plugin} cp ${plugin} ${data_dir}/plugins/${plugin_name} end writefile ${data_dir}/VERSION ${CARGO_MAKE_CRATE_VERSION} ''' [tasks.launch] command = "cargo" args = [ "run", "--", "--data-dir", "${CARGO_TARGET_DIR}/dev-data/", "@@split(CARGO_MAKE_TASK_ARGS,;)", ] # Simple clippy tweak [tasks.clippy] args = ["clippy", "--all-targets", "--all-features", "@@split(CARGO_MAKE_TASK_ARGS,;)"] # Release building and installing Zellij [tasks.install] workspace = false dependencies = ["wasm-opt-plugins", "build-release", "manpage"] script_runner = "@duckscript" script = ''' if is_dir ${CARGO_MAKE_TASK_ARGS} trigger_error "You need to specify a full path for the binary, not just a directory!" else cp ${CARGO_TARGET_DIR}/release/${CARGO_MAKE_CRATE_NAME} ${CARGO_MAKE_TASK_ARGS} end ''' [tasks.build-plugins-release] env = { "CARGO_MAKE_WORKSPACE_INCLUDE_MEMBERS" = [ "default-plugins/compact-bar", "default-plugins/status-bar", "default-plugins/strider", "default-plugins/tab-bar", ] } run_task = { name = "build-release", fork = true } [tasks.build-plugins] env = { "CARGO_MAKE_WORKSPACE_INCLUDE_MEMBERS" = [ "default-plugins/compact-bar", "default-plugins/status-bar", "default-plugins/strider", "default-plugins/tab-bar", ] } run_task = { name = "build", fork = true } [tasks.get-host-triple] script_runner = "@duckscript" script = ''' output = exec rustc -v -V lines = split ${output.stdout} \n triple = set "" for line in ${lines} if starts_with ${line} "host:" && not is_empty ${line} bits = split ${line} " " triple = array_get ${bits} 1 triple = set ${triple} end end if not is_empty ${triple} set_env CARGO_HOST_TRIPLE "${triple}" end ''' [tasks.wasm-opt-plugins] dependencies = ["build-plugins-release"] script_runner = "@duckscript" script = ''' plugins = glob_array ${CARGO_TARGET_DIR}/wasm32-wasi/release/*.wasm for plugin in ${plugins} mkdir ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/assets/plugins/ plugin_name = basename ${plugin} plugin_out = set ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/assets/plugins/${plugin_name} exec wasm-opt -O ${plugin} -o ${plugin_out} end ''' [tasks.manpage] workspace = false description = "Use mandown crate to create or update man entry from docs/MANPAGES.md" script = ''' root_dir=${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY} mkdir -p ${root_dir}/assets/man mandown ${root_dir}/docs/MANPAGE.md ZELLIJ 1 > ${root_dir}/assets/man/zellij.1 ''' dependencies = ["install-mandown"] [tasks.install-mandown] command = "cargo" args = ["install", "mandown"] # copy the example default config from assets directory to a more user facing one [tasks.update-default-config] workspace = false dependencies = [] script_runner = "@duckscript" script = ''' cp ${ZELLIJ_ASSETS_DIR}/config/default.kdl ${ZELLIJ_EXAMPLE_DIR}/default.kdl ''' # CI Releasing Zellij [tasks.ci-build-release] workspace = false dependencies = [ "setup-cross-compilation", "build-plugins-release", "wasm-opt-plugins", "manpage", ] command = "cross" args = [ "build", "--verbose", "--release", "--target", "${CARGO_MAKE_TASK_ARGS}", ] # Build e2e asset [tasks.build-e2e] workspace = false dependencies = ["build-plugins-release", "build-e2e-data-dir"] command = "cargo" args = [ "build", "--verbose", "--release", "--target", "x86_64-unknown-linux-musl", ] # Run e2e tests - we mark the e2e tests as "ignored" so they will not be run with the normal ones [tasks.e2e-test] workspace = false dependencies = ["build-e2e"] command = "cargo" args = [ "test", "--", "--ignored", "--nocapture", "--test-threads", "1", "@@split(CARGO_MAKE_TASK_ARGS,;)", ] [tasks.setup-cross-compilation] command = "cargo" args = ["install", "cross"] # Publishing Zellij [tasks.publish] clear = true workspace = false dependencies = [ "update-default-config", "build-plugins-release", "wasm-opt-plugins", "release-commit", ] run_task = "publish-zellij" [tasks.release-commit] dependencies = ["commit-all", "tag-release"] command = "git" args = ["push", "--atomic", "origin", "main", "v${CARGO_MAKE_CRATE_VERSION}"] [tasks.commit-all] ignore_errors = true command = "git" args = ["commit", "-aem", "chore(release): v${CARGO_MAKE_CRATE_VERSION}"] [tasks.tag-release] command = "git" args = ["tag", "--annotate", "--message", "Version ${CARGO_MAKE_CRATE_VERSION}", "v${CARGO_MAKE_CRATE_VERSION}"] [tasks.publish-zellij-tile] ignore_errors = true cwd = "zellij-tile" script = "cargo publish && sleep 15" [tasks.publish-zellij-client] ignore_errors = true dependencies = ["publish-zellij-utils"] cwd = "zellij-client" script = "cargo publish && sleep 15" [tasks.publish-zellij-server] ignore_errors = true dependencies = ["publish-zellij-utils"] cwd = "zellij-server" script = "cargo publish && sleep 15" [tasks.publish-zellij-utils] ignore_errors = true dependencies = ["publish-zellij-tile"] cwd = "zellij-utils" script = "cargo publish && sleep 15" [tasks.publish-zellij-tile-utils] ignore_errors = true cwd = "zellij-tile-utils" script = "cargo publish && sleep 15" [tasks.publish-zellij] dependencies = [ "publish-zellij-client", "publish-zellij-server", "publish-zellij-utils", ] command = "cargo" args = ["publish"]