# set quiet

# the following two commands are specific to use in a docker container or not
# if the command is run in a docker container, it will use the cargo installation inside the container (local development with docker use case)
# if the command is run outside a docker container, it will use the docker container to run the command inside the container (CI use case)
CMD := if path_exists('/.dockerenv') == "false" { 'docker run --rm -v $(pwd):/workspaces/creatorly -w /workspaces/creatorly rust-toolchain cargo' } else { 'cargo' }
CMD_TTY := if path_exists('/.dockerenv') == "false" { 'docker run -it --rm -v $(pwd):/app -w /app rust-toolchain cargo' } else { 'cargo' }

# build the docker image for ci
build-docker id:
    echo "Building Docker image..."
    docker build -t rust-toolchain -f .devcontainer/Dockerfile --build-arg UID={{ id }} .

# build the code
build *ARGS='':
    echo "Building..."
    {{ CMD }} build {{ARGS}}

# publish
publish version='0.0.0' *ARGS='':
    echo "Building for release V{{ version }}"
    sed -i 's/version = "[0-9.]*"$/version = "{{version}}"/' Cargo.toml
    {{ CMD }} publish --allow-dirty {{ARGS}}

check-format:
    echo "Checking formatting..."
    {{ CMD }} fmt --all -- --check

# format the code
format:
    echo "Formatting..."
    {{ CMD }} fmt --all

# lint the code
lint:
    echo "Linting..."
    {{ CMD }} clippy --all-targets --all-features -- -D warnings

# fix the code
fix *ARGS:
    echo "Fixing..."
    {{ CMD }} fix --allow-staged {{ARGS}}

# run the tests
test:
    echo "Testing..."
    {{ CMD }} test

# generate coverage
coverage:
    echo "Generating coverage..."
    {{ CMD }} llvm-cov --lcov --output-path lcov.info
