Skip to content

Commit f33019c

Browse files
notpetermaxdeviant
andauthored
Document extension bump process (#18872)
Co-authored-by: Marshall Bowers <elliott.codes@gmail.com>
1 parent 7960468 commit f33019c

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

extensions/README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# Zed Extensions
2+
3+
This directory contains extensions for Zed that are largely maintained by the Zed team. They currently live in the Zed repository for ease of maintenance.
4+
5+
If you are looking for the Zed extension registry, see the [`zed-industries/extensions`](https://github.com/zed-industries/extensions) repo.
6+
7+
## Structure
8+
9+
Currently, Zed includes support for a number of languages without requiring installing an extension. Those languages can be found under [`crates/languages/src`](https://github.com/zed-industries/zed/tree/main/crates/languages/src).
10+
11+
Support for all other languages is done via extensions. This directory ([extensions/](https://github.com/zed-industries/zed/tree/main/extensions/)) contains a number of officially maintained extensions. These extensions use the same [zed_extension_api](https://docs.rs/zed_extension_api/latest/zed_extension_api/) available to all [Zed Extensions](https://zed.dev/extensions) for providing [language servers](https://zed.dev/docs/extensions/languages#language-servers), [tree-sitter grammars](https://zed.dev/docs/extensions/languages#grammar) and [tree-sitter queries](https://zed.dev/docs/extensions/languages#tree-sitter-queries).
12+
13+
## Dev Extensions
14+
15+
See the docs for [Developing an Extension Locally](https://zed.dev/docs/extensions/developing-extensions#developing-an-extension-locally) for how to work with one of these extensions.
16+
17+
## Updating
18+
19+
> [!NOTE]
20+
> This update process is usually handled by Zed staff.
21+
> Community contributors should just submit a PR (step 1) and we'll take it from there.
22+
23+
The process for updating an extension in this directory has three parts.
24+
25+
1. Create a PR with your changes. (Merge it)
26+
2. Bump the extension version in:
27+
28+
- extensions/{language_name}/extension.toml
29+
- extensions/{language_name}/Cargo.toml
30+
- Cargo.lock
31+
32+
You can do this manually, or with a script:
33+
34+
```sh
35+
# Output the current version for a given language
36+
./script/language-extension-version <langname>
37+
38+
# Update the version in `extension.toml` and `Cargo.toml` and trigger a `cargo check`
39+
./script/language-extension-version <langname> <new_version>
40+
```
41+
42+
Commit your changes to a branch, push a PR and merge it.
43+
44+
3. Open a PR to [`zed-industries/extensions`](https://github.com/zed-industries/extensions) repo that updates the extension in question
45+
46+
Edit [`extensions.toml`](https://github.com/zed-industries/extensions/blob/main/extensions.toml) in the extensions repo to reflect the new version you set above and update the submodule latest Zed commit.
47+
48+
```sh
49+
# Go into your clone of the extensions repo
50+
cd ../extensions
51+
52+
# Update
53+
git checkout main
54+
git pull
55+
just init-submodule extensions/zed
56+
57+
# Update the Zed submodule
58+
cd extensions/zed
59+
git checkout main
60+
git pull
61+
cd -
62+
git add extensions.toml extensions/zed
63+
```

script/language-extension-version

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
3+
set -euox pipefail
4+
5+
if [ "$#" -lt 1 ]; then
6+
echo "Usage: $0 <language> [version]"
7+
exit 1
8+
fi
9+
10+
LANGUAGE=$1
11+
VERSION=${2:-}
12+
13+
EXTENSION_DIR="extensions/$LANGUAGE"
14+
EXTENSION_TOML="$EXTENSION_DIR/extension.toml"
15+
CARGO_TOML="$EXTENSION_DIR/Cargo.toml"
16+
17+
if [ ! -d "$EXTENSION_DIR" ]; then
18+
echo "Directory $EXTENSION_DIR does not exist."
19+
exit 1
20+
fi
21+
22+
if [ -z "$VERSION" ]; then
23+
grep -m 1 'version =' "$EXTENSION_TOML" | awk -F\" '{print $2}'
24+
exit 0
25+
fi
26+
27+
sed -i '' -e "s/^version = \".*\"/version = \"$VERSION\"/" "$EXTENSION_TOML"
28+
sed -i '' -e "s/^version = \".*\"/version = \"$VERSION\"/" "$CARGO_TOML"
29+
cargo check

0 commit comments

Comments
 (0)