Skip to content

Commit

Permalink
Update extension extraction docs (#24079)
Browse files Browse the repository at this point in the history
- Fixed a regex for finding tags.
- Templatize the instructions with `$LANGNAME` to prevent manual errors
from failing to edit commands (this bit me)
- Ran formatting through Prettier
  • Loading branch information
notpeter authored Feb 7, 2025
1 parent 337b9e6 commit 5315d38
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 12 deletions.
6 changes: 6 additions & 0 deletions docs/src/extensions/developing-extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@ To publish an extension, open a PR to [the `zed-industries/extensions` repo](htt
In your PR, do the following:

1. Add your extension as a Git submodule within the `extensions/` directory

```sh
git submodule add https://github.com/your-username/foobar-zed.git extensions/foobar
git add extensions/foobar
```

2. Add a new entry to the top-level `extensions.toml` file containing your extension:

```toml
Expand Down
90 changes: 78 additions & 12 deletions extensions/EXTRACTION.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Extracting an extension to dedicated repo

These are some notes of how to extract an extension from the main zed repository and generate a new repository which preserves the history as best as possible. In the this example we will be extracting the `ruby` extension, substitute as appropriate.
These are some notes of how to extract an extension from the main zed repository and generate a new repository which preserves the history as best as possible. In the this example we will be extracting the `ruby` extension, substitute as appropriate.

## Pre-requisites

Expand All @@ -23,7 +23,7 @@ regex:(?<![\[a-zA-Z0-9])(#[0-9]{3,5})==>zed-industries/zed\1
```

This file takes the form of `patern==>replacement`, where the replacement is optional.
Note whitespace matters so `ruby: ==>` is removing the `ruby:` prefix from a commit messages and adding a space after `==> ` means the replacement begins with a space. Regex capture groups are numbered `\1`, `\2`, etc.
Note whitespace matters so `ruby: ==>` is removing the `ruby:` prefix from a commit messages and adding a space after `==> ` means the replacement begins with a space. Regex capture groups are numbered `\1`, `\2`, etc.

See: [Git Filter Repo Docs](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html) for more.

Expand All @@ -34,16 +34,17 @@ See: [Git Filter Repo Docs](https://htmlpreview.github.io/?https://github.com/ne
> `setopt interactive_comments && echo "setopt interactive_comments" >> ~/.zshrc`
```sh
rm -rf zed3
git clone --single-branch --no-tags git@github.com:zed-industries/zed.git zed3
cd zed3
LANGNAME=ruby
rm -rf $LANGNAME
git clone --single-branch --no-tags git@github.com:zed-industries/zed.git $LANGNAME
cd $LANGNAME

# This removes the LICENSE symlink
git filter-repo --invert-paths --path extensions/ruby/LICENSE-APACHE
git filter-repo --invert-paths --path extensions/$LANGNAME/LICENSE-APACHE

git filter-repo \
--use-mailmap \
--subdirectory-filter extensions/ruby/ \
--subdirectory-filter extensions/$LANGNAME/ \
--path LICENSE-APACHE \
--replace-message ~/projects/expressions.txt
```
Expand All @@ -65,24 +66,89 @@ You can always add tags later, but it's a nice touch.
Show you all commits that mention a version number:

```sh
git log --grep="(\d+\.\d+\.\d+\.)" --perl-regexp --oneline --reverse
git log --grep="(\d+\.\d+\.\d+)" --perl-regexp --oneline --reverse
```

Then just:

```
git tag v0.0.2 abcd1234
git tag v0.0.3 deadbeef
```

Usually the initial extraction didn't mention a version number so you can just do that one manually.

4. Push to the new repo
4. [Optional] Add a README.md and commit.

5. Push to the new repo

Create a new empty repo on github under the [zed-extensions](https://github.com/zed-extensions) organization.
Create a new empty repo on github under the [zed-extensions](https://github.com/organizations/zed-extensions/repositories/new) organization.

```
git remote add origin git@github.com:zed-extensions/ruby
git remote add origin git@github.com:zed-extensions/$LANGNAME
git push origin main --tags
git branch --set-upstream-to=origin/main main
```

6. Setup the new repository:

- Go to the repository settings:
- Disable Wikis
- Uncheck "Allow Merge Commits"
- Check "Allow Squash Merging"
- Default commit message: "Pull request title and description"

7. Publish a new version of the extension.

```
OLD_VERSION=$(grep '^version = ' extension.toml | cut -d'"' -f2)
NEW_VERSION=$(echo "$OLD_VERSION" | awk -F. '{$NF = $NF + 1;} 1' OFS=.)
echo $OLD_VERSION $NEW_VERSION
perl -i -pe "s/$OLD_VERSION/$NEW_VERSION/" extension.toml
# if there's rust code, update this too.
test -f Cargo.toml && perl -i -pe "s/$OLD_VERSION/$NEW_VERSION/" cargo.toml
test -f Cargo.toml && cargo check
# commit and push
git add -u
git checkout -b "bump_${NEW_VERSION}"
git commit -m "Bump to v${NEW_VERSION}"
git push
gh pr create --title "Bump to v${NEW_VERSION}" --web
# merge PR in web interface
git checkout main
git pull
git tag v${NEW_VERSION}
git push origin v${NEW_VERSION}
```

7. In zed repository, `rm -rf extension/langname` and push a PR.

8. Update extensions repository:

```sh
cd ../extensions
git checkout main
git pull
git submodule init
git submodule update
git status

git checkout -b ${LANGNAME}_v${NEW_VERSION}
git submodule add https://github.com/zed-extensions/${LANGNAME}.git extensions/${LANGNAME}
pnpm sort-extensions

# edit extensions.toml:
# - bump version
# - change `submodule` from `extensions/zed` to new path
# - remove `path` line all together

git add extensions.toml .gitmodules extensions/${LANGNAME}
git diff --cached
git commit -m "Bump ${LANGNAME} to v${NEW_VERSION}"
git push
```

5. [Optional]
Create PR and reference the Zed PR with removal from tree.

0 comments on commit 5315d38

Please sign in to comment.