diff --git a/.github/workflows/test-mlc-core-actions.yaml b/.github/workflows/test-mlc-core-actions.yaml new file mode 100644 index 000000000..5791d6c14 --- /dev/null +++ b/.github/workflows/test-mlc-core-actions.yaml @@ -0,0 +1,124 @@ +name: MLC core actions test + +on: + pull_request: + branches: [ "main", "dev" ] + paths: + - '.github/workflows/test-mlc-core-actions.yml' + - '**' + - '!**.md' + +jobs: + test_mlc_core_actions: + + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ["3.12", "3.8"] + os: ["ubuntu-latest", "windows-latest", "macos-latest"] + exclude: + - os: windows-latest + - os: macos-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + + - name: Configure git longpaths (Windows) + if: matrix.os == 'windows-latest' + run: | + git config --system core.longpaths true + + - name: Install mlcflow from the pull request's source repository and branch + run: | + python -m pip install --upgrade pip + python -m pip install --ignore-installed --verbose pip setuptools + python -m pip install . + + - name: Test 1 - pull repo - Pull a forked MLOps repository + run: | + GH_MLC_REPO_PATH_FORK="${HOME}/MLC/repos/anandhu-eng@mlperf-automations" + GH_MLC_REPO_JSON_PATH="${HOME}/MLC/repos/repos.json" + mlc pull repo anandhu-eng@mlperf-automations --checkout=dev + if [ ! -d "${GH_MLC_REPO_PATH_FORK}" ]; then + echo "Repository folder $GH_MLC_REPO_PATH_FORK not found. Exiting with failure." + exit 1 + fi + if [ ! -f "$GH_MLC_REPO_JSON_PATH" ]; then + echo "File $GH_MLC_REPO_JSON_PATH does not exist. Exiting with failure." + exit 1 + fi + if ! grep -q "$GH_MLC_REPO_PATH_FORK" "$GH_MLC_REPO_JSON_PATH"; then + echo "Path $GH_MLC_REPO_PATH_FORK not found in $GH_MLC_REPO_JSON_PATH. Exiting with failure." + exit 1 + fi + CURRENT_BRANCH=$(git -C "$GH_MLC_REPO_PATH_FORK" rev-parse --abbrev-ref HEAD) + if [ "$CURRENT_BRANCH" != "dev" ]; then + echo "Expected branch 'dev', but found '$CURRENT_BRANCH'. Exiting with failure." + exit 1 + fi + + + - name: Test 2 - pull repo - Test conflicting repo scenario + run: | + GH_MLC_REPO_PATH="${HOME}/MLC/repos/mlcommons@mlperf-automations" + GH_MLC_REPO_JSON_PATH="${HOME}/MLC/repos/repos.json" + mlc pull repo mlcommons@mlperf-automations --checkout=dev + if [ ! -d "$GH_MLC_REPO_PATH" ]; then + echo "Repository folder $GH_MLC_REPO_PATH not found. Exiting with failure." + exit 1 + fi + if [ ! -f "$GH_MLC_REPO_JSON_PATH" ]; then + echo "File $GH_MLC_REPO_JSON_PATH does not exist. Exiting with failure." + exit 1 + fi + if ! grep -q "$GH_MLC_REPO_PATH" "$GH_MLC_REPO_JSON_PATH"; then + echo "Path $GH_MLC_REPO_PATH not found in $GH_MLC_REPO_JSON_PATH. Exiting with failure." + exit 1 + fi + if ! grep -q "$GH_MLC_REPO_PATH_FORK" "$GH_MLC_REPO_JSON_PATH"; then + echo "Path $GH_MLC_REPO_PATH_FORK also found in $GH_MLC_REPO_JSON_PATH. This should have been replaced. Exiting with failure." + exit 1 + fi + CURRENT_BRANCH=$(git -C "$GH_MLC_REPO_PATH" rev-parse --abbrev-ref HEAD) + if [ "$CURRENT_BRANCH" != "dev" ]; then + echo "Expected branch 'dev', but found '$CURRENT_BRANCH'. Exiting with failure." + exit 1 + fi + + - name: Test 3 - list repo - List the existing repositories + run: | + mlc list repo + + - name: Test 4 - rm repo - Remove the forked mlperf-automation repo + run: | + GH_MLC_REPO_PATH_FORK="${HOME}/MLC/repos/anandhu-eng@mlperf-automations" + mlc rm repo anandhu-eng@mlperf-automations + if [ -d "$GH_MLC_REPO_PATH_FORK" ]; then + echo "Repository folder $GH_MLC_REPO_PATH found. It should ideally be deleted. Exiting with failure." + exit 1 + fi + + - name: Test 5 - find cache - Cache not present + run: | + mlc find cache --tags=detect,os 2>&1 | tee test5.log + if ! grep -q "No cache entry found for the specified tags:" test5.log; then + exit 1 + fi + + - name: Test 6 - run script - Output being used for testing mlc cache + run: | + mlc run script --tags=get,imagenet-aux --quiet + mlc run script --tags=get,imagenet-aux,_from.dropbox --quiet + + - name: Test 7 - find cache - More than one cache present + run: | + mlc search cache --tags=get,imagenet-aux 2>&1 | tee test7.log + mlc search cache --tags=detect,os 2>&1 | tee test5.log + if grep -q "No cache entry found for the specified tags:" test5.log; then + exit 1 + fi diff --git a/mlc/main.py b/mlc/main.py index 17911b212..eadaf2170 100644 --- a/mlc/main.py +++ b/mlc/main.py @@ -1178,6 +1178,7 @@ def call_script_module_function(self, function_name, run_args): return result else: logger.info("ScriptAutomation class not found in the script.") + return {'return': 1, 'error': 'ScriptAutomation class not found in the script.'} def docker(self, run_args): return self.call_script_module_function("docker", run_args) @@ -1220,8 +1221,6 @@ def rm(self, i): def show(self, run_args): self.action_type = "cache" logger.info(f"Showing cache with identifier: {args.details}") - run_args['target_name'] = "cache" - return self.search(run_args) def list(self, args): logger.info("Listing all caches.") @@ -1374,6 +1373,11 @@ def main(): if hasattr(args, 'repo') and args.repo: run_args['repo'] = args.repo + + if args.command in ['rm']: + if args.target == "repo": + run_args['repo'] = args.details + if hasattr(args, 'details') and args.details and "," in args.details and not run_args.get("tags") and args.target in ["script", "cache"]: run_args['tags'] = args.details