Fix relative imports in src code, relocate src (Lots of files modified but the changes are low-risk and automated) This PR is a follow-up to #6954, specifically the part where we removed webpack aliases to pick up react-scripts. SUMMARY Add the jsconfig.json w/ baseUrl to enable absolute imports from src. Replaces all the ../../../../../ importing jsx -> js extension renaming hooks directory [ ] ui_next -> ui see: #10676 For posterity, the script used to fix the relative imports is included in the commit history. python3 tools/fixrelative.py awx/ui_next/src npm --prefix=awx/ui_next run lint -- --fix npm --prefix=awx/ui_next run prettier import argparse import glob import os from shutil import move, copymode from tempfile import mkstemp def get_new_import_string(old_import_str, root): if not root.startswith("./"): raise Exception("root must start with './'") name = root.replace("./", "") left, right = old_import_str.split("from") left += "from '" _, trailing = right.split(name) return left + name + trailing roots = [ "./api", "./components", # "./constants", "./contexts", "./screens", "./types", "./util", ] def get_root(line): matched_root = None for root in roots: if root in line: matched_root = root break if "jest" in line: matched_root = None return matched_root def find_and_replace_roots(file_path, root_dir, preview): fh, temp_path = mkstemp() has_logged_file_name = False with os.fdopen(fh, "w") as new_file: with open(file_path) as old_file: for (line_number, line) in enumerate(old_file): matched_root = get_root(line) if matched_root: new_line = get_new_import_string(line, matched_root) if not preview: new_file.write(new_line) if not has_logged_file_name: log_file_replacement(root_dir, file_path) has_logged_file_name = True log_line_replacement(line_number, line, new_line) elif not preview: new_file.write(line) if not preview: copymode(file_path, temp_path) os.remove(file_path) move(temp_path, file_path) def log_line_replacement(line_number, line, new_line): display_line = line.replace(os.linesep, "") display_new_line = new_line.replace(os.linesep, "") print(f"\t (line {line_number}): {display_line} --> {display_new_line}") def log_file_replacement(root_dir, file_path): display_path = os.path.relpath(file_path, root_dir) print("") print(f"{display_path}:") def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("root_dir", help="Root directory") parser.add_argument("--preview", help="Preview (no write)", action="store_true") args = parser.parse_args() return args def run(): args = parse_args() search_path = args.root_dir + "**/**/*.js*" for file_path in glob.iglob(search_path, recursive=True): find_and_replace_roots(file_path, args.root_dir, args.preview) if __name__ == "__main__": run() Reviewed-by: Kersom <None> Reviewed-by: Tiago Góes <tiago.goes2009@gmail.com>
AWX provides a web-based user interface, REST API, and task engine built on top of Ansible. It is one of the upstream projects for Red Hat Ansible Automation Platform.
To install AWX, please view the Install guide.
To learn more about using AWX, and Tower, view the Tower docs site.
The AWX Project Frequently Asked Questions can be found here.
The AWX logos and branding assets are covered by our trademark guidelines.
Contributing
- Refer to the Contributing guide to get started developing, testing, and building AWX.
- All code submissions are made through pull requests against the
develbranch. - All contributors must use git commit --signoff for any commit to be merged and agree that usage of --signoff constitutes agreement with the terms of DCO 1.1
- Take care to make sure no merge commits are in the submission, and use
git rebasevs.git mergefor this reason. - If submitting a large code change, it's a good idea to join the
#ansible-awxchannel on web.libera.chat and talk about what you would like to do or add first. This not only helps everyone know what's going on, but it also helps save time and effort if the community decides some changes are needed.
Reporting Issues
If you're experiencing a problem that you feel is a bug in AWX or have ideas for improving AWX, we encourage you to open an issue and share your feedback. But before opening a new issue, we ask that you please take a look at our Issues guide.
Code of Conduct
We ask all of our community members and contributors to adhere to the Ansible code of conduct. If you have questions or need assistance, please reach out to our community team at codeofconduct@ansible.com
Get Involved
We welcome your feedback and ideas. Here's how to reach us with feedback and questions:
- Join the
#ansible-awxchannel on irc.libera.chat - Join the mailing list