# https://github.com/casey/just # Setup set export set positional-arguments set dotenv-load # Variables PACKAGE_NAME := `cargo metadata --format-version 1 --no-deps | jq '.packages[0].name'` PACKAGE_VERSION := `cargo metadata --format-version 1 --no-deps | jq '.packages[0].version'` # gitlab container registry REGISTRY_URL := 'registry.gitlab.com/caratland4/ue/crl5-service-ue' # local microservice port DEFAULT_PORT := '8080' # telepresence into targetted remote container port TP_CONTAINER_PORT := '8080' # used by telepresence K8S_DEV_NAMESPACE :='rust-dev' # used by telepresence K8S_DEV_CONTEXT :='k3d-crl5-dev0' # Commands # Initialize configs for project's git commands init-git: git config --global push.followTags true git flow init jq --version loc --version # Start default development environment dev: dev-tp dev-local # Start local development environment @dev-local: RUST_LOG=debug cargo watch -i *.log -x run # Commit and push @dev-commit COMMIT_MESSAGE: cargo fmt cargo clippy git commit -am "{{COMMIT_MESSAGE}}" git tag -a v{{PACKAGE_VERSION}} -m "{{COMMIT_MESSAGE}}" cargo set-version --bump patch git push origin develop loc # glab ci status --live @publish-dry: cargo publish --dry-run --allow-dirty @publish: cargo publish --allow-dirty # Setup multi-platform builder @docker-build-prep: docker buildx ls docker buildx create --use docker buildx inspect --bootstrap # Build and push to container registry @docker-build-push: docker buildx build --platform linux/amd64 \ --cache-from {{REGISTRY_URL}}:latest \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --build-arg DOCKER_BUILDKIT=1 \ --tag {{REGISTRY_URL}}:latest \ --tag {{REGISTRY_URL}}:{{PACKAGE_VERSION}} \ --progress=plain \ --push . # docker buildx build --platform linux/amd64,linux/arm64 \ # Prune unused docker images @dev-clean: echo 'y' | docker system prune # Run container locally @dev-run: docker container run -p {{DEFAULT_PORT}}:{{DEFAULT_PORT}} {{REGISTRY_URL}}:latest # Deploy to development cluster @dev-deploy: kubectl apply -f manifests/network kubectl apply -f manifests/package # Remove deployment to development cluster @dev-undeploy: kubectl delete -f manifests/package # Deploy Redis cluster to development cluster @dev-redis: kubectl apply -f manifests/redis # Dive into container shell for debugging dev-exec: docker exec -it {{REGISTRY_URL}}:latest /bin/sh # Start telepresence development into remote kubernetes cluster @dev-tp: kubectx {{K8S_DEV_CONTEXT}} telepresence connect kubens {{K8S_DEV_NAMESPACE}} telepresence list telepresence intercept {{PACKAGE_NAME}} --port {{DEFAULT_PORT}}:{{TP_CONTAINER_PORT}} telepresence status # Leave telepresence session and remove agents @dev-tp-clean: kubectx {{K8S_DEV_CONTEXT}} kubens {{K8S_DEV_NAMESPACE}} telepresence status telepresence leave {{PACKAGE_NAME}} telepresence uninstall --agent {{PACKAGE_NAME}} --namespace {{K8S_DEV_NAMESPACE}} telepresence quit # Gitlab merge request to Stage branch @stage-mr MR_MESSAGE: glab mr create --fill --fill-commit-body --source-branch develop --target-branch stage --assignee me --web --title "{{MR_MESSAGE}}" # Gitlab merge request to Production branch @prod-mr MR_MESSAGE: glab mr create --fill --fill-commit-body --source-branch stage --target-branch prod --assignee me --web --title "{{MR_MESSAGE}}" # Install tools in CI ci-install: cargo install just cargo install cargo-metadata # Test in CI ci-test: cargo test # Output .version file for CI ci-version: echo {{PACKAGE_VERSION}} > .version # Lint source code @lint: cargo clippy # Build for release @build: cargo build --release # Semantic version bump up patch @sv-patch: cargo set-version --bump patch # Semantic version bump up minor @sv-minor: cargo set-version --bump minor # Semantic version bump up major @sv-major: cargo set-version --bump major # Output package version @pkg-ver: @echo {{PACKAGE_VERSION}} # Cargo test # https://nexte.st/book/usage.html @test: RUST_LOG=info cargo watch -d 2 -x "nextest run --test-threads=1" # Cargo documentation @doc: cargo doc --open # List possible commands @default: echo "List of commands" just --list