#!/usr/bin/env just --justfile
# vars
name := "ferric_crypto_lib"
version := "0.2.6"
python_tag := "cp311"
abi_tag := "cp311"
platform_tag := "manylinux_2_34_x86_64"
# default to build both the Rust library and the whl file
default: build build-py-all
# Command to create all bioler plate code for a new crypto system
add-algo name:
@echo "Creating a new crypto system: {{name}}"
@sed "s/name/{{name}}/g; s/lower/{{lowercase(name)}}/g" templates/crypto_def_template.rs > src/crypto_systems/{{lowercase(name)}}.rs
@echo "pub mod {{lowercase(name)}};\n" >> src/crypto_systems/mod.rs
@sed "s/name/{{name}}/g; s/lower/{{lowercase(name)}}/g" templates/crypto_bf_template.rs > src/brute_force/{{lowercase(name)}}.rs
@echo "pub mod {{lowercase(name)}};\n" >> src/brute_force/mod.rs
@sed "s/name/{{name}}/g; s/lower/{{lowercase(name)}}/g" templates/crypto_encrypt_template.rs > src/encrypt/{{lowercase(name)}}.rs
@echo "pub mod {{lowercase(name)}};\n" >> src/encrypt/mod.rs
@sed "s/name/{{name}}/g; s/lower/{{lowercase(name)}}/g" templates/crypto_decrypt_template.rs > src/decrypt/{{lowercase(name)}}.rs
@echo "pub mod {{lowercase(name)}};\n" >> src/decrypt/mod.rs
@echo $(sed "s/name/{{name}}/g; s/lower/{{lowercase(name)}}/g" templates/error_template.rs) >> src/error.rs
# Command to build the Rust library
build: clean
@echo "Building the Rust library"
@cargo build --release
# command to test the Rust library
test:
@echo "Testing the Rust library"
@cargo test
build-py: clean-py
@echo "Building the whl file"
maturin build --release --manylinux {{platform_tag}}
# Command to build the whl file
build-py-all: clean-py
@echo "Building the whl files for multiple Python versions"
./build-py.sh
# command to install the whl file
install-py: build-py
@echo "Installing the whl file"
pip install --force-reinstall target/wheels/{{name}}-{{version}}-{{python_tag}}-{{abi_tag}}-{{platform_tag}}.whl
# command to uninstall the whl file
uninstall-py:
@echo "Uninstalling the whl file"
pip uninstall -y target/wheels/{{name}}-{{version}}-{{python_tag}}-{{abi_tag}}-{{platform_tag}}.whl
publish-py: build-py-all
@echo "Publishing the whl file"
@twine upload target/wheels/*.whl
publish-local-py: build-py-all
@devpi login root --password ''
@devpi use root/local
@devpi upload --formats=bdist_wheel target/wheels/*.whl
# command to publish to crates.io
publish:
@echo "Publishing to crates.io"
@cargo publish
# command to publish all targets
publish-all: publish publish-py
# command to build the docs
docs:
@echo "Building the docs"
@cargo doc --no-deps --document-private-items --open --release
# command to clean the build directory (target)
clean:
@echo "Removing the target directory"
@cargo clean || true
clean-py:
@echo "Removing all wheels"
@rm target/wheels/* || true
# command to display number of lines of code written in Rust
loc:
@echo "Number of lines of code written in Rust"
@cloc . --include-lang=Rust --exclude-dir=target