diff --git a/.github/helper/roulette.py b/.github/helper/roulette.py index 13f843eb3e..5cedae1541 100644 --- a/.github/helper/roulette.py +++ b/.github/helper/roulette.py @@ -17,39 +17,57 @@ def fetch_pr_data(pr_number, repo, endpoint=""): req = urllib.request.Request(api_url) res = urllib.request.urlopen(req) - return json.loads(res.read().decode('utf8')) + return json.loads(res.read().decode("utf8")) + def get_files_list(pr_number, repo="frappe/frappe"): return [change["filename"] for change in fetch_pr_data(pr_number, repo, "files")] + def get_output(command, shell=True): print(command) command = shlex.split(command) return subprocess.check_output(command, shell=shell, encoding="utf8").strip() + def has_skip_ci_label(pr_number, repo="frappe/frappe"): return has_label(pr_number, "Skip CI", repo) + def has_run_server_tests_label(pr_number, repo="frappe/frappe"): return has_label(pr_number, "Run Server Tests", repo) + def has_run_ui_tests_label(pr_number, repo="frappe/frappe"): return has_label(pr_number, "Run UI Tests", repo) + def has_label(pr_number, label, repo="frappe/frappe"): - return any([fetched_label["name"] for fetched_label in fetch_pr_data(pr_number, repo)["labels"] if fetched_label["name"] == label]) + return any( + [ + fetched_label["name"] + for fetched_label in fetch_pr_data(pr_number, repo)["labels"] + if fetched_label["name"] == label + ] + ) + def is_py(file): return file.endswith("py") + def is_ci(file): return ".github" in file + def is_frontend_code(file): - return file.lower().endswith((".css", ".scss", ".less", ".sass", ".styl", ".js", ".ts", ".vue", ".html")) + return file.lower().endswith( + (".css", ".scss", ".less", ".sass", ".styl", ".js", ".ts", ".vue", ".html") + ) + def is_docs(file): - regex = re.compile(r'\.(md|png|jpg|jpeg|csv|svg)$|^.github|LICENSE') + regex = re.compile(r"\.(md|png|jpg|jpeg|csv|svg)$|^.github|LICENSE") return bool(regex.search(file)) @@ -77,8 +95,13 @@ if __name__ == "__main__": only_py_changed = updated_py_file_count == len(files_list) if has_skip_ci_label(pr_number, repo): - print("Found `Skip CI` label on pr, stopping build process.") - sys.exit(0) + if build_type == "ui" and has_run_ui_tests_label(pr_number, repo): + print("Running UI tests only.") + elif build_type == "server" and has_run_server_tests_label(pr_number, repo): + print("Running server tests only.") + else: + print("Found `Skip CI` label on pr, stopping build process.") + sys.exit(0) elif ci_files_changed: print("CI related files were updated, running all build processes.") @@ -87,7 +110,11 @@ if __name__ == "__main__": print("Only docs were updated, stopping build process.") sys.exit(0) - elif only_frontend_code_changed and build_type == "server" and not has_run_server_tests_label(pr_number, repo): + elif ( + only_frontend_code_changed + and build_type == "server" + and not has_run_server_tests_label(pr_number, repo) + ): print("Only Frontend code was updated; Stopping Python build process.") sys.exit(0) diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index 9f445dab3e..cacb5ce833 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -101,18 +101,15 @@ jobs: id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + key: ${{ runner.os }}-yarn-ui-${{ hashFiles('**/yarn.lock') }} restore-keys: | - ${{ runner.os }}-yarn- + ${{ runner.os }}-yarn-ui- - name: Cache cypress binary uses: actions/cache@v3 with: - path: ~/.cache - key: ${{ runner.os }}-cypress- - restore-keys: | - ${{ runner.os }}-cypress- - ${{ runner.os }}- + path: ~/.cache/Cypress + key: ${{ runner.os }}-cypress - name: Install Dependencies run: |