Skip to content

Instantly share code, notes, and snippets.

@8de2fdb0
Created June 27, 2025 05:48
Show Gist options
  • Select an option

  • Save 8de2fdb0/5ecc0d23d347e2b5cee0858ec2d9b90e to your computer and use it in GitHub Desktop.

Select an option

Save 8de2fdb0/5ecc0d23d347e2b5cee0858ec2d9b90e to your computer and use it in GitHub Desktop.
emulating cargo-leptos using cargo-make
[tasks.build-developoment]
command = "cargo"
args = ["build", "--bin=bastiond", "--no-default-features"]
[tasks.build-production]
condition = { profiles = ["production"] }
command = "cargo"
args = ["build", "--bin=backend", "--release", "--features=ssr"]
[tasks.build]
dependencies = ["build-production", "build-developoment"]
command = "echo"
args = ["Build completed successfully."]
[tasks.watch]
[env]
# this name is used for the wasm, js and css file names
LEPTOS_NAME = "bastiond"
LEPTOS_PKG_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/site/pkg"
LEPTOS_OUTPUT_NAME = "${LEPTOS_NAME}"
WORKSPACE_DIR = "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}"
[env]
BUILD_PROFILE = ""
FEATURES = ""
SASS_VERSION = "1.86.0"
TAILWIND_VERSION = "v4.0.17"
FRONT_TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/front"
[env.development]
FEATURES = "hydrate"
SASS_ARGS = [
"--no-source-map",
"${WORKSPACE_DIR}/style/main.scss",
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tmp/main.css",
]
TAILWIND_ARGS = [
"-i",
"${WORKSPACE_DIR}/style/tailwind.css",
"-o",
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tmp/tailwind.css",
"--cwd",
"${CARGO_MAKE_WORKING_DIRECTORY}",
]
WASM_FILE = "${FRONT_TARGET_DIR}/wasm32-unknown-unknown/debug/${CARGO_MAKE_CRATE_FS_NAME}.wasm"
[env.production]
BUILD_PROFILE = "--release"
FEATURES = "hydrate"
SASS_ARGS = [
"--no-source-map",
"--style=compressed",
"${WORKSPACE_DIR}/style/main.scss",
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY/tmp/main.css",
]
TAILWIND_ARGS = [
"--minify",
"-i",
"${WORKSPACE_DIR}/style/tailwind.css",
"-o",
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY/tmp/tailwind.css",
"--cwd",
"${CARGO_MAKE_WORKING_DIRECTORY}",
]
WASM_FILE = "${FRONT_TARGET_DIR}/wasm32-unknown-unknown/release/${CARGO_MAKE_CRATE_FS_NAME}.wasm"
[tasks.sass_install.linux]
condition = { platforms = ["linux"] }
env.CACHE_DIR = "${HOME)/.cache"
env.ASSET.source = "${CARGO_MAKE_RUST_TARGET_ARCH}"
env.ASSET.default_value = "unknown"
env.ASSET.mapping = { "x86_64" = "dart-sass-${SASS_VERSION}-linux-x64.tar.gz", "aarch64" = "dart-sass-${SASS_VERSION}-linux-arm64.tar.gz" }
install_script = '''
#!/usr/bin/env bash
set -euxo pipefail
if [ ! -f "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/sass-${SASS_VERSION}/sass" ]; then
echo "sass not found, installing..."
if [ ${ASSET} == "unknown" ]; then
echo "Unknown architecture ${CARGO_MAKE_RUST_TARGET_ARCH}, exiting..."
exit 1
fi
mkdir -p "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/sass-${SASS_VERSION}"
curl -L -o /tmp/sass.tgz "https://github.com/sass/dart-sass/releases/download/${SASS_VERSION}/${ASSET}"
tar -xzf /tmp/sass.tgz -C "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/sass-${SASS_VERSION}" --strip-components=1
rm /tmp/sass.tgz
fi
'''
[tasks.sass_install.mac]
command = "bash"
args = ["-c", "echo unimplemented"]
[tasks.sass_install.windows]
command = "bash"
args = ["-c", "echo unimplemented"]
[tasks.sass]
dependencies = ["sass_install"]
command = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/sass-${SASS_VERSION}/sass"
args = ["@@split(SASS_ARGS,;)"]
[tasks.tailwind_install.linux]
env.CACHE_DIR = "${HOME)/.cache"
env.ASSET.source = "${CARGO_MAKE_RUST_TARGET_ARCH}"
env.ASSET.default_value = "unknown"
env.ASSET.mapping = { "x86_64" = "tailwindcss-linux-x64", "aarch64" = "tailwindcss-linux-arm64" }
install_script = '''
#!/usr/bin/env bash
set -euxo pipefail
if [ ! -f "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/tailwind-${TAILWIND_VERSION}/tailwindcss" ]; then
echo "tailwind not found, installing..."
if [ ${ASSET} == "unknown" ]; then
echo "Unknown architecture ${CARGO_MAKE_RUST_TARGET_ARCH}, exiting..."
exit 1
fi
URL="https://github.com/tailwindlabs/tailwindcss/releases/download/${TAILWIND_VERSION}/${ASSET}"
mkdir -p "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/tailwind-${TAILWIND_VERSION}"
curl -L -o "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/tailwind-${TAILWIND_VERSION}"/tailwindcss ${URL}
chmod +x "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/tailwind-${TAILWIND_VERSION}"/tailwindcss
fi
'''
[tasks.tailwind_install.mac]
command = "bash"
args = ["-c", "echo unimplemented"]
[tasks.tailwind_install.windows]
command = "bash"
args = ["-c", "echo unimplemented"]
[tasks.tailwind]
dependencies = ["tailwind_install"]
env = { DEBUG = "1" }
command = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tools/tailwind-${TAILWIND_VERSION}/tailwindcss"
args = ["@@split(TAILWIND_ARGS,;)"]
[tasks.style]
dependencies = ["sass", "tailwind"]
script = '''
#!/usr/bin/env bash
set -euxo pipefail
SOURCE_DIR="${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/tmp"
cat "${SOURCE_DIR}/main.css" "${SOURCE_DIR}/tailwind.css" > "${LEPTOS_PKG_DIR}/${LEPTOS_NAME}.css"
'''
[tasks.build_front]
command = "cargo"
args = [
"build",
"--lib",
"--target-dir=${FRONT_TARGET_DIR}",
"--target=wasm32-unknown-unknown",
"--features=${FEATURES}",
"@@remove-empty(BUILD_PROFILE)",
]
[tasks.bindgen]
dependencies = ["build_front"]
command = "wasm-bindgen"
args = [
"--out-dir=${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/site/pkg",
"--target=web",
"--no-typescript",
"--out-name=${LEPTOS_NAME}",
"${WASM_FILE}",
]
# rename emitted wasm output file name from {output_name}_bg.wasm to {output_name}.wasm for
# backward compatibility with leptos' `HydrationScripts`
[tasks.post-bindgen]
script = '''
#!/usr/bin/env bash
set -euxo pipefail
SOURCE_NAME="${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/site/pkg/${LEPTOS_NAME}_bg.wasm"
DEST_NAME="${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/site/pkg/${LEPTOS_NAME}.wasm"
echo "Renaming ${SOURCE_NAME} to ${DEST_NAME}"
mv "${SOURCE_NAME}" "${DEST_NAME}"
'''
[tasks.build]
dependencies = ["bindgen", "post-bindgen", "style"]
command = "echo"
args = ["Build completed successfully."]
[tasks.watch]
dependencies = ["style"]
watch = true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment