Created
June 27, 2025 05:48
-
-
Save 8de2fdb0/5ecc0d23d347e2b5cee0858ec2d9b90e to your computer and use it in GitHub Desktop.
emulating cargo-leptos using cargo-make
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [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] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [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}" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [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