# Build the local development build
[group('build')]
build:
    cargo build --frozen --workspace
alias b := build

# Build release binaries for the supported architectures
[group('build')]
build-release:
    cargo build \
        --release \
        --frozen \
        --workspace \
        --target x86_64-unknown-linux-musl \
        --target aarch64-unknown-linux-musl

# Run all tests in the workspace
test:
    cargo test --frozen --workspace
alias t := test

# Run cargofmt and clippy
check:
    cargo fmt --check --all
    cargo clippy \
        --frozen \
        --all -- \
        --no-deps \
        --deny 'clippy::all'
alias c := check
alias lint := check

fetch:
    cargo fetch --locked

clean:
    cargo clean

doc:
    cargo doc --workspace --frozen

run:
    mkdir -p data
    cargo run --frozen --package alex -- run \
        --config data/config \
        --backup data/backups \
        --world data/worlds \
        --jar ./paper-1.21.5-77.jar \
        --java '/usr/lib/jvm/java-21-openjdk/bin/java' \
        --layers '2min,2,4,4;3min,3,2,2'

# Package the static release binaries as a Debian package
[group('package')]
package-deb: build-release
    cargo deb \
        --package alex \
        --frozen \
        --no-build \
        --target x86_64-unknown-linux-musl \
        --target aarch64-unknown-linux-musl

# Publish the binaries and packages for a new release
[group('package')]
publish-release tag: build-release package-deb
    # Check the binaries are proper static binaries
    [ "$(readelf -d target/x86_64-unknown-linux-musl/release/alex | grep NEEDED | wc -l)" = 0 ]
    [ "$(readelf -d target/aarch64-unknown-linux-musl/release/alex | grep NEEDED | wc -l)" = 0 ]

    curl \
        --parallel --fail-early \
        --netrc --upload-file target/x86_64-unknown-linux-musl/release/alex \
        https://git.rustybever.be/api/packages/Chewing_Bever/generic/alex/"{{ tag }}"/alex-linux-amd64 \
        --next \
        --netrc --upload-file target/aarch64-unknown-linux-musl/release/alex \
        https://git.rustybever.be/api/packages/Chewing_Bever/generic/alex/"{{ tag }}"/alex-linux-arm64 \
        --next \
        --netrc --upload-file target/debian/alex_{{ tag }}-1_amd64.deb \
        https://git.rustybever.be/api/packages/Chewing_Bever/debian/pool/any/main/upload \
        --next \
        --netrc --upload-file target/debian/alex_{{ tag }}-1_arm64.deb \
        https://git.rustybever.be/api/packages/Chewing_Bever/debian/pool/any/main/upload > /dev/null
