asterinas/test/nixos/Makefile

97 lines
2.9 KiB
Makefile

# SPDX-License-Identifier: MPL-2.0
NIXOS_TEST_SUITE ?=
NIXOS_TEST_CASE ?=
NIXOS_TEST_TIMEOUT ?= 5min
# Generated configuration file name
TEST_CONFIG_FILE_NAME := _configuration_for_test.nix
# Paths
MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
ASTERINAS_ROOT := $(MAKEFILE_DIR)/../..
NIXOS_CONFIG_DIR := $(ASTERINAS_ROOT)/distro/etc_nixos
BASE_CONFIG := $(NIXOS_CONFIG_DIR)/configuration.nix
TEST_CONFIG := $(NIXOS_CONFIG_DIR)/$(TEST_CONFIG_FILE_NAME)
MERGE_SCRIPT := $(ASTERINAS_ROOT)/test/nixos/common/merge_nixos_config.sh
# NixOS build and run scripts
BUILD_ISO_SCRIPT := $(ASTERINAS_ROOT)/tools/nixos/build_iso.sh
BUILD_NIXOS_SCRIPT := $(ASTERINAS_ROOT)/tools/nixos/build_nixos.sh
RUN_SCRIPT := $(ASTERINAS_ROOT)/tools/nixos/run.sh
# Test directory structure
TEST_DIR := tests/$(NIXOS_TEST_SUITE)
EXTRA_CONFIG := $(TEST_DIR)/extra_config.nix
.PHONY: check-test-name
check-test-name:
@if [ -z "$(NIXOS_TEST_SUITE)" ]; then \
echo "Error: NIXOS_TEST_SUITE is not set"; \
echo "Usage: make [target] NIXOS_TEST_SUITE=<test_name>"; \
exit 1; \
fi
@if [ ! -d "$(TEST_DIR)" ]; then \
echo "Error: Test directory '$(TEST_DIR)' does not exist"; \
exit 1; \
fi
.PHONY: prepare
prepare: check-test-name
@echo "==> Preparing configuration for test '$(NIXOS_TEST_SUITE)'..."
@if [ -f "$(EXTRA_CONFIG)" ]; then \
echo " Found extra config: $(EXTRA_CONFIG)"; \
echo " Merging configurations..."; \
bash "$(MERGE_SCRIPT)" "$(BASE_CONFIG)" "$(EXTRA_CONFIG)" "$(TEST_CONFIG)"; \
if [ $$? -ne 0 ]; then \
echo "Error: Configuration merge failed"; \
rm "$(TEST_CONFIG)"; \
exit 1; \
fi; \
else \
echo " No extra config found, using base configuration"; \
cp "$(BASE_CONFIG)" "$(TEST_CONFIG)"; \
fi
.PHONY: iso
iso: prepare
@echo "==> Building ISO installer for test '$(NIXOS_TEST_NAME)'..."
@echo " Building ISO installer...";
@bash "$(BUILD_ISO_SCRIPT)" "$(TEST_CONFIG_FILE_NAME)";
@if [ $$? -ne 0 ]; then \
echo "Error: ISO build failed"; \
rm "$(TEST_CONFIG)"; \
exit 1; \
fi
@rm "$(TEST_CONFIG)";
.PHONY: nixos
nixos: prepare
@echo "==> Building NixOS image for test '$(NIXOS_TEST_NAME)'..."
@bash "$(BUILD_NIXOS_SCRIPT)" "$(TEST_CONFIG_FILE_NAME)";
@if [ $$? -ne 0 ]; then \
echo "Error: NixOS build failed"; \
rm "$(TEST_CONFIG)"; \
exit 1; \
fi
@rm "$(TEST_CONFIG)";
.PHONY: run_nixos
run_nixos: check-test-name
@cd "$(TEST_DIR)" && \
TEST_CASE_ARG=""; \
if [ -n "$(NIXOS_TEST_CASE)" ]; then \
TEST_CASE_ARG="--test $(NIXOS_TEST_CASE)"; \
fi; \
QEMU_CMD="bash $(RUN_SCRIPT) nixos"; \
cargo run -- --qemu-cmd "$$QEMU_CMD" $$TEST_CASE_ARG || \
exit 1
.PHONY: check
check:
@cargo clippy -- -D warnings
.PHONY: format
format:
@cargo fmt
@nixfmt .