-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integrate mypy
and yamlfix
, fix Conda dependency resolution, add release workflow
#23
Integrate mypy
and yamlfix
, fix Conda dependency resolution, add release workflow
#23
Conversation
…apper and BinaryIO compatibility
WalkthroughThe changes streamline the development and release processes for a VSCode extension. Key updates include automating the release workflow, improving linting and formatting configurations, and addressing dependency resolution issues in Conda environments. Additionally, type hints and formatting improvements were made across several Python and TypeScript files. Changes
Assessment against linked issues
Poem
Tip New Features and ImprovementsReview SettingsIntroduced new personality profiles for code reviews. Users can now select between "Chill" and "Assertive" review tones to tailor feedback styles according to their preferences. The "Assertive" profile posts more comments and nitpicks the code more aggressively, while the "Chill" profile is more relaxed and posts fewer comments. AST-based InstructionsCodeRabbit offers customizing reviews based on the Abstract Syntax Tree (AST) pattern matching. Read more about AST-based instructions in the documentation. Community-driven AST-based RulesWe are kicking off a community-driven initiative to create and share AST-based rules. Users can now contribute their AST-based rules to detect security vulnerabilities, code smells, and anti-patterns. Please see the ast-grep-essentials repository for more information. New Static Analysis ToolsWe are continually expanding our support for static analysis tools. We have added support for Tone SettingsUsers can now customize CodeRabbit to review code in the style of their favorite characters or personalities. Here are some of our favorite examples:
Revamped Settings PageWe have redesigned the settings page for a more intuitive layout, enabling users to find and adjust settings quickly. This change was long overdue; it not only improves the user experience but also allows our development team to add more settings in the future with ease. Going forward, the changes to Miscellaneous
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
Review Status
Configuration used: CodeRabbit UI
Files selected for processing (14)
- .github/workflows/ci.yml (1 hunks)
- .github/workflows/release.yml (1 hunks)
- .gitignore (2 hunks)
- RELEASE.md (1 hunks)
- bundled/tool/lsp_jsonrpc.py (5 hunks)
- bundled/tool/lsp_server.py (4 hunks)
- bundled/tool/lsp_utils.py (7 hunks)
- mypy.ini (1 hunks)
- package.json (2 hunks)
- requirements.in (1 hunks)
- requirements.txt (1 hunks)
- scripts/format.sh (1 hunks)
- scripts/lint.sh (2 hunks)
- src/views/statusBar/index.ts (1 hunks)
Files skipped from review due to trivial changes (1)
- .gitignore
Additional comments not posted (28)
mypy.ini (2)
2-2
: Consider specifying a more recent Python version if the project supports it, to leverage the latest type checking features.
3-3
: Settingignore_missing_imports = True
may hide potential issues. If possible, specify this option for specific packages instead.scripts/format.sh (2)
8-10
: Ensure that excluding.mypy_cache
directories from Python file formatting is intentional and aligns with project requirements.
16-16
: Confirm that all YAML files of interest are located within.github/workflows/
or adjust the path as needed..github/workflows/ci.yml (2)
13-13
: Ensure that using a dynamic Node.js version (18.x
) aligns with the project's version compatibility requirements.
17-17
: Verify that all required dependencies, includingyamlfix
, are installed correctly and are compatible with the project's environment.requirements.in (1)
16-20
: Confirm that the specified versions oftyping-extensions
andexceptiongroup
are compatible with the project's requirements and resolve the Conda environment issues as intended.scripts/lint.sh (2)
14-16
: Ensure thatmypy
type checking covers all relevant Python files and is configured correctly according to the project's needs.
24-24
: Verify thatyamlfix
correctly identifies and reports issues in YAML files, particularly within.github/workflows/
..github/workflows/release.yml (2)
18-18
: Confirm that caching npm dependencies (cache: 'npm'
) is effective and aligns with the project's CI/CD practices.
31-31
: Ensure that the condition for publishing the extension (startsWith(github.ref, 'refs/tags/')
) accurately reflects the project's release strategy.src/views/statusBar/index.ts (2)
Line range hint
1-1
: Ensure the copyright year reflects the current year or the range of years during which the file was modified.
Line range hint
86-86
: Verify that removing theserverUrl
parameter from theupdateStatusBarItem
method does not impact other functionalities relying on server URL information.bundled/tool/lsp_utils.py (4)
123-125
: Thesource
parameter is now optional in_run_module
. Ensure that all calls to this function handle the case wheresource
isNone
.
153-153
: Thesource
parameter inrun_module
is now optional. Verify that all invocations ofrun_module
correctly handle cases wheresource
is not provided.
164-165
: Thesource
parameter inrun_path
is now optional. Ensure that all usages ofrun_path
are updated to reflect this change.
194-194
: Thesource
parameter inrun_api
is now optional. Confirm that all calls torun_api
account for the possibility ofsource
beingNone
.bundled/tool/lsp_server.py (3)
53-54
: Explicit typing forWORKSPACE_SETTINGS
andGLOBAL_SETTINGS
asDict[str, Any]
improves type safety. Good practice.
66-67
: The explicit typing ofTOOL_ARGS
asList[str]
is a good addition for clarity and type safety.
84-96
: The safe update and logging ofGLOBAL_SETTINGS
andsettings
fromparams.initialization_options
enhance robustness. Ensure that all potential edge cases are handled correctly.requirements.txt (1)
84-87
: Addingtypes-pyyaml
with version6.0.12.20240311
enhances type checking for PyYAML. Ensure compatibility with the project's usage of PyYAML.bundled/tool/lsp_jsonrpc.py (5)
25-25
: Addingcast
fromtyping
for type hinting improves type safety. Good practice.
63-66
: Modifying thewrite
method inJsonRpcStreamWriter
to write content without encoding simplifies the code. Ensure that this change does not affect the expected functionality.
134-136
: Usingio.TextIOWrapper
for readable and writable streams increate_json_rpc
is a good practice for handling text streams. Verify that encoding is correctly handled across all platforms.
168-171
: The use ofcast
to assure type safety instart_process
method is a good practice. Ensure thatproc.stdout
andproc.stdin
are always notNone
when this method is called.
237-237
: Making thesource
parameter optional inrun_over_json_rpc
increases flexibility. Verify that all usages of this function correctly handle cases wheresource
is not provided.package.json (2)
6-6
: Incrementing the version to "0.0.4" is appropriate for releasing new features or fixes. Ensure that this version increment follows semantic versioning principles.
52-61
: Reorganizing scripts and adding a newdeploy
script enhances the project's build and deployment process. Ensure that all scripts are correctly referenced in the CI/CD pipeline.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review Status
Configuration used: CodeRabbit UI
Files selected for processing (3)
- .github/workflows/ci.yml (1 hunks)
- .github/workflows/release.yml (1 hunks)
- requirements-dev.txt (1 hunks)
Files skipped from review as they are similar to previous changes (2)
- .github/workflows/ci.yml
- .github/workflows/release.yml
Additional comments not posted (2)
requirements-dev.txt (2)
4-4
: Ensuremypy
version compatibility with the project.Consider specifying a version for
mypy
to ensure compatibility with the project's codebase. This can prevent potential issues with futuremypy
updates that may introduce breaking changes or new checks that could affect your CI pipeline.
6-6
: Specifyyamlfix
version to maintain consistent linting.It's a good practice to pin specific versions of development tools like
yamlfix
to ensure consistent behavior across different environments and over time. This can help avoid unexpected changes in linting results due to updates in the tool.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review Status
Configuration used: CodeRabbit UI
Files ignored due to path filters (1)
package-lock.json
is excluded by!**/package-lock.json
Files selected for processing (7)
- .github/actions/lint/action.yml (1 hunks)
- .github/workflows/ci.yml (1 hunks)
- .gitignore (3 hunks)
- package.json (2 hunks)
- requirements-dev.txt (1 hunks)
- scripts/format.sh (1 hunks)
- scripts/lint.sh (2 hunks)
Files skipped from review as they are similar to previous changes (5)
- .github/workflows/ci.yml
- .gitignore
- package.json
- scripts/format.sh
- scripts/lint.sh
Additional comments not posted (5)
requirements-dev.txt (1)
1-8
: Ensure compatibility of added packages with the project's Python version and among themselves..github/actions/lint/action.yml (4)
7-21
: Node setup and TypeScript linting steps are correctly configured.
22-32
: Python setup and caching steps are correctly configured.
33-37
: Python dependencies installation step is correctly configured.
38-40
: Ensure./scripts/lint.sh
is executable and correctly implements Python and YAML linting.Verification successful
The verification process has confirmed that
./scripts/lint.sh
is executable and correctly implements linting for Python and YAML files. The script uses appropriate tools (ruff
for Python linting,mypy
for type checking Python files, andyamlfix
for YAML linting) and includes proper error handling. This aligns with the requirements mentioned in the review comment.Scripts Executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Check if lint.sh is executable if [ -x ./scripts/lint.sh ]; then echo "lint.sh is executable." else echo "lint.sh is not executable. Run 'chmod +x ./scripts/lint.sh'" fiLength of output: 85
Script:
#!/bin/bash # Display the contents of lint.sh to verify Python and YAML linting implementation cat ./scripts/lint.shLength of output: 718
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Review Status
Configuration used: CodeRabbit UI
Files selected for processing (2)
- .github/actions/lint/action.yml (1 hunks)
- .github/workflows/ci.yml (1 hunks)
Files skipped from review as they are similar to previous changes (2)
- .github/actions/lint/action.yml
- .github/workflows/ci.yml
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
Review Details
Configuration used: .coderabbit.yml
Review profile: CHILL
Files selected for processing (1)
- package.json (1 hunks)
Additional comments not posted (5)
package.json (5)
60-60
: Ensure thevscode:prepublish
script is correctly set up to run before publishing.This script is correctly configured to ensure all necessary build steps are completed before publishing.
61-61
: Validate that thewatch
script is effectively monitoring file changes during development.Verification successful
The
watch
script inpackage.json
is configured to usewebpack --watch
, which should enable file change monitoring during development. Additionally, there are multiple references to watch-related configurations and scripts in the project, including in.vscode/tasks.json
and other files.
package.json
:"watch": "webpack --watch"
.vscode/tasks.json
: Multiple entries related to watch tasks.These findings indicate that the watch functionality is indeed set up to monitor file changes.
Scripts Executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify that the `watch` script is effectively monitoring file changes. # Test: Check the webpack configuration for the watch mode. cat ./webpack.config.js | grep 'watch: true'Length of output: 46
Script:
#!/bin/bash # Description: Verify that the `watch` script is effectively monitoring file changes. # Test 1: Check for `watch` related configurations in webpack configuration files. grep -r 'watch' . # Test 2: Check if the `watch` mode is enabled through CLI arguments in package.json scripts. grep '"watch"' package.jsonLength of output: 2472
59-59
: Check if thevsce-package
script is correctly generating the VSIX package.
52-52
: Ensure the newdeploy
script aligns with the release workflow objectives.
56-56
: Review thepackage
script to ensure it correctly handles production builds.Verification successful
The
webpack.config.js
file sets the mode to'none'
by default and includes a comment indicating that the mode should be set to'production'
when packaging. However, there is no explicit setting formode: 'production'
within the configuration file itself.Given this context, it appears that the
webpack --mode production
command in thepackage
script is intended to set the mode to production during the build process. This is a valid approach, as webpack allows setting the mode via command-line arguments.
- The
package
script correctly handles production builds by usingwebpack --mode production
.Scripts Executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Test: Check the webpack configuration for production in `webpack.config.js`. cat ./webpack.config.js | grep 'mode: production'Length of output: 51
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Test 1: Check for 'mode: production' in all JavaScript files. ast-grep --lang javascript --pattern 'mode: "production"' # Test 2: Check for any dynamic setting of the mode in webpack configuration files. rg 'mode\s*:\s*process\.env\.NODE_ENV' # Test 3: Check for any environment variables setting NODE_ENV to production in package.json scripts. jq '.scripts | to_entries[] | select(.value | contains("NODE_ENV=production"))' package.jsonLength of output: 195
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Test: Check the webpack help output to confirm that `--mode production` is a valid command-line argument. npx webpack --help | grep 'mode'Length of output: 103
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Test 1: Search for any documentation files that might mention the webpack configuration. rg 'webpack' README.md docs/ # Test 2: Search for any other configuration files that might set the mode to production. rg 'mode\s*:\s*"production"' config/ webpack.config.*.jsLength of output: 243
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Test 1: Search for any webpack configuration files in the repository. fd webpack.config # Test 2: Search for any JavaScript files that might contain webpack configuration. fd .jsLength of output: 154
Script:
#!/bin/bash # Description: Verify that the `package` script correctly handles production builds. # Display the contents of webpack.config.js to check for mode settings. cat webpack.config.jsLength of output: 1629
"vsce-package": "vsce package -o zenml.vsix", | ||
"vscode:prepublish": "npm run package", | ||
"watch": "webpack --watch", | ||
"watch-tests": "tsc -p . -w --outDir out" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tip
Codebase Verification
The watch-tests
script is not correctly set up for continuous testing. The tsconfig.json
file does not contain the necessary outDir
or watch-related settings, and the out
directory does not exist.
- Ensure that
tsconfig.json
includes theoutDir
configuration. - Verify that the
watch-tests
script creates theout
directory or specify an existing directory.
Analysis chain
Confirm the watch-tests
script is correctly set up for continuous testing.
Scripts Executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the `watch-tests` script is correctly set up for continuous testing.
# Test: Check the TypeScript configuration for the watch mode in test settings.
cat ./tsconfig.json | grep 'watch'
Length of output: 34
Script:
#!/bin/bash
# Description: Verify that the `watch-tests` script is correctly set up for continuous testing.
# Test: Check the TypeScript configuration for the outDir setting.
cat ./tsconfig.json | grep 'outDir'
# Test: Check the TypeScript configuration for any watch-related settings.
cat ./tsconfig.json | grep -i 'watch'
Length of output: 73
Script:
#!/bin/bash
# Description: Verify that the `watch-tests` script is correctly set up for continuous testing.
# Test: Check for the presence of TypeScript files in the project.
find . -name "*.ts"
# Test: Check if the `out` directory exists.
if [ -d "./out" ]; then
echo "out directory exists"
else
echo "out directory does not exist"
fi
Length of output: 2276
"format": "prettier --ignore-path .gitignore --write \"**/*.+(ts|json)\"", | ||
"format-check": "prettier --ignore-path .gitignore --check \"**/*.+(ts|json)\"", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tip
Codebase Verification
The format-check
script is not integrated into the CI workflow.
- No occurrences of
format-check
were found in the CI configuration files located in.github/workflows/ci.yml
and.github/workflows/release.yml
.
Please ensure that the format-check
script is added to the CI workflow configuration.
Analysis chain
Confirm that the format-check
script is integrated into the CI workflow.
Scripts Executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the `format-check` script is used in the CI workflow.
# Test: Search for the `format-check` script usage in the CI workflow.
rg --type yaml --files-with-matches 'format-check' ./workflows/ci.yml
Length of output: 128
Script:
#!/bin/bash
# Description: Locate all YAML files and search for the `format-check` script usage in the CI workflow.
# Step 1: Find all YAML files in the repository.
yaml_files=$(fd --type f --extension yaml)
# Step 2: Search for the `format-check` script in the located YAML files.
if [ -n "$yaml_files" ]; then
rg 'format-check' $yaml_files
else
echo "No YAML files found in the repository."
fi
Length of output: 148
Script:
#!/bin/bash
# Description: Locate all potential CI configuration files and search for the `format-check` script usage.
# Step 1: Find all potential CI configuration files in common directories and formats.
ci_files=$(fd --type f --extension yml --extension yaml --extension json .github/workflows .gitlab-ci.yml .circleci/config.yml)
# Step 2: Search for the `format-check` script in the located CI configuration files.
if [ -n "$ci_files" ]; then
rg 'format-check' $ci_files
else
echo "No CI configuration files found in the repository."
fi
Length of output: 426
Script:
#!/bin/bash
# Description: Locate all potential CI configuration files and search for the `format-check` script usage.
# Step 1: Find all potential CI configuration files in common directories and formats.
ci_files=$(fd --type f --extension yml --extension yaml --extension json .github/workflows)
# Step 2: Search for the `format-check` script in the located CI configuration files.
if [ -n "$ci_files" ]; then
rg 'format-check' $ci_files
else
echo "No CI configuration files found in the repository."
fi
Length of output: 595
Script:
#!/bin/bash
# Description: Locate all potential CI configuration files and search for the `format-check` script usage.
# Step 1: Find all potential CI configuration files in common directories and formats.
ci_files=$(fd . .github/workflows --type f --extension yml --extension yaml --extension json)
# Step 2: Search for the `format-check` script in the located CI configuration files.
if [ -n "$ci_files" ]; then
rg 'format-check' $ci_files
else
echo "No CI configuration files found in the repository."
fi
Length of output: 295
Thanks as always, @marwan37 ! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Outside diff range and nitpick comments (2)
src/commands/pipelines/registry.ts (1)
Line range hint
53-56
: Consider usingfor...of
instead offorEach
for better handling of asynchronous operations.for (const cmd of registeredCommands) { context.subscriptions.push(cmd); ZenExtension.commandDisposables.push(cmd); }src/commands/stack/registry.ts (1)
Line range hint
58-61
: Consider usingfor...of
instead offorEach
for better handling of asynchronous operations.for (const cmd of registeredCommands) { context.subscriptions.push(cmd); ZenExtension.commandDisposables.push(cmd); }
Review Details
Configuration used: .coderabbit.yml
Review profile: CHILL
Files selected for processing (6)
- src/commands/pipelines/registry.ts (1 hunks)
- src/commands/pipelines/utils.ts (2 hunks)
- src/commands/stack/cmds.ts (1 hunks)
- src/commands/stack/registry.ts (1 hunks)
- src/commands/stack/utils.ts (1 hunks)
- src/test/ts_tests/commands/stackCommands.test.ts (1 hunks)
Additional Context Used
Biome (21)
src/commands/pipelines/registry.ts (3)
53-56: Prefer for...of instead of forEach.
15-16: Some named imports are only used as types.
16-17: Some named imports are only used as types.
src/commands/stack/cmds.ts (4)
81-81: Unexpected any. Specify a different type.
120-120: Unexpected any. Specify a different type.
121-121: Change to an optional chain.
13-14: Some named imports are only used as types.
src/commands/stack/registry.ts (3)
58-61: Prefer for...of instead of forEach.
12-13: Some named imports are only used as types.
16-17: Some named imports are only used as types.
src/commands/stack/utils.ts (3)
40-40: Unexpected any. Specify a different type.
63-63: Unexpected any. Specify a different type.
14-15: All these imports are only used as types.
src/test/ts_tests/commands/stackCommands.test.ts (8)
13-13: A Node.js builtin module should be imported with the node: protocol.
31-31: Unexpected any. Specify a different type.
32-32: Unexpected any. Specify a different type.
61-61: Do not use template literals if interpolation and special-character handling are not needed.
92-92: Unexpected any. Specify a different type.
102-102: Unexpected any. Specify a different type.
118-118: Unexpected any. Specify a different type.
155-155: Do not use template literals if interpolation and special-character handling are not needed.
Path-based Instructions (6)
src/commands/pipelines/utils.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.src/commands/pipelines/registry.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.src/commands/stack/registry.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.src/commands/stack/utils.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.src/commands/stack/cmds.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.src/test/ts_tests/commands/stackCommands.test.ts (1)
Pattern
**/*.ts
: Review the Typescript code for conformity with industry standards and best practices, highlighting any deviations.
Additional comments not posted (7)
src/commands/pipelines/utils.ts (2)
22-28
: Change from double to single quotes for string consistency is good practice.
37-37
: ExportingpipelineUtils
as default is a clean way to handle exports.src/commands/pipelines/registry.ts (1)
39-40
: Adding a comma after the function call improves readability and diff clarity.src/commands/stack/registry.ts (1)
47-49
: Adding a comma after the function call improves readability and diff clarity.src/commands/stack/utils.ts (1)
92-95
: Change from double to single quotes for string consistency is good practice.src/commands/stack/cmds.ts (1)
187-187
: Adding a comma after the function call improves readability and diff clarity.src/test/ts_tests/commands/stackCommands.test.ts (1)
121-130
: Ensuring the correct URL is opened and the correct information message is displayed is crucial for user feedback.
This PR addresses several important aspects of the project, focusing on enhancing code quality, maintainability, and usability across different environments.
Changes:
yamlfix
: Addyamlfix
for linting / formatting our GH Actions scripts #13mypy
: Addmypy
for the Python code #15:mypy.ini
file has been added to preserve the status quo behavior and nature of the extension's integration with thevscode-python-tools-extension
.lsp_utils.py
,lsp_jsonrpc.py
, andlsp_server.py
have been corrected.types-PyYAML
has been added torequirements.in
, resolving missing stubs foryaml
.TextIOWrapper
andBinaryIO
inlsp_jsonrpc.py
lsp_server.py
, particularly withOptional[Any]
values.typing-extensions
andexceptiongroup
explicitly included inrequirements.in
for Python versions < 3.11.Testing (Conda Environments):
pip install -r requirements.txt
and verify successful installation without errorsGoal:
mypy
.vscode-python-tools-extension
through the use ofmypy.ini
configuration.Addresses #13, #14, #15, #22
Summary by CodeRabbit
New Features
Bug Fixes
Chores
.gitignore
to exclude.mypy_cache/
.package.json
.Documentation
RELEASE.md
detailing the automated release process.Style